diff options
Diffstat (limited to 'firmware/target/arm/s5l8700/crt0.S')
-rw-r--r-- | firmware/target/arm/s5l8700/crt0.S | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/firmware/target/arm/s5l8700/crt0.S b/firmware/target/arm/s5l8700/crt0.S index 4a89f3da39..aa2923cb29 100644 --- a/firmware/target/arm/s5l8700/crt0.S +++ b/firmware/target/arm/s5l8700/crt0.S | |||
@@ -27,7 +27,11 @@ | |||
27 | .global _newstart | 27 | .global _newstart |
28 | /* Exception vectors */ | 28 | /* Exception vectors */ |
29 | start: | 29 | start: |
30 | #if CONFIG_CPU==S5L8701 && defined(BOOTLOADER) | ||
31 | b newstart2 | ||
32 | #else | ||
30 | b _newstart | 33 | b _newstart |
34 | #endif | ||
31 | ldr pc, =undef_instr_handler | 35 | ldr pc, =undef_instr_handler |
32 | ldr pc, =software_int_handler | 36 | ldr pc, =software_int_handler |
33 | ldr pc, =prefetch_abort_handler | 37 | ldr pc, =prefetch_abort_handler |
@@ -88,7 +92,22 @@ newstart2: | |||
88 | orr r2, r2, #1 | 92 | orr r2, r2, #1 |
89 | bic r2, r2, #0x10000 | 93 | bic r2, r2, #0x10000 |
90 | str r2, [r1] // remap iram to address 0x0 | 94 | str r2, [r1] // remap iram to address 0x0 |
91 | #endif | 95 | |
96 | #ifdef BOOTLOADER | ||
97 | /* Relocate ourself to IRAM - we have been loaded to DRAM */ | ||
98 | mov r0, #0x08000000 /* source (DRAM) */ | ||
99 | mov r1, #0x00000000 /* dest (IRAM) */ | ||
100 | ldr r2, =_dataend | ||
101 | 1: | ||
102 | cmp r2, r1 | ||
103 | ldrhi r3, [r0], #4 | ||
104 | strhi r3, [r1], #4 | ||
105 | bhi 1b | ||
106 | |||
107 | ldr pc, =start_loc /* jump to the relocated start_loc: */ | ||
108 | start_loc: | ||
109 | #endif /* BOOTLOADER */ | ||
110 | #endif /* CONFIG_CPU==S5L8701 */ | ||
92 | 111 | ||
93 | ldr r1, =0x3c500000 // CLKCON | 112 | ldr r1, =0x3c500000 // CLKCON |
94 | ldr r0, =0x00800080 | 113 | ldr r0, =0x00800080 |