From: Daehwan Jung <dh10.jung@xxxxxxxxxxx> xhci_reset() is called with interrupts disabled. Waiting 10 seconds for controller reset and controller ready operations can be fatal to the system when controller is timed out. Reduce the timeout to 1 second and print a error message when the time out happens. Fixes: 22ceac191211 ("xhci: Increase reset timeout for Renesas 720201 host.") Signed-off-by: Daehwan Jung <dh10.jung@xxxxxxxxxxx> Signed-off-by: Pavankumar Kondeti <quic_pkondeti@xxxxxxxxxxx> --- v2: - Add error print statements in the code that change log refers to drivers/usb/host/xhci.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index dc357ca..bb9ea3f 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -196,9 +196,11 @@ int xhci_reset(struct xhci_hcd *xhci) udelay(1000); ret = xhci_handshake(&xhci->op_regs->command, - CMD_RESET, 0, 10 * 1000 * 1000); - if (ret) + CMD_RESET, 0, 1 * 1000 * 1000); + if (ret) { + xhci_err(xhci, "Host controller reset timed out\n"); return ret; + } if (xhci->quirks & XHCI_ASMEDIA_MODIFY_FLOWCONTROL) usb_asmedia_modifyflowcontrol(to_pci_dev(xhci_to_hcd(xhci)->self.controller)); @@ -210,7 +212,11 @@ int xhci_reset(struct xhci_hcd *xhci) * than status until the "Controller Not Ready" flag is cleared. */ ret = xhci_handshake(&xhci->op_regs->status, - STS_CNR, 0, 10 * 1000 * 1000); + STS_CNR, 0, 1 * 1000 * 1000); + if (ret) { + xhci_err(xhci, "Host controller is not ready within timeout\n"); + return ret; + } xhci->usb2_rhub.bus_state.port_c_suspend = 0; xhci->usb2_rhub.bus_state.suspended_ports = 0; -- 2.7.4