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
 {