[PATCH] usb: xhci: reset endpoint on USB stall

Marek Vasut marex at denx.de
Wed Feb 16 16:53:36 CET 2022


On 2/16/22 08:53, Bin Meng wrote:
> On Mon, Sep 27, 2021 at 8:43 PM Stefan Agner <stefan at agner.ch> wrote:
>>
>> There are devices which cause a USB stall when trying to read strings.
>> Specifically Arduino Mega R3 stalls when trying to read the product
>> string.
>>
>> The stall currently remains unhandled, and subsequent retries submit new
>> transfers on a stopped endpoint which ultimately cause a crash in
>> abort_td():
>> WARN halted endpoint, queueing URB anyway.
>> XHCI control transfer timed out, aborting...
>> Unexpected XHCI event TRB, skipping... (3affe040 00000000 13000000 02008401)
>> BUG at drivers/usb/host/xhci-ring.c:505/abort_td()!
>> BUG!
>> resetting ...
>>
>> Linux seems to be able to recover from the stall by issuing a
>> TRB_RESET_EP command.
>>
>> Introduce reset_ep() which issues a TRB_RESET_EP followed by setting the
>> transfer ring dequeue pointer via TRB_SET_DEQ. This allows to properly
>> recover from a USB stall error and continue communicating with the USB
>> device.
>>
>> Signed-off-by: Stefan Agner <stefan at agner.ch>

Applied, thanks.


More information about the U-Boot mailing list