diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 849a568d0e63..c0f3d04c6241 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -5492,6 +5492,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) struct device *dev = hcd->self.sysdev; int retval; u32 hcs_params1; + u32 usbsts; + char str[XHCI_MSG_MAX]; /* Accept arbitrarily long scatter-gather lists */ hcd->self.sg_tablesize = ~0; @@ -5550,11 +5552,19 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) xhci->quirks |= XHCI_LINK_TRB_QUIRK; } + usbsts = readl(&xhci->op_regs->status); + xhci_info(xhci, "gen_setup old USBSTS %s\n", xhci_decode_usbsts(str, usbsts)); /* Make sure the HC is halted. */ retval = xhci_halt(xhci); if (retval) return retval; + usbsts = readl(&xhci->op_regs->status); + if (usbsts & STS_FATAL) + writel(STS_FATAL, &xhci->op_regs->status); + usbsts = readl(&xhci->op_regs->status); + xhci_info(xhci, "gen_setup new USBSTS %s\n", xhci_decode_usbsts(str, usbsts)); + xhci_zero_64b_regs(xhci); xhci_dbg(xhci, "Resetting HCD\n");