diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-30 03:45:49 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-30 03:47:35 -0400 |
commit | cbe263497def23befb6f475977661bae5d1f82e4 (patch) | |
tree | 61d94af049ab285f0067c4a8e8a92c5763f1bd6f /arch/arm/mach-omap2/pm34xx.c | |
parent | 46e130d298a384b677426e19faec311749ff2677 (diff) |
ARM: pm: omap3: move saving of the auxiliary control registers to C
Move the saving of the auxiliary control registers into C; there's
no need for this to be in assembly code. This results in less
assembly code to deal with in OMAP.
Kevin tested full-chip retention and off on 3430/n900, 3530/Overo and
3630/Zoom3.
Tested-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-omap2/pm34xx.c')
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index e1c79bae7670..7238a63e24e2 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -306,9 +306,24 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id) | |||
306 | return IRQ_HANDLED; | 306 | return IRQ_HANDLED; |
307 | } | 307 | } |
308 | 308 | ||
309 | static void omap34xx_save_context(u32 *save) | ||
310 | { | ||
311 | u32 val; | ||
312 | |||
313 | /* Read Auxiliary Control Register */ | ||
314 | asm("mrc p15, 0, %0, c1, c0, 1" : "=r" (val)); | ||
315 | *save++ = 1; | ||
316 | *save++ = val; | ||
317 | |||
318 | /* Read L2 AUX ctrl register */ | ||
319 | asm("mrc p15, 1, %0, c9, c0, 2" : "=r" (val)); | ||
320 | *save++ = 1; | ||
321 | *save++ = val; | ||
322 | } | ||
323 | |||
309 | static void omap34xx_do_sram_idle(unsigned long save_state) | 324 | static void omap34xx_do_sram_idle(unsigned long save_state) |
310 | { | 325 | { |
311 | omap34xx_cpu_suspend(omap3_arm_context, save_state); | 326 | omap34xx_cpu_suspend(save_state); |
312 | } | 327 | } |
313 | 328 | ||
314 | void omap_sram_idle(void) | 329 | void omap_sram_idle(void) |
@@ -408,6 +423,8 @@ void omap_sram_idle(void) | |||
408 | * get saved. The rest is placed on the stack, and restored | 423 | * get saved. The rest is placed on the stack, and restored |
409 | * from there before resuming. | 424 | * from there before resuming. |
410 | */ | 425 | */ |
426 | if (save_state) | ||
427 | omap34xx_save_context(omap3_arm_context); | ||
411 | if (save_state == 1 || save_state == 3) | 428 | if (save_state == 1 || save_state == 3) |
412 | cpu_suspend(save_state, omap34xx_do_sram_idle); | 429 | cpu_suspend(save_state, omap34xx_do_sram_idle); |
413 | else | 430 | else |