From a8520ed383e9557993d647f477ecb4d6658c3ccd Mon Sep 17 00:00:00 2001 From: Grissiom Date: Sun, 17 Nov 2013 12:13:25 +0800 Subject: [PATCH] cortex-r4: let svc mode reuse the stack of IRQ on startup As the svc stack is the stack of threads, there is no need to allocate a separate stack for the startup. Reuse the IRQ stack should be OK. Tested on rm48 board. --- libcpu/arm/cortex-r4/start_gcc.S | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/libcpu/arm/cortex-r4/start_gcc.S b/libcpu/arm/cortex-r4/start_gcc.S index 20a1ccfc0..3d679d0a2 100644 --- a/libcpu/arm/cortex-r4/start_gcc.S +++ b/libcpu/arm/cortex-r4/start_gcc.S @@ -18,11 +18,10 @@ .equ F_Bit, 0x40 @ when F bit is set, FIQ is disabled .equ UND_Stack_Size, 0x00000000 -.equ SVC_Stack_Size, 0x00000100 +.equ SVC_Stack_Size, 0x00000000 .equ ABT_Stack_Size, 0x00000000 -.equ FIQ_Stack_Size, 0x00000000 -.equ IRQ_Stack_Size, 0x00000100 -.equ USR_Stack_Size, 0x00000100 +.equ FIQ_Stack_Size, 0x00001000 +.equ IRQ_Stack_Size, 0x00001000 .section .bss.noinit /* stack */ @@ -63,6 +62,9 @@ _reset: @ Initialize Stack Pointers ldr r0, =stack_top + @ Set the startup stack for svc + mov sp, r0 + @ Enter Undefined Instruction Mode and set its Stack Pointer msr cpsr_c, #Mode_UND|I_Bit|F_Bit mov sp, r0 @@ -83,14 +85,8 @@ _reset: mov sp, r0 sub r0, r0, #IRQ_Stack_Size - @ Enter Supervisor Mode and set its Stack Pointer + @ Switch back to SVC msr cpsr_c, #Mode_SVC|I_Bit|F_Bit - mov sp, r0 - sub r0, r0, #SVC_Stack_Size - - @ Enter User Mode and set its Stack Pointer - mov sp, r0 - sub sl, sp, #USR_Stack_Size bl next1 next1: -- GitLab