Commit d500c63f authored by Jan Schmidt's avatar Jan Schmidt Committed by Greg Kroah-Hartman

xhci: Check all endpoints for LPM timeout

If an endpoint is encountered that returns USB3_LPM_DEVICE_INITIATED, keep
checking further endpoints, as there might be periodic endpoints later
that return USB3_LPM_DISABLED due to shorter service intervals.

Without this, the code can set too high a maximum-exit-latency and
prevent the use of multiple USB3 cameras that should be able to work.

Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarJan Schmidt <jan@centricular.com>
Tested-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/1570190373-30684-4-git-send-email-mathias.nyman@linux.intel.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cd9d9491
...@@ -4674,12 +4674,12 @@ static int xhci_update_timeout_for_endpoint(struct xhci_hcd *xhci, ...@@ -4674,12 +4674,12 @@ static int xhci_update_timeout_for_endpoint(struct xhci_hcd *xhci,
alt_timeout = xhci_call_host_update_timeout_for_endpoint(xhci, udev, alt_timeout = xhci_call_host_update_timeout_for_endpoint(xhci, udev,
desc, state, timeout); desc, state, timeout);
/* If we found we can't enable hub-initiated LPM, or /* If we found we can't enable hub-initiated LPM, and
* the U1 or U2 exit latency was too high to allow * the U1 or U2 exit latency was too high to allow
* device-initiated LPM as well, just stop searching. * device-initiated LPM as well, then we will disable LPM
* for this device, so stop searching any further.
*/ */
if (alt_timeout == USB3_LPM_DISABLED || if (alt_timeout == USB3_LPM_DISABLED) {
alt_timeout == USB3_LPM_DEVICE_INITIATED) {
*timeout = alt_timeout; *timeout = alt_timeout;
return -E2BIG; return -E2BIG;
} }
......
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