linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* usb: hub: delay hub autosuspend if USB3 port is still link training
@ 2018-11-28 15:01 Alan Stern
  0 siblings, 0 replies; 2+ messages in thread
From: Alan Stern @ 2018-11-28 15:01 UTC (permalink / raw)
  To: Mathias Nyman; +Cc: gregkh, linux-usb

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@linux.intel.com>
> ---
>  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@rowland.harvard.edu>

^ permalink raw reply	[flat|nested] 2+ messages in thread

* usb: hub: delay hub autosuspend if USB3 port is still link training
@ 2018-11-28 13:55 Mathias Nyman
  0 siblings, 0 replies; 2+ messages in thread
From: Mathias Nyman @ 2018-11-28 13:55 UTC (permalink / raw)
  To: gregkh; +Cc: linux-usb, stern, Mathias Nyman

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@linux.intel.com>
---
 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;

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-11-28 15:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-28 15:01 usb: hub: delay hub autosuspend if USB3 port is still link training Alan Stern
  -- strict thread matches above, loose matches on Subject: below --
2018-11-28 13:55 Mathias Nyman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).