summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-s5pv210/sleep.S
diff options
context:
space:
mode:
authorRussell King2011-06-13 16:58:34 +0200
committerRussell King2011-06-24 09:48:43 +0200
commite8856a8797e76e6883ae81f8f9ecbb231cc535df (patch)
treef256d1100f2458e01ca2680052466b24bbabe664 /arch/arm/mach-s5pv210/sleep.S
parentARM: pm: move sa1100 to use proper suspend func arg0 (diff)
downloadkernel-qcow2-linux-e8856a8797e76e6883ae81f8f9ecbb231cc535df.tar.gz
kernel-qcow2-linux-e8856a8797e76e6883ae81f8f9ecbb231cc535df.tar.xz
kernel-qcow2-linux-e8856a8797e76e6883ae81f8f9ecbb231cc535df.zip
ARM: pm: convert cpu_suspend() to a normal function
cpu_suspend() has a weird calling method which makes it only possible to call from assembly code: it returns with a modified stack pointer to finish the suspend, but on resume, it 'returns' via a provided pointer. We can make cpu_suspend() appear to be a normal function merely by swapping the resume pointer argument and the link register. Do so, and update all callers to take account of this more traditional behaviour. Acked-by: Frank Hofmann <frank.hofmann@tomtom.com> Tested-by: Kevin Hilman <khilman@ti.com> Acked-by: Jean Pihet <j-pihet@ti.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-s5pv210/sleep.S')
-rw-r--r--arch/arm/mach-s5pv210/sleep.S7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/arm/mach-s5pv210/sleep.S b/arch/arm/mach-s5pv210/sleep.S
index a3d649466fb1..1182fc848a79 100644
--- a/arch/arm/mach-s5pv210/sleep.S
+++ b/arch/arm/mach-s5pv210/sleep.S
@@ -41,16 +41,15 @@
ENTRY(s3c_cpu_save)
stmfd sp!, { r3 - r12, lr }
- ldr r3, =resume_with_mmu
+ adr r3, BSYM(s5pv210_finish_suspend)
bl cpu_suspend
+ ldmfd sp!, { r3 - r12, pc }
+s5pv210_finish_suspend:
ldr r0, =pm_cpu_sleep
ldr r0, [ r0 ]
mov pc, r0
-resume_with_mmu:
- ldmfd sp!, { r3 - r12, pc }
-
.ltorg
/* sleep magic, to allow the bootloader to check for an valid