* Re: [PATCH] usb: musb: fix idling for suspend after disconnect interrupt [not found] <20191126034151.38154-1-tony@atomide.com> @ 2020-10-27 4:55 ` Bhushan Shah 2020-10-27 6:17 ` Tony Lindgren 0 siblings, 1 reply; 4+ messages in thread From: Bhushan Shah @ 2020-10-27 4:55 UTC (permalink / raw) To: Tony Lindgren Cc: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-omap, Merlijn Wajer, Pavel Machek, Sebastian Reichel, clayton [-- Attachment #1: Type: text/plain, Size: 2824 bytes --] Hi Tony, On Mon, Nov 25, 2019 at 07:41:51PM -0800, Tony Lindgren wrote: > When disconnected as USB B-device, we sometimes get a suspend interrupt > after disconnect interrupt. In that case we have devctl set to 99 with > VBUS still valid and musb_pm_runtime_check_session() wrongly things we > have an active session. We have no other interrupts after disconnect > coming in this case at least with the omap2430 glue. So I had been debugging a issue with musb_hrdc driver preventing a suspend on the pinephone, which is Allwinner A64 platform. Namely, if I have USB connected, and I try to suspend, it would hang until USB is disconnected. After enabling tracing, I realized that is hanging after this commit. Reverting it makes device suspend and resume correctly. Some more of debugging notes can be found at, https://gitlab.com/postmarketOS/pmaports/-/issues/839 I wonder what would be right solution here? Disable this quirk somehow for device? Regards > Let's fix the issue by checking the interrupt status again with > delayed work for the devctl 99 case. In the suspend after disconnect > case the devctl session bit has cleared by then and musb can idle. > For a typical USB B-device connect case we just continue with normal > interrupts. > > Cc: Merlijn Wajer <merlijn@wizzup.org> > Cc: Pavel Machek <pavel@ucw.cz> > Cc: Sebastian Reichel <sre@kernel.org> > Signed-off-by: Tony Lindgren <tony@atomide.com> > --- > drivers/usb/musb/musb_core.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c > --- a/drivers/usb/musb/musb_core.c > +++ b/drivers/usb/musb/musb_core.c > @@ -1943,6 +1943,9 @@ ATTRIBUTE_GROUPS(musb); > #define MUSB_QUIRK_B_INVALID_VBUS_91 (MUSB_DEVCTL_BDEVICE | \ > (2 << MUSB_DEVCTL_VBUS_SHIFT) | \ > MUSB_DEVCTL_SESSION) > +#define MUSB_QUIRK_B_DISCONNECT_99 (MUSB_DEVCTL_BDEVICE | \ > + (3 << MUSB_DEVCTL_VBUS_SHIFT) | \ > + MUSB_DEVCTL_SESSION) > #define MUSB_QUIRK_A_DISCONNECT_19 ((3 << MUSB_DEVCTL_VBUS_SHIFT) | \ > MUSB_DEVCTL_SESSION) > > @@ -1965,6 +1968,11 @@ static void musb_pm_runtime_check_session(struct musb *musb) > s = MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV | > MUSB_DEVCTL_HR; > switch (devctl & ~s) { > + case MUSB_QUIRK_B_DISCONNECT_99: > + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); > + schedule_delayed_work(&musb->irq_work, > + msecs_to_jiffies(1000)); > + break; > case MUSB_QUIRK_B_INVALID_VBUS_91: > if (musb->quirk_retries && !musb->flush_irq_work) { > musb_dbg(musb, > -- > 2.24.0 -- Bhushan Shah http://blog.bshah.in IRC Nick : bshah on Freenode GPG key fingerprint : 0AAC 775B B643 7A8D 9AF7 A3AC FE07 8411 7FBC E11D [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] usb: musb: fix idling for suspend after disconnect interrupt 2020-10-27 4:55 ` [PATCH] usb: musb: fix idling for suspend after disconnect interrupt Bhushan Shah @ 2020-10-27 6:17 ` Tony Lindgren 2020-10-27 7:59 ` Bhushan Shah 0 siblings, 1 reply; 4+ messages in thread From: Tony Lindgren @ 2020-10-27 6:17 UTC (permalink / raw) To: Bhushan Shah Cc: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-omap, Merlijn Wajer, Pavel Machek, Sebastian Reichel, clayton Hi, * Bhushan Shah <bshah@kde.org> [201027 04:55]: > Hi Tony, > > On Mon, Nov 25, 2019 at 07:41:51PM -0800, Tony Lindgren wrote: > > When disconnected as USB B-device, we sometimes get a suspend interrupt > > after disconnect interrupt. In that case we have devctl set to 99 with > > VBUS still valid and musb_pm_runtime_check_session() wrongly things we > > have an active session. We have no other interrupts after disconnect > > coming in this case at least with the omap2430 glue. > > So I had been debugging a issue with musb_hrdc driver preventing a > suspend on the pinephone, which is Allwinner A64 platform. Great. After that you might want to take a look and make sure that musb also gets idled properly during runtime with no devices connected :) > Namely, if I have USB connected, and I try to suspend, it would hang > until USB is disconnected. After enabling tracing, I realized that is > hanging after this commit. Reverting it makes device suspend and resume > correctly. > > Some more of debugging notes can be found at, > > https://gitlab.com/postmarketOS/pmaports/-/issues/839 > > I wonder what would be right solution here? Disable this quirk somehow > for device? Hmm maybe we're just missing the check for suspend here. Maybe give the following untested patch a try? I'll give it a try here too but it might be few days. Seems like we might be able to eventually simplify the suspend and quirk check stuff, but let's fix the $subject issue first. Regards, Tony 8< ---------------------- diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -2005,10 +2005,14 @@ static void musb_pm_runtime_check_session(struct musb *musb) MUSB_DEVCTL_HR; switch (devctl & ~s) { case MUSB_QUIRK_B_DISCONNECT_99: - musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); - schedule_delayed_work(&musb->irq_work, - msecs_to_jiffies(1000)); - break; + if (musb->quirk_retries && !musb->flush_irq_work) { + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); + schedule_delayed_work(&musb->irq_work, + msecs_to_jiffies(1000)); + musb->quirk_retries--; + break; + } + /* fall through */ case MUSB_QUIRK_B_INVALID_VBUS_91: if (musb->quirk_retries && !musb->flush_irq_work) { musb_dbg(musb, ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] usb: musb: fix idling for suspend after disconnect interrupt 2020-10-27 6:17 ` Tony Lindgren @ 2020-10-27 7:59 ` Bhushan Shah 2020-10-28 8:42 ` Tony Lindgren 0 siblings, 1 reply; 4+ messages in thread From: Bhushan Shah @ 2020-10-27 7:59 UTC (permalink / raw) To: Tony Lindgren Cc: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-omap, Merlijn Wajer, Pavel Machek, Sebastian Reichel, clayton [-- Attachment #1: Type: text/plain, Size: 1678 bytes --] Hello! On Tue, Oct 27, 2020 at 08:17:41AM +0200, Tony Lindgren wrote: > Hmm maybe we're just missing the check for suspend here. Maybe > give the following untested patch a try? > > I'll give it a try here too but it might be few days. Thanks for quick patch! I tested this on my device and I can confirm that it fixes issue for me. So from my side, Tested-by: Bhushan Shah <bshah@kde.org> Thanks! > Seems like we might be able to eventually simplify the suspend and > quirk check stuff, but let's fix the $subject issue first. > > Regards, > > Tony > > 8< ---------------------- > diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c > --- a/drivers/usb/musb/musb_core.c > +++ b/drivers/usb/musb/musb_core.c > @@ -2005,10 +2005,14 @@ static void musb_pm_runtime_check_session(struct musb *musb) > MUSB_DEVCTL_HR; > switch (devctl & ~s) { > case MUSB_QUIRK_B_DISCONNECT_99: > - musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); > - schedule_delayed_work(&musb->irq_work, > - msecs_to_jiffies(1000)); > - break; > + if (musb->quirk_retries && !musb->flush_irq_work) { > + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); > + schedule_delayed_work(&musb->irq_work, > + msecs_to_jiffies(1000)); > + musb->quirk_retries--; > + break; > + } > + /* fall through */ > case MUSB_QUIRK_B_INVALID_VBUS_91: > if (musb->quirk_retries && !musb->flush_irq_work) { > musb_dbg(musb, -- Bhushan Shah http://blog.bshah.in IRC Nick : bshah on Freenode GPG key fingerprint : 0AAC 775B B643 7A8D 9AF7 A3AC FE07 8411 7FBC E11D [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] usb: musb: fix idling for suspend after disconnect interrupt 2020-10-27 7:59 ` Bhushan Shah @ 2020-10-28 8:42 ` Tony Lindgren 0 siblings, 0 replies; 4+ messages in thread From: Tony Lindgren @ 2020-10-28 8:42 UTC (permalink / raw) To: Bhushan Shah Cc: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-omap, Merlijn Wajer, Pavel Machek, Sebastian Reichel, clayton * Bhushan Shah <bshah@kde.org> [201027 07:59]: > Hello! > > On Tue, Oct 27, 2020 at 08:17:41AM +0200, Tony Lindgren wrote: > > Hmm maybe we're just missing the check for suspend here. Maybe > > give the following untested patch a try? > > > > I'll give it a try here too but it might be few days. > > Thanks for quick patch! I tested this on my device and I can confirm > that it fixes issue for me. > > So from my side, > > Tested-by: Bhushan Shah <bshah@kde.org> OK good to hear :) Will post a proper patch after testing here too. Regards, Tony > > Seems like we might be able to eventually simplify the suspend and > > quirk check stuff, but let's fix the $subject issue first. > > > > Regards, > > > > Tony > > > > 8< ---------------------- > > diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c > > --- a/drivers/usb/musb/musb_core.c > > +++ b/drivers/usb/musb/musb_core.c > > @@ -2005,10 +2005,14 @@ static void musb_pm_runtime_check_session(struct musb *musb) > > MUSB_DEVCTL_HR; > > switch (devctl & ~s) { > > case MUSB_QUIRK_B_DISCONNECT_99: > > - musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); > > - schedule_delayed_work(&musb->irq_work, > > - msecs_to_jiffies(1000)); > > - break; > > + if (musb->quirk_retries && !musb->flush_irq_work) { > > + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); > > + schedule_delayed_work(&musb->irq_work, > > + msecs_to_jiffies(1000)); > > + musb->quirk_retries--; > > + break; > > + } > > + /* fall through */ > > case MUSB_QUIRK_B_INVALID_VBUS_91: > > if (musb->quirk_retries && !musb->flush_irq_work) { > > musb_dbg(musb, > > -- > Bhushan Shah > http://blog.bshah.in > IRC Nick : bshah on Freenode > GPG key fingerprint : 0AAC 775B B643 7A8D 9AF7 A3AC FE07 8411 7FBC E11D ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-10-29 2:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20191126034151.38154-1-tony@atomide.com>
2020-10-27 4:55 ` [PATCH] usb: musb: fix idling for suspend after disconnect interrupt Bhushan Shah
2020-10-27 6:17 ` Tony Lindgren
2020-10-27 7:59 ` Bhushan Shah
2020-10-28 8:42 ` Tony Lindgren
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox