summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/crt0.S
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2011-10-11 16:06:03 +0000
committerMarcin Bukat <marcin.bukat@gmail.com>2011-10-11 16:06:03 +0000
commitbf056d5372b6375b088836dd57339d7a499fe0d6 (patch)
tree0e8b2d2f9782b3267b289f8c9715e6a6cb42660d /firmware/target/arm/imx31/crt0.S
parent90559156450082628ab1b3aed3d2db862de377c1 (diff)
downloadrockbox-bf056d5372b6375b088836dd57339d7a499fe0d6.tar.gz
rockbox-bf056d5372b6375b088836dd57339d7a499fe0d6.zip
Switch to SYS mode on arm FS#12322 by me
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30741 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/imx31/crt0.S')
-rw-r--r--firmware/target/arm/imx31/crt0.S34
1 files changed, 19 insertions, 15 deletions
diff --git a/firmware/target/arm/imx31/crt0.S b/firmware/target/arm/imx31/crt0.S
index 776699da14..69577e4d3d 100644
--- a/firmware/target/arm/imx31/crt0.S
+++ b/firmware/target/arm/imx31/crt0.S
@@ -253,15 +253,6 @@ remap_end:
253 strhi r4, [r2], #4 253 strhi r4, [r2], #4
254 bhi 1b 254 bhi 1b
255 255
256 /* Set up some stack and munge it with 0xdeadbeef */
257 ldr sp, =stackend
258 ldr r2, =stackbegin
259 ldr r3, =0xdeadbeef
2601:
261 cmp sp, r2
262 strhi r3, [r2], #4
263 bhi 1b
264
265 /* Set up stack for IRQ mode */ 256 /* Set up stack for IRQ mode */
266 msr cpsr_c, #0xd2 257 msr cpsr_c, #0xd2
267 ldr sp, =irq_stack 258 ldr sp, =irq_stack
@@ -270,14 +261,25 @@ remap_end:
270 msr cpsr_c, #0xd1 261 msr cpsr_c, #0xd1
271 ldr sp, =fiq_stack 262 ldr sp, =fiq_stack
272 263
273 /* Let abort and undefined modes use IRQ stack */ 264 /* Let svc, abort and undefined modes use irq stack */
265 msr cpsr_c, #0xd3
266 ldr sp, =irq_stack
274 msr cpsr_c, #0xd7 267 msr cpsr_c, #0xd7
275 ldr sp, =irq_stack 268 ldr sp, =irq_stack
276 msr cpsr_c, #0xdb 269 msr cpsr_c, #0xdb
277 ldr sp, =irq_stack 270 ldr sp, =irq_stack
278 271
279 /* Switch back to supervisor mode */ 272 /* Switch to sys mode */
280 msr cpsr_c, #0xd3 273 msr cpsr_c, #0xdf
274
275 /* Set up some stack and munge it with 0xdeadbeef */
276 ldr sp, =stackend
277 ldr r2, =stackbegin
278 ldr r3, =0xdeadbeef
2791:
280 cmp sp, r2
281 strhi r3, [r2], #4
282 bhi 1b
281 283
282#ifndef BOOTLOADER 284#ifndef BOOTLOADER
283 /* Enable access to VFP */ 285 /* Enable access to VFP */
@@ -334,11 +336,13 @@ undef_instr_handler:
334 mov r1, #0 336 mov r1, #0
335 b UIE 337 b UIE
336 338
337/* We run supervisor mode most of the time, and should never see a software 339/* We run sys mode most of the time, and should never see a software
338 * exception being thrown. Perhaps make it illegal and call UIE? */ 340 * exception being thrown. Make it illegal and call UIE. */
339software_int_handler: 341software_int_handler:
340reserved_handler: 342reserved_handler:
341 movs pc, lr 343 sub r0, lr, #4
344 mov r1, #4
345 b UIE
342 346
343prefetch_abort_handler: 347prefetch_abort_handler:
344 sub r0, lr, #4 348 sub r0, lr, #4