diff options
Diffstat (limited to 'firmware/target/arm/s5l8700')
-rw-r--r-- | firmware/target/arm/s5l8700/crt0.S | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/firmware/target/arm/s5l8700/crt0.S b/firmware/target/arm/s5l8700/crt0.S index 0dcc203844..c79897606c 100644 --- a/firmware/target/arm/s5l8700/crt0.S +++ b/firmware/target/arm/s5l8700/crt0.S | |||
@@ -45,10 +45,12 @@ _newstart: | |||
45 | newstart2: | 45 | newstart2: |
46 | msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ | 46 | msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ |
47 | 47 | ||
48 | #ifdef ROCKBOX_BIG_ENDIAN | ||
48 | mov r1, #0x80 | 49 | mov r1, #0x80 |
49 | mrc 15, 0, r0, c1, c0, 0 | 50 | mrc 15, 0, r0, c1, c0, 0 |
50 | orr r0, r0, r1 | 51 | orr r0, r0, r1 |
51 | mcr 15, 0, r0, c1, c0, 0 // set bigendian | 52 | mcr 15, 0, r0, c1, c0, 0 // set bigendian |
53 | #endif | ||
52 | 54 | ||
53 | ldr r1, =0x3c800000 // disable watchdog | 55 | ldr r1, =0x3c800000 // disable watchdog |
54 | mov r0, #0xa5 | 56 | mov r0, #0xa5 |
@@ -66,7 +68,7 @@ newstart2: | |||
66 | str r0, [r1] // clear pending interrupts | 68 | str r0, [r1] // clear pending interrupts |
67 | ldr r1, =0x39c0001c | 69 | ldr r1, =0x39c0001c |
68 | str r0, [r1] // clear pending external interrupts | 70 | str r0, [r1] // clear pending external interrupts |
69 | 71 | ||
70 | // ldr r1, =0x3cf00000 | 72 | // ldr r1, =0x3cf00000 |
71 | // ldr r0, [r1] | 73 | // ldr r0, [r1] |
72 | // mvn r2, #0x30 | 74 | // mvn r2, #0x30 |
@@ -80,6 +82,7 @@ newstart2: | |||
80 | // orr r0, r0, r2 | 82 | // orr r0, r0, r2 |
81 | // str r0, [r1] // switch backlight on | 83 | // str r0, [r1] // switch backlight on |
82 | 84 | ||
85 | #if CONFIG_CPU==S5L8700 | ||
83 | ldr r1, =0x3c500000 // CLKCON | 86 | ldr r1, =0x3c500000 // CLKCON |
84 | ldr r0, =0x00800080 | 87 | ldr r0, =0x00800080 |
85 | str r0, [r1] | 88 | str r0, [r1] |
@@ -232,6 +235,7 @@ newstart2: | |||
232 | ldrhi r1, [r4], #4 | 235 | ldrhi r1, [r4], #4 |
233 | strhi r1, [r2], #4 | 236 | strhi r1, [r2], #4 |
234 | bhi 1b | 237 | bhi 1b |
238 | #endif | ||
235 | 239 | ||
236 | /* Initialise bss section to zero */ | 240 | /* Initialise bss section to zero */ |
237 | ldr r2, =_edata | 241 | ldr r2, =_edata |
@@ -241,7 +245,8 @@ newstart2: | |||
241 | cmp r3, r2 | 245 | cmp r3, r2 |
242 | strhi r4, [r2], #4 | 246 | strhi r4, [r2], #4 |
243 | bhi 1b | 247 | bhi 1b |
244 | 248 | ||
249 | #if CONFIG_CPU==S5L8700 | ||
245 | /* Copy icode and data to ram */ | 250 | /* Copy icode and data to ram */ |
246 | ldr r2, =_datastart | 251 | ldr r2, =_datastart |
247 | ldr r3, =_dataend | 252 | ldr r3, =_dataend |
@@ -251,6 +256,7 @@ newstart2: | |||
251 | ldrhi r1, [r4], #4 | 256 | ldrhi r1, [r4], #4 |
252 | strhi r1, [r2], #4 | 257 | strhi r1, [r2], #4 |
253 | bhi 1b | 258 | bhi 1b |
259 | #endif | ||
254 | 260 | ||
255 | /* Set up some stack and munge it with 0xdeadbeef */ | 261 | /* Set up some stack and munge it with 0xdeadbeef */ |
256 | ldr sp, =_stackend | 262 | ldr sp, =_stackend |
@@ -260,7 +266,7 @@ newstart2: | |||
260 | cmp sp, r2 | 266 | cmp sp, r2 |
261 | strhi r3, [r2], #4 | 267 | strhi r3, [r2], #4 |
262 | bhi 1b | 268 | bhi 1b |
263 | 269 | ||
264 | /* Set up stack for IRQ mode */ | 270 | /* Set up stack for IRQ mode */ |
265 | msr cpsr_c, #0xd2 | 271 | msr cpsr_c, #0xd2 |
266 | ldr sp, =_irqstackend | 272 | ldr sp, =_irqstackend |
@@ -281,6 +287,7 @@ newstart2: | |||
281 | // if we did not switch remap on, device | 287 | // if we did not switch remap on, device |
282 | // would crash when MENU is pressed, | 288 | // would crash when MENU is pressed, |
283 | // as that button is connected to BOOT_MODE pin | 289 | // as that button is connected to BOOT_MODE pin |
290 | #if CONFIG_CPU==S5L8700 | ||
284 | ldr r1, =0x38200000 | 291 | ldr r1, =0x38200000 |
285 | ldr r0, [r1] | 292 | ldr r0, [r1] |
286 | mvn r2, #0x10000 | 293 | mvn r2, #0x10000 |
@@ -288,6 +295,7 @@ newstart2: | |||
288 | mov r2, #0x1 | 295 | mov r2, #0x1 |
289 | orr r0, r0, r2 | 296 | orr r0, r0, r2 |
290 | str r0, [r1] // remap iram to address 0x0 | 297 | str r0, [r1] // remap iram to address 0x0 |
298 | #endif | ||
291 | 299 | ||
292 | bl main | 300 | bl main |
293 | 301 | ||