| From 76798d7579e2ad8fb8f045c325354a7ee591aac8 Mon Sep 17 00:00:00 2001 |
| From: Jan Schmidt <jan@centricular.com> |
| Date: Fri, 4 Oct 2019 14:59:28 +0300 |
| Subject: [PATCH] xhci: Check all endpoints for LPM timeout |
| |
| commit d500c63f80f2ea08ee300e57da5f2af1c13875f5 upstream. |
| |
| 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: Jan Schmidt <jan@centricular.com> |
| Tested-by: Philipp Zabel <p.zabel@pengutronix.de> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Link: https://lore.kernel.org/r/1570190373-30684-4-git-send-email-mathias.nyman@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c |
| index 33ed1ebf5d87..402c103c9396 100644 |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -4661,12 +4661,12 @@ static int xhci_update_timeout_for_endpoint(struct xhci_hcd *xhci, |
| alt_timeout = xhci_call_host_update_timeout_for_endpoint(xhci, udev, |
| 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 |
| - * 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 || |
| - alt_timeout == USB3_LPM_DEVICE_INITIATED) { |
| + if (alt_timeout == USB3_LPM_DISABLED) { |
| *timeout = alt_timeout; |
| return -E2BIG; |
| } |
| -- |
| 2.7.4 |
| |