bsps/arm: Remove optional start hook arguments

The start hook arguments are not used by a BSP.  Removing them avoids
the need for a stack during the very early system initialization.

Update #4202.
This commit is contained in:
Sebastian Huber
2020-12-23 09:19:28 +01:00
parent 76a1a53780
commit 46a3c0446f
2 changed files with 27 additions and 47 deletions
+2 -11
View File
@@ -45,15 +45,6 @@ extern "C" {
#define BSP_START_DATA_SECTION __attribute__((section(".bsp_start_data")))
/*
* Many ARM boot loaders pass arguments to loaded OS kernel
*/
#ifdef BSP_START_HOOKS_WITH_LOADER_ARGS
#define BSP_START_HOOKS_LOADER_ARGS int saved_psr, int saved_machid, int saved_dtb_adr
#else
#define BSP_START_HOOKS_LOADER_ARGS void
#endif
/**
* @brief System start entry.
*/
@@ -66,7 +57,7 @@ void _start(void);
* stack pointers are initialized but before the copying of the exception
* vectors.
*/
void bsp_start_hook_0(BSP_START_HOOKS_LOADER_ARGS);
void bsp_start_hook_0(void);
/**
* @brief Start entry hook 1.
@@ -74,7 +65,7 @@ void bsp_start_hook_0(BSP_START_HOOKS_LOADER_ARGS);
* This hook will be called from the start entry code after copying of the
* exception vectors but before the call to boot_card().
*/
void bsp_start_hook_1(BSP_START_HOOKS_LOADER_ARGS);
void bsp_start_hook_1(void);
/**
* @brief Similar to standard memcpy().
+25 -36
View File
@@ -159,12 +159,11 @@ _start:
/*
* We do not save the context since we do not return to the boot
* loader but preserve r1 and r2 to allow access to bootloader parameters
* loader. Boot loaders may pass the device tree in r2. Do not touch
* r2 until bsp_fdt_copy() is called.
*/
#ifndef BSP_START_NEEDS_REGISTER_INITIALIZATION
mov r5, r1 /* machine type number or ~0 for DT boot */
mov r6, r2 /* physical address of ATAGs or DTB */
#else /* BSP_START_NEEDS_REGISTER_INITIALIZATION */
#ifdef BSP_START_NEEDS_REGISTER_INITIALIZATION
mov r0, #0
mov r1, #0
mov r2, #0
@@ -215,8 +214,8 @@ _start:
add r3, r7, #1
mul r1, r1, r3
#endif
ldr r2, =_ISR_Stack_area_begin
add r3, r1, r2
ldr r0, =_ISR_Stack_area_begin
add r3, r1, r0
/* Save original CPSR value */
mrs r4, cpsr
@@ -235,35 +234,35 @@ _start:
mov sp, r3
sub r3, r3, r1
ldr r2, =bsp_start_hyp_vector_table_begin
mcr p15, 4, r2, c12, c0, 0
ldr r0, =bsp_start_hyp_vector_table_begin
mcr p15, 4, r0, c12, c0, 0
mov r2, #0
mcr p15, 4, r2, c1, c1, 0
mcr p15, 4, r2, c1, c1, 2
mcr p15, 4, r2, c1, c1, 3
mov r0, #0
mcr p15, 4, r0, c1, c1, 0
mcr p15, 4, r0, c1, c1, 2
mcr p15, 4, r0, c1, c1, 3
/*
* HSCTLR.TE
* optional start of hypervisor handlers in Thumb mode
* orr r0, #(1 << 30)
*/
mcr p15, 4, r2, c1, c0, 0 /* HSCTLR */
mrc p15, 4, r2, c1, c1, 1 /* HDCR */
and r2, #0x1f /* Preserve HPMN */
mcr p15, 4, r2, c1, c1, 1 /* HDCR */
mcr p15, 4, r0, c1, c0, 0 /* HSCTLR */
mrc p15, 4, r0, c1, c1, 1 /* HDCR */
and r0, #0x1f /* Preserve HPMN */
mcr p15, 4, r0, c1, c1, 1 /* HDCR */
/* Prepare SVC mode for eret */
mrs r2, cpsr
bic r2, r2, #ARM_PSR_M_MASK
orr r2, r2, #ARM_PSR_M_SVC
msr spsr_cxsf, r2
mrs r0, cpsr
bic r0, r0, #ARM_PSR_M_MASK
orr r0, r0, #ARM_PSR_M_SVC
msr spsr_cxsf, r0
adr r2, .L_hyp_to_svc_return
.inst 0xe12ef302 /* msr ELR_hyp, r2 */
mov r2, sp
ldr r0, =.L_hyp_to_svc_return
.inst 0xe12ef300 /* msr ELR_hyp, r0 */
mov r0, sp
.inst 0xe160006e /* eret */
.L_hyp_to_svc_return:
mov sp, r2
mov sp, r0
.L_skip_hyp_svc_switch:
#endif /* BSP_START_IN_HYP_SUPPORT */
@@ -320,7 +319,7 @@ _start:
cmp r7, #0
bne 1f
#endif
mov r0, r6
mov r0, r2
bl bsp_fdt_copy
1:
#endif
@@ -413,7 +412,6 @@ _start:
* instruction as a very limited address range of 2KiB. Use a bx to
* the start hook 0 address instead corrected by the address offset.
*/
ldr lr, =bsp_start_hook_0_done
mov r0, pc
ldr r1, =.Lget_absolute_pc
@@ -421,11 +419,6 @@ _start:
sub r1, r0
ldr r7, =bsp_start_hook_0
add r7, r1
mov r0, r4 /* original CPSR value */
mov r1, r5 /* machine type number or ~0 for DT boot */
mov r2, r6 /* physical address of ATAGs or DTB */
bx r7
/* Allow bsp_start_hook_0() hooks to jump to this label */
@@ -436,8 +429,6 @@ bsp_start_hook_0_done:
* vectors and the pointers to the default exception handlers.
*/
stmdb sp!, {r4, r5, r6}
ldr r0, =bsp_vector_table_begin
ldr r1, =bsp_start_vector_table_begin
cmp r0, r1
@@ -461,8 +452,6 @@ bsp_start_hook_0_done:
isb
#endif
ldmia sp!, {r0, r1, r2}
SWITCH_FROM_ARM_TO_THUMB r3
/* Branch to start hook 1 */