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