summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile/headsmp-scu.S
diff options
context:
space:
mode:
authorMagnus Damm <damm@opensource.se>2013-06-10 11:19:46 +0200
committerSimon Horman <horms+renesas@verge.net.au>2013-06-17 09:07:27 +0200
commitbfabbcc679e86cfcaf0e7fd41563f14c29bc74d4 (patch)
treecc0c11759322852c170aea7563624006ee6770c2 /arch/arm/mach-shmobile/headsmp-scu.S
parentARM: shmobile: Add SMP boot function and argument (diff)
downloadlinux-bfabbcc679e86cfcaf0e7fd41563f14c29bc74d4.tar.xz
linux-bfabbcc679e86cfcaf0e7fd41563f14c29bc74d4.zip
ARM: shmobile: Add SCU boot function using argument
Add a shmoible_boot_scu function that assumes that the base address of the SCU is passed in r0. This code is free from inline virtual to physical address conversion. Signed-off-by: Magnus Damm <damm@opensource.se> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Diffstat (limited to 'arch/arm/mach-shmobile/headsmp-scu.S')
-rw-r--r--arch/arm/mach-shmobile/headsmp-scu.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/headsmp-scu.S b/arch/arm/mach-shmobile/headsmp-scu.S
index 7d113f898e7f..c5c9106bf6c4 100644
--- a/arch/arm/mach-shmobile/headsmp-scu.S
+++ b/arch/arm/mach-shmobile/headsmp-scu.S
@@ -51,6 +51,19 @@ ENTRY(shmobile_secondary_vector_scu)
2: .long shmobile_scu_base - PAGE_OFFSET + PLAT_PHYS_OFFSET
ENDPROC(shmobile_secondary_vector_scu)
+ENTRY(shmobile_boot_scu)
+ @ r0 = SCU base address
+ mrc p15, 0, r1, c0, c0, 5 @ read MIPDR
+ and r1, r1, #3 @ mask out cpu ID
+ lsl r1, r1, #3 @ we will shift by cpu_id * 8 bits
+ ldr r2, [r0, #8] @ SCU Power Status Register
+ mov r3, #3
+ bic r2, r2, r3, lsl r1 @ Clear bits of our CPU (Run Mode)
+ str r2, [r0, #8] @ write back
+
+ b shmobile_invalidate_start
+ENDPROC(shmobile_boot_scu)
+
.text
.globl shmobile_scu_base
shmobile_scu_base: