xhci: handle transfer events without TRB pointer
authorMathias Nyman <mathias.nyman@linux.intel.com>
Thu, 15 Jun 2017 08:55:46 +0000 (11:55 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Jun 2017 20:17:46 +0000 (22:17 +0200)
commitade2e3a148a1740a6f3abea9c54f11630b9d7d1e
treecb1b04b889c780e94e91f852a62776bb31dd0ce0
parent5eee4b6b4f572bfce953f1e38cea087b9933e0e9
xhci: handle transfer events without TRB pointer

Most transfer events have a TRB pointer indicating which TRB caused
the event.
In the case of streams, transfer events such as
USB Transaction error may have its TRB pointer set to zero.

driver won't know which stream or what TRB on that stream caused
the error, but it can issue a soft reset to recover the transfer.
A soft reset will clear the host side halt of the endpoint without
clearing Data toggle or sequence number, and let the transfer
continue from where it halted.

see xhci section 4.12 streams and 4.6.8.2 soft retry.

USB Transaction errors with a zero TRB pointer are seen with
UAS usb devices.

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-ring.c