blob: fb1e06b78cb7c2e3909943f33be7e74ccd011604 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001;*****************************************************************************
2; Copyright Statement:
3; --------------------
4; This software is protected by Copyright and the information contained
5; herein is confidential. The software may not be copied and the information
6; contained herein may not be used or disclosed except with the written
7; permission of MediaTek Inc. (C) 2016
8;
9;*****************************************************************************
10;
11;*****************************************************************************
12;
13; Filename:
14; ---------
15; MIPS_MPU_Viewer.cmm (v.1.0)
16;
17; Project:
18; --------
19; MT6292
20;
21; Description:
22; ------------
23; This file generates human readable memory map from MPU tables
24;
25; Author:
26; -------
27; Jari Manninen (mtk09391)
28;
29;============================================================================
30; HISTORY
31; Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
32;------------------------------------------------------------------------------
33; * $Revision$
34; * $Modtime$
35; * $Log$
36; *
37; * 05 17 2017 hw.jheng
38; * [MOLY00250340] [93] MIPS_MPU_Viewer.cmm update
39; *
40; * 09 02 2017 jari.manninen
41; * Initial Version
42; * Inherited MIP_MMU_View.cmm functionality to a new MPU parser.
43;------------------------------------------------------------------------------
44; Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
45;============================================================================
46
47 AREA.Create mpu_area 100. 70.
48 WINPOS , , 100. 50.
49
50 DIALOG.AREA mpu_area
51 (
52 HEADER "DIALOG.AREA MPU Viewer"
53
54 POS 1. 0. 82.
55 LINE "CORE Options"
56
57 POS 0.25 1. 11. 1.
58 BUTTON "CORE 0"
59 (
60 LOCAL &tmp
61 AREA.Select mpu_area
62 AREA.CLEAR mpu_area
63 &CORE_ID=0
64 &tmp=FORMAT.DECIMAL(1,&CORE_ID)
65 DIALOG.SET LINENUM "MPU Table for CORE: &tmp"
66 ; enable clean button
67 DIALOG.Enable BTN_CLEAN
68 GOSUB parse
69 )
70 POS 12.25 1. 11. 1.
71 BUTTON "CORE 1"
72 (
73 LOCAL &tmp
74 AREA.Select mpu_area
75 AREA.CLEAR mpu_area
76 &CORE_ID=1
77 &tmp=FORMAT.DECIMAL(1,&CORE_ID)
78 DIALOG.SET LINENUM "MPU Table for CORE: &tmp"
79 ; enable clean button
80 DIALOG.Enable BTN_CLEAN
81 GOSUB parse
82 )
83
84 POS 24.25 1. 11. 1.
85 BUTTON "Both"
86 (
87 AREA.Select mpu_area
88 AREA.CLEAR mpu_area
89 &CORE_ID=2
90 DIALOG.SET LINENUM "MPU Table for both CORE's"
91 ; enable clean button
92 DIALOG.Enable BTN_CLEAN
93 GOSUB parse
94 )
95
96 POS 63. 1. 11. 1.
97BTN_CLEAN: button "Reset"
98 (
99 AREA.CLEAR mpu_area
100 DIALOG.set LINENUM "Select the CORE from above buttons"
101 ; disable clean button
102 DIALOG.Disable BTN_CLEAN
103 )
104
105 ; close button
106 POS 74. 1. 11. 1.
107 BUTTON "Close" "goto closeDialog"
108
109 ; handle [X] and Escape
110 CLOSE "goto closeDialog"
111
112 POS 2. 2. 20. 1.
113LINENUM: dyntext "Select the CORE from above buttons"
114
115 )
116
117;initialy disable clean button
118 DIALOG.DISABLE BTN_CLEAN
119 STOP
120
121;common jumplabel for closing the dialog and ending script
122closeDialog:
123 DIALOG.END
124 ENDDO
125
126parse:
127 LOCAL &core
128 &core=FORMAT.DECIMAL(1,&CORE_ID)
129 &CORE_ID=0
130
131 IF &core==0
132 (
133 PRINT "MPU Base Segments for CORE 0"
134 PRINT "======================================================================"
135 GOSUB parseBaseSegments 0
136 PRINT " "
137
138 PRINT "MPU Table for CORE 0"
139 PRINT "======================================================================"
140 GOSUB parseCore 0
141 )
142 IF &core==1
143 (
144 PRINT "MPU Base Segments for CORE 1"
145 PRINT "======================================================================"
146 GOSUB parseBaseSegments 1
147 PRINT " "
148
149 PRINT "MPU Table for CORE 1"
150 PRINT "======================================================================"
151 GOSUB parseCore 1
152 )
153 IF &core==2
154 (
155 PRINT "MPU Base Segments for CORE 0"
156 PRINT "======================================================================"
157 GOSUB parseBaseSegments 0
158 PRINT " "
159
160 PRINT "MPU Table for CORE 0"
161 PRINT "======================================================================"
162 GOSUB parseCore 0
163 PRINT " "
164
165 PRINT "MPU Base Segments for CORE 1"
166 PRINT "======================================================================"
167 GOSUB parseBaseSegments 1
168 PRINT " "
169
170 PRINT "MPU Table for CORE 1"
171 PRINT "======================================================================"
172 GOSUB parseCore 1
173 )
174
175 PRINT "======================================================================"
176 RETURN
177
178parseBaseSegments:
179 ENTRY &core_index
180 LOCAL &loop_count
181 LOCAL &index
182 LOCAL &enable
183 LOCAL &start_addr
184 LOCAL &size
185 LOCAL &count
186 LOCAL &RI
187 LOCAL &WI
188 LOCAL &XI
189 LOCAL &CCA
190 &index=0
191 &loop_count=10
192
193 WHILE &index<&loop_count
194 (
195 &ATTRIBUTE_STRING=""
196
197 &start_addr=10000000*&index
198 GOSUB parseStartAddr &start_addr
199
200 &size=1C
201 &count=1
202 GOSUB parseEndAddr &start_addr &size &count
203
204 &RI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].RI)
205 &WI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].WI)
206 &XI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].XI)
207 &CCA=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].CCA)
208
209 GOSUB parseConfig &RI &WI &XI &CCA
210
211 PRINT FORMAT.Decimal(2.,&index) "&ATTRIBUTE_STRING"
212
213 &index=&index+1
214 )
215 RETURN
216parseCore:
217 ENTRY &core_index
218 LOCAL &loop_count
219 LOCAL &index
220 LOCAL &enable
221 LOCAL &start_addr
222 LOCAL &size
223 LOCAL &count
224 LOCAL &RI
225 LOCAL &WI
226 LOCAL &XI
227 LOCAL &CCA
228 &index=0
229 &loop_count=18
230 &ATTRIBUTE_STRING=""
231
232 WHILE &index<&loop_count
233 (
234 &enable=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].Region_Enable)
235
236 IF &enable!=0
237 (
238 &ATTRIBUTE_STRING=""
239
240 &start_addr=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].Region_Base_Address)
241 GOSUB parseStartAddr &start_addr
242
243 &size=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].SubRegion_Size)
244 &count=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].SubRegion_Count)+1
245 GOSUB parseEndAddr &start_addr &size &count
246
247 &RI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].RI)
248 &WI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].WI)
249 &XI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].XI)
250 &CCA=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].CCA)
251
252 GOSUB parseConfig &RI &WI &XI &CCA
253
254 PRINT FORMAT.Decimal(2.,&index) "&ATTRIBUTE_STRING"
255
256 )
257 &index=&index+1
258 )
259 RETURN
260
261parseStartAddr:
262 ENTRY &saddr
263 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" Address:"+"0x"+FORMAT.Hex(8.,&saddr)+"--"
264 RETURN
265
266parseEndAddr:
267 ENTRY &addr &regsize &regCount
268 LOCAL &loop_count
269 LOCAL &index
270 LOCAL &mpler
271
272 &loop_count=&regsize-5
273 &index=0
274 &mpler=1
275
276 WHILE &index<&loop_count
277 (
278 &mpler=&mpler*2
279 &index=&index+1
280 )
281 &mpler=&mpler*20
282 &mpler=&mpler*&regCount
283
284 &addr=&addr+&mpler-1
285 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+"0x"+FORMAT.Hex(8.,&addr)
286 RETURN
287
288parseConfig:
289 ENTRY &ri &wi &xi &cca
290 IF &cca==2
291 (
292 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" UC "
293 )
294 IF &cca==3
295 (
296 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WB "
297 )
298 IF &cca==4
299 (
300 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" CWBE"
301 )
302 IF &cca==5
303 (
304 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" CWB "
305 )
306 IF &cca==7
307 (
308 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" UCA "
309 )
310
311 IF &ri==1
312 (
313 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" READ INHIBIT"
314 )
315 ELSE
316 (
317 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" READABLE "
318 )
319
320 IF &wi==1
321 (
322 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WRITE INHIBIT"
323 )
324 ELSE
325 (
326 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WRITABLE "
327 )
328
329 IF &xi==1
330 (
331 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" EXE INHIBIT"
332 )
333 ELSE
334 (
335 &ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" EXECUTABLE "
336 )
337
338 RETURN