
Hi Marek,
On Sat, May 19, 2018 at 7:54 PM, Bin Meng bmeng.cn@gmail.com wrote:
Hi Marek,
On Sat, May 19, 2018 at 7:30 PM, Marek Vasut marek.vasut@gmail.com 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 marek.vasut@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.
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