All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Vinod Koul <vinod.koul@intel.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	dmaengine@vger.kernel.org, Grant Likely <grant.likely@linaro.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Michal Simek <michal.simek@xilinx.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
	Randy Dunlap <rdunlap@infradead.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Subject: Re: [PATCH v5 3/4] amba: Don't unprepare the clocks if device driver wants IRQ safe runtime PM
Date: Wed, 17 Sep 2014 19:59:11 +0200	[thread overview]
Message-ID: <CAPDyKFrbC6Qh1mENctZQo1y3Mb3w3fSE8X3iYnChrmxhUpBXkQ@mail.gmail.com> (raw)
In-Reply-To: <20140916195255.GN12361@n2100.arm.linux.org.uk>

On 16 September 2014 21:52, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Tue, Sep 16, 2014 at 08:25:25PM +0200, Ulf Hansson wrote:
>> On 16 September 2014 14:59, Krzysztof Kozlowski <k.kozlowski@samsung.com> wrote:
>> > The AMBA bus driver defines runtime Power Management functions which
>> > disable and unprepare AMBA bus clock. This is problematic for runtime PM
>> > because unpreparing a clock might sleep so it is not interrupt safe.
>> >
>> > However some drivers may want to implement runtime PM functions in
>> > interrupt-safe way (see pm_runtime_irq_safe()). In such case the AMBA
>> > bus driver should only disable/enable the clock in runtime suspend and
>> > resume callbacks.
>> >
>> > Detect the device driver behavior after calling its probe function and
>> > store it. During runtime suspend/resume deal with clocks according to
>> > stored value.
>> >
>> > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
>> > ---
>> >  drivers/amba/bus.c       | 29 +++++++++++++++++++++++++----
>> >  include/linux/amba/bus.h |  1 +
>> >  2 files changed, 26 insertions(+), 4 deletions(-)
>> >
>> > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
>> > index 3cf61a127ee5..e8fd5706954f 100644
>> > --- a/drivers/amba/bus.c
>> > +++ b/drivers/amba/bus.c
>> > @@ -94,8 +94,18 @@ static int amba_pm_runtime_suspend(struct device *dev)
>> >         struct amba_device *pcdev = to_amba_device(dev);
>> >         int ret = pm_generic_runtime_suspend(dev);
>> >
>> > -       if (ret == 0 && dev->driver)
>> > -               clk_disable_unprepare(pcdev->pclk);
>> > +       if (ret == 0 && dev->driver) {
>> > +               /*
>> > +                * Drivers should not change pm_runtime_irq_safe()
>> > +                * after probe.
>> > +                */
>> > +               WARN_ON(pcdev->irq_safe != pm_runtime_is_irq_safe(dev));
>>
>> Do we really need a WARN_ON here. Driver shouldn't update their
>> irq_safe value dynamically, right!?
>
> The driver shouldn't update it dynamically, and this makes sure *that*
> is enforced since we end up depending on that property.  Hence the
> check is sensible (and I even suggested it.)

The WARN_ON could be nice to have, but I think this is a task for PM
core to handle.

Copying flags shouldn't be needed for each an every instance of a
driver/bus that manage irq_safe devices. That's my main point.

>
>> > +
>> > +               if (pcdev->irq_safe)
>> > +                       clk_disable(pcdev->pclk);
>>
>> Since the irq_safe flag, could be considered as a special case, an
>> option for these cases - could be to leave the clock to be entirely
>> handled from the driver's runtime PM callback instead.
>
> Too many sub-clauses to make much sense of that statement.

Sorry, agree. :-)

>
> I don't want drivers messing around with this stuff.  This is the /bus/
> clock, not a device specific clock.

For irq_safe devices, driver's will need to handle the
clk_prepare|unprepare during system PM anyway. That's the reason to
why I suggested this.

On the other hand I agree with you, it's a bus clock...

Kind regards
Uffe

  reply	other threads:[~2014-09-17 17:59 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-16 12:59 [PATCH v5 0/4] amba/dma: pl330: add Power Management support Krzysztof Kozlowski
2014-09-16 12:59 ` [PATCH v5 1/4] PM / Runtime: Add getter for quering the IRQ safe option Krzysztof Kozlowski
2014-09-16 18:27   ` Ulf Hansson
2014-09-16 12:59 ` [PATCH v5 2/4] amba: Add helper macros for (un)preparing AMBA clock Krzysztof Kozlowski
2014-09-16 12:59 ` [PATCH v5 3/4] amba: Don't unprepare the clocks if device driver wants IRQ safe runtime PM Krzysztof Kozlowski
2014-09-16 18:25   ` Ulf Hansson
2014-09-16 19:52     ` Russell King - ARM Linux
2014-09-17 17:59       ` Ulf Hansson [this message]
2014-09-16 12:59 ` [PATCH v5 4/4] dma: pl330: add Power Management support Krzysztof Kozlowski
2014-09-16 16:18 ` [PATCH v5 0/4] amba/dma: " Russell King - ARM Linux
2014-09-16 16:28   ` Krzysztof Kozlowski

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=CAPDyKFrbC6Qh1mENctZQo1y3Mb3w3fSE8X3iYnChrmxhUpBXkQ@mail.gmail.com \
    --to=ulf.hansson@linaro.org \
    --cc=b.zolnierkie@samsung.com \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=k.kozlowski@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=lars@metafoo.de \
    --cc=len.brown@intel.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=michal.simek@xilinx.com \
    --cc=pavel@ucw.cz \
    --cc=rdunlap@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=stern@rowland.harvard.edu \
    --cc=vinod.koul@intel.com \
    /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.