1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2019-2020 Broadcom 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef BCM_ELOG_DDR_H 8*91f16700Schasinglulu #define BCM_ELOG_DDR_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #define ELOG_GLOBAL_META_HDR_SIG 0x45524c47 11*91f16700Schasinglulu #define ELOG_MAX_REC_COUNT 13 12*91f16700Schasinglulu #define ELOG_MAX_REC_FORMAT 1 13*91f16700Schasinglulu #define ELOG_MAX_NVM_TYPE 4 14*91f16700Schasinglulu /* Use a default NVM, set by m0 configuration */ 15*91f16700Schasinglulu #define ELOG_NVM_DEFAULT 0xff 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* Max. number of cmd parameters per elog spec */ 18*91f16700Schasinglulu #define ELOG_PARAM_COUNT 3 19*91f16700Schasinglulu /* 20*91f16700Schasinglulu * Number of supported RECORD Types- 21*91f16700Schasinglulu * SYSRESET, THERMAL, DDR_ECC, APBOOTLG, IDM 22*91f16700Schasinglulu */ 23*91f16700Schasinglulu #define ELOG_SUPPORTED_REC_CNT 5 24*91f16700Schasinglulu 25*91f16700Schasinglulu #define ELOG_REC_DESC_LENGTH 8 26*91f16700Schasinglulu 27*91f16700Schasinglulu #define ELOG_SECTOR_SIZE 0x1000 28*91f16700Schasinglulu 29*91f16700Schasinglulu /* Default Record size for all record types except APBOOTLOG */ 30*91f16700Schasinglulu #define ELOG_DEFAULT_REC_SIZE 0x10000 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* Default record size for APBOOTLOG record */ 33*91f16700Schasinglulu #define ELOG_APBOOTLG_REC_SIZE 0x60000 34*91f16700Schasinglulu 35*91f16700Schasinglulu /* Use default CRMU provided mem address */ 36*91f16700Schasinglulu #define ELOG_USE_DEFAULT_MEM_ADDR 0x0 37*91f16700Schasinglulu 38*91f16700Schasinglulu /* Temporary place to hold metadata */ 39*91f16700Schasinglulu #define TMP_ELOG_METADATA_BASE (ELOG_AP_UART_LOG_BASE + \ 40*91f16700Schasinglulu BCM_ELOG_BL2_SIZE) 41*91f16700Schasinglulu /* IDM ELOG source memory address */ 42*91f16700Schasinglulu #define ELOG_IDM_SRC_MEM_ADDR 0x8f213000 43*91f16700Schasinglulu 44*91f16700Schasinglulu #define IDM_ELOG_REC_TYPE 5 45*91f16700Schasinglulu 46*91f16700Schasinglulu enum elog_record_type { 47*91f16700Schasinglulu ELOG_REC_SYS_RESET_EVT = 0, 48*91f16700Schasinglulu ELOG_REC_THERMAL_EVT, 49*91f16700Schasinglulu ELOG_REC_DDR_ECC, 50*91f16700Schasinglulu ELOG_REC_UART_LOG, 51*91f16700Schasinglulu ELOG_REC_IDM_LOG, 52*91f16700Schasinglulu ELOG_REC_MAX 53*91f16700Schasinglulu }; 54*91f16700Schasinglulu 55*91f16700Schasinglulu enum elog_record_format { 56*91f16700Schasinglulu ELOG_REC_FMT_ASCII = 0, 57*91f16700Schasinglulu ELOG_REC_FMT_CUSTOM 58*91f16700Schasinglulu }; 59*91f16700Schasinglulu 60*91f16700Schasinglulu enum elog_src_memory_type { 61*91f16700Schasinglulu ELOG_SRC_MEM_TYPE_CRMU_SCRATCH = 0, 62*91f16700Schasinglulu ELOG_SRC_MEM_TYPE_FS4_SCRATCH, 63*91f16700Schasinglulu ELOG_SRC_MEM_TYPE_DDR, 64*91f16700Schasinglulu ELOG_SRC_MEM_TYPE_CHIMP_SCRATCH 65*91f16700Schasinglulu }; 66*91f16700Schasinglulu 67*91f16700Schasinglulu enum elog_setup_cmd { 68*91f16700Schasinglulu ELOG_SETUP_CMD_VALIDATE_META, 69*91f16700Schasinglulu ELOG_SETUP_CMD_WRITE_META, 70*91f16700Schasinglulu ELOG_SETUP_CMD_ERASE, 71*91f16700Schasinglulu ELOG_SETUP_CMD_READ, 72*91f16700Schasinglulu ELOG_SETUP_CMD_CHECK 73*91f16700Schasinglulu }; 74*91f16700Schasinglulu 75*91f16700Schasinglulu struct elog_setup { 76*91f16700Schasinglulu uint32_t cmd; 77*91f16700Schasinglulu uint32_t params[ELOG_PARAM_COUNT]; 78*91f16700Schasinglulu uint32_t result; 79*91f16700Schasinglulu uint32_t ret_code; 80*91f16700Schasinglulu }; 81*91f16700Schasinglulu 82*91f16700Schasinglulu struct elog_meta_record { 83*91f16700Schasinglulu uint8_t type; 84*91f16700Schasinglulu uint8_t format; 85*91f16700Schasinglulu uint8_t src_mem_type; 86*91f16700Schasinglulu uint8_t alt_src_mem_type; 87*91f16700Schasinglulu uint8_t nvm_type; 88*91f16700Schasinglulu char rec_desc[ELOG_REC_DESC_LENGTH]; 89*91f16700Schasinglulu uint64_t src_mem_addr; 90*91f16700Schasinglulu uint64_t alt_src_mem_addr; 91*91f16700Schasinglulu uint64_t rec_addr; 92*91f16700Schasinglulu uint32_t rec_size; 93*91f16700Schasinglulu uint32_t sector_size; 94*91f16700Schasinglulu uint8_t padding[3]; 95*91f16700Schasinglulu } __packed; 96*91f16700Schasinglulu 97*91f16700Schasinglulu struct elog_global_header { 98*91f16700Schasinglulu uint32_t signature; 99*91f16700Schasinglulu uint32_t sector_size; 100*91f16700Schasinglulu uint8_t revision; 101*91f16700Schasinglulu uint8_t rec_count; 102*91f16700Schasinglulu uint16_t padding; 103*91f16700Schasinglulu } __packed; 104*91f16700Schasinglulu 105*91f16700Schasinglulu void elog_init_ddr_log(void); 106*91f16700Schasinglulu 107*91f16700Schasinglulu #endif /* BCM_ELOG_DDR_H */ 108