xref: /arm-trusted-firmware/plat/nvidia/tegra/include/t194/tegra194_ras_private.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2020, NVIDIA Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef TEGRA194_RAS_PRIVATE
8*91f16700Schasinglulu #define TEGRA194_RAS_PRIVATE
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stdint.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /* Implementation defined RAS error and corresponding error message */
13*91f16700Schasinglulu struct ras_error {
14*91f16700Schasinglulu 	const char *error_msg;
15*91f16700Schasinglulu 	/* IERR(bits[15:8]) from ERR<n>STATUS */
16*91f16700Schasinglulu 	uint8_t error_code;
17*91f16700Schasinglulu };
18*91f16700Schasinglulu 
19*91f16700Schasinglulu /* RAS error node-specific auxiliary data */
20*91f16700Schasinglulu struct ras_aux_data {
21*91f16700Schasinglulu 	/* name for current RAS node. */
22*91f16700Schasinglulu 	const char *name;
23*91f16700Schasinglulu 	/* point to null-terminated ras_error array to convert error code to msg. */
24*91f16700Schasinglulu 	const struct ras_error *error_records;
25*91f16700Schasinglulu 	/*
26*91f16700Schasinglulu 	 * function to return an value which needs to be programmed into ERXCTLR_EL1
27*91f16700Schasinglulu 	 * to enable all specified RAS errors for current node.
28*91f16700Schasinglulu 	 */
29*91f16700Schasinglulu 	uint64_t (*err_ctrl)(void);
30*91f16700Schasinglulu };
31*91f16700Schasinglulu 
32*91f16700Schasinglulu /* IFU Uncorrectable RAS ERROR */
33*91f16700Schasinglulu #define IFU_UNCORR_RAS_ERROR_LIST(X)
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /* JSR_RET Uncorrectable RAS ERROR */
36*91f16700Schasinglulu #define JSR_RET_UNCORR_RAS_ERROR_LIST(X)					\
37*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
38*91f16700Schasinglulu 	X(JSR_RET, 35, 0x13, "Floating Point Register File Parity Error")	\
39*91f16700Schasinglulu 	X(JSR_RET, 34, 0x12, "Integer Register File Parity Error")		\
40*91f16700Schasinglulu 	X(JSR_RET, 33, 0x11, "Garbage Bundle")					\
41*91f16700Schasinglulu 	X(JSR_RET, 32, 0x10, "Bundle Completion Timeout")
42*91f16700Schasinglulu 
43*91f16700Schasinglulu /* JSR_MTS Uncorrectable RAS ERROR */
44*91f16700Schasinglulu #define JSR_MTS_UNCORR_RAS_ERROR_LIST(X)					\
45*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
46*91f16700Schasinglulu 	X(JSR_MTS, 40, 0x28, "CoreSight Access Error")				\
47*91f16700Schasinglulu 	X(JSR_MTS, 39, 0x27, "Dual Execution Uncorrectable Error")		\
48*91f16700Schasinglulu 	X(JSR_MTS, 37, 0x25, "CTU MMIO Region")					\
49*91f16700Schasinglulu 	X(JSR_MTS, 36, 0x24, "MTS MMCRAB Region Access")			\
50*91f16700Schasinglulu 	X(JSR_MTS, 35, 0x23, "MTS_CARVEOUT Access from ARM SW")			\
51*91f16700Schasinglulu 	X(JSR_MTS, 34, 0x22, "NAFLL PLL Failure to Lock")			\
52*91f16700Schasinglulu 	X(JSR_MTS, 32, 0x20, "Internal Uncorrectable  MTS Error")
53*91f16700Schasinglulu 
54*91f16700Schasinglulu /* LSD_STQ Uncorrectable RAS ERROR */
55*91f16700Schasinglulu #define LSD_STQ_UNCORR_RAS_ERROR_LIST(X)					\
56*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
57*91f16700Schasinglulu 	X(LSD_STQ, 41, 0x39, "Coherent Cache Data Store Multi-Line ECC Error")	\
58*91f16700Schasinglulu 	X(LSD_STQ, 40, 0x38, "Coherent Cache Data Store Uncorrectable ECC Error") \
59*91f16700Schasinglulu 	X(LSD_STQ, 38, 0x36, "Coherent Cache Data Load Uncorrectable ECC Error") \
60*91f16700Schasinglulu 	X(LSD_STQ, 33, 0x31, "Coherent Cache Tag Store Parity Error")		\
61*91f16700Schasinglulu 	X(LSD_STQ, 32, 0x30, "Coherent Cache Tag Load Parity Error")
62*91f16700Schasinglulu 
63*91f16700Schasinglulu /* LSD_DCC Uncorrectable RAS ERROR */
64*91f16700Schasinglulu #define LSD_DCC_UNCORR_RAS_ERROR_LIST(X)					\
65*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
66*91f16700Schasinglulu 	X(LSD_DCC, 41, 0x49, "BTU Copy Mini-Cache PPN Multi-Hit Error")		\
67*91f16700Schasinglulu 	X(LSD_DCC, 39, 0x47, "Coherent Cache Data Uncorrectable ECC Error")	\
68*91f16700Schasinglulu 	X(LSD_DCC, 37, 0x45, "Version Cache Byte-Enable Parity Error")		\
69*91f16700Schasinglulu 	X(LSD_DCC, 36, 0x44, "Version Cache Data Uncorrectable ECC Error")	\
70*91f16700Schasinglulu 	X(LSD_DCC, 33, 0x41, "BTU Copy Coherent Cache PPN Parity Error")	\
71*91f16700Schasinglulu 	X(LSD_DCC, 32, 0x40, "BTU Copy Coherent Cache VPN Parity Error")
72*91f16700Schasinglulu 
73*91f16700Schasinglulu /* LSD_L1HPF Uncorrectable RAS ERROR */
74*91f16700Schasinglulu #define LSD_L1HPF_UNCORR_RAS_ERROR_LIST(X)
75*91f16700Schasinglulu 
76*91f16700Schasinglulu /* L2 Uncorrectable RAS ERROR */
77*91f16700Schasinglulu #define L2_UNCORR_RAS_ERROR_LIST(X)						\
78*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
79*91f16700Schasinglulu 	X(L2, 56, 0x68, "URT Timeout")						\
80*91f16700Schasinglulu 	X(L2, 55, 0x67, "L2 Protocol Violation")				\
81*91f16700Schasinglulu 	X(L2, 54, 0x66, "SCF to L2 Slave Error Read")				\
82*91f16700Schasinglulu 	X(L2, 53, 0x65, "SCF to L2 Slave Error Write")				\
83*91f16700Schasinglulu 	X(L2, 52, 0x64, "SCF to L2 Decode Error Read")				\
84*91f16700Schasinglulu 	X(L2, 51, 0x63, "SCF to L2 Decode Error Write")				\
85*91f16700Schasinglulu 	X(L2, 50, 0x62, "SCF to L2 Request Response Interface Parity Errors")	\
86*91f16700Schasinglulu 	X(L2, 49, 0x61, "SCF to L2 Advance notice interface parity errors")	\
87*91f16700Schasinglulu 	X(L2, 48, 0x60, "SCF to L2 Filldata Parity Errors")			\
88*91f16700Schasinglulu 	X(L2, 47, 0x5F, "SCF to L2 UnCorrectable ECC Data Error on interface")	\
89*91f16700Schasinglulu 	X(L2, 45, 0x5D, "Core 1 to L2 Parity Error")				\
90*91f16700Schasinglulu 	X(L2, 44, 0x5C, "Core 0 to L2 Parity Error")				\
91*91f16700Schasinglulu 	X(L2, 43, 0x5B, "L2 Multi-Hit")						\
92*91f16700Schasinglulu 	X(L2, 42, 0x5A, "L2 URT Tag Parity Error")				\
93*91f16700Schasinglulu 	X(L2, 41, 0x59, "L2 NTT Tag Parity Error")				\
94*91f16700Schasinglulu 	X(L2, 40, 0x58, "L2 MLT Tag Parity Error")				\
95*91f16700Schasinglulu 	X(L2, 39, 0x57, "L2 URD Data")						\
96*91f16700Schasinglulu 	X(L2, 38, 0x56, "L2 NTP Data")						\
97*91f16700Schasinglulu 	X(L2, 36, 0x54, "L2 MLC Uncorrectable Clean")				\
98*91f16700Schasinglulu 	X(L2, 35, 0x53, "L2 URD Uncorrectable Dirty")				\
99*91f16700Schasinglulu 	X(L2, 34, 0x52, "L2 MLC Uncorrectable Dirty")
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /* CLUSTER_CLOCKS Uncorrectable RAS ERROR */
102*91f16700Schasinglulu #define CLUSTER_CLOCKS_UNCORR_RAS_ERROR_LIST(X)					\
103*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
104*91f16700Schasinglulu 	X(CLUSTER_CLOCKS, 32, 0xE4, "Frequency Monitor Error")
105*91f16700Schasinglulu 
106*91f16700Schasinglulu /* MMU Uncorrectable RAS ERROR */
107*91f16700Schasinglulu #define MMU_UNCORR_RAS_ERROR_LIST(X)
108*91f16700Schasinglulu 
109*91f16700Schasinglulu /* L3 Uncorrectable RAS ERROR */
110*91f16700Schasinglulu #define L3_UNCORR_RAS_ERROR_LIST(X)						\
111*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
112*91f16700Schasinglulu 	X(L3, 43, 0x7B, "SNOC Interface Parity Error")				\
113*91f16700Schasinglulu 	X(L3, 42, 0x7A, "MCF Interface Parity Error")				\
114*91f16700Schasinglulu 	X(L3, 41, 0x79, "L3 Tag Parity Error")					\
115*91f16700Schasinglulu 	X(L3, 40, 0x78, "L3 Dir Parity Error")					\
116*91f16700Schasinglulu 	X(L3, 39, 0x77, "L3 Uncorrectable ECC Error")				\
117*91f16700Schasinglulu 	X(L3, 37, 0x75, "Multi-Hit CAM Error")					\
118*91f16700Schasinglulu 	X(L3, 36, 0x74, "Multi-Hit Tag Error")					\
119*91f16700Schasinglulu 	X(L3, 35, 0x73, "Unrecognized Command Error")				\
120*91f16700Schasinglulu 	X(L3, 34, 0x72, "L3 Protocol Error")
121*91f16700Schasinglulu 
122*91f16700Schasinglulu /* CCPMU Uncorrectable RAS ERROR */
123*91f16700Schasinglulu #define CCPMU_UNCORR_RAS_ERROR_LIST(X)						\
124*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
125*91f16700Schasinglulu 	X(CCPMU, 40, 0x87, "CoreSight Access Error")				\
126*91f16700Schasinglulu 	X(CCPMU, 36, 0x84, "MCE Ucode Error")					\
127*91f16700Schasinglulu 	X(CCPMU, 35, 0x83, "MCE IL1 Parity Error")				\
128*91f16700Schasinglulu 	X(CCPMU, 34, 0x82, "MCE Timeout Error")					\
129*91f16700Schasinglulu 	X(CCPMU, 33, 0x81, "CRAB Access Error")					\
130*91f16700Schasinglulu 	X(CCPMU, 32, 0x80, "MCE Memory Access Error")
131*91f16700Schasinglulu 
132*91f16700Schasinglulu /* SCF_IOB Uncorrectable RAS ERROR */
133*91f16700Schasinglulu #define SCF_IOB_UNCORR_RAS_ERROR_LIST(X)					\
134*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
135*91f16700Schasinglulu 	X(SCF_IOB, 41, 0x99, "Request parity error")				\
136*91f16700Schasinglulu 	X(SCF_IOB, 40, 0x98, "Putdata parity error")				\
137*91f16700Schasinglulu 	X(SCF_IOB, 39, 0x97, "Uncorrectable ECC on Putdata")			\
138*91f16700Schasinglulu 	X(SCF_IOB, 38, 0x96, "CBB Interface Error")				\
139*91f16700Schasinglulu 	X(SCF_IOB, 37, 0x95, "MMCRAB Error")					\
140*91f16700Schasinglulu 	X(SCF_IOB, 36, 0x94, "IHI Interface Error")				\
141*91f16700Schasinglulu 	X(SCF_IOB, 35, 0x93, "CRI Error")					\
142*91f16700Schasinglulu 	X(SCF_IOB, 34, 0x92, "TBX Interface Error")				\
143*91f16700Schasinglulu 	X(SCF_IOB, 33, 0x91, "EVP Interface Error")
144*91f16700Schasinglulu 
145*91f16700Schasinglulu /* SCF_SNOC Uncorrectable RAS ERROR */
146*91f16700Schasinglulu #define SCF_SNOC_UNCORR_RAS_ERROR_LIST(X)					\
147*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
148*91f16700Schasinglulu 	X(SCF_SNOC, 42, 0xAA, "Misc Client Parity Error")			\
149*91f16700Schasinglulu 	X(SCF_SNOC, 41, 0xA9, "Misc Filldata Parity Error")			\
150*91f16700Schasinglulu 	X(SCF_SNOC, 40, 0xA8, "Uncorrectable ECC Misc Client")			\
151*91f16700Schasinglulu 	X(SCF_SNOC, 39, 0xA7, "DVMU Interface Parity Error")			\
152*91f16700Schasinglulu 	X(SCF_SNOC, 38, 0xA6, "DVMU Interface Timeout Error")			\
153*91f16700Schasinglulu 	X(SCF_SNOC, 37, 0xA5, "CPE Request Error")				\
154*91f16700Schasinglulu 	X(SCF_SNOC, 36, 0xA4, "CPE Response Error")				\
155*91f16700Schasinglulu 	X(SCF_SNOC, 35, 0xA3, "CPE Timeout Error")				\
156*91f16700Schasinglulu 	X(SCF_SNOC, 34, 0xA2, "Uncorrectable Carveout Error")
157*91f16700Schasinglulu 
158*91f16700Schasinglulu /* SCF_CTU Uncorrectable RAS ERROR */
159*91f16700Schasinglulu #define SCF_CTU_UNCORR_RAS_ERROR_LIST(X)					\
160*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
161*91f16700Schasinglulu 	X(SCF_CTU, 39, 0xB7, "Timeout error for TRC_DMA request")		\
162*91f16700Schasinglulu 	X(SCF_CTU, 38, 0xB6, "Timeout error for CTU Snp")			\
163*91f16700Schasinglulu 	X(SCF_CTU, 37, 0xB5, "Parity error in CTU TAG RAM")			\
164*91f16700Schasinglulu 	X(SCF_CTU, 36, 0xB3, "Parity error in CTU DATA RAM")			\
165*91f16700Schasinglulu 	X(SCF_CTU, 35, 0xB4, "Parity error for Cluster Rsp")			\
166*91f16700Schasinglulu 	X(SCF_CTU, 34, 0xB2, "Parity error for TRL requests from 9 agents")	\
167*91f16700Schasinglulu 	X(SCF_CTU, 33, 0xB1, "Parity error for MCF request")			\
168*91f16700Schasinglulu 	X(SCF_CTU, 32, 0xB0, "TRC DMA fillsnoop parity error")
169*91f16700Schasinglulu 
170*91f16700Schasinglulu /* CMU_CLOCKS Uncorrectable RAS ERROR */
171*91f16700Schasinglulu #define CMU_CLOCKS_UNCORR_RAS_ERROR_LIST(X)					\
172*91f16700Schasinglulu 	/* Name, ERR_CTRL, IERR, ISA Desc */					\
173*91f16700Schasinglulu 	X(CMU_CLOCKS, 39, 0xC7, "Cluster 3 frequency monitor error")		\
174*91f16700Schasinglulu 	X(CMU_CLOCKS, 38, 0xC6, "Cluster 2 frequency monitor error")		\
175*91f16700Schasinglulu 	X(CMU_CLOCKS, 37, 0xC5, "Cluster 1 frequency monitor error")		\
176*91f16700Schasinglulu 	X(CMU_CLOCKS, 36, 0xC3, "Cluster 0 frequency monitor error")		\
177*91f16700Schasinglulu 	X(CMU_CLOCKS, 35, 0xC4, "Voltage error on ADC1 Monitored Logic")	\
178*91f16700Schasinglulu 	X(CMU_CLOCKS, 34, 0xC2, "Voltage error on ADC0 Monitored Logic")	\
179*91f16700Schasinglulu 	X(CMU_CLOCKS, 33, 0xC1, "Lookup Table 1 Parity Error")			\
180*91f16700Schasinglulu 	X(CMU_CLOCKS, 32, 0xC0, "Lookup Table 0 Parity Error")
181*91f16700Schasinglulu 
182*91f16700Schasinglulu /*
183*91f16700Schasinglulu  * Define one ras_error entry.
184*91f16700Schasinglulu  *
185*91f16700Schasinglulu  * This macro wille be used to to generate ras_error records for each node
186*91f16700Schasinglulu  * defined by <NODE_NAME>_UNCORR_RAS_ERROR_LIST macro.
187*91f16700Schasinglulu  */
188*91f16700Schasinglulu #define DEFINE_ONE_RAS_ERROR_MSG(unit, ras_bit, ierr, msg)			\
189*91f16700Schasinglulu 	{									\
190*91f16700Schasinglulu 		.error_msg = (msg),						\
191*91f16700Schasinglulu 		.error_code = (ierr)						\
192*91f16700Schasinglulu 	},
193*91f16700Schasinglulu 
194*91f16700Schasinglulu /*
195*91f16700Schasinglulu  * Set one implementation defined bit in ERR<n>CTLR
196*91f16700Schasinglulu  *
197*91f16700Schasinglulu  * This macro will be used to collect all defined ERR_CTRL bits for each node
198*91f16700Schasinglulu  * defined by <NODE_NAME>_UNCORR_RAS_ERROR_LIST macro.
199*91f16700Schasinglulu  */
200*91f16700Schasinglulu #define DEFINE_ENABLE_RAS_BIT(unit, ras_bit, ierr, msg)				\
201*91f16700Schasinglulu 	do {									\
202*91f16700Schasinglulu 		val |= (1ULL << ras_bit##U);					\
203*91f16700Schasinglulu 	} while (0);
204*91f16700Schasinglulu 
205*91f16700Schasinglulu /* Represent one RAS node with 0 or more error bits (ERR_CTLR) enabled */
206*91f16700Schasinglulu #define DEFINE_ONE_RAS_NODE(node)						\
207*91f16700Schasinglulu static const struct ras_error node##_uncorr_ras_errors[] = {			\
208*91f16700Schasinglulu 	node##_UNCORR_RAS_ERROR_LIST(DEFINE_ONE_RAS_ERROR_MSG)			\
209*91f16700Schasinglulu 	{									\
210*91f16700Schasinglulu 		NULL,								\
211*91f16700Schasinglulu 		0U								\
212*91f16700Schasinglulu 	},									\
213*91f16700Schasinglulu };										\
214*91f16700Schasinglulu static inline uint64_t node##_err_ctrl(void)					\
215*91f16700Schasinglulu {										\
216*91f16700Schasinglulu 	uint64_t val = 0ULL;							\
217*91f16700Schasinglulu 	node##_UNCORR_RAS_ERROR_LIST(DEFINE_ENABLE_RAS_BIT)			\
218*91f16700Schasinglulu 	return val;								\
219*91f16700Schasinglulu }
220*91f16700Schasinglulu 
221*91f16700Schasinglulu #define DEFINE_ONE_RAS_AUX_DATA(node)						\
222*91f16700Schasinglulu 	{									\
223*91f16700Schasinglulu 		.name = #node,							\
224*91f16700Schasinglulu 		.error_records = node##_uncorr_ras_errors,			\
225*91f16700Schasinglulu 		.err_ctrl = &node##_err_ctrl					\
226*91f16700Schasinglulu 	},
227*91f16700Schasinglulu 
228*91f16700Schasinglulu #define PER_CORE_RAS_NODE_LIST(X)						\
229*91f16700Schasinglulu 	X(IFU)									\
230*91f16700Schasinglulu 	X(JSR_RET)								\
231*91f16700Schasinglulu 	X(JSR_MTS)								\
232*91f16700Schasinglulu 	X(LSD_STQ)								\
233*91f16700Schasinglulu 	X(LSD_DCC)								\
234*91f16700Schasinglulu 	X(LSD_L1HPF)
235*91f16700Schasinglulu 
236*91f16700Schasinglulu #define PER_CORE_RAS_GROUP_NODES	PER_CORE_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)
237*91f16700Schasinglulu 
238*91f16700Schasinglulu #define PER_CLUSTER_RAS_NODE_LIST(X)						\
239*91f16700Schasinglulu 	X(L2)									\
240*91f16700Schasinglulu 	X(CLUSTER_CLOCKS)							\
241*91f16700Schasinglulu 	X(MMU)
242*91f16700Schasinglulu 
243*91f16700Schasinglulu #define PER_CLUSTER_RAS_GROUP_NODES	PER_CLUSTER_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)
244*91f16700Schasinglulu 
245*91f16700Schasinglulu #define SCF_L3_BANK_RAS_NODE_LIST(X)	X(L3)
246*91f16700Schasinglulu 
247*91f16700Schasinglulu /* we have 4 SCF_L3 nodes:3*256 + L3_Bank_ID(0-3) */
248*91f16700Schasinglulu #define SCF_L3_BANK_RAS_GROUP_NODES						\
249*91f16700Schasinglulu 	SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)			\
250*91f16700Schasinglulu 	SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)			\
251*91f16700Schasinglulu 	SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)			\
252*91f16700Schasinglulu 	SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)
253*91f16700Schasinglulu 
254*91f16700Schasinglulu #define CCPLEX_RAS_NODE_LIST(X)							\
255*91f16700Schasinglulu 	X(CCPMU)								\
256*91f16700Schasinglulu 	X(SCF_IOB)								\
257*91f16700Schasinglulu 	X(SCF_SNOC)								\
258*91f16700Schasinglulu 	X(SCF_CTU)								\
259*91f16700Schasinglulu 	X(CMU_CLOCKS)
260*91f16700Schasinglulu 
261*91f16700Schasinglulu #define CCPLEX_RAS_GROUP_NODES		CCPLEX_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA)
262*91f16700Schasinglulu 
263*91f16700Schasinglulu #endif /* TEGRA194_RAS_PRIVATE */
264