Re: [U-Boot] [xHCI] Controller failure with USB 3.0 hub
Hi Marek, On Sat, May 19, 2018 at 7:54 PM, Bin Mengwrote: > Hi Marek, > > On Sat, May 19, 2018 at 7:30 PM, Marek Vasut wrote: >> On 05/19/2018 01:09 PM, Bin Meng wrote: >>> Hi Marek, >> >> Hi, >> >>> On Sat, May 19, 2018 at 9:03 AM, Marek Vasut 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. >> >> Do you have xhci spec chapter reference/number for me too ? :) >> > > I was looking at xhci spec 1.1 chapter 6.4.5 TRB Completion Codes. I > don't have Renesas xHC manual to cross check. > >>> 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); >>> } >> >> Doesn't make any difference, sorry. >> > > Too bad. Then I don't have any obvious clue so far. The completion > code 5 is a helpful sign from xHC to the software that something was > wrong in the TRB. Per the xHCI spec, dev_state needs to be cleared. It > was working with the x86 xHC though. Changing > xhci_configure_endpoints(udev, false) to > xhci_configure_endpoints(udev, true) is not correct as the Evaluate > Context command is not used with configure the hub attributes. To continue debugging this, could you print out the slot context contents (slot_ctx->*) before calling xhci_configure_endpoints(udev, false)? Regards, Bin ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [xHCI] Controller failure with USB 3.0 hub
Hi Marek, On Sat, May 19, 2018 at 7:30 PM, Marek Vasutwrote: > On 05/19/2018 01:09 PM, Bin Meng wrote: >> Hi Marek, > > Hi, > >> On Sat, May 19, 2018 at 9:03 AM, Marek Vasut 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. > > Do you have xhci spec chapter reference/number for me too ? :) > I was looking at xhci spec 1.1 chapter 6.4.5 TRB Completion Codes. I don't have Renesas xHC manual to cross check. >> 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); >> } > > Doesn't make any difference, sorry. > Too bad. Then I don't have any obvious clue so far. The completion code 5 is a helpful sign from xHC to the software that something was wrong in the TRB. Per the xHCI spec, dev_state needs to be cleared. It was working with the x86 xHC though. Changing xhci_configure_endpoints(udev, false) to xhci_configure_endpoints(udev, true) is not correct as the Evaluate Context command is not used with configure the hub attributes. Regards, Bin ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [xHCI] Controller failure with USB 3.0 hub
On 05/19/2018 01:09 PM, Bin Meng wrote: > Hi Marek, Hi, > On Sat, May 19, 2018 at 9:03 AM, Marek Vasutwrote: >> 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. Do you have xhci spec chapter reference/number for me too ? :) > 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); > } Doesn't make any difference, sorry. -- Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [xHCI] Controller failure with USB 3.0 hub
Hi Marek, On Sat, May 19, 2018 at 9:03 AM, Marek Vasutwrote: > 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 ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [xHCI] Controller failure with USB 3.0 hub
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. 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 ? -- Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot