| From 3de4e7dbb9279d8e161873ad0c2f7394656d3d2a Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Fri, 11 Nov 2016 15:13:12 +0200 |
| Subject: [PATCH 276/299] xhci: don't try to reset the host if it is |
| unaccessible |
| |
| There is no point in trying to reset the host controller by writing |
| to its registers if host is removed and registers just return 0xffffffff |
| |
| bail out and return -ENODEV instead |
| |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| (cherry picked from commit c11ae038d62bf07231be7b813435e5067c978ddc) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/usb/host/xhci.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -167,6 +167,12 @@ int xhci_reset(struct xhci_hcd *xhci) |
| int ret, i; |
| |
| state = readl(&xhci->op_regs->status); |
| + |
| + if (state == ~(u32)0) { |
| + xhci_warn(xhci, "Host not accessible, reset failed.\n"); |
| + return -ENODEV; |
| + } |
| + |
| if ((state & STS_HALT) == 0) { |
| xhci_warn(xhci, "Host controller not halted, aborting reset.\n"); |
| return 0; |
| @@ -693,7 +699,6 @@ void xhci_stop(struct usb_hcd *hcd) |
| xhci->cmd_ring_state = CMD_RING_STATE_STOPPED; |
| xhci_halt(xhci); |
| xhci_reset(xhci); |
| - |
| spin_unlock_irq(&xhci->lock); |
| } |
| |