| From cd9d9491e835a845c1a98b8471f88d26285e0bb9 Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Fri, 4 Oct 2019 14:59:27 +0300 |
| Subject: xhci: Prevent device initiated U1/U2 link pm if exit latency is too long |
| |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| |
| commit cd9d9491e835a845c1a98b8471f88d26285e0bb9 upstream. |
| |
| If host/hub initiated link pm is prevented by a driver flag we still must |
| ensure that periodic endpoints have longer service intervals than link pm |
| exit latency before allowing device initiated link pm. |
| |
| Fix this by continue walking and checking endpoint service interval if |
| xhci_get_timeout_no_hub_lpm() returns anything else than USB3_LPM_DISABLED |
| |
| While at it fix the split line error message |
| |
| Tested-by: Jan Schmidt <jan@centricular.com> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Link: https://lore.kernel.org/r/1570190373-30684-3-git-send-email-mathias.nyman@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/xhci.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -4626,10 +4626,12 @@ static u16 xhci_calculate_lpm_timeout(st |
| if (intf->dev.driver) { |
| driver = to_usb_driver(intf->dev.driver); |
| if (driver && driver->disable_hub_initiated_lpm) { |
| - dev_dbg(&udev->dev, "Hub-initiated %s disabled " |
| - "at request of driver %s\n", |
| - state_name, driver->name); |
| - return xhci_get_timeout_no_hub_lpm(udev, state); |
| + dev_dbg(&udev->dev, "Hub-initiated %s disabled at request of driver %s\n", |
| + state_name, driver->name); |
| + timeout = xhci_get_timeout_no_hub_lpm(udev, |
| + state); |
| + if (timeout == USB3_LPM_DISABLED) |
| + return timeout; |
| } |
| } |
| |