xref: /arm-trusted-firmware/plat/brcm/board/common/bcm_elog_ddr.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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