diff options
Diffstat (limited to 'firmware/target/arm/crt0.S')
-rw-r--r-- | firmware/target/arm/crt0.S | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/firmware/target/arm/crt0.S b/firmware/target/arm/crt0.S index 829004193f..35d0aecccb 100644 --- a/firmware/target/arm/crt0.S +++ b/firmware/target/arm/crt0.S | |||
@@ -50,22 +50,43 @@ start: | |||
50 | .word irq_handler | 50 | .word irq_handler |
51 | .word fiq_handler | 51 | .word fiq_handler |
52 | 52 | ||
53 | vectors_end: | 53 | _vectorsend: |
54 | 54 | ||
55 | .text | 55 | .text |
56 | 56 | ||
57 | newstart: | 57 | newstart: |
58 | msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ | 58 | msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ |
59 | 59 | ||
60 | #if CONFIG_CPU==AS3525 && !defined(BOOTLOADER) /* relocate vectors */ | 60 | #if CONFIG_CPU==AS3525 && !defined(BOOTLOADER) |
61 | |||
62 | /* relocate vectors */ | ||
61 | mov r1, #0 @ destination | 63 | mov r1, #0 @ destination |
62 | ldr r2, =start @ source | 64 | ldr r2, =_vectorscopy @ source |
63 | ldr r3, =vectors_end @ end | 65 | ldr r3, =_vectorsend @ end |
64 | 66 | ||
65 | 1: ldr r0, [r2], #4 | 67 | 1: ldr r0, [r2], #4 |
66 | str r0, [r1], #4 | 68 | str r0, [r1], #4 |
67 | cmp r3, r2 | 69 | cmp r1, r3 |
68 | bne 1b | 70 | bne 1b |
71 | |||
72 | /* Zero out IBSS */ | ||
73 | ldr r2, =_iedata | ||
74 | ldr r3, =_iend | ||
75 | mov r4, #0 | ||
76 | 1: | ||
77 | cmp r3, r2 | ||
78 | strhi r4, [r2], #4 | ||
79 | bhi 1b | ||
80 | |||
81 | /* Copy the IRAM */ | ||
82 | ldr r2, =_iramcopy | ||
83 | ldr r3, =_iramstart | ||
84 | ldr r4, =_iramend | ||
85 | 1: | ||
86 | cmp r4, r3 | ||
87 | ldrhi r5, [r2], #4 | ||
88 | strhi r5, [r3], #4 | ||
89 | bhi 1b | ||
69 | #endif | 90 | #endif |
70 | 91 | ||
71 | /* Initialise bss section to zero */ | 92 | /* Initialise bss section to zero */ |
@@ -102,6 +123,7 @@ newstart: | |||
102 | 123 | ||
103 | /* Switch back to supervisor mode */ | 124 | /* Switch back to supervisor mode */ |
104 | msr cpsr_c, #0xd3 | 125 | msr cpsr_c, #0xd3 |
126 | |||
105 | bl main | 127 | bl main |
106 | 128 | ||
107 | 129 | ||