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

Marek Vasut marex at denx.de
Mon Sep 27 17:14:15 CEST 2021


On 9/27/21 2:42 PM, Stefan Agner 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>

I hope to get AB/RB from Bin here, then it can go into this release I think.


More information about the U-Boot mailing list