From: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
To: Alan Stern <stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org>
Cc: Grygorii Strashko
<grygorii.strashko-l0cyMroinI0@public.gmane.org>,
Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
"Rafael J. Wysocki"
<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Bin Liu <b-liu-l0cyMroinI0@public.gmane.org>,
Heikki Krogerus
<heikki.krogerus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Andy Shevchenko
<andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
Linux PM list <linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: MUSB peripheral DMA regression caused by driver core runtime PM change
Date: Fri, 23 Oct 2015 12:20:44 -0700 [thread overview]
Message-ID: <20151023192044.GX3078@atomide.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1510231406200.1644-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
* Alan Stern <stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org> [151023 11:27]:
> On Fri, 23 Oct 2015, Grygorii Strashko wrote:
>
> > Reviewed-by: Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org>
> >
> > It always fun when DD/PM core is updated to fix some driver/subsystem's
> > specific PM issue :(
> >
> > >
> > >> --- a/drivers/usb/musb/omap2430.c
> > >> +++ b/drivers/usb/musb/omap2430.c
> > >> @@ -391,9 +391,20 @@ static int omap2430_musb_init(struct musb *musb)
> > >> }
> > >> musb->isr = omap2430_musb_interrupt;
> > >>
> > >> + /*
> > >> + * Enable runtime PM for musb parent (this driver). We can't
> > >> + * do it earlier as struct musb is not yet allocated and we
> > >> + * need to touch the musb registers for runtime PM.
> > >> + */
> > >> + pm_runtime_enable(glue->dev);
> > >> + status = pm_runtime_get_sync(glue->dev);
> > >> + if (status < 0)
> > >> + goto err1;
> > >> +
> > >> status = pm_runtime_get_sync(dev);
> >
> > Hm. My assumption was that *Parent* device (omap2430) will be enabled
> > here :( But as I can see this will not happen:
Yes the parent child stuff here is very confusing right now :)
> > static int rpm_resume(struct device *dev, int rpmflags)
> > {...
> > if (!parent && dev->parent) {
> > /*
> > * Increment the parent's usage counter and resume it if
> > * necessary. Not needed if dev is irq-safe; then the
> > * parent is permanently resumed.
> > */
> > parent = dev->parent;
> > if (dev->power.irq_safe)
> > goto skip_parent;
> >
> > ^^^ and musb device is irq_safe :(
>
> This way of doing things looks very strange.
>
> If the omap2430 is the parent of the musb device, and
> pm_runtime_irq_safe() has been called for the musb device, then after
> that the omap2430 will never be runtime suspended. Therefore it
> doesn't matter whether you enable it for runtime PM or not.
>
> It seems to me that the real problem must be that the musb device gets
> runtime-enabled and marked irq_safe too early. These things should
> happen before the musb device gets registered and exposed to userspace,
> but not before the omap2430 parent is runtime-enabled.
>
> Thus the sequence of events should be:
>
> Allocate the musb device;
> Runtime-enable the omap2430 (since it is now safe to do so);
> Runtime-enable the musb and declare it irq_safe (this will
> automatically runtime-resume the omap2430);
> Register the musb.
>
> If things are done this way, no special action needs to be taken.
Yes good point, that requires changing the init for the whole
drivers/musb though. Also, we should reorganize the whole musb and make
the platform glue and musb core drivers completely separate using a
shared interrupt where needed.
For the regression for the -rc series? Do you see any better
alternatives to what I posted?
Regards,
Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: MUSB peripheral DMA regression caused by driver core runtime PM change
Date: Fri, 23 Oct 2015 12:20:44 -0700 [thread overview]
Message-ID: <20151023192044.GX3078@atomide.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1510231406200.1644-100000@iolanthe.rowland.org>
* Alan Stern <stern@rowland.harvard.edu> [151023 11:27]:
> On Fri, 23 Oct 2015, Grygorii Strashko wrote:
>
> > Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>
> >
> > It always fun when DD/PM core is updated to fix some driver/subsystem's
> > specific PM issue :(
> >
> > >
> > >> --- a/drivers/usb/musb/omap2430.c
> > >> +++ b/drivers/usb/musb/omap2430.c
> > >> @@ -391,9 +391,20 @@ static int omap2430_musb_init(struct musb *musb)
> > >> }
> > >> musb->isr = omap2430_musb_interrupt;
> > >>
> > >> + /*
> > >> + * Enable runtime PM for musb parent (this driver). We can't
> > >> + * do it earlier as struct musb is not yet allocated and we
> > >> + * need to touch the musb registers for runtime PM.
> > >> + */
> > >> + pm_runtime_enable(glue->dev);
> > >> + status = pm_runtime_get_sync(glue->dev);
> > >> + if (status < 0)
> > >> + goto err1;
> > >> +
> > >> status = pm_runtime_get_sync(dev);
> >
> > Hm. My assumption was that *Parent* device (omap2430) will be enabled
> > here :( But as I can see this will not happen:
Yes the parent child stuff here is very confusing right now :)
> > static int rpm_resume(struct device *dev, int rpmflags)
> > {...
> > if (!parent && dev->parent) {
> > /*
> > * Increment the parent's usage counter and resume it if
> > * necessary. Not needed if dev is irq-safe; then the
> > * parent is permanently resumed.
> > */
> > parent = dev->parent;
> > if (dev->power.irq_safe)
> > goto skip_parent;
> >
> > ^^^ and musb device is irq_safe :(
>
> This way of doing things looks very strange.
>
> If the omap2430 is the parent of the musb device, and
> pm_runtime_irq_safe() has been called for the musb device, then after
> that the omap2430 will never be runtime suspended. Therefore it
> doesn't matter whether you enable it for runtime PM or not.
>
> It seems to me that the real problem must be that the musb device gets
> runtime-enabled and marked irq_safe too early. These things should
> happen before the musb device gets registered and exposed to userspace,
> but not before the omap2430 parent is runtime-enabled.
>
> Thus the sequence of events should be:
>
> Allocate the musb device;
> Runtime-enable the omap2430 (since it is now safe to do so);
> Runtime-enable the musb and declare it irq_safe (this will
> automatically runtime-resume the omap2430);
> Register the musb.
>
> If things are done this way, no special action needs to be taken.
Yes good point, that requires changing the init for the whole
drivers/musb though. Also, we should reorganize the whole musb and make
the platform glue and musb core drivers completely separate using a
shared interrupt where needed.
For the regression for the -rc series? Do you see any better
alternatives to what I posted?
Regards,
Tony
next prev parent reply other threads:[~2015-10-23 19:20 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-21 23:41 MUSB peripheral DMA regression caused by driver core runtime PM change Tony Lindgren
2015-10-21 23:41 ` Tony Lindgren
[not found] ` <20151021234134.GQ3078-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-22 18:02 ` Tony Lindgren
2015-10-22 18:02 ` Tony Lindgren
[not found] ` <20151022180216.GT3078-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-22 23:01 ` Tony Lindgren
2015-10-22 23:01 ` Tony Lindgren
[not found] ` <20151022230133.GV3078-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-23 12:50 ` Grygorii Strashko
2015-10-23 12:50 ` Grygorii Strashko
[not found] ` <562A2D0D.3060104-l0cyMroinI0@public.gmane.org>
2015-10-23 16:43 ` Tony Lindgren
2015-10-23 16:43 ` Tony Lindgren
[not found] ` <20151023163957.GW3078-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-23 16:48 ` Felipe Balbi
2015-10-23 16:48 ` Felipe Balbi
[not found] ` <877fmdcyzi.fsf-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
2015-10-23 17:58 ` Grygorii Strashko
2015-10-23 17:58 ` Grygorii Strashko
[not found] ` <562A7549.3070400-l0cyMroinI0@public.gmane.org>
2015-10-23 18:27 ` Alan Stern
2015-10-23 18:27 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.1510231406200.1644-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2015-10-23 19:20 ` Tony Lindgren [this message]
2015-10-23 19:20 ` Tony Lindgren
2015-10-23 20:33 ` Alan Stern
2015-10-23 20:33 ` Alan Stern
2015-10-23 20:36 ` Tony Lindgren
2015-10-23 20:36 ` Tony Lindgren
2015-10-28 17:14 ` Tony Lindgren
2015-10-28 17:14 ` Tony Lindgren
[not found] ` <20151028171441.GE3078-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-28 17:16 ` Felipe Balbi
2015-10-28 17:16 ` Felipe Balbi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151023192044.GX3078@atomide.com \
--to=tony-4v6ys6ai5vpbdgjk7y7tuq@public.gmane.org \
--cc=andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=b-liu-l0cyMroinI0@public.gmane.org \
--cc=balbi-l0cyMroinI0@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=grygorii.strashko-l0cyMroinI0@public.gmane.org \
--cc=heikki.krogerus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.