| From a5baeaeabcca3244782a9b6382ebab6f8a58f583 Mon Sep 17 00:00:00 2001 |
| From: Aaron Ma <aaron.ma@canonical.com> |
| Date: Fri, 9 Nov 2018 17:21:21 +0200 |
| Subject: usb: xhci: fix timeout for transition from RExit to U0 |
| |
| From: Aaron Ma <aaron.ma@canonical.com> |
| |
| commit a5baeaeabcca3244782a9b6382ebab6f8a58f583 upstream. |
| |
| This definition is used by msecs_to_jiffies in milliseconds. |
| According to the comments, max rexit timeout should be 20ms. |
| Align with the comments to properly calculate the delay. |
| |
| Verified on Sunrise Point-LP and Cannon Lake. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Aaron Ma <aaron.ma@canonical.com> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/xhci-hub.c | 4 ++-- |
| drivers/usb/host/xhci.h | 2 +- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/usb/host/xhci-hub.c |
| +++ b/drivers/usb/host/xhci-hub.c |
| @@ -790,7 +790,7 @@ static u32 xhci_get_port_status(struct u |
| time_left = wait_for_completion_timeout( |
| &bus_state->rexit_done[wIndex], |
| msecs_to_jiffies( |
| - XHCI_MAX_REXIT_TIMEOUT)); |
| + XHCI_MAX_REXIT_TIMEOUT_MS)); |
| spin_lock_irqsave(&xhci->lock, flags); |
| |
| if (time_left) { |
| @@ -804,7 +804,7 @@ static u32 xhci_get_port_status(struct u |
| } else { |
| int port_status = readl(port_array[wIndex]); |
| xhci_warn(xhci, "Port resume took longer than %i msec, port status = 0x%x\n", |
| - XHCI_MAX_REXIT_TIMEOUT, |
| + XHCI_MAX_REXIT_TIMEOUT_MS, |
| port_status); |
| status |= USB_PORT_STAT_SUSPEND; |
| clear_bit(wIndex, &bus_state->rexit_ports); |
| --- a/drivers/usb/host/xhci.h |
| +++ b/drivers/usb/host/xhci.h |
| @@ -1490,7 +1490,7 @@ struct xhci_bus_state { |
| * It can take up to 20 ms to transition from RExit to U0 on the |
| * Intel Lynx Point LP xHCI host. |
| */ |
| -#define XHCI_MAX_REXIT_TIMEOUT (20 * 1000) |
| +#define XHCI_MAX_REXIT_TIMEOUT_MS 20 |
| |
| static inline unsigned int hcd_index(struct usb_hcd *hcd) |
| { |