lkml.org 
[lkml]   [2014]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v9 2/4] amba: Don't unprepare the clocks if device driver wants IRQ safe runtime PM
    From
    Date
    On wto, 2014-11-04 at 21:18 +0100, Pavel Machek wrote:
    > On Tue 2014-11-04 13:52:48, Krzysztof Kozlowski 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.
    >
    >
    >
    > > /*
    > > * Hooks to provide runtime PM of the pclk (bus clock). It is safe to
    > > * enable/disable the bus clock at runtime PM suspend/resume as this
    > > @@ -95,8 +102,14 @@ 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) {
    > > + pcdev->irq_safe = get_pm_runtime_irq_safe(dev);
    > > +
    > > + if (pcdev->irq_safe)
    > > + clk_disable(pcdev->pclk);
    > > + else
    > > + clk_disable_unprepare(pcdev->pclk);
    > > + }
    >
    > So you can handle the case of !pcdev->irq_safe. What is the penalty
    > for always assuming !pcdev->irq_safe?

    The penalty (for pl330 driver) would be that the runtime resume/suspend
    cannot happen from atomic context
    => pm_runtime_get_sync() cannot be called from atomic context
    => complete rework of runtime PM for pl330 DMA driver because now
    one of pm_runtime_get_sync() calls is in device_issue_pending
    callback which may not sleep. And by "rework" I also mean that
    I do not know how to do this... yet.

    Best regards,
    Krzysztof







    \
     
     \ /
      Last update: 2014-11-05 10:21    [W:2.260 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site