]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR_ARM/System/IAR/src/loader_init.asm
Baseline new GCC and Renesas compiler projects for RX71M and RX113 before adding...
[freertos] / FreeRTOS / Demo / CORTEX_R4F_RZ_T_GCC_IAR_ARM / System / IAR / src / loader_init.asm
1 ;*******************************************************************************\r
2 ; DISCLAIMER\r
3 ; This software is supplied by Renesas Electronics Corporation and is only\r
4 ; intended for use with Renesas products. No other uses are authorized. This\r
5 ; software is owned by Renesas Electronics Corporation and is protected under\r
6 ; all applicable laws, including copyright laws.\r
7 ; THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
8 ; THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT\r
9 ; LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r
10 ; AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.\r
11 ; TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS\r
12 ; ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE\r
13 ; FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR\r
14 ; ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE\r
15 ; BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
16 ; Renesas reserves the right, without notice, to make changes to this software\r
17 ; and to discontinue the availability of this software. By using this software,\r
18 ; you agree to the additional terms and conditions found by accessing the\r
19 ; following link:\r
20 ; http://www.renesas.com/disclaimer\r
21 ;\r
22 ; Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved.\r
23 ;******************************************************************************\r
24 ;*******************************************************************************\r
25 ; System Name  : RZ/T1 Init program\r
26 ; File Name    : loader_init.asm\r
27 ; Version      : 0.1\r
28 ; Device       : R7S9100xx\r
29 ; Abstract     : Loader program 1\r
30 ; Tool-Chain   : IAR Embedded Workbench Ver.7.20\r
31 ; OS           : not use\r
32 ; H/W Platform : Renesas Starter Kit for RZ/T1(Preliminary)\r
33 ; Description  : Description interrupt service routine of RZ/T1\r
34 ; Limitation   : none\r
35 ;******************************************************************************\r
36 ;*******************************************************************************\r
37 ; History      : DD.MM.YYYY Version  Description\r
38 ;              :                     First Release\r
39 ;******************************************************************************\r
40 \r
41     SECTION IRQ_STACK:DATA:NOROOT(3)\r
42     SECTION FIQ_STACK:DATA:NOROOT(3)\r
43     SECTION SVC_STACK:DATA:NOROOT(3)\r
44     SECTION ABT_STACK:DATA:NOROOT(3)\r
45     SECTION UND_STACK:DATA:NOROOT(3)\r
46     SECTION CSTACK:DATA:NOROOT(3)\r
47   \r
48     SECTION LDR_DATA_RBLOCK:DATA:ROOT(2)\r
49     SECTION LDR_DATA_WBLOCK:DATA:ROOT(2)\r
50 \r
51     SECTION M3_PRG_RBLOCK:DATA:ROOT(2)\r
52     SECTION M3_PRG_WBLOCK:DATA:ROOT(2)\r
53 \r
54 ; This program is allocated to section "d_ldr_prg" \r
55     SECTION d_ldr_prg:CODE:ROOT(2)\r
56     \r
57     ARM\r
58     \r
59     PUBLIC loader_init1\r
60     PUBLIC set_low_vec\r
61     PUBLIC cache_init\r
62     PUBLIC mpu_init\r
63     IMPORT loader_init2\r
64 \r
65  \r
66 ;***********************************************************************\r
67 ; Function Name : loader_init1\r
68 ; Description   : Initialize sysytem by loader program\r
69 ; Arguments     : none\r
70 ; Return Value  : none\r
71 ;***********************************************************************\r
72 loader_init1:\r
73  \r
74 stack_init:\r
75     ; Stack setting  \r
76     cps  #17  ; FIQ mode\r
77     ldr  sp, =SFE(FIQ_STACK)\r
78     cps  #18  ; IRQ mode\r
79     ldr  sp, =SFE(IRQ_STACK)\r
80     cps  #23  ; Abort mode\r
81     ldr  sp, =SFE(ABT_STACK)\r
82     cps  #27  ; Undef mode\r
83     ldr  sp, =SFE(UND_STACK)\r
84     cps  #31  ; System mode\r
85     ldr  sp, =SFE(CSTACK)\r
86     cps  #19  ; SVC mode\r
87     ldr  sp, =SFE(SVC_STACK)\r
88  \r
89 vfp_init:  \r
90     ; Initialize VFP setting\r
91     mrc  p15, #0, r0, c1, c0, #2  ; Enables cp10 and cp11 accessing\r
92     orr  r0, r0, #0xF00000\r
93     mcr  p15, #0, r0, c1, c0, #2\r
94     isb                           ; Ensuring Context-changing\r
95     \r
96     mov  r0, #0x40000000  ; Enables VFP operation\r
97     vmsr  fpexc, r0\r
98      \r
99 data_init:   \r
100     ; Initialize variables has initialized value of loader_init2.\r
101     ; Variables has no initialized value already be initialized to zero \r
102     ; in boot sequence(Clear ATCM and BTCM).\r
103     ldr  r0, =SFB(LDR_DATA_RBLOCK)\r
104     ldr  r1, =SFB(LDR_DATA_WBLOCK)\r
105     ldr  r2, =SIZEOF(LDR_DATA_WBLOCK)\r
106     cmp  r2, #0\r
107 #ifdef DUAL_CORE\r
108     beq  m3_init\r
109 #else\r
110     beq  jump_loader_init2\r
111 #endif\r
112    \r
113 copy_to_LDR_DATA:\r
114     ldrb  r3, [r0], #1\r
115     strb  r3, [r1], #1\r
116     subs  r2, r2, #1\r
117     bne   copy_to_LDR_DATA    \r
118     dsb                     ; Ensuring data-changing\r
119 \r
120 #ifdef DUAL_CORE\r
121 \r
122 m3_init:\r
123     ; Initialize image for Cortex-M3 core\r
124     ldr  r0, =SFB(M3_PRG_RBLOCK)\r
125     ldr  r1, =SFB(M3_PRG_WBLOCK)\r
126     ldr  r2, =SIZEOF(M3_PRG_WBLOCK)\r
127     cmp  r2, #0\r
128     beq  jump_loader_init2\r
129    \r
130 copy_to_M3_PRG:\r
131     ldrb  r3, [r0], #1\r
132     strb  r3, [r1], #1\r
133     subs  r2, r2, #1\r
134     bne   copy_to_M3_PRG    \r
135     dsb                     ; Ensuring data-changing\r
136 \r
137 #endif\r
138 \r
139     ; Jump to loader_init2\r
140 jump_loader_init2:\r
141     ldr  r0, =loader_init2\r
142     bx  r0\r
143 \r
144 ;***********************************************************************\r
145 ; Function Name : cache_init\r
146 ; Description   : Initialize I1, D1 cache and MPU settings\r
147 ; Arguments     : none\r
148 ; Return Value  : none\r
149 ;***********************************************************************\r
150 \r
151 ;*******************************************************************************\r
152 ; Macro definitions\r
153 ;*******************************************************************************\r
154 \r
155 SCTLR_BR:  dcd  0x00020000\r
156 SCTLR_M:   dcd  0x00000001\r
157 SCTLR_I_C: dcd  0x00001004\r
158  \r
159 DRBAR_REGION_0: dcd  0x04000000  ; Base address = 0400_0000h\r
160 DRACR_REGION_0: dcd  0x0000030C  ; R/W(full), Normal, Non-cache, share\r
161 DRSR_REGION_0:  dcd  0x00000025  ; Size 512KB, MPU enable\r
162 \r
163 DRBAR_REGION_1: dcd  0x10000000  ; Base address = 1000_0000h \r
164 DRACR_REGION_1: dcd  0x0000030C  ; R/W(full), Normal, Non-cache, share\r
165 DRSR_REGION_1:  dcd  0x00000033  ; Size 64MB, MPU enable \r
166 \r
167 DRBAR_REGION_2: dcd  0x20000000  ; Base address = 2000_0000h \r
168 DRACR_REGION_2: dcd  0x0000030C  ; R/W(full), Normal, Non-cache, share\r
169 DRSR_REGION_2:  dcd  0x00000025  ; Size 512KB, MPU enable\r
170 \r
171 DRBAR_REGION_3: dcd  0x22000000  ; Base address = 2200_0000h \r
172 DRACR_REGION_3: dcd  0x00000307  ; R/W(full), Normal, Write-back no allocate, share\r
173 DRSR_REGION_3:  dcd  0x00000033  ; Size 64MB, MPU enable \r
174 \r
175 DRBAR_REGION_4: dcd  0x30000000  ; Base address = 3000_0000h \r
176 DRACR_REGION_4: dcd  0x0000030F  ; R/W(full), Normal, Write-back write allocate, share \r
177 DRSR_REGION_4:  dcd  0x00000033  ; Size 64MB, MPU enable  \r
178 \r
179 DRBAR_REGION_5: dcd  0x40000000  ; Base address = 4000_0000h \r
180 DRACR_REGION_5: dcd  0x0000030F  ; R/W(full), Normal, Write-back write allocate, share \r
181 DRSR_REGION_5:  dcd  0x00000035  ; Size 128MB, MPU enable  \r
182  \r
183 DRBAR_REGION_6: dcd  0x48000000  ; Base address = 4800_0000h \r
184 DRACR_REGION_6: dcd  0x0000030F  ; R/W(full), Normal, Write-back write allocate, share \r
185 DRSR_REGION_6:  dcd  0x00000035  ; Size 128MB, MPU enable  \r
186 \r
187 DRBAR_REGION_7: dcd  0x50000000  ; Base address = 5000_0000h \r
188 DRACR_REGION_7: dcd  0x00001305  ; R/W(full), XN, Device, share \r
189 DRSR_REGION_7:  dcd  0x00000035  ; Size 128MB, MPU enable  \r
190 \r
191 DRBAR_REGION_8: dcd  0x60000000  ; Base address = 6000_0000h\r
192 DRACR_REGION_8: dcd  0x0000030C  ; R/W(full), Normal, Non-cache, share \r
193 DRSR_REGION_8:  dcd  0x00000035  ; Size 128MB, MPU enable  \r
194 \r
195 DRBAR_REGION_9: dcd  0x68000000  ; Base address = 6800_0000h \r
196 DRACR_REGION_9: dcd  0x0000030C  ; R/W(full), Normal, Non-cache, share \r
197 DRSR_REGION_9:  dcd  0x00000035  ; Size 128MB, MPU enable  \r
198  \r
199 DRBAR_REGION_10: dcd  0x70000000 ; Base address = 7000_0000h \r
200 DRACR_REGION_10: dcd  0x00001305 ; R/W(full), XN, Device, share \r
201 DRSR_REGION_10:  dcd  0x00000035 ; Size 128MB, MPU enable  \r
202 \r
203 DRBAR_REGION_11: dcd  0x80000000 ; Base address = 8000_0000h \r
204 DRACR_REGION_11: dcd  0x00001305 ; R/W(full), XN, Device, share \r
205 DRSR_REGION_11:  dcd  0x0000003D ; Size 2GB, MPU enable  \r
206 \r
207 cache_init:\r
208     push  {lr}\r
209 \r
210 cache_invalidate:\r
211     ; Invalidate the I1, D1 cache \r
212     mov  r0, #0\r
213     mcr  p15, #0, r0, c7, c5, #0   ; Invalidate all Instruction Caches (Write-value is Ignored)\r
214     isb                            ; Ensuring Context-changing\r
215     mcr  p15, #0, r0, c15, c5, #0  ; Invalidate all Data Caches (Write-value is Ignored)\r
216     isb                            ; Ensuring Context-changing\r
217   \r
218     ; Adopt default memory map as background map.\r
219     ldr  r0, SCTLR_BR           ; Set SCTLR.BR bit to 1\r
220     mrc  p15, 0, r1, c1, c0, 0  \r
221     orr  r1, r1, r0\r
222     dsb\r
223     mcr  p15, 0, r1, c1, c0, 0  \r
224     isb                         ; Ensuring Context-changing\r
225     \r
226     ; Initialize MPU settings (region 0 to 11)\r
227     ; Define region 0\r
228     mov  r0,  #0\r
229     ldr  r1, DRBAR_REGION_0\r
230     ldr  r2, DRACR_REGION_0\r
231     ldr  r3, DRSR_REGION_0\r
232     bl  mpu_init\r
233 \r
234     ; Define region 1\r
235     mov  r0,  #1\r
236     ldr  r1, DRBAR_REGION_1\r
237     ldr  r2, DRACR_REGION_1\r
238     ldr  r3, DRSR_REGION_1\r
239     bl  mpu_init\r
240 \r
241     ; Define region 2\r
242     mov  r0,  #2\r
243     ldr  r1, DRBAR_REGION_2\r
244     ldr  r2, DRACR_REGION_2\r
245     ldr  r3, DRSR_REGION_2\r
246     bl  mpu_init\r
247 \r
248     ; Define region 3\r
249     mov  r0,  #3\r
250     ldr  r1, DRBAR_REGION_3\r
251     ldr  r2, DRACR_REGION_3\r
252     ldr  r3, DRSR_REGION_3\r
253     bl  mpu_init\r
254 \r
255     ; Define region 4\r
256     mov  r0,  #4\r
257     ldr  r1, DRBAR_REGION_4\r
258     ldr  r2, DRACR_REGION_4\r
259     ldr  r3, DRSR_REGION_4\r
260     bl  mpu_init\r
261 \r
262     ; Define region 5\r
263     mov  r0,  #5\r
264     ldr  r1, DRBAR_REGION_5\r
265     ldr  r2, DRACR_REGION_5\r
266     ldr  r3, DRSR_REGION_5\r
267     bl  mpu_init\r
268 \r
269     ; Define region 6\r
270     mov  r0,  #6\r
271     ldr  r1, DRBAR_REGION_6\r
272     ldr  r2, DRACR_REGION_6\r
273     ldr  r3, DRSR_REGION_6\r
274     bl  mpu_init\r
275 \r
276     ; Define region 7\r
277     mov  r0,  #7\r
278     ldr  r1, DRBAR_REGION_7\r
279     ldr  r2, DRACR_REGION_7\r
280     ldr  r3, DRSR_REGION_7\r
281     bl  mpu_init\r
282 \r
283     ; Define region 8\r
284     mov  r0,  #8\r
285     ldr  r1, DRBAR_REGION_8\r
286     ldr  r2, DRACR_REGION_8\r
287     ldr  r3, DRSR_REGION_8\r
288     bl  mpu_init\r
289 \r
290     ; Define region 9\r
291     mov  r0,  #9\r
292     ldr  r1, DRBAR_REGION_9\r
293     ldr  r2, DRACR_REGION_9\r
294     ldr  r3, DRSR_REGION_9\r
295     bl  mpu_init\r
296 \r
297     ; Define region 10\r
298     mov  r0,  #10\r
299     ldr  r1, DRBAR_REGION_10\r
300     ldr  r2, DRACR_REGION_10\r
301     ldr  r3, DRSR_REGION_10\r
302     bl  mpu_init\r
303 \r
304     ; Define region 11\r
305     mov  r0,  #11\r
306     ldr  r1, DRBAR_REGION_11\r
307     ldr  r2, DRACR_REGION_11\r
308     ldr  r3, DRSR_REGION_11\r
309     bl  mpu_init\r
310     \r
311     ; Enables MPU operation\r
312     ldr  r0, SCTLR_M            ; Set SCTLR.M bit to 1\r
313     mrc  p15, 0, r1, c1, c0, 0  \r
314     orr  r1, r1, r0\r
315     dsb\r
316     mcr  p15, 0, r1, c1, c0, 0  \r
317     isb                         ; Ensuring Context-changing\r
318     \r
319     ; Enables I1,D1 cache operation\r
320     ldr  r0, SCTLR_I_C          ; Set SCTLR.I and C bit to 1\r
321     mrc  p15, 0, r1, c1, c0, 0  \r
322     orr  r1, r1, r0\r
323     dsb\r
324     mcr  p15, 0, r1, c1, c0, 0  \r
325     isb                         ; Ensuring Context-changing\r
326 \r
327     pop  {pc}\r
328     bx  lr\r
329 \r
330 ;***********************************************************************\r
331 ; Function Name : mpu_init\r
332 ; Description   : Initialize MPU settings\r
333 ; Arguments     : none\r
334 ; Return Value  : none\r
335 ;***********************************************************************\r
336 mpu_init:\r
337     ; RGNR(MPU Memory Region Number Register)\r
338     mcr p15, #0, r0, c6, c2, #0\r
339     isb                             ; Ensuring Context-changing\r
340     \r
341     ; DRBAR(Data Region Base Address Register)\r
342     mcr  p15, #0, r1, c6, c1, #0\r
343     isb                             ; Ensuring Context-changing\r
344 \r
345     ; DRACR(Data Region Access Control Register)\r
346     mcr p15, #0, r2, c6, c1, #4\r
347     isb                             ; Ensuring Context-changing\r
348 \r
349     ; DRSR(Data Region Size and Enable Register)\r
350     mcr p15, #0, r3, c6, c1, #2\r
351     isb                             ; Ensuring Context-changing\r
352     \r
353     bx      lr\r
354 \r
355 \r
356 ;***********************************************************************\r
357 ; Function Name : set_low_vec\r
358 ; Description   : Initialize sysytem by loader program\r
359 ; Arguments     : none\r
360 ; Return Value  : none\r
361 ;***********************************************************************\r
362 set_low_vec:\r
363     mrc  p15, 0, r0, c1, c0, 0  ; Set SCTLR.V bit to 1 (low-vector)\r
364     and  r0, r0, #0xFFFFDFFF\r
365     mcr  p15, 0, r0, c1, c0, 0\r
366     isb                         ; Ensuring Context-changing\r
367     \r
368     bx  lr  \r
369 \r
370     END   \r
371 ; End of File \r