When I plug a device (iMX6ULL) on a USB port of my host PC running Linux, the detection is unstable.
It always shows:
[xxx.xxxxxxx] usb 3-3.1: new high-speed USB device number X using xhci_hcd
In case of success, it shows:
[xxx.xxxxxxx] usb 3-3.1: New USB device found, idVendor=15a2, idProduct=0080, bcdDevice= 0.01 [xxx.xxxxxxx] usb 3-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[xxx.xxxxxxx] usb 3-3.1: Product: SE Blank 6ULL
[xxx.xxxxxxx] usb 3-3.1: Manufacturer: Freescale SemiConductor Inc
But sometimes (50%), detection is not completed and succession of error messages comes:
[xxx.xxxxxxx] usb 3-3.1: device descriptor read/64, error -110
I tried with different versions of the xhci_hdc driver (Ubuntu 18.04 / 20.04 / 22.04).
I tried with USB 3.0 and 2.0 ports, with/out an externally powered USB hub.
I tried on a Windows host PC and it shows 100% of success.
I tried with the iMX boot mode set to boot from fuse and serial download.
I tried with a battery plugged in before to power on the iMX before attempting USB detection.
The purpose is to run a serial download using imx_usb_loader after HID detection (device VID/PID required).
I enabled usb drivers debugging:
$ echo "file drivers/usb/* +p" > /sys/kernel/debug/dynamic_debug/control
Error or success, the beginning is the same:
[ 188.968754] xhci_hcd 0000:00:14.0: Port change event, 3-3, id 3, portsc: 0xc400fe3
[ 188.968765] xhci_hcd 0000:00:14.0: resume root hub
[ 188.968775] xhci_hcd 0000:00:14.0: port resume event for port 3
[ 188.968778] xhci_hcd 0000:00:14.0: resume HS port 3
[ 188.968823] usb usb3: usb wakeup-resume
[ 188.968832] usb usb3: usb auto-resume
[ 188.968848] hub 3-0:1.0: hub_resume
[...]
This message occurs at different moments:
[ 324.623302] xhci_hcd 0000:00:14.0: xhci_hub_status_data: stopping usb3 port polling
It ends with a timeout in case of error:
[ 189.263462] xhci_hcd 0000:00:14.0: // Ding dong!
[ 189.263481] xhci_hcd 0000:00:14.0: Successful setup context command
[ 189.263486] xhci_hcd 0000:00:14.0: Op regs DCBAA ptr = 0x0000010fcdf000
[ 189.263489] xhci_hcd 0000:00:14.0: Slot ID 4 dcbaa entry @00000000e9b0d716 = 0x00000102e25000
[ 189.263493] xhci_hcd 0000:00:14.0: Output Context DMA address = 0x102e25000
[ 189.263496] xhci_hcd 0000:00:14.0: Internal device address = 0
[ **194.355421**] xhci_hcd 0000:00:14.0: Cancel URB 0000000035cb4b23, dev 3.1, ep 0x0, starting at offset 0x102e23000
While in case of success:
[ 324.851333] xhci_hcd 0000:00:14.0: // Ding dong!
[ 324.851353] xhci_hcd 0000:00:14.0: Successful setup context command
[ 324.851358] xhci_hcd 0000:00:14.0: Op regs DCBAA ptr = 0x0000010fcdf000
[ 324.851361] xhci_hcd 0000:00:14.0: Slot ID 6 dcbaa entry @00000000a47e2bb9 = 0x00000102e25000
[ 324.851365] xhci_hcd 0000:00:14.0: Output Context DMA address = 0x102e25000
[ 324.851368] xhci_hcd 0000:00:14.0: Internal device address = 0
[ 324.851478] xhci_hcd 0000:00:14.0: Waiting for status stage event
[ 324.943305] xhci_hcd 0000:00:14.0: Resetting device with slot ID 6
[ 324.943317] xhci_hcd 0000:00:14.0: // Ding dong!
[ 324.943325] xhci_hcd 0000:00:14.0: Completed reset device command.
[...]
Comparison of wireshark USB capture shows a host -> 3.1.0 USB URB GET_STATUS Request message is expected but never occurs in case of error.