Bug in split transactions on Raspberry Pi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John, Doug, or anyone else:

I've got a Raspberry Pi 2B and I'm trying to use it with a compound
device.  The device has a High-Speed hub with a Full-Speed function
permanently attached to port 4.

The RPi detects the function but fails to initialize it.  My bus
analyzer shows the reason why: A Start Split packet sent to the
device's internal hub for delivery to the FS function contained these
bytes:

	78 44 01 c0

0x78 is the SPLIT packet ID.  0x44 is the hub's bus address, with a 0
in the high-order bit to indicate a Start Split.  0x01 is supposed to
be the port number in the hub (with a 0 in the high-order bit to
indicate the target device is Full Speed).  The final 0xc0 is the CRC
with a few extra uninteresting bits.

The problem here is the third byte.  It is set to 0x01 even though the 
port number is 4.  As a result, the packet never gets delivered and the 
host controller is unable to communicate with the target function.

(By contrast, when the same device was attached to a laptop PC instead 
of the RPi, the bus analyzer showed the SPLIT packet contained 78 06 
04 60, as one would expect.)

Now oddly enough, when I ran a similar test on the RPi using a
Low-Speed target device, it worked perfectly.  In this case the device
was attached to port 5 of the HS hub, and the third byte of the SPLIT
packet was 0x85 (high-order bit is on to indicate Low Speed).

Is this a bug in the Pi's host controller hardware?  Or a bug in the 
dwc_otg driver?  The kernel I tested was current Raspbian, 4.1.15-v7+.

Is this a known problem?  Is there any reasonable way to fix it?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux