[RFC] usb: xhci: Some USB devices fail to initialize

Elena Popa elena.popa at nxp.com
Mon May 27 19:16:11 CEST 2024


Hello,

We've noticed that, at least, on the i.MX8M* platforms, some USB devices (especially USB2.0 sticks) fail to initialize with one of the following errors:
	- scanning bus usb at 38200000 for devices... Device not responding to set address.
      	USB device not accepting new address (error=80000000)

	- scanning bus usb at 38200000 for devices... WARN halted endpoint, queueing URB anyway.
	Unexpected XHCI event TRB, skipping... (fcf1a5f0 00000000 13000000 01008401)
	BUG at drivers/usb/host/xhci-ring.c:530/abort_td()!
	BUG!
	resetting ...

It seems to be a timing problem, since if we enable the debug messages, the USB device initializes correctly.

We found out that if we add a small delay of 5 milliseconds at the beginning of the _xhci_submit_control_msg() function from the drivers/usb/host/xhci.c file, all devices initialize properly. Essentially, each control message is delayed by 5ms. We tried a smaller delay (1ms), but it is not enough. 

static int _xhci_submit_control_msg(struct usb_device *udev, unsigned long pipe,
				    void *buffer, int length,
				    struct devrequest *setup, int root_portnr)
{
+	mdelay(5);

	struct xhci_ctrl *ctrl = xhci_get_ctrl(udev);
	int ret = 0;
...
}

We went a little further, and this delay seems to only be necessary for the requests of type:
- USB_REQ_GET_STATUS (for the communication with the root) 
- USB_REQ_GET_DESCRIPTOR ( for the communication with the device)

I don't have too much know-how about the USB, so I would appreciate your opinion related to this issue, and how can we find the root cause. I found several reports on the internet with the same problem on other boards. Maybe some of the USB timing specs are not implemented correctly? U-Boot is maybe sending control messages too aggressively? 

If you give me some suggestions of where to look, I could do some debugging myself. Of course, since printing debug messages makes the initialization work, complicates the debugging.

Thank you,
Elena


More information about the U-Boot mailing list