[PATCH v2 1/2][SRU][B/F/OEM-B/OEM-OSP1-B/OEM-5.6] xhci: Return if xHCI doesn't support LPM

Hsuan-Yu Lin shane.lin at canonical.com
Wed Jul 15 03:30:47 UTC 2020

From: Kai-Heng Feng <kai.heng.feng at canonical.com>

BugLink: https://bugs.launchpad.net/bugs/1880519

Just return if xHCI is quirked to disable LPM. We can save some time
from reading registers and doing spinlocks.

Add stable tag as we want this patch together with the next one,
"Poll for U0 after disabling USB2 LPM" which fixes a suspend issue
for some USB2 LPM devices

Cc: stable at vger.kernel.org
Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
Signed-off-by: Mathias Nyman <mathias.nyman at linux.intel.com>
Link: https://lore.kernel.org/r/20200624135949.22611-5-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
(cherry picked from commit f0c472a6da51f9fac15e80fe2fd9c83b68754cff)
Signed-off-by: Hsuan-Yu Lin <shane.lin at canonical.com>
 drivers/usb/host/xhci.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 81b54a3d2910..305e82d6f036 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -4390,6 +4390,9 @@ static int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
 	int		hird, exit_latency;
 	int		ret;
+	if (xhci->quirks & XHCI_HW_LPM_DISABLE)
+		return -EPERM;
 	if (hcd->speed >= HCD_USB3 || !xhci->hw_lpm_support ||
 		return -EPERM;
@@ -4412,7 +4415,7 @@ static int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
 	xhci_dbg(xhci, "%s port %d USB2 hardware LPM\n",
 			enable ? "enable" : "disable", port_num + 1);
-	if (enable && !(xhci->quirks & XHCI_HW_LPM_DISABLE)) {
+	if (enable) {
 		/* Host supports BESL timeout instead of HIRD */
 		if (udev->usb2_hw_lpm_besl_capable) {
 			/* if device doesn't have a preferred BESL value use a

More information about the kernel-team mailing list