summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVishwanath BS <vishwanath.bs@ti.com>2011-02-15 21:24:46 +0530
committerNicolas Pitre <nicolas.pitre@linaro.org>2011-02-28 15:37:01 -0500
commit7bc7f2b6f1f0766e4a4d635df717975eff3c4d85 (patch)
tree6bb3ef27875e9818b152d937e53fc2010d00c78f
parentc7e88a87fa8e2e853b180bdadf2d7f5456f8c9d6 (diff)
OMAP3 PM: Deny clock gating only for safe state
Currently clock gating for MPU and core are denied whenever C1 state is selected. It should be denied only when safe state is selected. Signed-off-by: Vishwanath BS <vishwanath.bs@ti.com> Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
-rw-r--r--arch/arm/mach-omap2/cpuidle34xx.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c
index f7b22a16f38..376f6be0517 100644
--- a/arch/arm/mach-omap2/cpuidle34xx.c
+++ b/arch/arm/mach-omap2/cpuidle34xx.c
@@ -139,19 +139,9 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
if (omap_irq_pending() || need_resched())
goto return_sleep_time;
- if (cx->type == OMAP3_STATE_C1) {
- pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle);
- pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle);
- }
-
/* Execute ARM wfi */
omap_sram_idle();
- if (cx->type == OMAP3_STATE_C1) {
- pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle);
- pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle);
- }
-
return_sleep_time:
getnstimeofday(&ts_postidle);
ts_idle = timespec_sub(ts_postidle, ts_preidle);
@@ -283,8 +273,18 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev,
select_state:
dev->last_state = new_state;
+
+ if (new_state == dev->safe_state) {
+ pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle);
+ pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle);
+ }
ret = omap3_enter_idle(dev, new_state);
+ if (new_state == dev->safe_state) {
+ pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle);
+ pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle);
+ }
+
/* Restore original PER state if it was modified */
if (per_next_state != per_saved_state)
pwrdm_set_next_pwrst(per_pd, per_saved_state);