* 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;
as well as URLs for NNTP newsgroup(s).