diff options
-rw-r--r-- | arch/arm/mach-omap2/pm24xx.c | 12 | ||||
-rw-r--r-- | arch/arm/mach-omap2/sleep24xx.S | 19 |
2 files changed, 6 insertions, 25 deletions
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index c333fa6dffa8..8914b9e32ee7 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
@@ -54,7 +54,6 @@ | |||
54 | #include "powerdomain.h" | 54 | #include "powerdomain.h" |
55 | #include "clockdomain.h" | 55 | #include "clockdomain.h" |
56 | 56 | ||
57 | static void (*omap2_sram_idle)(void); | ||
58 | static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, | 57 | static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, |
59 | void __iomem *sdrc_power); | 58 | void __iomem *sdrc_power); |
60 | 59 | ||
@@ -172,6 +171,8 @@ static int omap2_allow_mpu_retention(void) | |||
172 | 171 | ||
173 | static void omap2_enter_mpu_retention(void) | 172 | static void omap2_enter_mpu_retention(void) |
174 | { | 173 | { |
174 | const int zero = 0; | ||
175 | |||
175 | /* Putting MPU into the WFI state while a transfer is active | 176 | /* Putting MPU into the WFI state while a transfer is active |
176 | * seems to cause the I2C block to timeout. Why? Good question. */ | 177 | * seems to cause the I2C block to timeout. Why? Good question. */ |
177 | if (omap2_i2c_active()) | 178 | if (omap2_i2c_active()) |
@@ -196,7 +197,8 @@ static void omap2_enter_mpu_retention(void) | |||
196 | OMAP2_PM_PWSTCTRL); | 197 | OMAP2_PM_PWSTCTRL); |
197 | } | 198 | } |
198 | 199 | ||
199 | omap2_sram_idle(); | 200 | /* WFI */ |
201 | asm("mcr p15, 0, %0, c7, c0, 4" : : "r" (zero) : "memory", "cc"); | ||
200 | } | 202 | } |
201 | 203 | ||
202 | static int omap2_can_sleep(void) | 204 | static int omap2_can_sleep(void) |
@@ -356,11 +358,9 @@ int __init omap2_pm_init(void) | |||
356 | /* | 358 | /* |
357 | * We copy the assembler sleep/wakeup routines to SRAM. | 359 | * We copy the assembler sleep/wakeup routines to SRAM. |
358 | * These routines need to be in SRAM as that's the only | 360 | * These routines need to be in SRAM as that's the only |
359 | * memory the MPU can see when it wakes up. | 361 | * memory the MPU can see when it wakes up after the entire |
362 | * chip enters idle. | ||
360 | */ | 363 | */ |
361 | omap2_sram_idle = omap_sram_push(omap24xx_idle_loop_suspend, | ||
362 | omap24xx_idle_loop_suspend_sz); | ||
363 | |||
364 | omap2_sram_suspend = omap_sram_push(omap24xx_cpu_suspend, | 364 | omap2_sram_suspend = omap_sram_push(omap24xx_cpu_suspend, |
365 | omap24xx_cpu_suspend_sz); | 365 | omap24xx_cpu_suspend_sz); |
366 | 366 | ||
diff --git a/arch/arm/mach-omap2/sleep24xx.S b/arch/arm/mach-omap2/sleep24xx.S index ce0ccd26efbd..1d3cb25c9629 100644 --- a/arch/arm/mach-omap2/sleep24xx.S +++ b/arch/arm/mach-omap2/sleep24xx.S | |||
@@ -37,25 +37,6 @@ | |||
37 | .text | 37 | .text |
38 | 38 | ||
39 | /* | 39 | /* |
40 | * Forces OMAP into idle state | ||
41 | * | ||
42 | * omap24xx_idle_loop_suspend() - This bit of code just executes the WFI | ||
43 | * for normal idles. | ||
44 | * | ||
45 | * Note: This code get's copied to internal SRAM at boot. When the OMAP | ||
46 | * wakes up it continues execution at the point it went to sleep. | ||
47 | */ | ||
48 | .align 3 | ||
49 | ENTRY(omap24xx_idle_loop_suspend) | ||
50 | stmfd sp!, {r0, lr} @ save registers on stack | ||
51 | mov r0, #0 @ clear for mcr setup | ||
52 | mcr p15, 0, r0, c7, c0, 4 @ wait for interrupt | ||
53 | ldmfd sp!, {r0, pc} @ restore regs and return | ||
54 | |||
55 | ENTRY(omap24xx_idle_loop_suspend_sz) | ||
56 | .word . - omap24xx_idle_loop_suspend | ||
57 | |||
58 | /* | ||
59 | * omap24xx_cpu_suspend() - Forces OMAP into deep sleep state by completing | 40 | * omap24xx_cpu_suspend() - Forces OMAP into deep sleep state by completing |
60 | * SDRC shutdown then ARM shutdown. Upon wake MPU is back on so just restore | 41 | * SDRC shutdown then ARM shutdown. Upon wake MPU is back on so just restore |
61 | * SDRC. | 42 | * SDRC. |