Re: [PATCH 4.4 026/143] usb: hub: delay hub autosuspend if USB3 port is still link training

2019-02-19 Thread Mathias Nyman

On 18.2.2019 17.39, Alan Stern wrote:

On Mon, 18 Feb 2019, Greg Kroah-Hartman wrote:


4.4-stable review patch.  If anyone has any objections, please let me know.

--

[ Upstream commit e86108940e541febf35813402ff29fa6f4a9ac0b ]

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 
Acked-by: Alan Stern 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 


We should be careful with this commit; it has caused problems for some
people.  Mathias has been working to fix them, but this commit
shouldn't go into -stable until the fixes are also ready to go.



This commit should be fine, it gives ports in link training a bit more time
to finish. The commit causing issues is related, preventing runtime suspend
if ports are link training:

commit 2f31a67f01a8beb22cae754c53522cb61a005750
Author: Mathias Nyman 
Date:   Thu Nov 15 11:38:41 2018 +0200

usb: xhci: Prevent bus suspend if a port connect change or polling state is 
detected

Turns out it causes suspend issues on some MacBooks

-Mathias


Re: [PATCH 4.4 026/143] usb: hub: delay hub autosuspend if USB3 port is still link training

2019-02-18 Thread Alan Stern
On Mon, 18 Feb 2019, Greg Kroah-Hartman wrote:

> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> --
> 
> [ Upstream commit e86108940e541febf35813402ff29fa6f4a9ac0b ]
> 
> 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 
> Acked-by: Alan Stern 
> Signed-off-by: Greg Kroah-Hartman 
> Signed-off-by: Sasha Levin 

We should be careful with this commit; it has caused problems for some
people.  Mathias has been working to fix them, but this commit
shouldn't go into -stable until the fixes are also ready to go.

Alan Stern



[PATCH 4.4 026/143] usb: hub: delay hub autosuspend if USB3 port is still link training

2019-02-18 Thread Greg Kroah-Hartman
4.4-stable review patch.  If anyone has any objections, please let me know.

--

[ Upstream commit e86108940e541febf35813402ff29fa6f4a9ac0b ]

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 
Acked-by: Alan Stern 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 
---
 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 be63db142d3f..3a6978458d95 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1092,6 +1092,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;
-- 
2.19.1