Explorar o código

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.
Grissiom %!s(int64=11) %!d(string=hai) anos
pai
achega
a8520ed383
Modificáronse 1 ficheiros con 7 adicións e 11 borrados
  1. 7 11
      libcpu/arm/cortex-r4/start_gcc.S

+ 7 - 11
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: