
Hi everyone,
The latest version of u-boot seems to have some serious issues with USB drives. More than half of my disks do not work. I have traced the issue down to the following:
1. During a transfer, the XHCI TRB ring buffer reports back an error of type 4. (USB Transaction Error) 2. The COMP_TX_ERR is not matched in 'drivers/usb/host/xhci-ring.c:record_transfer_result()', so the status gets set to the default value in the switch statement:
udev->status = 0x80; /* USB_ST_TOO_LAZY_TO_MAKE_A_NEW_MACRO */
3. 'common/usb.c:usb_bulk_msg()' then incorrectly reports this as a timeout 4. On the next loop, an endpoint reset is attempted, which fails with another completion code 4, and the USB subsystem becomes stuck in an loop trying to reset the drive until it finally gives up.
Question: how should this situation be handled? Can we recover from it? It doesn't appear the current logic was designed to handle it (or at least it doesn't handle it).
The XHCI documentation lists a code 4 as a result of:
"Asserted in the case where the host did not receive a valid response from the device (Timeout, CRC, Bad PID, unexpected NYET, etc.)."
Can the individual who is maintaining this section of the code (or anyone knowledgeable about the implementation) offer some advice on how this should be corrected?
Best regards,
Chris