Re: [PATCH v2 1/3] xhci: Ensure link state is U3 after setting USB_SS_PORT_LS_U3

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

 




> On Feb 5, 2020, at 19:22, Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx> wrote:
> 
> The xHCI spec doesn't specify the upper bound of U3 transition time. For
> some devices 20ms is not enough, so we need to make sure the link state
> is in U3 before further actions.
> 
> I've tried to use U3 Entry Capability by setting U3 Entry Enable in
> config register, however the port change event for U3 transition
> interrupts the system suspend process.
> 
> For now let's use the less ideal method by polling PLS.
> 
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>

Please ignore this series. Some patches are missing changelog, will resend one.

Kai-Heng

> ---
> v2:
> - Remove some redundant debug messages.
> - Use msleep loop outside if spinlock to stop pegging CPU.
> 
> drivers/usb/host/xhci-hub.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
> index 7a3a29e5e9d2..d3c5bcf76755 100644
> --- a/drivers/usb/host/xhci-hub.c
> +++ b/drivers/usb/host/xhci-hub.c
> @@ -1313,7 +1313,16 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
> 			xhci_set_link_state(xhci, ports[wIndex], link_state);
> 
> 			spin_unlock_irqrestore(&xhci->lock, flags);
> -			msleep(20); /* wait device to enter */
> +			if (link_state == USB_SS_PORT_LS_U3) {
> +				int retries = 10;
> +
> +				while (retries--) {
> +					msleep(10); /* wait device to enter */
> +					temp = readl(ports[wIndex]->addr);
> +					if ((temp & PORT_PLS_MASK) == XDEV_U3)
> +						break;
> +				}
> +			}
> 			spin_lock_irqsave(&xhci->lock, flags);
> 
> 			temp = readl(ports[wIndex]->addr);
> -- 
> 2.17.1
> 




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

  Powered by Linux