RE: [PATCH] usb: host: xhci: wait USB2 port enter suspend for bus suspend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

> -----Original Message-----
> From: Jun Li <jun.li@xxxxxxx>
> Sent: Tuesday, November 3, 2020 7:23 PM
> To: mathias.nyman@xxxxxxxxx
> Cc: gregkh@xxxxxxxxxxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx; Peter Chen
> <peter.chen@xxxxxxx>
> Subject: [PATCH] usb: host: xhci: wait USB2 port enter suspend for bus suspend
> 
> If the connected USB2 device wakeup is not enabled/supported, the link state
> may still be U0 when do xhci bus suspend, after we suspend ports in U0, we
> need give time to device to enter suspend before do further suspend operations
> (e.g. system suspend), otherwise we may enter system suspend with link state
> at U0.
> 
> Signed-off-by: Li Jun <jun.li@xxxxxxx>
> ---
>  drivers/usb/host/xhci-hub.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
> index c799ca5..1e054d0 100644
> --- a/drivers/usb/host/xhci-hub.c
> +++ b/drivers/usb/host/xhci-hub.c
> @@ -1598,6 +1598,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
>  	struct xhci_hub *rhub;
>  	struct xhci_port **ports;
>  	u32 portsc_buf[USB_MAXCHILDREN];
> +	bool wait_port_enter_u3 = false;
>  	bool wake_enabled;
> 
>  	rhub = xhci_get_rhub(hcd);
> @@ -1706,12 +1707,17 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
>  				xhci_stop_device(xhci, slot_id, 1);
>  				spin_lock_irqsave(&xhci->lock, flags);
>  			}
> +			wait_port_enter_u3 = true;
>  		}
>  		writel(portsc_buf[port_index], ports[port_index]->addr);
>  	}
>  	hcd->state = HC_STATE_SUSPENDED;
>  	bus_state->next_statechange = jiffies + msecs_to_jiffies(10);
>  	spin_unlock_irqrestore(&xhci->lock, flags);
> +
> +	if (wait_port_enter_u3)
> +		usleep_range(5000, 10000);
> +
>  	return 0;
>  }
> 
> --
> 2.7.4

A gentle ping.

Thanks
Li Jun





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux