| From 66ec8d07b926476833e5f3916b0adff8d43e5208 Mon Sep 17 00:00:00 2001 |
| From: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Date: Fri, 4 Oct 2019 14:59:32 +0300 |
| Subject: [PATCH] xhci: Increase STS_SAVE timeout in xhci_suspend() |
| |
| commit ac343366846a445bb81f0a0e8f16abb8bd5d5d88 upstream. |
| |
| After commit f7fac17ca925 ("xhci: Convert xhci_handshake() to use |
| readl_poll_timeout_atomic()"), ASMedia xHCI may fail to suspend. |
| |
| Although the algorithms are essentially the same, the old max timeout is |
| (usec + usec * time of doing readl()), and the new max timeout is just |
| usec, which is much less than the old one. |
| |
| Increase the timeout to make ASMedia xHCI able to suspend again. |
| |
| BugLink: https://bugs.launchpad.net/bugs/1844021 |
| Fixes: f7fac17ca925 ("xhci: Convert xhci_handshake() to use readl_poll_timeout_atomic()") |
| Cc: <stable@vger.kernel.org> # v5.2+ |
| Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Link: https://lore.kernel.org/r/1570190373-30684-8-git-send-email-mathias.nyman@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c |
| index c35688bb1b9c..74d56b6776e5 100644 |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -1032,7 +1032,7 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) |
| writel(command, &xhci->op_regs->command); |
| xhci->broken_suspend = 0; |
| if (xhci_handshake(&xhci->op_regs->status, |
| - STS_SAVE, 0, 10 * 1000)) { |
| + STS_SAVE, 0, 20 * 1000)) { |
| /* |
| * AMD SNPS xHC 3.0 occasionally does not clear the |
| * SSS bit of USBSTS and when driver tries to poll |
| -- |
| 2.7.4 |
| |