summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tcc780x/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/tcc780x/crt0.S')
-rw-r--r--firmware/target/arm/tcc780x/crt0.S43
1 files changed, 23 insertions, 20 deletions
diff --git a/firmware/target/arm/tcc780x/crt0.S b/firmware/target/arm/tcc780x/crt0.S
index 03f17957c5..f02a204d7e 100644
--- a/firmware/target/arm/tcc780x/crt0.S
+++ b/firmware/target/arm/tcc780x/crt0.S
@@ -94,9 +94,8 @@ start_loc:
94 ldr pc, =copied_start /* jump to the relocated start_loc: */ 94 ldr pc, =copied_start /* jump to the relocated start_loc: */
95 95
96copied_start: 96copied_start:
97#endif 97#endif /* TCCBOOT */
98#else 98#endif /* BOOTLOADER */
99 /* We don't use interrupts in the bootloader */
100 99
101 /* Set up stack for IRQ mode */ 100 /* Set up stack for IRQ mode */
102 mov r0,#0xd2 101 mov r0,#0xd2
@@ -107,13 +106,15 @@ copied_start:
107 mov r0,#0xd1 106 mov r0,#0xd1
108 msr cpsr, r0 107 msr cpsr, r0
109 ldr sp, =fiq_stack 108 ldr sp, =fiq_stack
110 109
110#ifndef BOOTLOADER
111 /* Load the banked FIQ mode registers with useful values here. 111 /* Load the banked FIQ mode registers with useful values here.
112 These values will be used in the FIQ handler in pcm-tcc780x.c */ 112 These values will be used in the FIQ handler in pcm-tcc780x.c */
113 .equ DADO_BASE, 0xF0059020 113 .equ DADO_BASE, 0xF0059020
114 114
115 ldr r10, =DADO_BASE 115 ldr r10, =DADO_BASE
116 ldr r11, =dma_play_data 116 ldr r11, =dma_play_data
117#endif
117 118
118 /* Let abort and undefined modes use IRQ stack */ 119 /* Let abort and undefined modes use IRQ stack */
119 mov r0,#0xd7 120 mov r0,#0xd7
@@ -122,7 +123,6 @@ copied_start:
122 mov r0,#0xdb 123 mov r0,#0xdb
123 msr cpsr, r0 124 msr cpsr, r0
124 ldr sp, =irq_stack 125 ldr sp, =irq_stack
125#endif
126 126
127 /* Switch to supervisor mode */ 127 /* Switch to supervisor mode */
128 mov r0,#0xd3 128 mov r0,#0xd3
@@ -176,18 +176,19 @@ copied_start:
176 mcr p15, 0, r0, c7, c6, 0 /* Invalidate Dcache */ 176 mcr p15, 0, r0, c7, c6, 0 /* Invalidate Dcache */
177 mcr p15, 0, r1, c8, c7, 0 /* Invalidate TLB */ 177 mcr p15, 0, r1, c8, c7, 0 /* Invalidate TLB */
178 178
179#if !defined(BOOTLOADER) && !defined(STUB) 179#ifndef STUB
180 180
181 /* Copy exception handler code to address 0 */ 181 /* Copy exception handler code to address 0 */
182 ldr r2, =_vectorsstart 182 mov r2, #0x0
183 ldr r3, =_vectorsend 183 ldr r3, =vectors_start
184 ldr r4, =_vectorscopy 184 ldr r4, =vectors_end
1851: 1851:
186 cmp r3, r2 186 cmp r4, r3
187 ldrhi r5, [r4], #4 187 ldrhi r5, [r3], #4
188 strhi r5, [r2], #4 188 strhi r5, [r2], #4
189 bhi 1b 189 bhi 1b
190 190
191#ifndef BOOTLOADER
191 /* Copy the IRAM (SRAM) */ 192 /* Copy the IRAM (SRAM) */
192 ldr r2, =_iramcopy 193 ldr r2, =_iramcopy
193 ldr r3, =_iramstart 194 ldr r3, =_iramstart
@@ -226,7 +227,8 @@ copied_start:
226 ldrhi r5, [r2], #4 227 ldrhi r5, [r2], #4
227 strhi r5, [r3], #4 228 strhi r5, [r3], #4
228 bhi 1b 229 bhi 1b
229#endif /* !BOOTLOADER,!STUB */ 230#endif /* !BOOTLOADER */
231#endif /* !STUB */
230 232
231 /* Initialise bss section to zero */ 233 /* Initialise bss section to zero */
232 ldr r2, =_edata 234 ldr r2, =_edata
@@ -250,10 +252,9 @@ copied_start:
250 bl main 252 bl main
251 /* main() should never return */ 253 /* main() should never return */
252 254
253#ifndef BOOTLOADER
254
255/* Exception handlers. Will be copied to address 0 after memory remapping */ 255/* Exception handlers. Will be copied to address 0 after memory remapping */
256 .section .vectors,"aw" 256
257vectors_start:
257 ldr pc, [pc, #24] 258 ldr pc, [pc, #24]
258 ldr pc, [pc, #24] 259 ldr pc, [pc, #24]
259 ldr pc, [pc, #24] 260 ldr pc, [pc, #24]
@@ -274,6 +275,7 @@ vectors:
274 .word reserved_handler 275 .word reserved_handler
275 .word irq_handler 276 .word irq_handler
276 .word fiq_handler 277 .word fiq_handler
278vectors_end:
277 279
278 .text 280 .text
279 281
@@ -304,13 +306,16 @@ data_abort_handler:
304 mov r1, #2 306 mov r1, #2
305 b UIE 307 b UIE
306 308
309#ifdef BOOTLOADER
310fiq_handler:
311 subs pc, lr, #4
312#endif
313
307#if defined(STUB) 314#if defined(STUB)
308UIE: 315UIE:
309 b UIE 316 b UIE
310#endif 317#endif
311 318
312 /* We don't use interrupts in the bootloader */
313
314/* Align stacks to cache line boundary */ 319/* Align stacks to cache line boundary */
315 .balign 16 320 .balign 16
316 321
@@ -321,5 +326,3 @@ irq_stack:
321/* 256 words of FIQ stack */ 326/* 256 words of FIQ stack */
322 .space 256*4 327 .space 256*4
323fiq_stack: 328fiq_stack:
324
325#endif