diff options
author | Marcoen Hirschberg <marcoen@gmail.com> | 2008-06-27 23:24:34 +0000 |
---|---|---|
committer | Marcoen Hirschberg <marcoen@gmail.com> | 2008-06-27 23:24:34 +0000 |
commit | 7b10ef9a7c55764d1b6815fd0871cb51ff0205f9 (patch) | |
tree | 0b2056ef0334e45107b02118040baae49d51b142 /firmware/target/arm/s5l8700/crt0.S | |
parent | 5c763f4001c1634ea62ded26339df52494e6c718 (diff) | |
download | rockbox-7b10ef9a7c55764d1b6815fd0871cb51ff0205f9.tar.gz rockbox-7b10ef9a7c55764d1b6815fd0871cb51ff0205f9.zip |
initial Meizu M6SL port (take 2)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17819 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s5l8700/crt0.S')
-rw-r--r-- | firmware/target/arm/s5l8700/crt0.S | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8700/crt0.S b/firmware/target/arm/s5l8700/crt0.S new file mode 100644 index 0000000000..3ecabdeaef --- /dev/null +++ b/firmware/target/arm/s5l8700/crt0.S | |||
@@ -0,0 +1,117 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2008 by Marcoen Hirschberg | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | #include "config.h" | ||
20 | #include "cpu.h" | ||
21 | |||
22 | .section .init.text,"ax",%progbits | ||
23 | |||
24 | .global start | ||
25 | start: | ||
26 | /* Exception vectors */ | ||
27 | b newstart | ||
28 | b undef_instr_handler | ||
29 | b software_int_handler | ||
30 | b prefetch_abort_handler | ||
31 | b data_abort_handler | ||
32 | b reserved_handler | ||
33 | b irq_handler | ||
34 | b fiq_handler | ||
35 | .word 0x43554644 /* DFUC */ | ||
36 | |||
37 | newstart: | ||
38 | #if 0 | ||
39 | msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ | ||
40 | |||
41 | /* Initialise bss section to zero */ | ||
42 | ldr r2, =_edata | ||
43 | ldr r3, =_end | ||
44 | mov r4, #0 | ||
45 | 1: | ||
46 | cmp r3, r2 | ||
47 | strhi r4, [r2], #4 | ||
48 | bhi 1b | ||
49 | |||
50 | /* Set up some stack and munge it with 0xdeadbeef */ | ||
51 | ldr sp, =stackend | ||
52 | ldr r2, =stackbegin | ||
53 | ldr r3, =0xdeadbeef | ||
54 | 1: | ||
55 | cmp sp, r2 | ||
56 | strhi r3, [r2], #4 | ||
57 | bhi 1b | ||
58 | |||
59 | /* Set up stack for IRQ mode */ | ||
60 | msr cpsr_c, #0xd2 | ||
61 | ldr sp, =irq_stack | ||
62 | |||
63 | /* Set up stack for FIQ mode */ | ||
64 | msr cpsr_c, #0xd1 | ||
65 | ldr sp, =fiq_stack | ||
66 | |||
67 | /* Let abort and undefined modes use IRQ stack */ | ||
68 | msr cpsr_c, #0xd7 | ||
69 | ldr sp, =irq_stack | ||
70 | msr cpsr_c, #0xdb | ||
71 | ldr sp, =irq_stack | ||
72 | |||
73 | /* Switch back to supervisor mode */ | ||
74 | msr cpsr_c, #0xd3 | ||
75 | #endif | ||
76 | bl main | ||
77 | |||
78 | |||
79 | .text | ||
80 | /* .global UIE*/ | ||
81 | |||
82 | /* All illegal exceptions call into UIE with exception address as first | ||
83 | * parameter. This is calculated differently depending on which exception | ||
84 | * we're in. Second parameter is exception number, used for a string lookup | ||
85 | * in UIE. */ | ||
86 | undef_instr_handler: | ||
87 | mov r0, lr | ||
88 | mov r1, #0 | ||
89 | b UIE | ||
90 | |||
91 | /* We run supervisor mode most of the time, and should never see a software | ||
92 | * exception being thrown. Perhaps make it illegal and call UIE? */ | ||
93 | software_int_handler: | ||
94 | reserved_handler: | ||
95 | movs pc, lr | ||
96 | |||
97 | prefetch_abort_handler: | ||
98 | sub r0, lr, #4 | ||
99 | mov r1, #1 | ||
100 | b UIE | ||
101 | |||
102 | data_abort_handler: | ||
103 | sub r0, lr, #8 | ||
104 | mov r1, #2 | ||
105 | b UIE | ||
106 | |||
107 | /* 256 words of IRQ stack */ | ||
108 | .space 256*4 | ||
109 | irq_stack: | ||
110 | |||
111 | /* 256 words of FIQ stack */ | ||
112 | .space 256*4 | ||
113 | fiq_stack: | ||
114 | |||
115 | end: | ||
116 | /*.word 0xA5A5A5A5 | ||
117 | .word 0x5A5A5A5A*/ | ||