PM / Clocks: Only disable enabled clocks in pm_clk_suspend()
Subsystems (5)
PATCH 1/1 PM / Clocks: Only disable enabled clocks in pm_clk_suspend()
From: Magnus Damm <[email protected]>
Refrain from running clk_disable() on clocks that have not been enabled. A typical case when this can happen is during Suspend-to-RAM for devices that have no driver associated with them. In such case the clock may be in default ACQUIRED state.
Without this patch the sh7372 Mackerel board crashes in __clk_disable() during Suspend-to-RAM with:
"Trying to disable clock 0xdeadbeef with 0 usecount" This happens for the CEU device which is added during boot. The test case has no CEU driver included in the kernel configuration. Needed for v3.2-rc1.
---
drivers/base/power/clock_ops.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/base/power/clock_ops.c +2 -1
@@ -229,7 +229,8 @@ int pm_clk_suspend(struct device *dev)list_for_each_entry_reverse (ce, &psd->clock_list, node) {if (ce->status <PCE_STATUS_ERROR ) { -clk_disable (ce->clk); +if (ce->status =PCE_STATUS_ENABLED ) +clk_disable (ce->clk); ce->status =PCE_STATUS_ACQUIRED ; } }
Rafael J. Wysocki
AppliedQuoted 8 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Refrain from running
clk_disable()on clocks that have not been enabled. A typical case when this can happen is during Suspend-to-RAM for devices that have no driver associated with them. In such case the clock may be in default ACQUIRED state.
Quoted 8 lines
Without this patch the sh7372 Mackerel board crashes in
__clk_disable()during Suspend-to-RAM with:
"Trying to disable clock0xdeadbeefwith 0 usecount" This happens for the CEU device which is added during boot. The test case has no CEU driver included in the kernel configuration. Needed for v3.2-rc1.Signed-off-by Magnus Damm <[email protected]>
Applied to linux-pm/pm-fixes.
Thanks,
Rafael
Quoted 23 lines
---
drivers/base/power/clock_ops.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)drivers/base/power/clock_ops.c +2
-2@@ -229,7 +229,8 @@ int pm_clk_suspend(struct device *dev)list_for_each_entry_reverse (ce, &psd->clock_list, node) {if (ce->status <PCE_STATUS_ERROR ) { -clk_disable (ce->clk); +if (ce->status =PCE_STATUS_ENABLED ) +clk_disable (ce->clk); ce->status =PCE_STATUS_ACQUIRED ; } } --To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html