diff options
author | Mathias Nyman <mathias.nyman@linux.intel.com> | 2015-09-21 17:46:10 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-10-22 14:43:19 -0700 |
commit | eb8e51323be935f52aec7c164deb1c1d86f8f706 (patch) | |
tree | 6315d7fa30beb99e4b876701e49f1deeab06b6dd /drivers/usb | |
parent | 44f73be485f66dfeca7c6a5e334a7a11b97a4151 (diff) | |
download | linux-stable-eb8e51323be935f52aec7c164deb1c1d86f8f706.tar.gz linux-stable-eb8e51323be935f52aec7c164deb1c1d86f8f706.tar.bz2 linux-stable-eb8e51323be935f52aec7c164deb1c1d86f8f706.zip |
xhci: give command abortion one more chance before killing xhci
commit a6809ffd1687b3a8c192960e69add559b9d32649 upstream.
We want to give the command abortion an additional try to stop
the command ring before we completely hose xhci.
Tested-by: Vincent Pelletier <plr.vincent@gmail.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/host/xhci-ring.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index b3a0a2275f5a..aae8126e486d 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -302,6 +302,15 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci) ret = xhci_handshake(&xhci->op_regs->cmd_ring, CMD_RING_RUNNING, 0, 5 * 1000 * 1000); if (ret < 0) { + /* we are about to kill xhci, give it one more chance */ + xhci_write_64(xhci, temp_64 | CMD_RING_ABORT, + &xhci->op_regs->cmd_ring); + udelay(1000); + ret = xhci_handshake(&xhci->op_regs->cmd_ring, + CMD_RING_RUNNING, 0, 3 * 1000 * 1000); + if (ret == 0) + return 0; + xhci_err(xhci, "Stopped the command ring failed, " "maybe the host is dead\n"); xhci->xhc_state |= XHCI_STATE_DYING; |