diff options
Diffstat (limited to 'firmware/target/arm/crt0.S')
-rw-r--r-- | firmware/target/arm/crt0.S | 29 |
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 | ||
161 | data_abort_handler: | 167 | data_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 |
168 | irq_stack: | 177 | irq_stack: |
169 | 178 | ||
170 | /* 256 words of FIQ stack */ | 179 | /* 256 words of FIQ/SVC stack */ |
171 | .space 256*4 | 180 | .space 256*4 |
172 | fiq_stack: | 181 | fiq_stack: |
173 | end: | 182 | svc_stack: |
183 | |||
184 | end: \ No newline at end of file | ||