]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5/Source/RenesasFiles/board_settings/ttb_init.s
Add missing +TCP code.
[freertos] / FreeRTOS / Demo / CORTEX_A9_RZ_R7S72100_IAR_DS-5 / Source / RenesasFiles / board_settings / ttb_init.s
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) 2012 Renesas Electronics Corporation. All rights reserved.\r
23 ;*******************************************************************************/\r
24 ;/*******************************************************************************\r
25 ;* File Name     : ttb_init.s\r
26 ;* Version       : 0.01\r
27 ;* Device(s)     : Aragon\r
28 ;* Tool-Chain    : DS-5 Ver 5.8\r
29 ;*                 ARM Complier \r
30 ;*               : \r
31 ;* H/W Platform  : Aragon CPU Board\r
32 ;* Description   : Aragon Sample Program - TTB initialize\r
33 ;*******************************************************************************/\r
34 ;/*******************************************************************************\r
35 ;* History : DD.MM.YYYY Version Description\r
36 ;*         : 23.05.2012 0.01\r
37 ;*******************************************************************************/\r
38 \r
39 ; ---- Parameter setting to level1 descriptor (bits 19:0) ----\r
40 ; setting for Strongly-ordered memory\r
41 TTB_PARA_STRGLY                         EQU             2_00000000000000000000110111100010\r
42 ; setting for Outer and inner not cache normal memory\r
43 TTB_PARA_NORMAL_NOT_CACHE       EQU             2_00000000000000000001110111100010\r
44 ; setting for Outer and inner write back, write allocate normal memory (Cacheable)\r
45 TTB_PARA_NORMAL_CACHE           EQU             2_00000000000000000001110111101110\r
46 ; setting for Outer and inner write back, write allocate normal memory (Cacheable)\r
47 ;TTB_PARA_NORMAL_CACHE          EQU             2_00000000000000000101110111100110\r
48 \r
49 ; ---- Memory area size (MB) ----\r
50 M_SIZE_NOR              EQU             128                             ; [Area00] CS0, CS1 area (for NOR flash)\r
51 M_SIZE_SDRAM    EQU             128                             ; [Area01] CS2, CS3 area (for SDRAM)\r
52 M_SIZE_CS45             EQU             128                             ; [Area02] CS4, CS5 area\r
53 M_SIZE_SPI              EQU             128                             ; [Area03] SPI, SP2 area (for Serial flash)\r
54 M_SIZE_RAM              EQU             10                              ; [Area04] Internal RAM\r
55 M_SIZE_IO_1             EQU             502                             ; [Area05] I/O area 1\r
56 M_SIZE_NOR_M    EQU             128                             ; [Area06] CS0, CS1 area (for NOR flash) (mirror)\r
57 M_SIZE_SDRAM_M  EQU             128                             ; [Area07] CS2, CS3 area (for SDRAM) (mirror)\r
58 M_SIZE_CS45_M   EQU             128                             ; [Area08] CS4, CS5 area (mirror)\r
59 M_SIZE_SPI_M    EQU             128                             ; [Area09] SPI, SP2 area (for Serial flash) (mirror)\r
60 M_SIZE_RAM_M    EQU             10                              ; [Area10] Internal RAM (mirror)\r
61 M_SIZE_IO_2             EQU             2550                    ; [Area11] I/O area 2\r
62 \r
63 ;==================================================================\r
64 ; This code provides basic global enable for Cortex-A9 cache.\r
65 ; It also enables branch prediction\r
66 ; This code must be run from a privileged mode\r
67 ;==================================================================\r
68         AREA   INIT_TTB, CODE, READONLY\r
69 \r
70         IMPORT ||Image$$TTB$$ZI$$Base||         ;;; From scatter file\r
71         \r
72         EXPORT  init_TTB\r
73 \r
74 init_TTB        FUNCTION\r
75 \r
76 ;===================================================================\r
77 ; Cortex-A9 MMU Configuration\r
78 ; Set translation table base\r
79 ;===================================================================\r
80         ;;; Cortex-A9 supports two translation tables\r
81         ;;; Configure translation table base (TTB) control register cp15,c2\r
82         ;;; to a value of all zeros, indicates we are using TTB register 0.\r
83         MOV  r0,#0x0\r
84         MCR  p15, 0, r0, c2, c0, 2              ;;; TTBCR\r
85 \r
86         ;;; write the address of our page table base to TTB register 0\r
87         LDR  r0,=||Image$$TTB$$ZI$$Base||\r
88         MOV  r1, #0x08                                  ;;; RGN=b01  (outer cacheable write-back cached, write allocate)\r
89                                                                         ;;; S=0      (translation table walk to non-shared memory)\r
90         ORR  r1,r1,#0x40                                ;;; IRGN=b01 (inner cacheability for the translation table walk is Write-back Write-allocate)\r
91         ORR  r0,r0,r1\r
92         MCR  p15, 0, r0, c2, c0, 0              ;;; TTBR0\r
93 \r
94 ;===================================================================\r
95 ; PAGE TABLE generation \r
96 ; Generate the page tables\r
97 ; Build a flat translation table for the whole address space.\r
98 ; ie: Create 4096 1MB sections from 0x000xxxxx to 0xFFFxxxxx\r
99 ; 31                 20 19  18  17  16 15  14   12 11 10  9  8     5   4    3 2   1 0\r
100 ; |section base address| 0  0  |nG| S |AP2|  TEX  |  AP | P | Domain | XN | C B | 1 0|\r
101 ;\r
102 ; Bits[31:20]   - Top 12 bits of VA is pointer into table\r
103 ; nG[17]=0      - Non global, enables matching against ASID in the TLB when set.\r
104 ; S[16]=0       - Indicates normal memory is shared when set.\r
105 ; AP2[15]=0  \r
106 ; AP[11:10]=11  - Configure for full read/write access in all modes\r
107 ; TEX[14:12]=000\r
108 ; CB[3:2]= 00   - Set attributes to Strongly-ordered memory.\r
109 ;                 (except for the descriptor where code segment is based, see below)\r
110 ; IMPP[9]=0     - Ignored\r
111 ; Domain[5:8]=1111   - Set all pages to use domain 15\r
112 ; XN[4]=0       - Execute never disabled\r
113 ; Bits[1:0]=10  - Indicate entry is a 1MB section\r
114 ;===================================================================\r
115         LDR  r0,=||Image$$TTB$$ZI$$Base||\r
116         LDR  r1,=0xFFF\r
117         LDR  r2,=11\r
118         LDR  r3,=0\r
119         LDR      r4,=0\r
120         LDR  r5,=0\r
121 \r
122         ;;; r0 contains the address of the translation table base\r
123         ;;; r1 is loop counter\r
124         ;;; r2 is target area counter (Initialize value = Last area No.)\r
125         ;;; r3 is loop counter by area\r
126 \r
127         ;;; use loop counter to create 4096 individual table entries.\r
128         ;;; this writes from address 'Image$$TTB$$ZI$$Base' + \r
129         ;;; offset 0x3FFC down to offset 0x0 in word steps (4 bytes)\r
130 \r
131 set_mem_accsess\r
132         CMP  r2, #11\r
133         BEQ  setting_area11\r
134         CMP  r2, #10\r
135         BEQ  setting_area10\r
136         CMP  r2, #9\r
137         BEQ  setting_area9\r
138         CMP  r2, #8\r
139         BEQ  setting_area8\r
140         CMP  r2, #7\r
141         BEQ  setting_area7\r
142         CMP  r2, #6\r
143         BEQ  setting_area6\r
144         CMP  r2, #5\r
145         BEQ  setting_area5\r
146         CMP  r2, #4\r
147         BEQ  setting_area4\r
148         CMP  r2, #3\r
149         BEQ  setting_area3\r
150         CMP  r2, #2\r
151         BEQ  setting_area2\r
152         CMP  r2, #1\r
153         BEQ  setting_area1\r
154         CMP  r2, #0\r
155         BEQ  setting_area0\r
156 setting_area11                                          ;;; [area11] I/O area 2\r
157         LDR  r3, =M_SIZE_IO_2\r
158         LDR  r4, =TTB_PARA_STRGLY               ;;;     Strongly-ordered\r
159         BAL  init_counter\r
160 setting_area10                                          ;;; [area10] Internal RAM (mirror)\r
161         LDR  r3, =M_SIZE_RAM_M\r
162         LDR  r4, =TTB_PARA_NORMAL_NOT_CACHE     ;;; Normal (not cache)\r
163         BAL  init_counter\r
164 setting_area9                                           ;;; [area09] SPI, SP2 area (for Serial flash) (mirror)\r
165         LDR  r3, =M_SIZE_SPI_M\r
166         LDR  r4, =TTB_PARA_NORMAL_NOT_CACHE     ;;; Normal (not cache)\r
167         BAL  init_counter\r
168 setting_area8                                           ;;; [area08] CS4, CS5 area (mirror)\r
169         LDR  r3, =M_SIZE_CS45_M\r
170         LDR  r4, =TTB_PARA_STRGLY               ;;;     Strongly-ordered\r
171         BAL  init_counter       \r
172 setting_area7                                           ;;; [area07] CS2, CS3 area (for SDRAM) (mirror)\r
173         LDR  r3, =M_SIZE_SDRAM_M\r
174         LDR  r4, =TTB_PARA_NORMAL_NOT_CACHE     ;;; Normal (not cache)\r
175         BAL  init_counter\r
176 setting_area6                                           ;;; [area06] CS0, CS1 area (for NOR flash) (mirror)\r
177         LDR  r3, =M_SIZE_NOR_M\r
178         LDR  r4, =TTB_PARA_NORMAL_NOT_CACHE     ;;; Normal (not cache)\r
179         BAL  init_counter\r
180 setting_area5                                           ;;; [area05] I/O area 1\r
181         LDR  r3, =M_SIZE_IO_1\r
182         LDR  r4, =TTB_PARA_STRGLY               ;;;     Strongly-ordered\r
183         BAL  init_counter\r
184 setting_area4                                           ;;; [area04] Internal RAM\r
185         LDR  r3, =M_SIZE_RAM\r
186         LDR  r4, =TTB_PARA_NORMAL_CACHE ;;;     Normal (Cacheable)\r
187         BAL  init_counter\r
188 setting_area3                                           ;;; [area03] SPI, SP2 area (for Serial flash)\r
189         LDR  r3, =M_SIZE_SPI\r
190         LDR  r4, =TTB_PARA_NORMAL_CACHE ;;;     Normal (Cacheable)\r
191         BAL  init_counter\r
192 setting_area2                                           ;;; [area02] CS4, CS5 area\r
193         LDR  r3, =M_SIZE_CS45\r
194         LDR  r4, =TTB_PARA_STRGLY               ;;;     Strongly-ordered\r
195         BAL  init_counter\r
196 setting_area1                                           ;;; [area01] CS2, CS3 area (for SDRAM)\r
197         LDR  r3, =M_SIZE_SDRAM\r
198         LDR  r4, =TTB_PARA_NORMAL_CACHE ;;;     Normal (Cacheable)\r
199         BAL  init_counter       \r
200 setting_area0                                           ;;; [area00] CS0, CS1 area (for NOR flash)\r
201         LDR  r3, =M_SIZE_NOR\r
202         LDR  r4, =TTB_PARA_NORMAL_CACHE ;;;     Normal (Cacheable)\r
203         BAL  init_counter\r
204 init_counter\r
205         SUBS r3, r3, #1                                 ;;; memory size -> loop counter value\r
206 write_ttb\r
207         ORR  r5, r4, r1, LSL#20                 ;;; R5 now contains full level1 descriptor to write\r
208         STR  r5, [r0, r1, LSL#2]                ;;; Str table entry at TTB base + loopcount*4\r
209         SUB  r1, r1, #1                                 ;;; Decrement loop counter\r
210         SUBS r3, r3, #1                                 ;;; Decrement loop counter by area\r
211         BPL  write_ttb\r
212         SUBS r2, r2, #1                                 ;;; target area counter\r
213         BPL  set_mem_accsess                    ;;; To the next area\r
214 \r
215         BX   lr\r
216 \r
217         ENDFUNC\r
218 \r
219 \r
220         END\r