On Wed, 28 Nov 2018, Mathias Nyman wrote: > When initializing a hub we want to give a USB3 port in link training > the same debounce delay time before autosuspening the hub as already > trained, connected enabled ports. > > USB3 ports won't reach the enabled state with "current connect status" and > "connect status change" bits set until the USB3 link training finishes. > > Catching the port in link training (polling) and adding the debounce delay > prevents unnecessary failed attempts to autosuspend the hub. > > Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx> > --- > drivers/usb/core/hub.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index 0f9381b..009f928 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -1112,6 +1112,16 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) > USB_PORT_FEAT_ENABLE); > } > > + /* > + * Add debounce if USB3 link is in polling/link training state. > + * Link will automatically transition to Enabled state after > + * link training completes. > + */ > + if (hub_is_superspeed(hdev) && > + ((portstatus & USB_PORT_STAT_LINK_STATE) == > + USB_SS_PORT_LS_POLLING)) > + need_debounce_delay = true; > + > /* Clear status-change flags; we'll debounce later */ > if (portchange & USB_PORT_STAT_C_CONNECTION) { > need_debounce_delay = true; Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>