
Hi,
On 19-12-15 21:16, Stefan Brüns wrote:
The ifdef'ed Linux kernel code uses the 1 based port number, whereas U-Boot puts a 0 based port number into the register. The reason the 0 based port number apparently works can probably be taken from the USB 2.0 spec:
8.4.2.2 Start-Split Transaction Token ... The host must correctly set the port field for single and multiple TT hub implementations. A single TT hub implementation *may ignore* the port field.
Actually, as far as I unterstand, a multi TT hub defaults to single TT (bAlternateSetting: 0) until switched via SetInterface, so even "port 42" would work.
The change was verified by hardcoding the port number to a wrong value, SPLIT transactions kept working (although using a DWC2 instead of MUSB). Tested hubs are the RPi onboard SMC9514 and an external "05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB". The former is a multi TT hub, the latter single TT only.
Signed-off-by: Stefan Brüns stefan.bruens@rwth-aachen.de
drivers/usb/musb-new/musb_host.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/musb-new/musb_host.c b/drivers/usb/musb-new/musb_host.c index fc4ba62..5c028d4 100644 --- a/drivers/usb/musb-new/musb_host.c +++ b/drivers/usb/musb-new/musb_host.c @@ -2096,7 +2096,7 @@ int musb_urb_enqueue( uint8_t hubaddr = 0; usb_find_usb2_hub_address_port(udev, &hubaddr, &portnr) qh->h_addr_reg = hubaddr;
qh->h_port_reg = portnr - 1;
#endif }qh->h_port_reg = portnr; }
This patch needs to be re-spun to apply on top of the compile fixed [patch 1/2] of this set. With that done this patch is:
Reviewed-by: Hans de Goede hdegoede@redhat.com Tested-by: Hans de Goede hdegoede@redhat.com
Regards,
Hans