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