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