| From 1208d8a84fdcae6b395c57911cdf907450d30e70 Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Mon, 12 Feb 2018 14:24:47 +0200 |
| Subject: xhci: Don't print a warning when setting link state for disabled ports |
| |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| |
| commit 1208d8a84fdcae6b395c57911cdf907450d30e70 upstream. |
| |
| When disabling a USB3 port the hub driver will set the port link state to |
| U3 to prevent "ejected" or "safely removed" devices that are still |
| physically connected from immediately re-enumerating. |
| |
| If the device was really unplugged, then error messages were printed |
| as the hub tries to set the U3 link state for a port that is no longer |
| enabled. |
| |
| xhci-hcd ee000000.usb: Cannot set link state. |
| usb usb8-port1: cannot disable (err = -32) |
| |
| Don't print error message in xhci-hub if hub tries to set port link state |
| for a disabled port. Return -ENODEV instead which also silences hub driver. |
| |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Signed-off-by: Ross Zwisler <zwisler@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/xhci-hub.c | 18 +++++++++--------- |
| 1 file changed, 9 insertions(+), 9 deletions(-) |
| |
| --- a/drivers/usb/host/xhci-hub.c |
| +++ b/drivers/usb/host/xhci-hub.c |
| @@ -1048,17 +1048,17 @@ int xhci_hub_control(struct usb_hcd *hcd |
| temp = readl(port_array[wIndex]); |
| break; |
| } |
| - |
| - /* Software should not attempt to set |
| - * port link state above '3' (U3) and the port |
| - * must be enabled. |
| - */ |
| - if ((temp & PORT_PE) == 0 || |
| - (link_state > USB_SS_PORT_LS_U3)) { |
| - xhci_warn(xhci, "Cannot set link state.\n"); |
| + /* Port must be enabled */ |
| + if (!(temp & PORT_PE)) { |
| + retval = -ENODEV; |
| + break; |
| + } |
| + /* Can't set port link state above '3' (U3) */ |
| + if (link_state > USB_SS_PORT_LS_U3) { |
| + xhci_warn(xhci, "Cannot set port %d link state %d\n", |
| + wIndex, link_state); |
| goto error; |
| } |
| - |
| if (link_state == USB_SS_PORT_LS_U3) { |
| slot_id = xhci_find_slot_id_by_port(hcd, xhci, |
| wIndex + 1); |