mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
755 lines
38 KiB
Python
Executable File
755 lines
38 KiB
Python
Executable File
"""
|
|
trace buffer decoder (SEROM and SERAM)
|
|
|
|
__author__ = "ronyett"
|
|
__copyright__ = "ALIF Seminconductor"
|
|
__version__ = "0.02.000"
|
|
__status__ = "Dev" "
|
|
"""
|
|
#!/usr/bin/env python3
|
|
#pylint: disable=invalid-name,superfluous-parens,anomalous-unicode-escape-in-string
|
|
|
|
|
|
TRACE_BASE_ADDRESS = 0
|
|
NUMBER_OF_TRACES = 472 #512 # SERAM Size = 0x200, 512 Words, 2K bytes
|
|
|
|
# Trace field encoding data
|
|
FLAG_MASK_SHIFT = 0
|
|
SEQ_ID_MASK_SHIFT = 2
|
|
MARKER_MASK_SHIFT = 8
|
|
ADDR_MASK_SHIFT = 16
|
|
|
|
FLAG_MASK = (0x00000003)
|
|
SEQ_ID_MASK = (0x000000FC)
|
|
MARKER_MASK = (0x0000FF00)
|
|
ADDR_MASK = (0xFFFF0000)
|
|
VOID_ENTRY = (0xFFFFFFFF)
|
|
|
|
TRACE_FLAG_NO_DATA = 0x00 # No data
|
|
TRACE_FLAG_BYTE_DATA = 0x01 # Marker is 8 bit data
|
|
TRACE_FLAG_WORD_DATA = 0x02 # Next entry is 32-bit data
|
|
TRACE_FLAG_TIMESTAMP = 0x03 # Next entry is 32 bit TimeStamp
|
|
|
|
TRACE_BUFFER_END_MARKER = 0xeeeeeeee
|
|
|
|
#
|
|
# SEROM Trace Flags
|
|
#
|
|
TRACE_BEGIN_RESET = 0x1
|
|
TRACE_SE_FIREWALL = 0x2
|
|
TRACE_HOST_FIREWALL = 0x3
|
|
TRACE_FIREWALL_CTRL_READY = 0x4
|
|
TRACE_FIREWALLS_INITIALIZED = 0x5
|
|
TRACE_LCS_INITIALIZATIONS = 0x6
|
|
TRACE_LCS_CM = 0x7 #lcs=0
|
|
TRACE_LCS_DM = 0x8 #lcs=1
|
|
TRACE_LCS_UNKNOWN_1 = 0x9 #lcs=2
|
|
TRACE_LCS_UNKNOWN_2 = 0xA #lcs=3
|
|
TRACE_LCS_UNKNOWN_3 = 0xB #lcs=4
|
|
TRACE_LCS_SE = 0xC #lcs=5
|
|
TRACE_LCS_UNKNOWN_4 = 0xD #lcs=6
|
|
TRACE_LCS_RMA = 0xE #lcs=7
|
|
TRACE_BEGIN_MAIN = 0xF
|
|
TRACE_FIND_STOC = 0x10
|
|
TRACE_LOCATE_CERT_CHAIN = 0x11
|
|
TRACE_RAW_BYPASS_CHECK = 0x12
|
|
TRACE_RAW_BYPASS = 0x13
|
|
TRACE_VERIFY_CERT_CHAIN = 0x14
|
|
TRACE_SRAM_RETAINED = 0x15
|
|
TRACE_SECURE_LCS_BOOT = 0x16
|
|
TRACE_WAKE_UP_BROWNOUT = 0x17
|
|
TRACE_START_CM55_HE = 0x18
|
|
TRACE_CERT_CHAIN_VERIFY_START = 0x19
|
|
TRACE_EACH_CERT_VERIFY = 0x1A
|
|
TRACE_CERT_CHAIN_VERIFY_END = 0x1B
|
|
TRACE_SERAM_JUMP = 0x1C
|
|
TRACE_PROCESS_ERROR = 0x1D
|
|
TRACE_CERTIFICATE_ERROR = 0x1E
|
|
TRACE_CM55_HE_FORCE_COLD_BOOT = 0x1F
|
|
|
|
TRACE_CLEAR_FIRST_BOOT_MRAM_WRITE_FAIL = 0x20
|
|
TRACE_MARK_BANK_NOT_VALID_MRAM_WRITE_FAIL = 0x21
|
|
TRACE_SET_IMAGE_BOOTED_MRAM_WRITE_FAIL = 0x22
|
|
TRACE_UPDATE_ERROR_CODES_MRAM_WRITE_FAIL = 0x23
|
|
TRACE_UPDATE_BOOTFLAGS_CHECKSUM_MRAM_WRITE_FAIL = 0x24
|
|
TRACE_BANK_A_NOT_BOOTABLE = 0x25
|
|
TRACE_BANK_B_NOT_BOOTABLE = 0x26
|
|
TRACE_NEWER_BANK_A = 0x27
|
|
TRACE_NEWER_BANK_B = 0x28
|
|
TRACE_TOC1_SERAM_OFFSET_INVALID = 0x29
|
|
TRACE_TOC2_SERAM_OFFSET_INVALID = 0x2A
|
|
TRACE_TOC1_EXTENSION_HEADER_INVALID = 0x2B
|
|
TRACE_TOC2_EXTENSION_HEADER_INVALID = 0x2C
|
|
TRACE_TOC1_BOOT_FLAGS_CHECKSUM_INVALID = 0x2D
|
|
TRACE_TOC2_BOOT_FLAGS_CHECKSUM_INVALID = 0x2E
|
|
TRACE_BANK_A_BOOT_FAILED = 0x2F
|
|
TRACE_BANK_B_BOOT_FAILED = 0x30
|
|
TRACE_WAKE_UP_RESET = 0x31
|
|
TRACE_LOAD_MSP_ADDRESS = 0x32
|
|
TRACE_LOAD_JUMP_ADDRESS = 0x33
|
|
TRACE_INVALID_TOC_OFFSET = 0x34
|
|
TRACE_CM55_HE_CPU_WAIT_RELEASE = 0x35
|
|
TRACE_PROCESS_ERROR_EXTENDED = 0x36
|
|
TRACE_FAST_BOOT_FIREWALL_PROTECT = 0x37
|
|
TRACE_BEGIN_CGU_CLOCK_CONFIGURATION = 0x38
|
|
TRACE_CGU_CLOCKS_CONFIGURED = 0x39
|
|
TRACE_MRAM_RESET_ERROR_BYPASS = 0x3A
|
|
TRACE_MRAM_SET_ERROR_BYPASS = 0x3B
|
|
TRACE_BAD_SERAM_JUMP_ADDRESS = 0x3C
|
|
TRACE_BOOT_LOADER_JUMP_RETURNED = 0x3D
|
|
TRACE_TURN_ON_SYSTEM_POWER = 0x3E
|
|
TRACE_SERAM_RETENTION_PATTERN = 0x3F
|
|
|
|
#
|
|
# SERAM Trace Flags
|
|
#
|
|
TRACE_FIREWALL_STATIC_CONFIG_BEGIN = 0x40
|
|
TRACE_FIREWALL_STATIC_CONFIG_END = 0x41
|
|
TRACE_PLL_INIT_BEGIN = 0x42
|
|
TRACE_PLL_INIT_END = 0x43
|
|
TRACE_MAINTENANCE_MODE_DETECT_BEGIN = 0x44
|
|
TRACE_MAINTENANCE_MODE_DETECT_END = 0x45
|
|
TRACE_CC_LIB_INIT_BEGIN = 0x46
|
|
TRACE_CC_LIB_INIT_END = 0x47
|
|
TRACE_M55_HE_TCM_INIT_BEGIN = 0x48
|
|
TRACE_M55_HE_TCM_INIT_END = 0x49
|
|
TRACE_ATOC_MISC_BEGIN = 0x4A
|
|
TRACE_ATOC_MISC_END = 0x4B
|
|
TRACE_STOC_DEVICE_BEGIN = 0x4C
|
|
TRACE_STOC_DEVICE_END = 0x4D
|
|
TRACE_STOC_PART_NUMBER = 0x4E
|
|
|
|
TRACE_STOC_PROCESS_BEGIN = 0x50
|
|
TRACE_ATOC_PROCESS_BEGIN = 0x51
|
|
TRACE_TOC_PROCESS_END = 0x52
|
|
TRACE_TOC_PRINT_BEGIN = 0x53
|
|
TRACE_TOC_PRINT_END = 0x54
|
|
TRACE_BANK_MAINTENANCE_BEGIN = 0x55
|
|
TRACE_BANK_MAINTENANCE_END = 0x56
|
|
TRACE_CPU_RELEASE = 0x57
|
|
TRACE_CPU_BOOT = 0x58
|
|
TRACE_WAKE_UP = 0x59
|
|
TRACE_COLD_BOOT = 0x5A
|
|
TRACE_M55_FASTBOOT_SERAM = 0x5B
|
|
TRACE_M55_TCM_RETAINED = 0x5C
|
|
TRACE_M55_VTOR_SENTINEL = 0x5D
|
|
TRACE_STOP_MODE_ENABLE_BEGIN = 0x5E
|
|
|
|
TRACE_RTOS_WFI_BEGIN = 0x60
|
|
TRACE_RTOS_WFI_END = 0x61
|
|
|
|
TRACE_DEBUG_0 = 0x62
|
|
TRACE_DEBUG_1 = 0x63
|
|
TRACE_ENTER_MAINTENANCE_MODE = 0x64
|
|
TRACE_DCU_CONFIG_BEGIN = 0x65
|
|
TRACE_DCU_CONFIG_END = 0x66
|
|
TRACE_RECEIVE_MHU = 0x67
|
|
TRACE_PROCESS_MHU = 0x68
|
|
TRACE_FINISH_MHU = 0x69
|
|
TRACE_SERAM_TO_M55_HP = 0x6A
|
|
TRACE_SERAM_TO_M55_HE = 0x6B
|
|
TRACE_M55_HP_TO_SERAM = 0x6C
|
|
TRACE_M55_HE_TO_SERAM = 0x6D
|
|
TRACE_BEGIN_TRIMMING = 0x6E
|
|
TRACE_FINISH_TRIMMING = 0x6F
|
|
|
|
TRACE_BEGIN_SERAM_BANK_COPY = 0x70
|
|
TRACE_END_SERAM_BANK_COPY = 0x71
|
|
TRACE_M55_FASTBOOT_SERAM_XIP = 0x72
|
|
TRACE_WARM_BOOT = 0x73
|
|
TRACE_A32_0_RELEASED = 0x74
|
|
TRACE_A32_1_RELEASED = 0x75
|
|
TRACE_M55_HP_RELEASED = 0x76
|
|
TRACE_M55_HE_RELEASED = 0x77
|
|
TRACE_MODEM_RELEASED = 0x78
|
|
TRACE_GNSS_RELEASED = 0x79
|
|
TRACE_DSP_RELEASED = 0x7A
|
|
TRACE_VBAT_ANA_REG2 = 0x7B
|
|
TRACE_VBAT_ANA_REG3 = 0x7C
|
|
TRACE_DCDC_REG1 = 0x7D
|
|
TRACE_COMP_REG2 = 0x7E
|
|
TRACE_NO_TRIM_VALUES_SPECIFIED = 0x7F
|
|
|
|
TRACE_SERAM_BOOT_COMPLETE = 0x80
|
|
TRACE_SERAM_BOOT_ERROR = 0x81
|
|
TRACE_SERAM_OS_ERROR = 0x82
|
|
TRACE_VBAT_ANA_REG1 = 0x83
|
|
TRACE_SOC_RESET = 0x84
|
|
TRACE_EWIC_ENABLE = 0x85
|
|
TRACE_EWIC_STATUS = 0x86
|
|
TRACE_SOC_ID = 0x87
|
|
TRACE_OVERRIDE_SOC_ID = 0x88
|
|
TRACE_ACTIVE_SW_VERSION = 0x89
|
|
|
|
TRACE_BANK_A_VALID = 0x90
|
|
TRACE_BANK_B_VALID = 0x91
|
|
TRACE_BANK_A_FIRST_BOOT = 0x92
|
|
TRACE_BANK_B_FIRST_BOOT = 0x93
|
|
TRACE_BANK_A_INVALID = 0x94
|
|
TRACE_BANK_B_INVALID = 0x95
|
|
TRACE_BOOT_BANK_A = 0x96
|
|
TRACE_BOOT_BANK_B = 0x97
|
|
TRACE_BANK_A_BOOTED = 0x98
|
|
TRACE_BANK_B_BOOTED = 0x99
|
|
TRACE_PARTIAL_TRIMMING = 0x9A
|
|
TRACE_FULL_TRIMMING = 0x9B
|
|
TRACE_TRIM55 = 0x9C
|
|
TRACE_TRIM56 = 0x9D
|
|
TRACE_TRIM57 = 0x9E
|
|
TRACE_TRIM58 = 0x9F
|
|
|
|
TRACE_RISC_V_RELEASED = 0xA0
|
|
TRACE_RISC_V_EXTSYS0_RESET = 0xA1
|
|
TRACE_RISC_V_EXTSYS0_SHUTDOWN = 0xA2
|
|
TRACE_RISC_V_EXTSYS0_EXTSYS1_WAKEUP = 0xA3
|
|
TRACE_RISC_V_EXTSYS0_WRITE_WAKEUP_SENTINEL = 0xA4
|
|
TRACE_BISR_OTP_CHECK = 0xA5
|
|
TRACE_BISR_NOT_NEEDED = 0xA6
|
|
TRACE_BISR_ENABLE = 0xA7
|
|
TRACE_BISR_FINISHED = 0xA8
|
|
TRACE_BISR_REPAIR_FAILED = 0xA9
|
|
|
|
TRACE_RESUME_FROM_STANDBY = 0xAA
|
|
|
|
TRACE_STOP_ENABLE_END = 0xB0
|
|
TRACE_OFF_HANDLER = 0xB1
|
|
TRACE_STOP_VOTES_OK = 0xB2
|
|
TRACE_SE_PPU_INTR = 0xB3
|
|
TRACE_ES0_PPU_INTR = 0xB4
|
|
TRACE_ES1_PPU_INTR = 0xB5
|
|
TRACE_STOP_BEGIN = 0xB6
|
|
TRACE_STOP_0 = 0xB7
|
|
TRACE_STOP_1 = 0xB8
|
|
TRACE_STOP_2 = 0xB9
|
|
TRACE_STOP_3 = 0xBA
|
|
TRACE_STOP_4 = 0xBB
|
|
TRACE_STOP_5 = 0xBC
|
|
TRACE_STOP_6 = 0xBD
|
|
TRACE_STOP_7 = 0xBE
|
|
TRACE_STOP_8 = 0xBF
|
|
|
|
TRACE_STOP_9 = 0xD0
|
|
TRACE_STOP_10 = 0xD1
|
|
TRACE_STOP_11 = 0xD2
|
|
TRACE_STOP_12 = 0xD3
|
|
TRACE_STOP_13 = 0xD4
|
|
TRACE_STOP_14 = 0xD5
|
|
TRACE_STOP_15 = 0xD6
|
|
|
|
|
|
|
|
# Marker trace translation
|
|
marker_lookup = {
|
|
TRACE_BEGIN_RESET : 'Begin Reset_Handler',
|
|
TRACE_SE_FIREWALL : 'SE Firewall configuration',
|
|
TRACE_HOST_FIREWALL : 'HOST Firewall configuration',
|
|
TRACE_FIREWALL_CTRL_READY : 'Firewall controller ready',
|
|
TRACE_FIREWALLS_INITIALIZED : 'Firewall initialized',
|
|
TRACE_LCS_INITIALIZATIONS : 'Begin CC312 initializations',
|
|
TRACE_LCS_CM : 'LCS = 0 -> CM',
|
|
TRACE_LCS_DM : 'LCS = 1 -> DM',
|
|
TRACE_LCS_UNKNOWN_1 : 'LCS = 2 -> UNKNOWN_1',
|
|
TRACE_LCS_UNKNOWN_2 : 'LCS = 3 -> UNKNOWN_2',
|
|
TRACE_LCS_UNKNOWN_3 : 'LCS = 4 -> UNKNOWN_3',
|
|
TRACE_LCS_SE : 'LCS = SE',
|
|
TRACE_LCS_UNKNOWN_4 : 'LCS = 6 -> UNKNOWN_4',
|
|
TRACE_LCS_RMA : 'LCS = RMA',
|
|
TRACE_BEGIN_MAIN : 'Begin Main',
|
|
TRACE_FIND_STOC : 'Find STOC in MRAM',
|
|
TRACE_LOCATE_CERT_CHAIN : 'Locate certificate chain',
|
|
TRACE_RAW_BYPASS_CHECK : 'Raw Bypass check',
|
|
TRACE_RAW_BYPASS : 'Raw Bypass method invoked',
|
|
TRACE_VERIFY_CERT_CHAIN : 'Verify certificate chain',
|
|
TRACE_SRAM_RETAINED : 'SRAM retained',
|
|
TRACE_SECURE_LCS_BOOT : 'SECURE LCS Cold Boot',
|
|
TRACE_WAKE_UP_BROWNOUT : 'Brownout detected',
|
|
TRACE_START_CM55_HE : 'Fast Boot Start CM55_HE',
|
|
TRACE_CERT_CHAIN_VERIFY_START : 'Begin certificate chain verification',
|
|
TRACE_EACH_CERT_VERIFY : 'Verify each certificate',
|
|
TRACE_CERT_CHAIN_VERIFY_END : 'End certificate chain verification',
|
|
TRACE_SERAM_JUMP : 'Jump to SERAM',
|
|
TRACE_PROCESS_ERROR : 'SEROM Error Detected',
|
|
TRACE_CERTIFICATE_ERROR : 'Certificate Processing Error Detected',
|
|
TRACE_CM55_HE_FORCE_COLD_BOOT : 'Force CM55-HE cold boot',
|
|
TRACE_CLEAR_FIRST_BOOT_MRAM_WRITE_FAIL : 'Clear boot flag MRAM write failed',
|
|
TRACE_MARK_BANK_NOT_VALID_MRAM_WRITE_FAIL : 'Mark Bank not valid MRAM write failed',
|
|
TRACE_SET_IMAGE_BOOTED_MRAM_WRITE_FAIL : 'Set Image Booted Flag in MRAM failed',
|
|
TRACE_UPDATE_ERROR_CODES_MRAM_WRITE_FAIL : 'Update Error Codes in MRAM failed',
|
|
TRACE_UPDATE_BOOTFLAGS_CHECKSUM_MRAM_WRITE_FAIL: 'Update Boot Flags Checksum in MRAM failed',
|
|
TRACE_BANK_A_NOT_BOOTABLE : 'Bank A not bootable',
|
|
TRACE_BANK_B_NOT_BOOTABLE : 'Bank B not bootable',
|
|
TRACE_NEWER_BANK_A : 'Bank A is newer',
|
|
TRACE_NEWER_BANK_B : 'Bank B is newer',
|
|
TRACE_TOC1_SERAM_OFFSET_INVALID : 'TOC1 SERAM Offset invalid',
|
|
TRACE_TOC2_SERAM_OFFSET_INVALID : 'TOC2 SERAM Offset invalid',
|
|
TRACE_TOC1_EXTENSION_HEADER_INVALID : 'TOC1 Extension Header invalid',
|
|
TRACE_TOC2_EXTENSION_HEADER_INVALID : 'TOC2 Extension Header invalid',
|
|
TRACE_TOC1_BOOT_FLAGS_CHECKSUM_INVALID : 'TOC1 Boot Flags Checksum invalid',
|
|
TRACE_TOC2_BOOT_FLAGS_CHECKSUM_INVALID : 'TOC2 Boot Flags Checksum invalid',
|
|
TRACE_BANK_A_BOOT_FAILED : 'BANK A boot failed',
|
|
TRACE_BANK_B_BOOT_FAILED : 'BANK B boot failed',
|
|
TRACE_WAKE_UP_RESET : 'SOC reset was triggered',
|
|
TRACE_LOAD_MSP_ADDRESS : 'Load MSP Address',
|
|
TRACE_LOAD_JUMP_ADDRESS : 'Load JUMP Address',
|
|
TRACE_INVALID_TOC_OFFSET : 'Invalid Alif TOC offset specified',
|
|
TRACE_CM55_HE_CPU_WAIT_RELEASE : 'CM55 HE CPU wait release',
|
|
TRACE_PROCESS_ERROR_EXTENDED : 'SEROM Error Detected - extended error',
|
|
TRACE_FAST_BOOT_FIREWALL_PROTECT : 'FAST BOOT configure firewall protection',
|
|
TRACE_BEGIN_CGU_CLOCK_CONFIGURATION : 'Begin CGU clock configuration',
|
|
TRACE_CGU_CLOCKS_CONFIGURED : 'CGU clock configuration complete',
|
|
TRACE_MRAM_RESET_ERROR_BYPASS : 'Enable MRAM ECC Error Interrupts',
|
|
TRACE_MRAM_SET_ERROR_BYPASS : 'Disable MRAM ECC Error Interrupts',
|
|
TRACE_BAD_SERAM_JUMP_ADDRESS : 'Bad SERAM Jump Address',
|
|
TRACE_BOOT_LOADER_JUMP_RETURNED : 'Boot Loader Jump Returned',
|
|
TRACE_TURN_ON_SYSTEM_POWER : 'Turn On System Power',
|
|
TRACE_SERAM_RETENTION_PATTERN : 'SERAM retention pattern detected',
|
|
TRACE_FIREWALL_STATIC_CONFIG_BEGIN : 'Firewall Static BEGIN',
|
|
TRACE_FIREWALL_STATIC_CONFIG_END : 'Firewall Static END ',
|
|
TRACE_PLL_INIT_BEGIN : 'PLL BEGIN',
|
|
TRACE_PLL_INIT_END : 'PLL END',
|
|
TRACE_MAINTENANCE_MODE_DETECT_BEGIN : 'Maintenance Detection BEGIN',
|
|
TRACE_MAINTENANCE_MODE_DETECT_END : 'Maintenance Detection END',
|
|
TRACE_CC_LIB_INIT_BEGIN : 'CC Lib BEGIN',
|
|
TRACE_CC_LIB_INIT_END : 'CC Lib END',
|
|
TRACE_M55_HE_TCM_INIT_BEGIN : 'M55 HE TCM Init BEGIN',
|
|
TRACE_M55_HE_TCM_INIT_END : 'M55 HE TCM Init END',
|
|
TRACE_ATOC_MISC_BEGIN : 'ATOC MISC BEGIN',
|
|
TRACE_ATOC_MISC_END : 'ATOC MISC END',
|
|
TRACE_STOC_DEVICE_BEGIN : 'STOC DEVICE BEGIN',
|
|
TRACE_STOC_DEVICE_END : 'STOC DEVICE END',
|
|
TRACE_STOC_PART_NUMBER : 'STOC Part#',
|
|
|
|
TRACE_STOC_PROCESS_BEGIN : 'STOC Process BEGIN',
|
|
TRACE_ATOC_PROCESS_BEGIN : 'ATOC Process BEGIN',
|
|
TRACE_TOC_PROCESS_END : 'TOC Process END',
|
|
TRACE_TOC_PRINT_BEGIN : 'TOC Print BEGIN',
|
|
TRACE_TOC_PRINT_END : 'TOC Print END',
|
|
TRACE_BANK_MAINTENANCE_BEGIN : 'BANK Maintenance BEGIN',
|
|
TRACE_BANK_MAINTENANCE_END : 'BANK Maintenance END',
|
|
TRACE_CPU_RELEASE : 'CPU release',
|
|
TRACE_CPU_BOOT : 'CPU boot',
|
|
TRACE_WAKE_UP : 'Wake up',
|
|
TRACE_COLD_BOOT : 'Cold boot',
|
|
TRACE_M55_FASTBOOT_SERAM : 'M55 fast boot by SERAM',
|
|
TRACE_M55_TCM_RETAINED : 'M55 TCM was retained',
|
|
TRACE_M55_VTOR_SENTINEL : 'M55 VTOR SENTINEL detected',
|
|
TRACE_STOP_MODE_ENABLE_BEGIN : 'Stop mode enable BEGIN',
|
|
TRACE_RTOS_WFI_BEGIN : 'RTOS Wfi BEGIN',
|
|
TRACE_RTOS_WFI_END : 'RTOS Wfi END',
|
|
TRACE_DEBUG_0 : 'Debug 0',
|
|
TRACE_DEBUG_1 : 'Debug 1',
|
|
TRACE_ENTER_MAINTENANCE_MODE : 'Enter maintenance mode',
|
|
TRACE_DCU_CONFIG_BEGIN : 'Begin DCU configuration',
|
|
TRACE_DCU_CONFIG_END : 'Finish DCU configuration',
|
|
TRACE_RECEIVE_MHU : 'Receive MHU',
|
|
TRACE_PROCESS_MHU : 'Process MHU',
|
|
TRACE_FINISH_MHU : 'Finish MHU',
|
|
TRACE_SERAM_TO_M55_HP : 'SERAM to M55_HP MHU',
|
|
TRACE_SERAM_TO_M55_HE : 'SERAM to M55_HE MHU',
|
|
TRACE_M55_HP_TO_SERAM : 'M55_HP to SERAM MHU',
|
|
TRACE_M55_HE_TO_SERAM : 'M55_HE to SERAM MHU',
|
|
TRACE_BEGIN_TRIMMING : 'Begin installing analog trim values',
|
|
TRACE_FINISH_TRIMMING : 'Finish installing analog trim values',
|
|
TRACE_BEGIN_SERAM_BANK_COPY : 'SERAM bank copy BEGIN',
|
|
TRACE_END_SERAM_BANK_COPY : 'SERAM bank copy END',
|
|
TRACE_M55_FASTBOOT_SERAM_XIP : 'M55 XIP fast boot by SERAM',
|
|
TRACE_WARM_BOOT : 'Warm boot',
|
|
TRACE_A32_0_RELEASED : 'A32_0 released',
|
|
TRACE_A32_1_RELEASED : 'A32_1 released',
|
|
TRACE_M55_HP_RELEASED : 'M55_HP released',
|
|
TRACE_M55_HE_RELEASED : 'M55_HE released',
|
|
TRACE_MODEM_RELEASED : 'M55 MODEM released',
|
|
TRACE_GNSS_RELEASED : 'M55 GNSS released',
|
|
TRACE_DSP_RELEASED : 'DSP released',
|
|
TRACE_VBAT_ANA_REG1 : 'Program VBAT_ANA_REG1',
|
|
TRACE_VBAT_ANA_REG2 : 'Program VBAT_ANA_REG2',
|
|
TRACE_VBAT_ANA_REG3 : 'Program VBAT_ANA_REG3',
|
|
TRACE_DCDC_REG1 : 'Program DCDC_REG1',
|
|
TRACE_COMP_REG2 : 'Program COMP_REG2',
|
|
TRACE_NO_TRIM_VALUES_SPECIFIED : 'No trim values specified',
|
|
TRACE_SERAM_BOOT_COMPLETE : 'SERAM boot complete',
|
|
TRACE_SERAM_BOOT_ERROR : 'SERAM boot error',
|
|
TRACE_SERAM_OS_ERROR : 'SERAM operating system boot error',
|
|
TRACE_BANK_A_VALID : 'BANK A is VALID',
|
|
TRACE_BANK_B_VALID : 'BANK B is VALID',
|
|
TRACE_BANK_A_FIRST_BOOT : 'BANK A is FIRST BOOT',
|
|
TRACE_BANK_B_FIRST_BOOT : 'BANK B is FIRST BOOT',
|
|
TRACE_BANK_A_INVALID : 'BANK A is INVALID',
|
|
TRACE_BANK_B_INVALID : 'BANK B is INVALID',
|
|
TRACE_BOOT_BANK_A : 'BOOT BANK A',
|
|
TRACE_BOOT_BANK_B : 'BOOT BANK B',
|
|
TRACE_BANK_A_BOOTED : 'BANK A BOOTED',
|
|
TRACE_BANK_B_BOOTED : 'BANK B BOOTED',
|
|
TRACE_FULL_TRIMMING : 'Full trim specified',
|
|
TRACE_TRIM55 : 'Trim OTP word 0x55',
|
|
TRACE_TRIM56 : 'Trim OTP word 0x56',
|
|
TRACE_TRIM57 : 'Trim OTP word 0x57',
|
|
TRACE_TRIM58 : 'Trim OTP word 0x58',
|
|
TRACE_SOC_RESET : 'SOC Reset Cold Boot',
|
|
TRACE_EWIC_ENABLE : 'Configure EWIC Enable',
|
|
TRACE_EWIC_STATUS : 'Read EWIC Status',
|
|
TRACE_SOC_ID : 'Read SOC_ID',
|
|
TRACE_OVERRIDE_SOC_ID : 'Override SOC_ID',
|
|
TRACE_ACTIVE_SW_VERSION : 'Certificate Active Software Version',
|
|
TRACE_RISC_V_RELEASED : 'RISC-V released',
|
|
TRACE_RISC_V_EXTSYS0_RESET : 'EXTSYS0 Reset',
|
|
TRACE_RISC_V_EXTSYS0_SHUTDOWN : 'EXTSYS0 Shutdown',
|
|
TRACE_RISC_V_EXTSYS0_EXTSYS1_WAKEUP : 'EXTSYS1 Wakeup',
|
|
TRACE_RISC_V_EXTSYS0_WRITE_WAKEUP_SENTINEL : 'EXTSYS0 Sentinel write',
|
|
TRACE_BISR_OTP_CHECK : 'BISR OTP check',
|
|
TRACE_BISR_NOT_NEEDED : 'BISR not needed',
|
|
TRACE_BISR_ENABLE : 'BISR enable',
|
|
TRACE_BISR_FINISHED : 'BISR finished',
|
|
TRACE_BISR_REPAIR_FAILED : 'BISR repair failed',
|
|
TRACE_RESUME_FROM_STANDBY : 'Resume from STANDBY mode',
|
|
TRACE_BISR_REPAIR_FAILED : 'BISR repair failed',
|
|
TRACE_STOP_ENABLE_END : 'Stop mode enable END',
|
|
TRACE_OFF_HANDLER : 'OFF mode handler',
|
|
TRACE_STOP_VOTES_OK : 'STOP votes OK',
|
|
TRACE_SE_PPU_INTR : 'SE PPU interrupt',
|
|
TRACE_ES0_PPU_INTR : 'ES0 PPU interrupt',
|
|
TRACE_ES1_PPU_INTR : 'ES1 PPU interrupt',
|
|
TRACE_STOP_BEGIN : 'STOP mode settings begin',
|
|
TRACE_STOP_0 : 'STOP_0',
|
|
TRACE_STOP_1 : 'STOP_1',
|
|
TRACE_STOP_2 : 'STOP_2',
|
|
TRACE_STOP_3 : 'STOP_3',
|
|
TRACE_STOP_4 : 'STOP_4',
|
|
TRACE_STOP_5 : 'STOP_5',
|
|
TRACE_STOP_6 : 'STOP_6',
|
|
TRACE_STOP_7 : 'STOP_7',
|
|
TRACE_STOP_8 : 'STOP_8',
|
|
TRACE_STOP_9 : 'STOP_9',
|
|
TRACE_STOP_10 : 'STOP_10',
|
|
TRACE_STOP_11 : 'STOP_11',
|
|
TRACE_STOP_12 : 'STOP_12',
|
|
TRACE_STOP_13 : 'STOP_13',
|
|
TRACE_STOP_14 : 'STOP_14',
|
|
TRACE_STOP_15 : 'STOP_15'
|
|
}
|
|
|
|
service_id_lut = {
|
|
0 : "SERVICE_MAINTENANCE_HEARTBEAT_ID",
|
|
1 : "SERVICE_MAINTENANCE_RTC_ID",
|
|
|
|
100 : "SERVICE_APPLICATION_CLOCK_MANAGEMENT",
|
|
101 : "SERVICE_APPLICATION_PINMUX_ID",
|
|
102 : "SERVICE_APPLICATION_PAD_CONTROL_ID",
|
|
103 : "SERVICE_APPLICATION_FIRMWARE_VERSION_ID",
|
|
104 : 'SERVICE_APPLICATION_UART_WRITE_ID',
|
|
105 : "SERVICE_APPLICATION_OSPI_WRITE_KEY_ID",
|
|
106 : "SERVICE_APPLICATION_DMPU_ID",
|
|
|
|
200 : "SERVICE_SYSTEM_MGMT_GET_TOC_VERSION",
|
|
201 : "SERVICE_SYSTEM_MGMT_GET_TOC_NUMBER",
|
|
202 : "SERVICE_SYSTEM_MGMT_GET_TOC_FLAGS",
|
|
203 : "SERVICE_SYSTEM_MGMT_GET_TOC_VIA_CPU_ID",
|
|
204 : "SERVICE_SYSTEM_MGMT_GET_TOC_VIA_CPU_NAME",
|
|
205 : "SERVICE_SYSTEM_MGMT_GET_TOC_INFO",
|
|
206 : "SERVICE_SYSTEM_MGMT_GET_OTP_INFO",
|
|
207 : "SERVICE_SYSTEM_MGMT_GET_DEVICE_PART_NUMBER",
|
|
208 : "SERVICE_SYSTEM_MGMT_GET_DEVICE_REVISION_DATA",
|
|
209 : "SERVICE_SYSTEM_MGMT_SET_CAPABILITIES_DEBUG",
|
|
210 : "SERVICE_SYSTEM_MGMT_READ_OTP",
|
|
211 : "SERVICE_SYSTEM_MGMT_WRITE_OTP",
|
|
|
|
300 : "SERVICE_POWER_STOP_MODE_REQ_ID",
|
|
301 : "SERVICE_POWER_EWIC_CONFIG_REQ_ID",
|
|
302 : "SERVICE_POWER_VBAT_WAKEUP_CONFIG_REQ_ID",
|
|
303 : "SERVICE_POWER_MEM_RETENTION_CONFIG_REQ_ID",
|
|
304 : "SERVICE_POWER_M55_HE_VTOR_SAVE_REQ_ID",
|
|
305 : "SERVICE_POWER_M55_HP_VTOR_SAVE_REQ_ID",
|
|
306 : "SERVICE_POWER_GLOBAL_STANDBY_REQ_ID",
|
|
307 : "SERVICE_POWER_MEMORY_POWER_REQ_ID",
|
|
308 : "SERVICE_POWER_DCDC_VOLTAGE_REQ_ID",
|
|
309 : "SERVICE_POWER_LDO_VOLTAGE_REQ_ID",
|
|
310 : "SERVICE_POWER_GET_RUN_REQ_ID",
|
|
311 : "SERVICE_POWER_SET_RUN_REQ_ID",
|
|
312 : "SERVICE_POWER_GET_OFF_REQ_ID",
|
|
313 : "SERVICE_POWER_SET_OFF_REQ_ID",
|
|
314 : "SERVICE_POWER_SETTING_CONFIG_REQ_ID",
|
|
315 : "SERVICE_POWER_SETTING_GET_REQ_ID",
|
|
|
|
400 : "SERVICE_CRYPTOCELL_GET_RND",
|
|
401 : "SERVICE_CRYPTOCELL_GET_LCS",
|
|
402 : "SERVICE_CRYPTOCELL_MBEDTLS_AES_INIT",
|
|
403 : "SERVICE_CRYPTOCELL_MBEDTLS_AES_SET_KEY",
|
|
404 : "SERVICE_CRYPTOCELL_MBEDTLS_AES_CRYPT",
|
|
405 : "SERVICE_CRYPTOCELL_MBEDTLS_CCM_GCM_SET_KEY",
|
|
406 : "SERVICE_CRYPTOCELL_MBEDTLS_CCM_GCM_CRYPT",
|
|
407 : "SERVICE_CRYPTOCELL_MBEDTLS_CHACHA20_CRYPT",
|
|
408 : "SERVICE_CRYPTOCELL_MBEDTLS_CHACHAPOLY_CRYPT",
|
|
409 : "SERVICE_CRYPTOCELL_MBEDTLS_POLY1305_CRYPT",
|
|
410 : "SERVICE_CRYPTOCELL_MBEDTLS_SHA_STARTS",
|
|
411 : "SERVICE_CRYPTOCELL_MBEDTLS_SHA_PROCESS",
|
|
412 : "SERVICE_CRYPTOCELL_MBEDTLS_SHA_UPDATE",
|
|
413 : "SERVICE_CRYPTOCELL_MBEDTLS_SHA_FINISH",
|
|
414 : "SERVICE_CRYPTOCELL_MBEDTLS_TRNG_HARDWARE_POLL",
|
|
415 : "SERVICE_CRYPTOCELL_MBEDTLS_CMAC_INIT_SETKEY",
|
|
416 : "SERVICE_CRYPTOCELL_MBEDTLS_CMAC_UPDATE",
|
|
417 : "SERVICE_CRYPTOCELL_MBEDTLS_CMAC_FINISH",
|
|
418 : "SERVICE_CRYPTOCELL_MBEDTLS_CMAC_RESET",
|
|
|
|
500 : "SERVICE_BOOT_PROCESS_TOC_ENTRY",
|
|
501 : "SERVICE_BOOT_CPU",
|
|
502 : "SERVICE_BOOT_RELEASE_CPU",
|
|
503 : "SERVICE_BOOT_RESET_CPU",
|
|
504 : "SERVICE_BOOT_RESET_SOC",
|
|
505 : "SERVICE_BOOT_SET_VTOR",
|
|
506 : "SERVICE_BOOT_SET_ARGS",
|
|
|
|
600 : "SERVICE_UPDATE_STOC",
|
|
|
|
700 : "SERVICE_CLOCK_SELECT_OSC",
|
|
701 : "SERVICE_CLOCK_SELECT_PLL",
|
|
702 : "SERVICE_CLOCK_SET",
|
|
703 : "SERVICE_CLOCK_ES0_SE",
|
|
704 : "SERVICE_CLOCK_ES1_SE",
|
|
705 : "SERVICE_CLOCK_SELECT_A32",
|
|
706 : "SERVICE_CLOCK_SELECT_ACLK",
|
|
707 : "SERVICE_CLOCK_SET_D",
|
|
708 : "SERVICE_PLL_INIT",
|
|
709 : "SERVICE_PLL_DEINIT",
|
|
710 : "SERVICE_PLL_XTAL_START",
|
|
711 : "SERVICE_PLL_XTAL_STOP",
|
|
712 : "SERVICE_PLL_XTAL_IS_STARTED",
|
|
713 : "SERVICE_PLL_CLKPLL_START",
|
|
714 : "SERVICE_PLL_CLKPLL_STOP",
|
|
715 : "SERVICE_PLL_CLKPLL_IS_LOCKED",
|
|
716 : "SERVICE_CLOCK_GET",
|
|
|
|
800 : "SERVICE_EXTSYS0_BOOT_SET_ARGS",
|
|
801 : "SERVICE_EXTSYS0_EXTSYS1_WAKEUP",
|
|
802 : "SERVICE_EXTSYS0_SHUTDOWN"
|
|
}
|
|
|
|
def readMemory32(address,offset):
|
|
"""
|
|
return an integer from byte list provided
|
|
"""
|
|
return int.from_bytes([address[offset+0],
|
|
address[offset+1],
|
|
address[offset+2],
|
|
address[offset+3]],"little")
|
|
|
|
def trace_find_marker(marker_value, buffer):
|
|
"""
|
|
look for the Trace end marker in the trace buffer
|
|
@todo should look for the full 32-bits of the marker
|
|
"""
|
|
marker_found = False
|
|
position = 0
|
|
|
|
if marker_value in buffer:
|
|
marker_found = True
|
|
position = buffer.index(marker_value)
|
|
|
|
return marker_found, position
|
|
|
|
def trace_find_end_marker(end_marker_value, trace_buffer):
|
|
"""
|
|
look for the Trace end marker in the trace buffer
|
|
@todo should look for the full 32-bits of the marker
|
|
"""
|
|
marker_found = False
|
|
position = 0
|
|
|
|
for each_trace_item in range(0,NUMBER_OF_TRACES+4+4,4):
|
|
trace_word = readMemory32(trace_buffer,
|
|
each_trace_item)
|
|
# print("[{0:08x}] {1:8x}".format(trace_word,end_marker_value))
|
|
if trace_word == end_marker_value :
|
|
marker_found = True
|
|
position = each_trace_item
|
|
#print("End marker 0x%x found at position 0x%x" %(end_marker_value, position))
|
|
break
|
|
return marker_found, position
|
|
|
|
def trace_buffer_decode(trace_buffer, seram_flag):
|
|
"""
|
|
trace_buffer_decode
|
|
based on the JYTHON code from ARM-DS
|
|
|
|
Instead of using actual memory addresses, it is using an array passed
|
|
|
|
"""
|
|
if (seram_flag):
|
|
print("*** SERAM Trace Buffer decode ***")
|
|
else:
|
|
print("*** SEROM Trace Buffer decode ***")
|
|
|
|
# print("[DEBUG] trace_buffer_len %d Marker Pos %d\n" % (
|
|
# len(trace_buffer),
|
|
# trace_buffer.index(0xee)))
|
|
|
|
# Look for the end of trace marker
|
|
marker_found, end_of_trace = trace_find_end_marker(TRACE_BUFFER_END_MARKER,
|
|
trace_buffer)
|
|
if not marker_found:
|
|
print("[ERROR] No end of trace marker was found")
|
|
return
|
|
|
|
# trace vars structure is at the end of the trace buffer
|
|
# header start
|
|
trace_vars_address = end_of_trace - 4
|
|
|
|
trace_vars_p = readMemory32(trace_buffer, trace_vars_address)
|
|
print("*** Trace Header ***")
|
|
print("[0x{0:08x}] 0x{1:08x}".format(trace_vars_address,trace_vars_p))
|
|
|
|
trace_total = (trace_vars_p >> 16) & 0xFF
|
|
#print("trace_vars_p >> 16 trace_total = 0x%x" %(trace_total))
|
|
trace_total = min(trace_total, NUMBER_OF_TRACES / 4)
|
|
|
|
trace_vars_address += 4
|
|
trace_vars_p = trace_buffer[trace_vars_address]
|
|
print("[0x{0:08x}] 0x{1:08x}" .format(trace_vars_address,
|
|
readMemory32(trace_buffer,trace_vars_address)))
|
|
print("trace_total = %d" %(trace_total))
|
|
print("********************")
|
|
|
|
# Decode the trace buffer
|
|
print(" Address Seq# LR Trace Marker Marker Data")
|
|
|
|
word_offset = 0
|
|
|
|
while trace_total > 0:
|
|
#print(" ")
|
|
#print("while() start. trace_total = 0x%x" %(trace_total))
|
|
variable_enabled = False
|
|
read_address = TRACE_BASE_ADDRESS + word_offset
|
|
trace_item = readMemory32(trace_buffer,read_address)
|
|
if trace_item == VOID_ENTRY:
|
|
print(" XXXXXXXX")
|
|
else:
|
|
flag = (trace_item & FLAG_MASK) >> FLAG_MASK_SHIFT
|
|
seq_id = (trace_item & SEQ_ID_MASK) >> SEQ_ID_MASK_SHIFT
|
|
addr = (trace_item & ADDR_MASK) >> ADDR_MASK_SHIFT
|
|
marker = (trace_item & MARKER_MASK) >> MARKER_MASK_SHIFT
|
|
|
|
#print("word_offset = 0x%x" %(word_offset))
|
|
#print("trace_item = 0x%x" %(trace_item))
|
|
#print("flag = 0x%x" %(flag))
|
|
#print("marker = 0x%x" %(marker))
|
|
#print("read_address = 0x%x" %(read_address))
|
|
|
|
if TRACE_FLAG_WORD_DATA == flag:
|
|
#print("TRACE_FLAG_WORD_DATA")
|
|
#trace_total = trace_total - 1 #marker + data
|
|
|
|
read_address = TRACE_BASE_ADDRESS + word_offset
|
|
# second 32-bit word is data we need, advance the word_offset
|
|
#word_offset = word_offset + 4
|
|
word_offset = (word_offset + 4) % NUMBER_OF_TRACES
|
|
word_data_address = TRACE_BASE_ADDRESS + word_offset
|
|
word_data = readMemory32(trace_buffer,word_data_address)
|
|
|
|
#print("word_offset = 0x%x" %(word_offset))
|
|
#print("word_data_address = 0x%x" %(word_data_address))
|
|
#print("word_data = 0x%x" %(word_data))
|
|
|
|
if marker in marker_lookup:
|
|
marker_string = marker_lookup[marker]
|
|
if marker_string is None:
|
|
marker_string = "MARKER?"
|
|
variable_enabled = False
|
|
else:
|
|
variable_enabled = True
|
|
|
|
#print("marker_string = %s" %(marker_string))
|
|
marker = (trace_item & MARKER_MASK) >> MARKER_MASK
|
|
# print("[%08x] %2d %8X %4X %2X" %(read_address,
|
|
# seq_id,
|
|
# trace_item,
|
|
# addr,
|
|
# marker))
|
|
# print("variable_enabled = %d" %(variable_enabled))
|
|
if (marker_string.__eq__("Process MHU")):
|
|
service_id_string = service_id_lut[word_data]
|
|
print("[%08x] %2d 0x%04X %-45s %s" %(read_address,
|
|
seq_id, addr, marker_string, service_id_string))
|
|
elif variable_enabled is True:
|
|
if marker_string.__eq__("STOC Part#"):
|
|
print("PART NUMBER#1")
|
|
print("[%08x] %2d 0x%04X %8X 0x%08X %c" %(read_address,
|
|
addr, seq_id, 0x10, trace_item, word_data, chr(word_data & 0xFF)))
|
|
else:
|
|
print("[%08x] %2d 0x%04X %8X 0x%08X" %(read_address,
|
|
seq_id, addr, trace_item, word_data))
|
|
else:
|
|
if marker_string.__eq__("STOC Part#"): # Decode the STOC Part #
|
|
print("[%08x] %2d 0x%04X %-45s 0x%08X %c%c%c%c" %(read_address,
|
|
seq_id, addr, marker_string, word_data,
|
|
chr(word_data & 0xFF),
|
|
chr(word_data >> 8 & 0xFF),
|
|
chr(word_data >> 16 & 0xFF),
|
|
chr(word_data >> 24 & 0xFF) )
|
|
)
|
|
else:
|
|
print("[%08x] %2d 0x%04X %-45s 0x%08X" %(read_address,
|
|
seq_id, addr, marker_string, word_data))
|
|
|
|
elif TRACE_FLAG_TIMESTAMP == flag:
|
|
#print("TRACE_FLAG_TIMESTAMP")
|
|
#trace_total = trace_total - 1 #marker + timestamp
|
|
# second 32-bit word is time stamp, advance the word_offset
|
|
#word_offset = word_offset + 4
|
|
word_offset = (word_offset + 4) % NUMBER_OF_TRACES
|
|
read_address = TRACE_BASE_ADDRESS + word_offset
|
|
trace_item_dword = readMemory32(trace_buffer,read_address)
|
|
|
|
#print("word_offset = 0x%x" %(word_offset))
|
|
#print("read_address = 0x%x" %(read_address))
|
|
#print("trace_item_dword = 0x%x" %(trace_item_dword))
|
|
|
|
if marker in marker_lookup:
|
|
marker_string = marker_lookup[marker]
|
|
if marker_string is None:
|
|
marker_string = "MARKER?"
|
|
variable_enabled = False
|
|
else:
|
|
variable_enabled = True
|
|
print("[%08x] %2d 0x%04X %-45s T:%8d" %(
|
|
read_address,
|
|
seq_id,
|
|
addr,
|
|
marker_string,
|
|
trace_item_dword))
|
|
|
|
elif TRACE_FLAG_BYTE_DATA == flag:
|
|
#print("TRACE_FLAG_BYTE_DATA")
|
|
if marker in marker_lookup:
|
|
marker_string = marker_lookup[marker]
|
|
if marker_string is None:
|
|
marker_string = "MARKER?"
|
|
variable_enabled = False
|
|
else:
|
|
variable_enabled = True
|
|
|
|
if variable_enabled is True:
|
|
print("[%08x] %2d 0x%04X %2X" %(read_address,
|
|
seq_id,
|
|
addr,
|
|
marker))
|
|
else:
|
|
print("[%08x] %2d 0x%04X %-45s" %(read_address,
|
|
seq_id,
|
|
addr,
|
|
marker_string))
|
|
|
|
else:
|
|
#print("Unknown flag = 0x%x" %(flag))
|
|
print("[%08x] %2d 0x%04X 0x%04X 0x%02X" %(read_address,
|
|
seq_id,
|
|
trace_item,
|
|
addr,
|
|
marker))
|
|
|
|
word_offset = (word_offset + 4) % NUMBER_OF_TRACES
|
|
|
|
trace_total = trace_total - 1
|
|
|
|
# if word_offset >= (NUMBER_OF_TRACES * 4):
|
|
if word_offset >= (NUMBER_OF_TRACES):
|
|
break
|