Bug in split transactions on Raspberry Pi

Alan Stern stern at rowland.harvard.edu
Mon Jan 25 13:04:42 PST 2016

On Mon, 25 Jan 2016, Doug Anderson wrote:

> > Okay, I checked it.  Oddly enough, even though the SPLIT packet's
> > contents are now correct, the device still doesn't respond.
> >
> > Bizarrely, when I interpose a USB-1.1 hub between the RPi and the
> > compound device, it _does_ work.  I guess this indicates the device's
> > embedded hub isn't quite up to snuff.  But why it should work okay with
> > a PC and not with a Raspberry Pi is beyond me.
> I just spent a lot of time tracking down lots of problems with SPLITs
> in the mainline driver.  No idea if there are similar problems in the
> RPI driver.

The strange thing is that the packets sent to the device are now 
identical (except for address numbers and checksums) between the RPi 
and the PC.  And yet the device's embedded hub ACKs the packets from 
the PC and not the packets from the RPi.

What other differences could there be?  Timing?  Power levels?  
Something else I'm not seeing?

> Note that I have one hub that I've been debugging that still has
> problems after all my patches.  My current (unsubstantiated) guess is
> that the hub is somehow missing a reset or a configuration packet.
> When I plug this hub in it either works or it doesn't work and seems
> to stay in that state until I unplug / replug the hub.  I wonder if
> there could be something similar?

I doubt it, because the behavior I'm seeing is completely consistent 
from one run to another.

> ...another interesting idea would be to try to see if you could just
> change the configuration of the Raspberry Pi kernel to switch which
> dwc2 driver it used.  Presumably their driver was an addition on top
> of the driver in "drivers/usb/dwc2".  In fact, doing a 'git log' on
> drivers/usb/dwc2 in the "rpi-4.4.y" kernel on github it looks pure
> (and Stefan is even the last commit author!)

I'll try it.  In case it works: There have been lots of patches from
you and John posted to linux-usb in the last couple of months; which
ones should I apply for testing on top of d51c7d840b002?  (That was the
top commit on the master branch at the time I shallow-cloned the
Raspberry Pi kernel from github -- looks like it's based on 4.1.15.)

Alan Stern

More information about the linux-rpi-kernel mailing list