[U-Boot] [xHCI] Controller failure with USB 3.0 hub

Bin Meng bmeng.cn at gmail.com
Sat May 19 11:09:10 UTC 2018


Hi Marek,

On Sat, May 19, 2018 at 9:03 AM, Marek Vasut <marek.vasut at gmail.com> wrote:
> Hello Bin,
>
> I noticed a potential bug in the U-Boot xHCI implementation. I observe
> this one Renesas RCar Gen3 platform.
>
> If I plug a USB 3.0 hub into the root port, I see the following error:
>   ERROR: Configure Endpoint command returned completion code 5.
> If I plug a USB 3.0 stick into the root port, I do not get the error and
> the stick is correctly detected.
>
> Example with the USB 3.0 hub:
>
> => usb reset
> resetting USB...
> USB0:   Register 2000120 NbrPorts 2
> Starting the controller
> USB XHCI 1.00
> USB1:   USB EHCI 1.10
> USB2:   USB EHCI 1.10
> USB3:   USB EHCI 1.10
> ******** HERE ********
> scanning bus 0 for devices... ERROR: Configure Endpoint command returned
> completion code 5.

Completion code 5 means TRB parameter error, guess the Renesas xHC has
some checks on the TRB.

Can you try the following patch to see if it makes any difference?

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 3adb002..eec3f64 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -1453,6 +1453,8 @@ static int xhci_update_hub_device(struct udevice
*dev, struct usb_device *udev)
        if (udev->speed == USB_SPEED_HIGH)
                slot_ctx->tt_info |= cpu_to_le32(TT_THINK_TIME(think_time));

+       slot_ctx->dev_state = 0;
+
        return xhci_configure_endpoints(udev, false);
 }

> ******** HERE ********
> 1 USB Device(s) found
> scanning bus 1 for devices... 1 USB Device(s) found
> scanning bus 2 for devices... 1 USB Device(s) found
> scanning bus 3 for devices... 1 USB Device(s) found
>        scanning usb for storage devices... 0 Storage Device(s) found
> => usb tree
> USB device tree:
>   1  Hub (5 Gb/s, 0mA)
>      U-Boot XHCI Host Controller
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
> If I revert d228ca362b though, the setup starts working fine. In fact,
> if I just commend out xhci_update_hub_device() in xhci_usb_ops , it
> works fine as well.
>
> Moreover, if I use the following patch, it works fine too:
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index 3adb0028f2..bd393d92bb 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -1453,7 +1453,7 @@ static int xhci_update_hub_device(struct udevice
> *dev, struct usb_device *udev)
>         if (udev->speed == USB_SPEED_HIGH)
>                 slot_ctx->tt_info |= cpu_to_le32(TT_THINK_TIME(think_time));
>
> -       return xhci_configure_endpoints(udev, false);
> +       return xhci_configure_endpoints(udev, true);
>  }
>
>  static int xhci_get_max_xfer_size(struct udevice *dev, size_t *size)
>
> That is:
>
> => usb reset
> resetting USB...
> USB0:   Register 2000120 NbrPorts 2
> Starting the controller
> USB XHCI 1.00
> USB1:   USB EHCI 1.10
> USB2:   USB EHCI 1.10
> USB3:   USB EHCI 1.10
> scanning bus 0 for devices... 5 USB Device(s) found
> scanning bus 1 for devices... 1 USB Device(s) found
> scanning bus 2 for devices... 1 USB Device(s) found
> scanning bus 3 for devices... 1 USB Device(s) found
>        scanning usb for storage devices... 2 Storage Device(s) found
> => usb tree
> USB device tree:
>   1  Hub (5 Gb/s, 0mA)
>   |  U-Boot XHCI Host Controller
>   |
>   +-2  Hub (5 Gb/s, 2mA)
>   | |  VIA Labs, Inc. 4-Port USB 3.0 Hub
>   | |
>   | +-4  Mass Storage (5 Gb/s, 224mA)
>   |      SanDisk Ultra 4C530001110620109113
>   |
>   +-3  Hub (480 Mb/s, 100mA)
>     |   USB2.0 Hub
>     |
>     +-5  Mass Storage (480 Mb/s, 200mA)
>                   USB FLASH DRIVE  195A06010623
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
>   1  Hub (480 Mb/s, 0mA)
>      u-boot EHCI Host Controller
>
> Do you have an explanation for me ?
> --

Regards,
Bin


More information about the U-Boot mailing list