aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Nyman <mathias.nyman@linux.intel.com>2019-03-22 11:50:15 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-03-22 12:16:05 -0400
commit6cbcf596934c8e16d6288c7cc62dfb7ad8eadf15 (patch)
treebd5bc938ac00c6e26e80a7e6787bd786c5ae0019
parent22feda47b574c2854cc1a8447a2ae18598752375 (diff)
xhci: Fix port resume done detection for SS ports with LPM enabled
A suspended SS port in U3 link state will go to U0 when resumed, but can almost immediately after that enter U1 or U2 link power save states before host controller driver reads the port status. Host controller driver only checks for U0 state, and might miss the finished resume, leaving flags unclear and skip notifying usb code of the wake. Add U1 and U2 to the possible link states when checking for finished port resume. Cc: stable <stable@vger.kernel.org> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/xhci-ring.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 40fa25c4d041..9215a28dad40 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1647,10 +1647,13 @@ static void handle_port_status(struct xhci_hcd *xhci,
1647 } 1647 }
1648 } 1648 }
1649 1649
1650 if ((portsc & PORT_PLC) && (portsc & PORT_PLS_MASK) == XDEV_U0 && 1650 if ((portsc & PORT_PLC) &&
1651 DEV_SUPERSPEED_ANY(portsc)) { 1651 DEV_SUPERSPEED_ANY(portsc) &&
1652 ((portsc & PORT_PLS_MASK) == XDEV_U0 ||
1653 (portsc & PORT_PLS_MASK) == XDEV_U1 ||
1654 (portsc & PORT_PLS_MASK) == XDEV_U2)) {
1652 xhci_dbg(xhci, "resume SS port %d finished\n", port_id); 1655 xhci_dbg(xhci, "resume SS port %d finished\n", port_id);
1653 /* We've just brought the device into U0 through either the 1656 /* We've just brought the device into U0/1/2 through either the
1654 * Resume state after a device remote wakeup, or through the 1657 * Resume state after a device remote wakeup, or through the
1655 * U3Exit state after a host-initiated resume. If it's a device 1658 * U3Exit state after a host-initiated resume. If it's a device
1656 * initiated remote wake, don't pass up the link state change, 1659 * initiated remote wake, don't pass up the link state change,