Skip to content

Commit

Permalink
ARM: 8201/1: amba: Don't unprepare the clocks if device driver wants …
Browse files Browse the repository at this point in the history
…IRQ safe runtime PM v12

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.

Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Krzysztof Kozlowski authored and Russell King committed Nov 17, 2014
1 parent f560e32 commit 5670c2a
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions drivers/amba/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,12 @@ 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) {
if (pm_runtime_is_irq_safe(dev))
clk_disable(pcdev->pclk);
else
clk_disable_unprepare(pcdev->pclk);
}

return ret;
}
Expand All @@ -107,15 +111,18 @@ static int amba_pm_runtime_resume(struct device *dev)
int ret;

if (dev->driver) {
ret = clk_prepare_enable(pcdev->pclk);
if (pm_runtime_is_irq_safe(dev))
ret = clk_enable(pcdev->pclk);
else
ret = clk_prepare_enable(pcdev->pclk);
/* Failure is probably fatal to the system, but... */
if (ret)
return ret;
}

return pm_generic_runtime_resume(dev);
}
#endif
#endif /* CONFIG_PM */

static const struct dev_pm_ops amba_pm = {
.suspend = pm_generic_suspend,
Expand Down

0 comments on commit 5670c2a

Please sign in to comment.