aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-s3c24xx/sleep.S
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2009-03-10 11:48:07 +0000
committerBen Dooks <ben-linux@fluff.org>2009-03-10 11:48:07 +0000
commitfff94cd9f5527bbba13aa5ea5719d16531ca8e65 (patch)
treebddf3ef686410872d8da882688229688710d574b /arch/arm/plat-s3c24xx/sleep.S
parentaa8aba6944203a17a7e941b42d8415153c649660 (diff)
downloadkernel_samsung_smdk4412-fff94cd9f5527bbba13aa5ea5719d16531ca8e65.zip
kernel_samsung_smdk4412-fff94cd9f5527bbba13aa5ea5719d16531ca8e65.tar.gz
kernel_samsung_smdk4412-fff94cd9f5527bbba13aa5ea5719d16531ca8e65.tar.bz2
[ARM] S3C: Tidy sleep code path to fix call flow
As noted by Russell King, the sleep code path is not elegant and makes use of leaving items on the stack between calls. Change the code that does the following: if (s3c_cpu_save(regs_save) == 0) { flush_cache_all(); S3C_PMDBG("preparing to sleep\n"); pm_cpu_sleep(); } to simply call s3c_cpu_save, and let that do the necessary calls to quiesce and sleep the system. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch/arm/plat-s3c24xx/sleep.S')
-rw-r--r--arch/arm/plat-s3c24xx/sleep.S25
1 files changed, 9 insertions, 16 deletions
diff --git a/arch/arm/plat-s3c24xx/sleep.S b/arch/arm/plat-s3c24xx/sleep.S
index ecb830b..e73e3b6e 100644
--- a/arch/arm/plat-s3c24xx/sleep.S
+++ b/arch/arm/plat-s3c24xx/sleep.S
@@ -43,20 +43,8 @@
/* s3c_cpu_save
*
- * save enough of the CPU state to allow us to re-start
- * pm.c code. as we store items like the sp/lr, we will
- * end up returning from this function when the cpu resumes
- * so the return value is set to mark this.
- *
- * This arangement means we avoid having to flush the cache
- * from this code.
- *
* entry:
- * r0 = pointer to save block
- *
- * exit:
- * r0 = 0 => we stored everything
- * 1 => resumed from sleep
+ * r0 = save address (virtual addr of s3c_sleep_save_phys)
*/
ENTRY(s3c_cpu_save)
@@ -71,14 +59,19 @@ ENTRY(s3c_cpu_save)
stmia r0, { r4 - r13 }
- mov r0, #0
- ldmfd sp, { r4 - r12, pc }
+ @@ write our state back to RAM
+ bl s3c_pm_cb_flushcache
+ @@ jump to final code to send system to sleep
+ ldr r0, =pm_cpu_sleep
+ @@ldr pc, [ r0 ]
+ ldr r0, [ r0 ]
+ mov pc, r0
+
@@ return to the caller, after having the MMU
@@ turned on, this restores the last bits from the
@@ stack
resume_with_mmu:
- mov r0, #1
ldmfd sp!, { r4 - r12, pc }
.ltorg