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.ny...@linux.intel.com>
---
 drivers/usb/host/xhci.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index b503189..641663f 100644
--- 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;
@@ -690,7 +696,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);
        }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to