xref: /rk3399_ARM-atf/plat/brcm/board/common/bcm_elog_ddr.h (revision 926cd70a0cc3a0cbf209a87765a8dc0b869798e3)
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