source: rtems/c/src/lib/libbsp/arm/nds/start/start.S @ 820d1ab0

4.104.115
Last change on this file since 820d1ab0 was 820d1ab0, checked in by Chris Johns <chrisj@…>, on 04/28/09 at 06:34:00

2009-04-28 Chris Johns <chrisj@…>

  • start/start.S: Update for boot_card command line change.
  • Property mode set to 100644
File size: 9.0 KB
Line 
1#warning Call to boot_card has changed and needs checking.
2#warning The call is "void boot_card(const char* cmdline);"
3#warning You need to pass a NULL.
4#warning Please check and remove these warnings.
5
6@---------------------------------------------------------------------------------
7@ DS processor selection
8@---------------------------------------------------------------------------------
9        .arch   armv5te
10        .cpu    arm946e-s
11@---------------------------------------------------------------------------------
12#define PAGE_4K         (0b01011 << 1)
13#define PAGE_8K         (0b01100 << 1)
14#define PAGE_16K        (0b01101 << 1)
15#define PAGE_32K        (0b01110 << 1)
16#define PAGE_64K        (0b00111 << 1)
17#define PAGE_128K       (0b10000 << 1)
18#define PAGE_256K       (0b10001 << 1)
19#define PAGE_512K       (0b10010 << 1)
20#define PAGE_1M         (0b10011 << 1)
21#define PAGE_2M         (0b10100 << 1)
22#define PAGE_4M         (0b10101 << 1)
23#define PAGE_8M         (0b10110 << 1)
24#define PAGE_16M        (0b10111 << 1)
25#define PAGE_32M        (0b11000 << 1)
26#define PAGE_64M        (0b11001 << 1)
27#define PAGE_128M       (0b11010 << 1)
28#define PAGE_256M       (0b11011 << 1)
29#define PAGE_512M       (0b11100 << 1)
30#define PAGE_1G         (0b11101 << 1)
31#define PAGE_2G         (0b11110 << 1)
32#define PAGE_4G         (0b11111 << 1)
33
34#define ITCM_LOAD       (1<<19)
35#define ITCM_ENABLE     (1<<18)
36#define DTCM_LOAD       (1<<17)
37#define DTCM_ENABLE     (1<<16)
38#define DISABLE_TBIT    (1<<15)
39#define ROUND_ROBIN     (1<<14)
40#define ALT_VECTORS     (1<<13)
41#define ICACHE_ENABLE   (1<<12)
42#define BIG_ENDIAN      (1<<7)
43#define DCACHE_ENABLE   (1<<2)
44#define PROTECT_ENABLE  (1<<0)
45
46        .equ    _libnds_argv,0x027FFF70
47
48@---------------------------------------------------------------------------------
49        .section ".init"
50        .global _start
51@---------------------------------------------------------------------------------
52        .align  4
53        .arm
54@---------------------------------------------------------------------------------
55_start:
56@---------------------------------------------------------------------------------
57        mov     r0, #0x04000000                 @ IME = 0;
58        str     r0, [r0, #0x208]
59
60@---------------------------------------------------------------------------------
61@ turn the power on for M3
62@---------------------------------------------------------------------------------
63        ldr     r1, =0x8203
64        add     r0,r0,#0x304
65        strh    r1, [r0]
66
67        ldr     r1, =0x00002078                 @ disable TCM and protection unit
68        mcr     p15, 0, r1, c1, c0
69
70@---------------------------------------------------------------------------------
71@ Protection Unit Setup added by Sasq
72@---------------------------------------------------------------------------------
73        @ Disable cache
74        mov     r0, #0
75        mcr     p15, 0, r0, c7, c5, 0           @ Instruction cache
76        mcr     p15, 0, r0, c7, c6, 0           @ Data cache
77
78        @ Wait for write buffer to empty
79        mcr     p15, 0, r0, c7, c10, 4
80
81        ldr     r0, =__dtcm_start
82        orr     r0,r0,#0x0a
83        mcr     p15, 0, r0, c9, c1,0            @ DTCM base = __dtcm_start, size = 16 KB
84
85        mov r0,#0x20
86        mcr     p15, 0, r0, c9, c1,1            @ ITCM base = 0 , size = 32 MB
87
88@---------------------------------------------------------------------------------
89@ Setup memory regions similar to Release Version
90@---------------------------------------------------------------------------------
91
92        @-------------------------------------------------------------------------
93        @ Region 0 - IO registers
94        @-------------------------------------------------------------------------
95        ldr     r0,=( PAGE_64M | 0x04000000 | 1)
96        mcr     p15, 0, r0, c6, c0, 0
97
98        @-------------------------------------------------------------------------
99        @ Region 1 - Main Memory
100        @-------------------------------------------------------------------------
101        ldr     r0,=( PAGE_4M | 0x02000000 | 1)
102        mcr     p15, 0, r0, c6, c1, 0
103
104        @-------------------------------------------------------------------------
105        @ Region 2 - iwram
106        @-------------------------------------------------------------------------
107        ldr     r0,=( PAGE_32K | 0x037F8000 | 1)
108        mcr     p15, 0, r0, c6, c2, 0
109
110        @-------------------------------------------------------------------------
111        @ Region 3 - DS Accessory (GBA Cart)
112        @-------------------------------------------------------------------------
113        ldr     r0,=( PAGE_128M | 0x08000000 | 1)
114        mcr     p15, 0, r0, c6, c3, 0
115
116        @-------------------------------------------------------------------------
117        @ Region 4 - DTCM
118        @-------------------------------------------------------------------------
119        ldr     r0,=__dtcm_start
120        orr     r0,r0,#(PAGE_16K | 1)
121        mcr     p15, 0, r0, c6, c4, 0
122
123        @-------------------------------------------------------------------------
124        @ Region 5 - ITCM
125        @-------------------------------------------------------------------------
126        ldr     r0,=__itcm_start
127        orr     r0,r0,#(PAGE_32K | 1)
128        mcr     p15, 0, r0, c6, c5, 0
129
130        @-------------------------------------------------------------------------
131        @ Region 6 - System ROM
132        @-------------------------------------------------------------------------
133        ldr     r0,=( PAGE_32K | 0xFFFF0000 | 1)
134        mcr     p15, 0, r0, c6, c6, 0
135
136        @-------------------------------------------------------------------------
137        @ Region 7 - non cacheable main ram
138        @-------------------------------------------------------------------------
139        ldr     r0,=( PAGE_4M  | 0x02400000 | 1)
140        mcr     p15, 0, r0, c6, c7, 0
141
142        @-------------------------------------------------------------------------
143        @ Write buffer enable
144        @-------------------------------------------------------------------------
145        ldr     r0,=0b00000010
146        mcr     p15, 0, r0, c3, c0, 0
147
148        @-------------------------------------------------------------------------
149        @ DCache & ICache enable
150        @-------------------------------------------------------------------------
151        ldr     r0,=0b01000010
152        mcr     p15, 0, r0, c2, c0, 0
153        mcr     p15, 0, r0, c2, c0, 1
154
155        @-------------------------------------------------------------------------
156        @ IAccess
157        @-------------------------------------------------------------------------
158        ldr     r0,=0x36636333
159        mcr     p15, 0, r0, c5, c0, 3
160
161        @-------------------------------------------------------------------------
162        @ DAccess
163        @-------------------------------------------------------------------------
164        ldr     r0,=0x36333333
165        mcr     p15, 0, r0, c5, c0, 2
166
167        @-------------------------------------------------------------------------
168        @ Enable ICache, DCache, ITCM & DTCM
169        @-------------------------------------------------------------------------
170        mrc     p15, 0, r0, c1, c0, 0
171        ldr     r1,= ITCM_ENABLE | DTCM_ENABLE | ICACHE_ENABLE | DCACHE_ENABLE | PROTECT_ENABLE
172        orr     r0,r0,r1
173        mcr     p15, 0, r0, c1, c0, 0
174
175        mov     r0, #0x12               @ Switch to IRQ Mode
176        msr     cpsr, r0
177        ldr     sp, =__sp_irq           @ Set IRQ stack
178
179        mov     r0, #0x1f               @ Switch to SVC Mode
180        msr     cpsr, r0
181        ldr     sp, =__sp_usr           @ Set user stack
182
183        ldr     r1, =__itcm_lma         @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA (ROM to RAM)
184        ldr     r2, =__itcm_start
185        ldr     r4, =__itcm_end
186        bl      CopyMemCheck
187
188        ldr     r1, =__dtcm_lma         @ Copy data tightly coupled memory (dtcm section) from LMA to VMA (ROM to RAM)
189        ldr     r2, =__dtcm_start
190        ldr     r4, =__dtcm_end
191        bl      CopyMemCheck
192
193        ldr     r0, =__bss_start        @ Clear BSS section
194        ldr     r1, =__bss_end
195        sub     r1, r1, r0
196        bl      ClearMem
197
198        ldr     r0, =__sbss_start       @ Clear SBSS section
199        ldr     r1, =__sbss_end
200        sub     r1, r1, r0
201        bl      ClearMem
202
203        ldr     r3, =__libc_init_array  @ global constructors
204        blx     r3
205
206        ldr     r3, =initSystem
207        blx     r3                      @ jump to user code
208
209        mov     r0, #0          @ command line
210
211
212        ldr     r3, =boot_card
213        blx     r3                      @ jump to user code
214
215        @ If the user ever returns, go back to passme loop
216        ldr     r0, =ILoop
217        ldr     r0, [r0]
218        ldr     r1, =0x027FFE78
219        str     r0, [r1]
220        bx      r1
221ILoop:
222        b       ILoop
223
224
225@---------------------------------------------------------------------------------
226@ Clear memory to 0x00 if length != 0
227@  r0 = Start Address
228@  r1 = Length
229@---------------------------------------------------------------------------------
230ClearMem:
231@---------------------------------------------------------------------------------
232        mov     r2, #3                  @ Round down to nearest word boundary
233        add     r1, r1, r2              @ Shouldn't be needed
234        bics    r1, r1, r2              @ Clear 2 LSB (and set Z)
235        bxeq    lr                      @ Quit if copy size is 0
236
237        mov     r2, #0
238ClrLoop:
239        stmia   r0!, {r2}
240        subs    r1, r1, #4
241        bne     ClrLoop
242
243        bx      lr
244
245@---------------------------------------------------------------------------------
246@ Copy memory if length != 0
247@  r1 = Source Address
248@  r2 = Dest Address
249@  r4 = Dest Address + Length
250@---------------------------------------------------------------------------------
251CopyMemCheck:
252@---------------------------------------------------------------------------------
253        sub     r3, r4, r2              @ Is there any data to copy?
254@---------------------------------------------------------------------------------
255@ Copy memory
256@  r1 = Source Address
257@  r2 = Dest Address
258@  r3 = Length
259@---------------------------------------------------------------------------------
260CopyMem:
261@---------------------------------------------------------------------------------
262        mov     r0, #3                  @ These commands are used in cases where
263        add     r3, r3, r0              @ the length is not a multiple of 4,
264        bics    r3, r3, r0              @ even though it should be.
265        bxeq    lr                      @ Length is zero, so exit
266CIDLoop:
267        ldmia   r1!, {r0}
268        stmia   r2!, {r0}
269        subs    r3, r3, #4
270        bne     CIDLoop
271
272        bx      lr
273
274
275        .global SWI_Handler
276        .global do_data_abort
277SWI_Handler:
278do_data_abort:
279        mov pc, lr
280
281@---------------------------------------------------------------------------------
282        .align
283        .pool
284        .end
285@---------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.