Commit c81b8722 authored by Mathias Nyman's avatar Mathias Nyman Committed by Greg Kroah-Hartman

xhci: Fix port resume done detection for SS ports with LPM enabled

commit 6cbcf596 upstream.

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: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 093ccda1
...@@ -1643,10 +1643,13 @@ static void handle_port_status(struct xhci_hcd *xhci, ...@@ -1643,10 +1643,13 @@ static void handle_port_status(struct xhci_hcd *xhci,
} }
} }
if ((portsc & PORT_PLC) && (portsc & PORT_PLS_MASK) == XDEV_U0 && if ((portsc & PORT_PLC) &&
DEV_SUPERSPEED_ANY(portsc)) { DEV_SUPERSPEED_ANY(portsc) &&
((portsc & PORT_PLS_MASK) == XDEV_U0 ||
(portsc & PORT_PLS_MASK) == XDEV_U1 ||
(portsc & PORT_PLS_MASK) == XDEV_U2)) {
xhci_dbg(xhci, "resume SS port %d finished\n", port_id); xhci_dbg(xhci, "resume SS port %d finished\n", port_id);
/* We've just brought the device into U0 through either the /* We've just brought the device into U0/1/2 through either the
* Resume state after a device remote wakeup, or through the * Resume state after a device remote wakeup, or through the
* U3Exit state after a host-initiated resume. If it's a device * U3Exit state after a host-initiated resume. If it's a device
* initiated remote wake, don't pass up the link state change, * initiated remote wake, don't pass up the link state change,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment