
On Thursday 26 November 2015 12:25:14 Hans de Goede wrote:
Hmm, I'm not familiar with the rpi usb controller, but AFAIK the rpi uses an onboard usb-2 hub, when talking to usb-1 devices attached to a usb-2 hub you must address the tt in the first usb-2 hub upstream of the usb-1 device. See e.g.:
Yes, thats true for RPi 1 B, B+ and RPi 2 B.
http://git.denx.de/?p=u-boot.git;a=commitdiff;h=4e2c4ad3604ba6f5053090749d64 ed3ce5914805 http://git.denx.de/?p=u-boot.git;a=commitdiff;h=fcdd8aaa48dfcac492cbac5436d 9edc3f5928325
And also, for a controller which AFAICT is closer to the rpi usb controller:
http://git.denx.de/?p=u-boot.git;a=commitdiff;h=e740ca3cab93a8cb31d870bffecd 6aa8eadf44e1
Note that the last 2 commits both do a bunch of magic to translate from usb_device pointers to dm device pointers and back, not sure if the rpi usb controller code has been converted to dm yet, but if it has that is a likely culprit.
Most of the DWC2 code is agnostic to DM vs. legacy. The biggest problem is the fact that on the DWC2 both SSPLIT and CSPLIT have to be handled explicitly, i.e. there is an ACK interrupt after the SSPLIT and the channel is halted, and you get another ACK/CHHLT/XFERCOMPL interrupt after the CSPLIT transaction.
I have some rough prototype code which is at least able to enumerate most of my LS/FS devices. There are errors for some devices, which are picky about some SETUP requests.
Kind regards,
Stefan