Message ID | 1450743664-8612-2-git-send-email-stefan.bruens@rwth-aachen.de |
---|---|
State | Accepted |
Delegated to: | Marek Vasut |
Headers | show |
On Tuesday, December 22, 2015 at 01:21:04 AM, 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 understand, 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. > > Addendum: Tested on sunxi/MUSB by Hans de Goede > > Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de> > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > Tested-by: Hans de Goede <hdegoede@redhat.com> Applied both, thanks! Best regards, Marek Vasut
diff --git a/drivers/usb/musb-new/musb_host.c b/drivers/usb/musb-new/musb_host.c index 70f8a99..2515447 100644 --- a/drivers/usb/musb-new/musb_host.c +++ b/drivers/usb/musb-new/musb_host.c @@ -2098,7 +2098,7 @@ int musb_urb_enqueue( &hubaddr, &portnr); qh->h_addr_reg = hubaddr; - qh->h_port_reg = portnr - 1; + qh->h_port_reg = portnr; } #endif }