summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arm/arm/locore-v6.S21
1 files changed, 10 insertions, 11 deletions
diff --git a/sys/arm/arm/locore-v6.S b/sys/arm/arm/locore-v6.S
index e690108709d1..55b4311fb935 100644
--- a/sys/arm/arm/locore-v6.S
+++ b/sys/arm/arm/locore-v6.S
@@ -367,9 +367,9 @@ VA_TO_PA_POINTER(Lpagetable, boot_pt1)
.Lstart:
- .word _edata
- .word _ebss
- .word svcstk
+ .word _edata /* Note that these three items are */
+ .word _ebss /* loaded with a single ldmia and */
+ .word svcstk /* must remain in order together. */
.Lmainreturned:
.asciz "main() returned"
@@ -425,20 +425,19 @@ ASENTRY_NP(mpentry)
bl init_mmu
- adr r1, .Lstart
- ldmia r1, {r1, r2, sp} /* Set initial stack and */
- mrc p15, 0, r0, c0, c0, 5
- and r0, r0, #15
+ adr r1, .Lstart+8 /* Get initstack pointer from */
+ ldr sp, [r1] /* startup data. */
+ mrc CP15_MPIDR(r0) /* Get processor id number. */
+ and r0, r0, #0x0f
mov r1, #INIT_ARM_STACK_SIZE
- mul r2, r1, r0
- add sp, sp, r2
- str r1, [sp]
+ mul r2, r1, r0 /* Point sp to initstack */
+ add sp, sp, r2 /* area for this processor. */
/* Switch to virtual addresses. */
ldr pc, =1f
1:
mov fp, #0 /* trace back starts here */
- bl _C_LABEL(init_secondary) /* Off we go */
+ bl _C_LABEL(init_secondary)/* Off we go, cpu id in r0. */
adr r0, .Lmpreturned
b _C_LABEL(panic)