summaryrefslogtreecommitdiffstats
path: root/bsps/arm/shared/start/start.S
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-18 09:01:27 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-18 09:01:27 +0100
commitbdec62c4d5aa25e5a98b9fafe78936a7beb96a6e (patch)
treea8c538046b5003940b8b0bd23d6a361b76441305 /bsps/arm/shared/start/start.S
parentbsp/altera-cyclone-v: Use FDT for clock frequency (diff)
downloadrtems-bdec62c4d5aa25e5a98b9fafe78936a7beb96a6e.tar.bz2
bsps/arm: Move device tree copy
Move device tree copy operation after the mode initialization so that bsp_fdt_copy() uses the initialization stack and not the stack provided up by the boot loader.
Diffstat (limited to 'bsps/arm/shared/start/start.S')
-rw-r--r--bsps/arm/shared/start/start.S47
1 files changed, 24 insertions, 23 deletions
diff --git a/bsps/arm/shared/start/start.S b/bsps/arm/shared/start/start.S
index 4893564cc4..80b7d44dbe 100644
--- a/bsps/arm/shared/start/start.S
+++ b/bsps/arm/shared/start/start.S
@@ -155,16 +155,6 @@ _start:
and r7, #0xff
#endif
-#ifdef BSP_START_COPY_FDT_FROM_U_BOOT
-#ifdef RTEMS_SMP
- cmp r7, #0
- bne 1f
-#endif
- mov r0, r6
- bl bsp_fdt_copy
-1:
-#endif
-
#ifdef RTEMS_SMP
/*
* Get current per-CPU control and store it in PL1 only Thread ID
@@ -179,11 +169,11 @@ _start:
/* Calculate interrupt stack area end for current processor */
ldr r1, =_ISR_Stack_size
#ifdef RTEMS_SMP
- add r7, #1
- mul r1, r1, r7
+ add r3, r7, #1
+ mul r1, r1, r3
#endif
ldr r2, =_ISR_Stack_area_begin
- add r7, r1, r2
+ add r3, r1, r2
/* Save original CPSR value */
mrs r4, cpsr
@@ -198,8 +188,8 @@ _start:
/* Boot loader starts kernel in HYP mode, switch to SVC necessary */
ldr r1, =bsp_stack_hyp_size
- mov sp, r7
- sub r7, r7, r1
+ mov sp, r3
+ sub r3, r3, r1
bl bsp_start_arm_drop_hyp_mode
.L_skip_hyp_svc_switch:
@@ -210,8 +200,8 @@ _start:
mov r0, #(ARM_PSR_M_FIQ | ARM_PSR_I | ARM_PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_fiq_size
- mov sp, r7
- sub r7, r7, r1
+ mov sp, r3
+ sub r3, r3, r1
#ifdef BSP_START_NEEDS_REGISTER_INITIALIZATION
bl bsp_start_init_registers_banked_fiq
@@ -221,20 +211,20 @@ _start:
mov r0, #(ARM_PSR_M_ABT | ARM_PSR_I | ARM_PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_abt_size
- mov sp, r7
- sub r7, r7, r1
+ mov sp, r3
+ sub r3, r3, r1
/* Enter UND mode and set up the UND stack pointer */
mov r0, #(ARM_PSR_M_UND | ARM_PSR_I | ARM_PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_und_size
- mov sp, r7
- sub r7, r7, r1
+ mov sp, r3
+ sub r3, r3, r1
/* Enter IRQ mode and set up the IRQ stack pointer */
mov r0, #(ARM_PSR_M_IRQ | ARM_PSR_I | ARM_PSR_F)
msr cpsr, r0
- mov sp, r7
+ mov sp, r3
/*
* Enter SVC mode and set up the SVC stack pointer, reuse IRQ stack
@@ -242,10 +232,21 @@ _start:
*/
mov r0, #(ARM_PSR_M_SVC | ARM_PSR_I | ARM_PSR_F)
msr cpsr, r0
- mov sp, r7
+ mov sp, r3
/* Stay in SVC mode */
+ /* Copy device tree from boot loader */
+#ifdef BSP_START_COPY_FDT_FROM_U_BOOT
+#ifdef RTEMS_SMP
+ cmp r7, #0
+ bne 1f
+#endif
+ mov r0, r6
+ bl bsp_fdt_copy
+1:
+#endif
+
#ifdef ARM_MULTILIB_VFP
#ifdef ARM_MULTILIB_HAS_CPACR
/* Read CPACR */