[U-Boot] [PATCH 2/2 v2] usb: musb: Fix hub port number for SPLIT transactions

Hans de Goede hdegoede at redhat.com
Mon Dec 21 20:33:31 CET 2015


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 at 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;
> +				qh->h_port_reg = portnr;
>   			}
>   #endif
>   		}
>

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 at redhat.com>
Tested-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


More information about the U-Boot mailing list