summaryrefslogtreecommitdiff
path: root/firmware/target/arm/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/crt0.S')
-rw-r--r--firmware/target/arm/crt0.S29
1 files changed, 20 insertions, 9 deletions
diff --git a/firmware/target/arm/crt0.S b/firmware/target/arm/crt0.S
index f75f37006d..7befecb593 100644
--- a/firmware/target/arm/crt0.S
+++ b/firmware/target/arm/crt0.S
@@ -100,17 +100,23 @@ newstart:
100 strhi r4, [r2], #4 100 strhi r4, [r2], #4
101 bhi 1b 101 bhi 1b
102 102
103 /* Set up stack for IRQ mode */ 103 /* Set up stack for IRQ mode */
104 msr cpsr_c, #0xd2 104 msr cpsr_c, #0xd2
105 ldr sp, =irq_stack 105 ldr sp, =irq_stack
106 106
107 /* Set up stack for FIQ mode */
108 msr cpsr_c, #0xd1
109 ldr sp, =fiq_stack
110
111 /* Let svc, abort and undefined modes use irq stack */
112 msr cpsr_c, #0xd3 107 msr cpsr_c, #0xd3
108#if CONFIG_CPU == AS3525 || CONFIG_CPU == AS3525v2
109 /* Let abort and undefined modes use irq stack */
110 /* svc stack is for interrupt processing */
111 ldr sp, =svc_stack
112#else
113 /* Let svc, abort and undefined modes use irq stack */
113 ldr sp, =irq_stack 114 ldr sp, =irq_stack
115
116 /* Set up stack for FIQ mode */
117 msr cpsr_c, #0xd1
118 ldr sp, =fiq_stack
119#endif
114 msr cpsr_c, #0xd7 120 msr cpsr_c, #0xd7
115 ldr sp, =irq_stack 121 ldr sp, =irq_stack
116 msr cpsr_c, #0xdb 122 msr cpsr_c, #0xdb
@@ -159,15 +165,20 @@ prefetch_abort_handler:
159 b UIE 165 b UIE
160 166
161data_abort_handler: 167data_abort_handler:
162 sub r0, lr, #8 168 sub r0, lr, #8
163 mov r1, #2 169 mov r1, #2
164 b UIE 170 b UIE
165 171
172/* Cache-align interrupt stacks */
173.balign 32
174
166/* 256 words of IRQ stack */ 175/* 256 words of IRQ stack */
167 .space 256*4 176 .space 256*4
168irq_stack: 177irq_stack:
169 178
170/* 256 words of FIQ stack */ 179/* 256 words of FIQ/SVC stack */
171 .space 256*4 180 .space 256*4
172fiq_stack: 181fiq_stack:
173end: 182svc_stack:
183
184end: \ No newline at end of file