;***************************************************************************** | |
; Copyright Statement: | |
; -------------------- | |
; This software is protected by Copyright and the information contained | |
; herein is confidential. The software may not be copied and the information | |
; contained herein may not be used or disclosed except with the written | |
; permission of MediaTek Inc. (C) 2016 | |
; | |
;***************************************************************************** | |
; | |
;***************************************************************************** | |
; | |
; Filename: | |
; --------- | |
; MIPS_MPU_Viewer.cmm (v.1.0) | |
; | |
; Project: | |
; -------- | |
; MT6292 | |
; | |
; Description: | |
; ------------ | |
; This file generates human readable memory map from MPU tables | |
; | |
; Author: | |
; ------- | |
; Jari Manninen (mtk09391) | |
; | |
;============================================================================ | |
; HISTORY | |
; Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! | |
;------------------------------------------------------------------------------ | |
; * $Revision$ | |
; * $Modtime$ | |
; * $Log$ | |
; * | |
; * 05 17 2017 hw.jheng | |
; * [MOLY00250340] [93] MIPS_MPU_Viewer.cmm update | |
; * | |
; * 09 02 2017 jari.manninen | |
; * Initial Version | |
; * Inherited MIP_MMU_View.cmm functionality to a new MPU parser. | |
;------------------------------------------------------------------------------ | |
; Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! | |
;============================================================================ | |
AREA.Create mpu_area 100. 70. | |
WINPOS , , 100. 50. | |
DIALOG.AREA mpu_area | |
( | |
HEADER "DIALOG.AREA MPU Viewer" | |
POS 1. 0. 82. | |
LINE "CORE Options" | |
POS 0.25 1. 11. 1. | |
BUTTON "CORE 0" | |
( | |
LOCAL &tmp | |
AREA.Select mpu_area | |
AREA.CLEAR mpu_area | |
&CORE_ID=0 | |
&tmp=FORMAT.DECIMAL(1,&CORE_ID) | |
DIALOG.SET LINENUM "MPU Table for CORE: &tmp" | |
; enable clean button | |
DIALOG.Enable BTN_CLEAN | |
GOSUB parse | |
) | |
POS 12.25 1. 11. 1. | |
BUTTON "CORE 1" | |
( | |
LOCAL &tmp | |
AREA.Select mpu_area | |
AREA.CLEAR mpu_area | |
&CORE_ID=1 | |
&tmp=FORMAT.DECIMAL(1,&CORE_ID) | |
DIALOG.SET LINENUM "MPU Table for CORE: &tmp" | |
; enable clean button | |
DIALOG.Enable BTN_CLEAN | |
GOSUB parse | |
) | |
POS 24.25 1. 11. 1. | |
BUTTON "Both" | |
( | |
AREA.Select mpu_area | |
AREA.CLEAR mpu_area | |
&CORE_ID=2 | |
DIALOG.SET LINENUM "MPU Table for both CORE's" | |
; enable clean button | |
DIALOG.Enable BTN_CLEAN | |
GOSUB parse | |
) | |
POS 63. 1. 11. 1. | |
BTN_CLEAN: button "Reset" | |
( | |
AREA.CLEAR mpu_area | |
DIALOG.set LINENUM "Select the CORE from above buttons" | |
; disable clean button | |
DIALOG.Disable BTN_CLEAN | |
) | |
; close button | |
POS 74. 1. 11. 1. | |
BUTTON "Close" "goto closeDialog" | |
; handle [X] and Escape | |
CLOSE "goto closeDialog" | |
POS 2. 2. 20. 1. | |
LINENUM: dyntext "Select the CORE from above buttons" | |
) | |
;initialy disable clean button | |
DIALOG.DISABLE BTN_CLEAN | |
STOP | |
;common jumplabel for closing the dialog and ending script | |
closeDialog: | |
DIALOG.END | |
ENDDO | |
parse: | |
LOCAL &core | |
&core=FORMAT.DECIMAL(1,&CORE_ID) | |
&CORE_ID=0 | |
IF &core==0 | |
( | |
PRINT "MPU Base Segments for CORE 0" | |
PRINT "======================================================================" | |
GOSUB parseBaseSegments 0 | |
PRINT " " | |
PRINT "MPU Table for CORE 0" | |
PRINT "======================================================================" | |
GOSUB parseCore 0 | |
) | |
IF &core==1 | |
( | |
PRINT "MPU Base Segments for CORE 1" | |
PRINT "======================================================================" | |
GOSUB parseBaseSegments 1 | |
PRINT " " | |
PRINT "MPU Table for CORE 1" | |
PRINT "======================================================================" | |
GOSUB parseCore 1 | |
) | |
IF &core==2 | |
( | |
PRINT "MPU Base Segments for CORE 0" | |
PRINT "======================================================================" | |
GOSUB parseBaseSegments 0 | |
PRINT " " | |
PRINT "MPU Table for CORE 0" | |
PRINT "======================================================================" | |
GOSUB parseCore 0 | |
PRINT " " | |
PRINT "MPU Base Segments for CORE 1" | |
PRINT "======================================================================" | |
GOSUB parseBaseSegments 1 | |
PRINT " " | |
PRINT "MPU Table for CORE 1" | |
PRINT "======================================================================" | |
GOSUB parseCore 1 | |
) | |
PRINT "======================================================================" | |
RETURN | |
parseBaseSegments: | |
ENTRY &core_index | |
LOCAL &loop_count | |
LOCAL &index | |
LOCAL &enable | |
LOCAL &start_addr | |
LOCAL &size | |
LOCAL &count | |
LOCAL &RI | |
LOCAL &WI | |
LOCAL &XI | |
LOCAL &CCA | |
&index=0 | |
&loop_count=10 | |
WHILE &index<&loop_count | |
( | |
&ATTRIBUTE_STRING="" | |
&start_addr=10000000*&index | |
GOSUB parseStartAddr &start_addr | |
&size=1C | |
&count=1 | |
GOSUB parseEndAddr &start_addr &size &count | |
&RI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].RI) | |
&WI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].WI) | |
&XI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].XI) | |
&CCA=v.value(IA_MPU_SETTING_CORE_EX[&core_index].segment_control[&index].CCA) | |
GOSUB parseConfig &RI &WI &XI &CCA | |
PRINT FORMAT.Decimal(2.,&index) "&ATTRIBUTE_STRING" | |
&index=&index+1 | |
) | |
RETURN | |
parseCore: | |
ENTRY &core_index | |
LOCAL &loop_count | |
LOCAL &index | |
LOCAL &enable | |
LOCAL &start_addr | |
LOCAL &size | |
LOCAL &count | |
LOCAL &RI | |
LOCAL &WI | |
LOCAL &XI | |
LOCAL &CCA | |
&index=0 | |
&loop_count=18 | |
&ATTRIBUTE_STRING="" | |
WHILE &index<&loop_count | |
( | |
&enable=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].Region_Enable) | |
IF &enable!=0 | |
( | |
&ATTRIBUTE_STRING="" | |
&start_addr=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].Region_Base_Address) | |
GOSUB parseStartAddr &start_addr | |
&size=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].SubRegion_Size) | |
&count=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].SubRegion_Count)+1 | |
GOSUB parseEndAddr &start_addr &size &count | |
&RI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].RI) | |
&WI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].WI) | |
&XI=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].XI) | |
&CCA=v.value(IA_MPU_SETTING_CORE_EX[&core_index].region[&index].CCA) | |
GOSUB parseConfig &RI &WI &XI &CCA | |
PRINT FORMAT.Decimal(2.,&index) "&ATTRIBUTE_STRING" | |
) | |
&index=&index+1 | |
) | |
RETURN | |
parseStartAddr: | |
ENTRY &saddr | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" Address:"+"0x"+FORMAT.Hex(8.,&saddr)+"--" | |
RETURN | |
parseEndAddr: | |
ENTRY &addr ®size ®Count | |
LOCAL &loop_count | |
LOCAL &index | |
LOCAL &mpler | |
&loop_count=®size-5 | |
&index=0 | |
&mpler=1 | |
WHILE &index<&loop_count | |
( | |
&mpler=&mpler*2 | |
&index=&index+1 | |
) | |
&mpler=&mpler*20 | |
&mpler=&mpler*®Count | |
&addr=&addr+&mpler-1 | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+"0x"+FORMAT.Hex(8.,&addr) | |
RETURN | |
parseConfig: | |
ENTRY &ri &wi &xi &cca | |
IF &cca==2 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" UC " | |
) | |
IF &cca==3 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WB " | |
) | |
IF &cca==4 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" CWBE" | |
) | |
IF &cca==5 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" CWB " | |
) | |
IF &cca==7 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" UCA " | |
) | |
IF &ri==1 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" READ INHIBIT" | |
) | |
ELSE | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" READABLE " | |
) | |
IF &wi==1 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WRITE INHIBIT" | |
) | |
ELSE | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" WRITABLE " | |
) | |
IF &xi==1 | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" EXE INHIBIT" | |
) | |
ELSE | |
( | |
&ATTRIBUTE_STRING="&ATTRIBUTE_STRING"+" EXECUTABLE " | |
) | |
RETURN |