18ca61538SDavid Pu /* 28ca61538SDavid Pu * Copyright (c) 2020, NVIDIA Corporation. All rights reserved. 38ca61538SDavid Pu * 48ca61538SDavid Pu * SPDX-License-Identifier: BSD-3-Clause 58ca61538SDavid Pu */ 68ca61538SDavid Pu 78ca61538SDavid Pu #ifndef TEGRA194_RAS_PRIVATE 88ca61538SDavid Pu #define TEGRA194_RAS_PRIVATE 98ca61538SDavid Pu 108ca61538SDavid Pu #include <stdint.h> 118ca61538SDavid Pu 128ca61538SDavid Pu /* Implementation defined RAS error and corresponding error message */ 138ca61538SDavid Pu struct ras_error { 148ca61538SDavid Pu const char *error_msg; 158ca61538SDavid Pu /* IERR(bits[15:8]) from ERR<n>STATUS */ 168ca61538SDavid Pu uint8_t error_code; 178ca61538SDavid Pu }; 188ca61538SDavid Pu 198ca61538SDavid Pu /* RAS error node-specific auxiliary data */ 208ca61538SDavid Pu struct ras_aux_data { 21*fba5cdc6SDavid Pu /* name for current RAS node. */ 22*fba5cdc6SDavid Pu const char *name; 238ca61538SDavid Pu /* point to null-terminated ras_error array to convert error code to msg. */ 248ca61538SDavid Pu const struct ras_error *error_records; 258ca61538SDavid Pu /* 268ca61538SDavid Pu * function to return an value which needs to be programmed into ERXCTLR_EL1 278ca61538SDavid Pu * to enable all specified RAS errors for current node. 288ca61538SDavid Pu */ 298ca61538SDavid Pu uint64_t (*err_ctrl)(void); 308ca61538SDavid Pu }; 318ca61538SDavid Pu 328ca61538SDavid Pu /* IFU Uncorrectable RAS ERROR */ 338ca61538SDavid Pu #define IFU_UNCORR_RAS_ERROR_LIST(X) 348ca61538SDavid Pu 358ca61538SDavid Pu /* JSR_RET Uncorrectable RAS ERROR */ 368ca61538SDavid Pu #define JSR_RET_UNCORR_RAS_ERROR_LIST(X) \ 378ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 388ca61538SDavid Pu X(JSR_RET, 35, 0x13, "Floating Point Register File Parity Error") \ 398ca61538SDavid Pu X(JSR_RET, 34, 0x12, "Integer Register File Parity Error") \ 408ca61538SDavid Pu X(JSR_RET, 33, 0x11, "Garbage Bundle") \ 418ca61538SDavid Pu X(JSR_RET, 32, 0x10, "Bundle Completion Timeout") 428ca61538SDavid Pu 438ca61538SDavid Pu /* JSR_MTS Uncorrectable RAS ERROR */ 448ca61538SDavid Pu #define JSR_MTS_UNCORR_RAS_ERROR_LIST(X) \ 458ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 468ca61538SDavid Pu X(JSR_MTS, 40, 0x28, "CoreSight Access Error") \ 478ca61538SDavid Pu X(JSR_MTS, 39, 0x27, "Dual Execution Uncorrectable Error") \ 488ca61538SDavid Pu X(JSR_MTS, 37, 0x25, "CTU MMIO Region") \ 498ca61538SDavid Pu X(JSR_MTS, 36, 0x24, "MTS MMCRAB Region Access") \ 508ca61538SDavid Pu X(JSR_MTS, 35, 0x23, "MTS_CARVEOUT Access from ARM SW") \ 518ca61538SDavid Pu X(JSR_MTS, 34, 0x22, "NAFLL PLL Failure to Lock") \ 528ca61538SDavid Pu X(JSR_MTS, 32, 0x20, "Internal Uncorrectable MTS Error") 538ca61538SDavid Pu 548ca61538SDavid Pu /* LSD_STQ Uncorrectable RAS ERROR */ 558ca61538SDavid Pu #define LSD_STQ_UNCORR_RAS_ERROR_LIST(X) \ 568ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 578ca61538SDavid Pu X(LSD_STQ, 41, 0x39, "Coherent Cache Data Store Multi-Line ECC Error") \ 588ca61538SDavid Pu X(LSD_STQ, 40, 0x38, "Coherent Cache Data Store Uncorrectable ECC Error") \ 598ca61538SDavid Pu X(LSD_STQ, 38, 0x36, "Coherent Cache Data Load Uncorrectable ECC Error") \ 608ca61538SDavid Pu X(LSD_STQ, 33, 0x31, "Coherent Cache Tag Store Parity Error") \ 618ca61538SDavid Pu X(LSD_STQ, 32, 0x30, "Coherent Cache Tag Load Parity Error") 628ca61538SDavid Pu 638ca61538SDavid Pu /* LSD_DCC Uncorrectable RAS ERROR */ 648ca61538SDavid Pu #define LSD_DCC_UNCORR_RAS_ERROR_LIST(X) \ 658ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 668ca61538SDavid Pu X(LSD_DCC, 41, 0x49, "BTU Copy Mini-Cache PPN Multi-Hit Error") \ 678ca61538SDavid Pu X(LSD_DCC, 39, 0x47, "Coherent Cache Data Uncorrectable ECC Error") \ 688ca61538SDavid Pu X(LSD_DCC, 37, 0x45, "Version Cache Byte-Enable Parity Error") \ 698ca61538SDavid Pu X(LSD_DCC, 36, 0x44, "Version Cache Data Uncorrectable ECC Error") \ 708ca61538SDavid Pu X(LSD_DCC, 33, 0x41, "BTU Copy Coherent Cache PPN Parity Error") \ 718ca61538SDavid Pu X(LSD_DCC, 32, 0x40, "BTU Copy Coherent Cache VPN Parity Error") 728ca61538SDavid Pu 738ca61538SDavid Pu /* LSD_L1HPF Uncorrectable RAS ERROR */ 748ca61538SDavid Pu #define LSD_L1HPF_UNCORR_RAS_ERROR_LIST(X) 758ca61538SDavid Pu 768ca61538SDavid Pu /* L2 Uncorrectable RAS ERROR */ 778ca61538SDavid Pu #define L2_UNCORR_RAS_ERROR_LIST(X) \ 788ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 798ca61538SDavid Pu X(L2, 56, 0x68, "URT Timeout") \ 808ca61538SDavid Pu X(L2, 55, 0x67, "L2 Protocol Violation") \ 818ca61538SDavid Pu X(L2, 54, 0x66, "SCF to L2 Slave Error Read") \ 828ca61538SDavid Pu X(L2, 53, 0x65, "SCF to L2 Slave Error Write") \ 838ca61538SDavid Pu X(L2, 52, 0x64, "SCF to L2 Decode Error Read") \ 848ca61538SDavid Pu X(L2, 51, 0x63, "SCF to L2 Decode Error Write") \ 858ca61538SDavid Pu X(L2, 50, 0x62, "SCF to L2 Request Response Interface Parity Errors") \ 868ca61538SDavid Pu X(L2, 49, 0x61, "SCF to L2 Advance notice interface parity errors") \ 878ca61538SDavid Pu X(L2, 48, 0x60, "SCF to L2 Filldata Parity Errors") \ 888ca61538SDavid Pu X(L2, 47, 0x5F, "SCF to L2 UnCorrectable ECC Data Error on interface") \ 898ca61538SDavid Pu X(L2, 45, 0x5D, "Core 1 to L2 Parity Error") \ 908ca61538SDavid Pu X(L2, 44, 0x5C, "Core 0 to L2 Parity Error") \ 918ca61538SDavid Pu X(L2, 43, 0x5B, "L2 Multi-Hit") \ 928ca61538SDavid Pu X(L2, 42, 0x5A, "L2 URT Tag Parity Error") \ 938ca61538SDavid Pu X(L2, 41, 0x59, "L2 NTT Tag Parity Error") \ 948ca61538SDavid Pu X(L2, 40, 0x58, "L2 MLT Tag Parity Error") \ 958ca61538SDavid Pu X(L2, 39, 0x57, "L2 URD Data") \ 968ca61538SDavid Pu X(L2, 38, 0x56, "L2 NTP Data") \ 978ca61538SDavid Pu X(L2, 36, 0x54, "L2 MLC Uncorrectable Clean") \ 988ca61538SDavid Pu X(L2, 35, 0x53, "L2 URD Uncorrectable Dirty") \ 998ca61538SDavid Pu X(L2, 34, 0x52, "L2 MLC Uncorrectable Dirty") 1008ca61538SDavid Pu 1018ca61538SDavid Pu /* CLUSTER_CLOCKS Uncorrectable RAS ERROR */ 1028ca61538SDavid Pu #define CLUSTER_CLOCKS_UNCORR_RAS_ERROR_LIST(X) \ 1038ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1048ca61538SDavid Pu X(CLUSTER_CLOCKS, 32, 0xE4, "Frequency Monitor Error") 1058ca61538SDavid Pu 1068ca61538SDavid Pu /* MMU Uncorrectable RAS ERROR */ 1078ca61538SDavid Pu #define MMU_UNCORR_RAS_ERROR_LIST(X) 1088ca61538SDavid Pu 1098ca61538SDavid Pu /* L3 Uncorrectable RAS ERROR */ 1108ca61538SDavid Pu #define L3_UNCORR_RAS_ERROR_LIST(X) \ 1118ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1128ca61538SDavid Pu X(L3, 43, 0x7B, "SNOC Interface Parity Error") \ 1138ca61538SDavid Pu X(L3, 42, 0x7A, "MCF Interface Parity Error") \ 1148ca61538SDavid Pu X(L3, 41, 0x79, "L3 Tag Parity Error") \ 1158ca61538SDavid Pu X(L3, 40, 0x78, "L3 Dir Parity Error") \ 1168ca61538SDavid Pu X(L3, 39, 0x77, "L3 Uncorrectable ECC Error") \ 1178ca61538SDavid Pu X(L3, 37, 0x75, "Multi-Hit CAM Error") \ 1188ca61538SDavid Pu X(L3, 36, 0x74, "Multi-Hit Tag Error") \ 1198ca61538SDavid Pu X(L3, 35, 0x73, "Unrecognized Command Error") \ 1208ca61538SDavid Pu X(L3, 34, 0x72, "L3 Protocol Error") 1218ca61538SDavid Pu 1228ca61538SDavid Pu /* CCPMU Uncorrectable RAS ERROR */ 1238ca61538SDavid Pu #define CCPMU_UNCORR_RAS_ERROR_LIST(X) \ 1248ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1258ca61538SDavid Pu X(CCPMU, 40, 0x87, "CoreSight Access Error") \ 1268ca61538SDavid Pu X(CCPMU, 36, 0x84, "MCE Ucode Error") \ 1278ca61538SDavid Pu X(CCPMU, 35, 0x83, "MCE IL1 Parity Error") \ 1288ca61538SDavid Pu X(CCPMU, 34, 0x82, "MCE Timeout Error") \ 1298ca61538SDavid Pu X(CCPMU, 33, 0x81, "CRAB Access Error") \ 1308ca61538SDavid Pu X(CCPMU, 32, 0x80, "MCE Memory Access Error") 1318ca61538SDavid Pu 1328ca61538SDavid Pu /* SCF_IOB Uncorrectable RAS ERROR */ 1338ca61538SDavid Pu #define SCF_IOB_UNCORR_RAS_ERROR_LIST(X) \ 1348ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1358ca61538SDavid Pu X(SCF_IOB, 41, 0x99, "Request parity error") \ 1368ca61538SDavid Pu X(SCF_IOB, 40, 0x98, "Putdata parity error") \ 1378ca61538SDavid Pu X(SCF_IOB, 39, 0x97, "Uncorrectable ECC on Putdata") \ 1388ca61538SDavid Pu X(SCF_IOB, 38, 0x96, "CBB Interface Error") \ 1398ca61538SDavid Pu X(SCF_IOB, 37, 0x95, "MMCRAB Error") \ 1408ca61538SDavid Pu X(SCF_IOB, 36, 0x94, "IHI Interface Error") \ 1418ca61538SDavid Pu X(SCF_IOB, 35, 0x93, "CRI Error") \ 1428ca61538SDavid Pu X(SCF_IOB, 34, 0x92, "TBX Interface Error") \ 1438ca61538SDavid Pu X(SCF_IOB, 33, 0x91, "EVP Interface Error") 1448ca61538SDavid Pu 1458ca61538SDavid Pu /* SCF_SNOC Uncorrectable RAS ERROR */ 1468ca61538SDavid Pu #define SCF_SNOC_UNCORR_RAS_ERROR_LIST(X) \ 1478ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1488ca61538SDavid Pu X(SCF_SNOC, 42, 0xAA, "Misc Client Parity Error") \ 1498ca61538SDavid Pu X(SCF_SNOC, 41, 0xA9, "Misc Filldata Parity Error") \ 1508ca61538SDavid Pu X(SCF_SNOC, 40, 0xA8, "Uncorrectable ECC Misc Client") \ 1518ca61538SDavid Pu X(SCF_SNOC, 39, 0xA7, "DVMU Interface Parity Error") \ 1528ca61538SDavid Pu X(SCF_SNOC, 38, 0xA6, "DVMU Interface Timeout Error") \ 1538ca61538SDavid Pu X(SCF_SNOC, 37, 0xA5, "CPE Request Error") \ 1548ca61538SDavid Pu X(SCF_SNOC, 36, 0xA4, "CPE Response Error") \ 1558ca61538SDavid Pu X(SCF_SNOC, 35, 0xA3, "CPE Timeout Error") \ 1568ca61538SDavid Pu X(SCF_SNOC, 34, 0xA2, "Uncorrectable Carveout Error") 1578ca61538SDavid Pu 1588ca61538SDavid Pu /* SCF_CTU Uncorrectable RAS ERROR */ 1598ca61538SDavid Pu #define SCF_CTU_UNCORR_RAS_ERROR_LIST(X) \ 1608ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1618ca61538SDavid Pu X(SCF_CTU, 39, 0xB7, "Timeout error for TRC_DMA request") \ 1628ca61538SDavid Pu X(SCF_CTU, 38, 0xB6, "Timeout error for CTU Snp") \ 1638ca61538SDavid Pu X(SCF_CTU, 37, 0xB5, "Parity error in CTU TAG RAM") \ 1648ca61538SDavid Pu X(SCF_CTU, 36, 0xB3, "Parity error in CTU DATA RAM") \ 1658ca61538SDavid Pu X(SCF_CTU, 35, 0xB4, "Parity error for Cluster Rsp") \ 1668ca61538SDavid Pu X(SCF_CTU, 34, 0xB2, "Parity error for TRL requests from 9 agents") \ 1678ca61538SDavid Pu X(SCF_CTU, 33, 0xB1, "Parity error for MCF request") \ 1688ca61538SDavid Pu X(SCF_CTU, 32, 0xB0, "TRC DMA fillsnoop parity error") 1698ca61538SDavid Pu 1708ca61538SDavid Pu /* CMU_CLOCKS Uncorrectable RAS ERROR */ 1718ca61538SDavid Pu #define CMU_CLOCKS_UNCORR_RAS_ERROR_LIST(X) \ 1728ca61538SDavid Pu /* Name, ERR_CTRL, IERR, ISA Desc */ \ 1738ca61538SDavid Pu X(CMU_CLOCKS, 39, 0xC7, "Cluster 3 frequency monitor error") \ 1748ca61538SDavid Pu X(CMU_CLOCKS, 38, 0xC6, "Cluster 2 frequency monitor error") \ 1758ca61538SDavid Pu X(CMU_CLOCKS, 37, 0xC5, "Cluster 1 frequency monitor error") \ 1768ca61538SDavid Pu X(CMU_CLOCKS, 36, 0xC3, "Cluster 0 frequency monitor error") \ 1778ca61538SDavid Pu X(CMU_CLOCKS, 35, 0xC4, "Voltage error on ADC1 Monitored Logic") \ 1788ca61538SDavid Pu X(CMU_CLOCKS, 34, 0xC2, "Voltage error on ADC0 Monitored Logic") \ 1798ca61538SDavid Pu X(CMU_CLOCKS, 33, 0xC1, "Lookup Table 1 Parity Error") \ 1808ca61538SDavid Pu X(CMU_CLOCKS, 32, 0xC0, "Lookup Table 0 Parity Error") 1818ca61538SDavid Pu 1828ca61538SDavid Pu /* 1838ca61538SDavid Pu * Define one ras_error entry. 1848ca61538SDavid Pu * 1858ca61538SDavid Pu * This macro wille be used to to generate ras_error records for each node 1868ca61538SDavid Pu * defined by <NODE_NAME>_UNCORR_RAS_ERROR_LIST macro. 1878ca61538SDavid Pu */ 1888ca61538SDavid Pu #define DEFINE_ONE_RAS_ERROR_MSG(unit, ras_bit, ierr, msg) \ 1898ca61538SDavid Pu { \ 1908ca61538SDavid Pu .error_msg = (msg), \ 1918ca61538SDavid Pu .error_code = (ierr) \ 1928ca61538SDavid Pu }, 1938ca61538SDavid Pu 1948ca61538SDavid Pu /* 1958ca61538SDavid Pu * Set one implementation defined bit in ERR<n>CTLR 1968ca61538SDavid Pu * 1978ca61538SDavid Pu * This macro will be used to collect all defined ERR_CTRL bits for each node 1988ca61538SDavid Pu * defined by <NODE_NAME>_UNCORR_RAS_ERROR_LIST macro. 1998ca61538SDavid Pu */ 2008ca61538SDavid Pu #define DEFINE_ENABLE_RAS_BIT(unit, ras_bit, ierr, msg) \ 2018ca61538SDavid Pu do { \ 2028ca61538SDavid Pu val |= (1ULL << ras_bit##U); \ 2038ca61538SDavid Pu } while (0); 2048ca61538SDavid Pu 2058ca61538SDavid Pu /* Represent one RAS node with 0 or more error bits (ERR_CTLR) enabled */ 2068ca61538SDavid Pu #define DEFINE_ONE_RAS_NODE(node) \ 2078ca61538SDavid Pu static const struct ras_error node##_uncorr_ras_errors[] = { \ 2088ca61538SDavid Pu node##_UNCORR_RAS_ERROR_LIST(DEFINE_ONE_RAS_ERROR_MSG) \ 2098ca61538SDavid Pu { \ 2108ca61538SDavid Pu NULL, \ 2118ca61538SDavid Pu 0U \ 2128ca61538SDavid Pu }, \ 2138ca61538SDavid Pu }; \ 2148ca61538SDavid Pu static inline uint64_t node##_err_ctrl(void) \ 2158ca61538SDavid Pu { \ 2168ca61538SDavid Pu uint64_t val = 0ULL; \ 2178ca61538SDavid Pu node##_UNCORR_RAS_ERROR_LIST(DEFINE_ENABLE_RAS_BIT) \ 2188ca61538SDavid Pu return val; \ 2198ca61538SDavid Pu } 2208ca61538SDavid Pu 2218ca61538SDavid Pu #define DEFINE_ONE_RAS_AUX_DATA(node) \ 2228ca61538SDavid Pu { \ 223*fba5cdc6SDavid Pu .name = #node, \ 2248ca61538SDavid Pu .error_records = node##_uncorr_ras_errors, \ 2258ca61538SDavid Pu .err_ctrl = &node##_err_ctrl \ 2268ca61538SDavid Pu }, 2278ca61538SDavid Pu 2288ca61538SDavid Pu #define PER_CORE_RAS_NODE_LIST(X) \ 2298ca61538SDavid Pu X(IFU) \ 2308ca61538SDavid Pu X(JSR_RET) \ 2318ca61538SDavid Pu X(JSR_MTS) \ 2328ca61538SDavid Pu X(LSD_STQ) \ 2338ca61538SDavid Pu X(LSD_DCC) \ 2348ca61538SDavid Pu X(LSD_L1HPF) 2358ca61538SDavid Pu 2368ca61538SDavid Pu #define PER_CORE_RAS_GROUP_NODES PER_CORE_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) 2378ca61538SDavid Pu 2388ca61538SDavid Pu #define PER_CLUSTER_RAS_NODE_LIST(X) \ 2398ca61538SDavid Pu X(L2) \ 2408ca61538SDavid Pu X(CLUSTER_CLOCKS) \ 2418ca61538SDavid Pu X(MMU) 2428ca61538SDavid Pu 2438ca61538SDavid Pu #define PER_CLUSTER_RAS_GROUP_NODES PER_CLUSTER_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) 2448ca61538SDavid Pu 2458ca61538SDavid Pu #define SCF_L3_BANK_RAS_NODE_LIST(X) X(L3) 2468ca61538SDavid Pu 2478ca61538SDavid Pu /* we have 4 SCF_L3 nodes:3*256 + L3_Bank_ID(0-3) */ 2488ca61538SDavid Pu #define SCF_L3_BANK_RAS_GROUP_NODES \ 2498ca61538SDavid Pu SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) \ 2508ca61538SDavid Pu SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) \ 2518ca61538SDavid Pu SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) \ 2528ca61538SDavid Pu SCF_L3_BANK_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) 2538ca61538SDavid Pu 2548ca61538SDavid Pu #define CCPLEX_RAS_NODE_LIST(X) \ 2558ca61538SDavid Pu X(CCPMU) \ 2568ca61538SDavid Pu X(SCF_IOB) \ 2578ca61538SDavid Pu X(SCF_SNOC) \ 2588ca61538SDavid Pu X(SCF_CTU) \ 2598ca61538SDavid Pu X(CMU_CLOCKS) 2608ca61538SDavid Pu 2618ca61538SDavid Pu #define CCPLEX_RAS_GROUP_NODES CCPLEX_RAS_NODE_LIST(DEFINE_ONE_RAS_AUX_DATA) 2628ca61538SDavid Pu 2638ca61538SDavid Pu #endif /* TEGRA194_RAS_PRIVATE */ 264