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