| ;***************************************************************************** | |
| ; 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 |