1 ;*******************************************************************************
\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
20 ; http://www.renesas.com/disclaimer
\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
28 ; Device : R7S9100xx
\r
29 ; Abstract : Loader program 1
\r
30 ; Tool-Chain : IAR Embedded Workbench Ver.7.20
\r
32 ; H/W Platform : Renesas Starter Kit for RZ/T1(Preliminary)
\r
33 ; Description : Description interrupt service routine of RZ/T1
\r
35 ;******************************************************************************
\r
36 ;*******************************************************************************
\r
37 ; History : DD.MM.YYYY Version Description
\r
39 ;******************************************************************************
\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
48 SECTION LDR_DATA_RBLOCK:DATA:ROOT(2)
\r
49 SECTION LDR_DATA_WBLOCK:DATA:ROOT(2)
\r
51 SECTION M3_PRG_RBLOCK:DATA:ROOT(2)
\r
52 SECTION M3_PRG_WBLOCK:DATA:ROOT(2)
\r
54 ; This program is allocated to section "d_ldr_prg"
\r
55 SECTION d_ldr_prg:CODE:ROOT(2)
\r
66 ;***********************************************************************
\r
67 ; Function Name : loader_init1
\r
68 ; Description : Initialize sysytem by loader program
\r
70 ; Return Value : none
\r
71 ;***********************************************************************
\r
77 ldr sp, =SFE(FIQ_STACK)
\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
87 ldr sp, =SFE(SVC_STACK)
\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
96 mov r0, #0x40000000 ; Enables VFP operation
\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
110 beq jump_loader_init2
\r
117 bne copy_to_LDR_DATA
\r
118 dsb ; Ensuring data-changing
\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
128 beq jump_loader_init2
\r
134 bne copy_to_M3_PRG
\r
135 dsb ; Ensuring data-changing
\r
139 ; Jump to loader_init2
\r
141 ldr r0, =loader_init2
\r
144 ;***********************************************************************
\r
145 ; Function Name : cache_init
\r
146 ; Description : Initialize I1, D1 cache and MPU settings
\r
148 ; Return Value : none
\r
149 ;***********************************************************************
\r
151 ;*******************************************************************************
\r
152 ; Macro definitions
\r
153 ;*******************************************************************************
\r
155 SCTLR_BR: dcd 0x00020000
\r
156 SCTLR_M: dcd 0x00000001
\r
157 SCTLR_I_C: dcd 0x00001004
\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
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
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
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
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
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
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
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
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
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
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
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
211 ; Invalidate the I1, D1 cache
\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
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
223 mcr p15, 0, r1, c1, c0, 0
\r
224 isb ; Ensuring Context-changing
\r
226 ; Initialize MPU settings (region 0 to 11)
\r
229 ldr r1, DRBAR_REGION_0
\r
230 ldr r2, DRACR_REGION_0
\r
231 ldr r3, DRSR_REGION_0
\r
236 ldr r1, DRBAR_REGION_1
\r
237 ldr r2, DRACR_REGION_1
\r
238 ldr r3, DRSR_REGION_1
\r
243 ldr r1, DRBAR_REGION_2
\r
244 ldr r2, DRACR_REGION_2
\r
245 ldr r3, DRSR_REGION_2
\r
250 ldr r1, DRBAR_REGION_3
\r
251 ldr r2, DRACR_REGION_3
\r
252 ldr r3, DRSR_REGION_3
\r
257 ldr r1, DRBAR_REGION_4
\r
258 ldr r2, DRACR_REGION_4
\r
259 ldr r3, DRSR_REGION_4
\r
264 ldr r1, DRBAR_REGION_5
\r
265 ldr r2, DRACR_REGION_5
\r
266 ldr r3, DRSR_REGION_5
\r
271 ldr r1, DRBAR_REGION_6
\r
272 ldr r2, DRACR_REGION_6
\r
273 ldr r3, DRSR_REGION_6
\r
278 ldr r1, DRBAR_REGION_7
\r
279 ldr r2, DRACR_REGION_7
\r
280 ldr r3, DRSR_REGION_7
\r
285 ldr r1, DRBAR_REGION_8
\r
286 ldr r2, DRACR_REGION_8
\r
287 ldr r3, DRSR_REGION_8
\r
292 ldr r1, DRBAR_REGION_9
\r
293 ldr r2, DRACR_REGION_9
\r
294 ldr r3, DRSR_REGION_9
\r
299 ldr r1, DRBAR_REGION_10
\r
300 ldr r2, DRACR_REGION_10
\r
301 ldr r3, DRSR_REGION_10
\r
306 ldr r1, DRBAR_REGION_11
\r
307 ldr r2, DRACR_REGION_11
\r
308 ldr r3, DRSR_REGION_11
\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
316 mcr p15, 0, r1, c1, c0, 0
\r
317 isb ; Ensuring Context-changing
\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
324 mcr p15, 0, r1, c1, c0, 0
\r
325 isb ; Ensuring Context-changing
\r
330 ;***********************************************************************
\r
331 ; Function Name : mpu_init
\r
332 ; Description : Initialize MPU settings
\r
334 ; Return Value : none
\r
335 ;***********************************************************************
\r
337 ; RGNR(MPU Memory Region Number Register)
\r
338 mcr p15, #0, r0, c6, c2, #0
\r
339 isb ; Ensuring Context-changing
\r
341 ; DRBAR(Data Region Base Address Register)
\r
342 mcr p15, #0, r1, c6, c1, #0
\r
343 isb ; Ensuring Context-changing
\r
345 ; DRACR(Data Region Access Control Register)
\r
346 mcr p15, #0, r2, c6, c1, #4
\r
347 isb ; Ensuring Context-changing
\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
356 ;***********************************************************************
\r
357 ; Function Name : set_low_vec
\r
358 ; Description : Initialize sysytem by loader program
\r
360 ; Return Value : none
\r
361 ;***********************************************************************
\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