Message ID | 20240901162425.5103-1-00107082@163.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | usb: xhci: wait for controller ready when resume with reinit_xhc | expand |
Oops... Just find out the warning " ep_81: PM: parent 3-1.1:1.1 should not be sleeping" shows up when I suspend my system with USB camera on, and this patch could not fix it. Please ignore the patch, sorry bothering... David At 2024-09-02 00:24:25, "David Wang" <00107082@163.com> wrote: >When resume system with reinit_xhc true, PM would report kernel >warning about device parent: > > >usb 3-1.1: reset high-speed USB device number 4 using xhci_hcd > >.. > >ep_81: PM: parent 3-1.1:1.1 should not be sleeping > >Move the code waiting for controller ready out, and make it >carry out work no matter reinit_xhc is true or false. >The error is ignored when reinit_xhc is true. > >Signed-off-by: David Wang <00107082@163.com> >--- > drivers/usb/host/xhci.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > >diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c >index efdf4c228b8c..8aeb1b34cdbf 100644 >--- a/drivers/usb/host/xhci.c >+++ b/drivers/usb/host/xhci.c >@@ -1032,13 +1032,15 @@ int xhci_resume(struct xhci_hcd *xhci, pm_message_t msg) > if (hibernated || xhci->quirks & XHCI_RESET_ON_RESUME || xhci->broken_suspend) > reinit_xhc = true; > >+ /* >+ * Some controllers might lose power during suspend, so wait >+ * for controller not ready bit to clear, just as in xHC init. >+ * Ignore retval if reinit_xhc is true, since the device would >+ * be reinited. >+ */ >+ retval = xhci_handshake(&xhci->op_regs->status, >+ STS_CNR, 0, 10 * 1000 * 1000); > if (!reinit_xhc) { >- /* >- * Some controllers might lose power during suspend, so wait >- * for controller not ready bit to clear, just as in xHC init. >- */ >- retval = xhci_handshake(&xhci->op_regs->status, >- STS_CNR, 0, 10 * 1000 * 1000); > if (retval) { > xhci_warn(xhci, "Controller not ready at resume %d\n", > retval); >-- >2.39.2
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index efdf4c228b8c..8aeb1b34cdbf 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -1032,13 +1032,15 @@ int xhci_resume(struct xhci_hcd *xhci, pm_message_t msg) if (hibernated || xhci->quirks & XHCI_RESET_ON_RESUME || xhci->broken_suspend) reinit_xhc = true; + /* + * Some controllers might lose power during suspend, so wait + * for controller not ready bit to clear, just as in xHC init. + * Ignore retval if reinit_xhc is true, since the device would + * be reinited. + */ + retval = xhci_handshake(&xhci->op_regs->status, + STS_CNR, 0, 10 * 1000 * 1000); if (!reinit_xhc) { - /* - * Some controllers might lose power during suspend, so wait - * for controller not ready bit to clear, just as in xHC init. - */ - retval = xhci_handshake(&xhci->op_regs->status, - STS_CNR, 0, 10 * 1000 * 1000); if (retval) { xhci_warn(xhci, "Controller not ready at resume %d\n", retval);