15a9f0eacSShiju Jose /* SPDX-License-Identifier: GPL-2.0+ */ 25a9f0eacSShiju Jose /* Copyright (c) 2016-2017 Hisilicon Limited. */ 35a9f0eacSShiju Jose 45a9f0eacSShiju Jose #ifndef __HCLGE_ERR_H 55a9f0eacSShiju Jose #define __HCLGE_ERR_H 65a9f0eacSShiju Jose 75a9f0eacSShiju Jose #include "hclge_main.h" 88a4bda8cSPeiyang Wang #include "hclge_debugfs.h" 9a83d2961SWeihang Li #include "hnae3.h" 105a9f0eacSShiju Jose 11987b4ae7SWeihang Li #define HCLGE_MPF_RAS_INT_MIN_BD_NUM 10 12987b4ae7SWeihang Li #define HCLGE_PF_RAS_INT_MIN_BD_NUM 4 13987b4ae7SWeihang Li #define HCLGE_MPF_MSIX_INT_MIN_BD_NUM 10 14987b4ae7SWeihang Li #define HCLGE_PF_MSIX_INT_MIN_BD_NUM 4 15987b4ae7SWeihang Li 165a9f0eacSShiju Jose #define HCLGE_RAS_PF_OTHER_INT_STS_REG 0x20B00 175a9f0eacSShiju Jose #define HCLGE_RAS_REG_NFE_MASK 0xFF00 18630ba007SShiju Jose #define HCLGE_RAS_REG_ROCEE_ERR_MASK 0x3000000 198a95e360SJiaran Zhang #define HCLGE_RAS_REG_ERR_MASK \ 208a95e360SJiaran Zhang (HCLGE_RAS_REG_NFE_MASK | HCLGE_RAS_REG_ROCEE_ERR_MASK) 215a9f0eacSShiju Jose 22f6162d44SSalil Mehta #define HCLGE_VECTOR0_REG_MSIX_MASK 0x1FF00 23f6162d44SSalil Mehta 246d67ee9aSShiju Jose #define HCLGE_IMP_TCM_ECC_ERR_INT_EN 0xFFFF0000 256d67ee9aSShiju Jose #define HCLGE_IMP_TCM_ECC_ERR_INT_EN_MASK 0xFFFF0000 266d67ee9aSShiju Jose #define HCLGE_IMP_ITCM4_ECC_ERR_INT_EN 0x300 276d67ee9aSShiju Jose #define HCLGE_IMP_ITCM4_ECC_ERR_INT_EN_MASK 0x300 286d67ee9aSShiju Jose #define HCLGE_CMDQ_NIC_ECC_ERR_INT_EN 0xFFFF 296d67ee9aSShiju Jose #define HCLGE_CMDQ_NIC_ECC_ERR_INT_EN_MASK 0xFFFF 306d67ee9aSShiju Jose #define HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN 0xFFFF0000 316d67ee9aSShiju Jose #define HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN_MASK 0xFFFF0000 326d67ee9aSShiju Jose #define HCLGE_IMP_RD_POISON_ERR_INT_EN 0x0100 336d67ee9aSShiju Jose #define HCLGE_IMP_RD_POISON_ERR_INT_EN_MASK 0x0100 346d67ee9aSShiju Jose #define HCLGE_TQP_ECC_ERR_INT_EN 0x0FFF 356d67ee9aSShiju Jose #define HCLGE_TQP_ECC_ERR_INT_EN_MASK 0x0FFF 36332fbf57SShiju Jose #define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN_MASK 0x0F000000 37332fbf57SShiju Jose #define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN 0x0F000000 382867298dSYufeng Mo #define HCLGE_IGU_ERR_INT_EN 0x0000000F 392867298dSYufeng Mo #define HCLGE_IGU_ERR_INT_TYPE 0x00000660 40bf1faf94SShiju Jose #define HCLGE_IGU_ERR_INT_EN_MASK 0x000F 41bf1faf94SShiju Jose #define HCLGE_IGU_TNL_ERR_INT_EN 0x0002AABF 42bf1faf94SShiju Jose #define HCLGE_IGU_TNL_ERR_INT_EN_MASK 0x003F 43da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT0_EN 0xFFFFFFFF 44da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT0_EN_MASK 0xFFFFFFFF 45da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT1_EN 0xFFFFFFFF 46da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT1_EN_MASK 0xFFFFFFFF 47da2d072aSShiju Jose #define HCLGE_PPP_PF_ERR_INT_EN 0x0003 48da2d072aSShiju Jose #define HCLGE_PPP_PF_ERR_INT_EN_MASK 0x0003 49da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT2_EN 0x003F 50da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT2_EN_MASK 0x003F 51da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT3_EN 0x003F 52da2d072aSShiju Jose #define HCLGE_PPP_MPF_ECC_ERR_INT3_EN_MASK 0x003F 5301865a50SShiju Jose #define HCLGE_TM_SCH_ECC_ERR_INT_EN 0x3 5460484103SJiaran Zhang #define HCLGE_TM_QCN_ERR_INT_TYPE 0x29 5560484103SJiaran Zhang #define HCLGE_TM_QCN_FIFO_INT_EN 0xFFFF00 5601865a50SShiju Jose #define HCLGE_TM_QCN_MEM_ERR_INT_EN 0xFFFFFF 57bf1faf94SShiju Jose #define HCLGE_NCSI_ERR_INT_EN 0x3 58bf1faf94SShiju Jose #define HCLGE_NCSI_ERR_INT_TYPE 0x9 59d1f55d6bSWeihang Li #define HCLGE_MAC_COMMON_ERR_INT_EN 0x107FF 60d1f55d6bSWeihang Li #define HCLGE_MAC_COMMON_ERR_INT_EN_MASK 0x107FF 616aa5d07dSWeihang Li #define HCLGE_MAC_TNL_INT_EN GENMASK(9, 0) 626aa5d07dSWeihang Li #define HCLGE_MAC_TNL_INT_EN_MASK GENMASK(9, 0) 636aa5d07dSWeihang Li #define HCLGE_MAC_TNL_INT_CLR GENMASK(9, 0) 64f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT0_EN GENMASK(31, 0) 65f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT0_EN_MASK GENMASK(31, 0) 66f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT1_EN GENMASK(31, 0) 67f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT1_EN_MASK GENMASK(31, 0) 68f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN 0x3FFF3FFF 69f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN_MASK 0x3FFF3FFF 70f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN2 0xB 71f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN2_MASK 0xB 72f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT3_EN GENMASK(7, 0) 73f69b10b3SShiju Jose #define HCLGE_PPU_MPF_ABNORMAL_INT3_EN_MASK GENMASK(23, 16) 74f69b10b3SShiju Jose #define HCLGE_PPU_PF_ABNORMAL_INT_EN GENMASK(5, 0) 75f69b10b3SShiju Jose #define HCLGE_PPU_PF_ABNORMAL_INT_EN_MASK GENMASK(5, 0) 76c3529177SShiju Jose #define HCLGE_SSU_1BIT_ECC_ERR_INT_EN GENMASK(31, 0) 77c3529177SShiju Jose #define HCLGE_SSU_1BIT_ECC_ERR_INT_EN_MASK GENMASK(31, 0) 78c3529177SShiju Jose #define HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN GENMASK(31, 0) 79c3529177SShiju Jose #define HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN_MASK GENMASK(31, 0) 80c3529177SShiju Jose #define HCLGE_SSU_BIT32_ECC_ERR_INT_EN 0x0101 81c3529177SShiju Jose #define HCLGE_SSU_BIT32_ECC_ERR_INT_EN_MASK 0x0101 82c3529177SShiju Jose #define HCLGE_SSU_COMMON_INT_EN GENMASK(9, 0) 83c3529177SShiju Jose #define HCLGE_SSU_COMMON_INT_EN_MASK GENMASK(9, 0) 84c3529177SShiju Jose #define HCLGE_SSU_PORT_BASED_ERR_INT_EN 0x0BFF 85c3529177SShiju Jose #define HCLGE_SSU_PORT_BASED_ERR_INT_EN_MASK 0x0BFF0000 86c3529177SShiju Jose #define HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN GENMASK(23, 0) 87c3529177SShiju Jose #define HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN_MASK GENMASK(23, 0) 886d67ee9aSShiju Jose 89c3529177SShiju Jose #define HCLGE_SSU_COMMON_ERR_INT_MASK GENMASK(9, 0) 90c3529177SShiju Jose #define HCLGE_SSU_PORT_INT_MSIX_MASK 0x7BFF 91332fbf57SShiju Jose #define HCLGE_IGU_INT_MASK GENMASK(3, 0) 92332fbf57SShiju Jose #define HCLGE_IGU_EGU_TNL_INT_MASK GENMASK(5, 0) 93332fbf57SShiju Jose #define HCLGE_PPP_MPF_INT_ST3_MASK GENMASK(5, 0) 94f69b10b3SShiju Jose #define HCLGE_PPU_MPF_INT_ST3_MASK GENMASK(7, 0) 959f65e5efSWeihang Li #define HCLGE_PPU_MPF_INT_ST2_MSIX_MASK BIT(29) 96747fc3f3SWeihang Li #define HCLGE_PPU_PF_INT_RAS_MASK 0x18 970cd86182SWeihang Li #define HCLGE_PPU_PF_INT_MSIX_MASK 0x26 980cd86182SWeihang Li #define HCLGE_PPU_PF_OVER_8BD_ERR_MASK 0x01 99332fbf57SShiju Jose #define HCLGE_QCN_FIFO_INT_MASK GENMASK(17, 0) 100332fbf57SShiju Jose #define HCLGE_QCN_ECC_INT_MASK GENMASK(21, 0) 101332fbf57SShiju Jose #define HCLGE_NCSI_ECC_INT_MASK GENMASK(1, 0) 102332fbf57SShiju Jose 103630ba007SShiju Jose #define HCLGE_ROCEE_RAS_NFE_INT_EN 0xF 104630ba007SShiju Jose #define HCLGE_ROCEE_RAS_CE_INT_EN 0x1 105630ba007SShiju Jose #define HCLGE_ROCEE_RAS_NFE_INT_EN_MASK 0xF 106630ba007SShiju Jose #define HCLGE_ROCEE_RAS_CE_INT_EN_MASK 0x1 107630ba007SShiju Jose #define HCLGE_ROCEE_RERR_INT_MASK BIT(0) 108630ba007SShiju Jose #define HCLGE_ROCEE_BERR_INT_MASK BIT(1) 109238882c8SXiaofei Tan #define HCLGE_ROCEE_AXI_ERR_INT_MASK GENMASK(1, 0) 110630ba007SShiju Jose #define HCLGE_ROCEE_ECC_INT_MASK BIT(2) 111630ba007SShiju Jose #define HCLGE_ROCEE_OVF_INT_MASK BIT(3) 112630ba007SShiju Jose #define HCLGE_ROCEE_OVF_ERR_INT_MASK 0x10000 113630ba007SShiju Jose #define HCLGE_ROCEE_OVF_ERR_TYPE_MASK 0x3F 114630ba007SShiju Jose 1152e2deee7SJiaran Zhang #define HCLGE_DESC_DATA_MAX 8 1162e2deee7SJiaran Zhang #define HCLGE_REG_NUM_MAX 256 1172e2deee7SJiaran Zhang #define HCLGE_DESC_NO_DATA_LEN 8 1182e2deee7SJiaran Zhang 1198a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_SSU_REG_0 10 1208a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_SSU_REG_1 15 1218a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_RPU_REG_0 1 1228a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_RPU_REG_1 2 1238a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_IGU_EGU_REG 9 1248a4bda8cSPeiyang Wang #define HCLGE_BD_NUM_GEN_REG 8 1258a4bda8cSPeiyang Wang #define HCLGE_MOD_REG_INFO_LEN_MAX 256 1268a4bda8cSPeiyang Wang #define HCLGE_MOD_REG_EXTRA_LEN 11 1278a4bda8cSPeiyang Wang #define HCLGE_MOD_REG_VALUE_LEN 9 1288a4bda8cSPeiyang Wang #define HCLGE_MOD_REG_GROUP_MAX_SIZE 6 1298a4bda8cSPeiyang Wang #define HCLGE_MOD_MSG_PARA_ARRAY_MAX_SIZE 8 1308a4bda8cSPeiyang Wang 1315a9f0eacSShiju Jose enum hclge_err_int_type { 1325a9f0eacSShiju Jose HCLGE_ERR_INT_MSIX = 0, 1335a9f0eacSShiju Jose HCLGE_ERR_INT_RAS_CE = 1, 1345a9f0eacSShiju Jose HCLGE_ERR_INT_RAS_NFE = 2, 1355a9f0eacSShiju Jose HCLGE_ERR_INT_RAS_FE = 3, 1365a9f0eacSShiju Jose }; 1375a9f0eacSShiju Jose 1382e2deee7SJiaran Zhang enum hclge_mod_name_list { 1392e2deee7SJiaran Zhang MODULE_NONE = 0, 1402e2deee7SJiaran Zhang MODULE_BIOS_COMMON = 1, 1412e2deee7SJiaran Zhang MODULE_GE = 2, 1422e2deee7SJiaran Zhang MODULE_IGU_EGU = 3, 1432e2deee7SJiaran Zhang MODULE_LGE = 4, 1442e2deee7SJiaran Zhang MODULE_NCSI = 5, 1452e2deee7SJiaran Zhang MODULE_PPP = 6, 1462e2deee7SJiaran Zhang MODULE_QCN = 7, 1472e2deee7SJiaran Zhang MODULE_RCB_RX = 8, 1482e2deee7SJiaran Zhang MODULE_RTC = 9, 1492e2deee7SJiaran Zhang MODULE_SSU = 10, 1502e2deee7SJiaran Zhang MODULE_TM = 11, 1512e2deee7SJiaran Zhang MODULE_RCB_TX = 12, 1522e2deee7SJiaran Zhang MODULE_TXDMA = 13, 1532e2deee7SJiaran Zhang MODULE_MASTER = 14, 154da3fea80SJiaran Zhang MODULE_HIMAC = 15, 1558a95e360SJiaran Zhang /* add new MODULE NAME for NIC here in order */ 1568a95e360SJiaran Zhang MODULE_ROCEE_TOP = 40, 1578a95e360SJiaran Zhang MODULE_ROCEE_TIMER = 41, 1588a95e360SJiaran Zhang MODULE_ROCEE_MDB = 42, 1598a95e360SJiaran Zhang MODULE_ROCEE_TSP = 43, 1608a95e360SJiaran Zhang MODULE_ROCEE_TRP = 44, 1618a95e360SJiaran Zhang MODULE_ROCEE_SCC = 45, 1628a95e360SJiaran Zhang MODULE_ROCEE_CAEP = 46, 1638a95e360SJiaran Zhang MODULE_ROCEE_GEN_AC = 47, 1648a95e360SJiaran Zhang MODULE_ROCEE_QMM = 48, 1658a95e360SJiaran Zhang MODULE_ROCEE_LSAN = 49, 1668a95e360SJiaran Zhang /* add new MODULE NAME for RoCEE here in order */ 1672e2deee7SJiaran Zhang }; 1682e2deee7SJiaran Zhang 1692e2deee7SJiaran Zhang enum hclge_err_type_list { 1702e2deee7SJiaran Zhang NONE_ERROR = 0, 1712e2deee7SJiaran Zhang FIFO_ERROR = 1, 1722e2deee7SJiaran Zhang MEMORY_ERROR = 2, 1732e2deee7SJiaran Zhang POISON_ERROR = 3, 1742e2deee7SJiaran Zhang MSIX_ECC_ERROR = 4, 1752e2deee7SJiaran Zhang TQP_INT_ECC_ERROR = 5, 1762e2deee7SJiaran Zhang PF_ABNORMAL_INT_ERROR = 6, 1772e2deee7SJiaran Zhang MPF_ABNORMAL_INT_ERROR = 7, 1782e2deee7SJiaran Zhang COMMON_ERROR = 8, 1792e2deee7SJiaran Zhang PORT_ERROR = 9, 1802e2deee7SJiaran Zhang ETS_ERROR = 10, 1812e2deee7SJiaran Zhang NCSI_ERROR = 11, 1822e2deee7SJiaran Zhang GLB_ERROR = 12, 183da3fea80SJiaran Zhang LINK_ERROR = 13, 184da3fea80SJiaran Zhang PTP_ERROR = 14, 1858a95e360SJiaran Zhang /* add new ERROR TYPE for NIC here in order */ 1868a95e360SJiaran Zhang ROCEE_NORMAL_ERR = 40, 1878a95e360SJiaran Zhang ROCEE_OVF_ERR = 41, 188b566ef60SWeihang Li ROCEE_BUS_ERR = 42, 1898a95e360SJiaran Zhang /* add new ERROR TYPE for ROCEE here in order */ 1902e2deee7SJiaran Zhang }; 1912e2deee7SJiaran Zhang 1925a9f0eacSShiju Jose struct hclge_hw_blk { 1935a9f0eacSShiju Jose u32 msk; 1945a9f0eacSShiju Jose const char *name; 19598da4027SShiju Jose int (*config_err_int)(struct hclge_dev *hdev, bool en); 1965a9f0eacSShiju Jose }; 1975a9f0eacSShiju Jose 1986d67ee9aSShiju Jose struct hclge_hw_error { 1996d67ee9aSShiju Jose u32 int_msk; 2006d67ee9aSShiju Jose const char *msg; 201c41e672dSWeihang Li enum hnae3_reset_type reset_level; 2026d67ee9aSShiju Jose }; 2036d67ee9aSShiju Jose 2042e2deee7SJiaran Zhang struct hclge_hw_module_id { 2052e2deee7SJiaran Zhang enum hclge_mod_name_list module_id; 2062e2deee7SJiaran Zhang const char *msg; 2078a4bda8cSPeiyang Wang void (*query_reg_info)(struct hclge_dev *hdev); 2082e2deee7SJiaran Zhang }; 2092e2deee7SJiaran Zhang 2102e2deee7SJiaran Zhang struct hclge_hw_type_id { 2112e2deee7SJiaran Zhang enum hclge_err_type_list type_id; 2122e2deee7SJiaran Zhang const char *msg; 2138a45c4f9SJie Wang bool cause_by_vf; /* indicate the error may from vf exception */ 2142e2deee7SJiaran Zhang }; 2152e2deee7SJiaran Zhang 2162e2deee7SJiaran Zhang struct hclge_sum_err_info { 2172e2deee7SJiaran Zhang u8 reset_type; 2182e2deee7SJiaran Zhang u8 mod_num; 2192e2deee7SJiaran Zhang u8 rsv[2]; 2202e2deee7SJiaran Zhang }; 2212e2deee7SJiaran Zhang 2222e2deee7SJiaran Zhang struct hclge_mod_err_info { 2232e2deee7SJiaran Zhang u8 mod_id; 2242e2deee7SJiaran Zhang u8 err_num; 2252e2deee7SJiaran Zhang u8 rsv[2]; 2262e2deee7SJiaran Zhang }; 2272e2deee7SJiaran Zhang 2282e2deee7SJiaran Zhang struct hclge_type_reg_err_info { 2292e2deee7SJiaran Zhang u8 type_id; 2302e2deee7SJiaran Zhang u8 reg_num; 2312e2deee7SJiaran Zhang u8 rsv[2]; 2322e2deee7SJiaran Zhang u32 hclge_reg[HCLGE_REG_NUM_MAX]; 2332e2deee7SJiaran Zhang }; 2342e2deee7SJiaran Zhang 2358a4bda8cSPeiyang Wang struct hclge_mod_reg_info { 2368a4bda8cSPeiyang Wang const char *reg_name; 2378a4bda8cSPeiyang Wang bool has_suffix; /* add suffix for register name */ 2388a4bda8cSPeiyang Wang /* the positions of reg values in hclge_desc.data */ 2398a4bda8cSPeiyang Wang u8 reg_offset_group[HCLGE_MOD_REG_GROUP_MAX_SIZE]; 2408a4bda8cSPeiyang Wang u8 group_size; 2418a4bda8cSPeiyang Wang }; 2428a4bda8cSPeiyang Wang 2438a4bda8cSPeiyang Wang /* This structure defines cmdq used to query the hardware module debug 2448a4bda8cSPeiyang Wang * regisgers. 2458a4bda8cSPeiyang Wang */ 2468a4bda8cSPeiyang Wang struct hclge_mod_reg_common_msg { 2478a4bda8cSPeiyang Wang enum hclge_opcode_type cmd; 2488a4bda8cSPeiyang Wang struct hclge_desc *desc; 2498a4bda8cSPeiyang Wang u8 bd_num; /* the bd number of hclge_desc used */ 2508a4bda8cSPeiyang Wang bool need_para; /* whether this cmdq needs to add para */ 2518a4bda8cSPeiyang Wang 2528a4bda8cSPeiyang Wang /* the regs need to print */ 2538a4bda8cSPeiyang Wang const struct hclge_mod_reg_info *result_regs; 2548a4bda8cSPeiyang Wang u16 result_regs_size; 2558a4bda8cSPeiyang Wang }; 2568a4bda8cSPeiyang Wang 257a6345787SWeihang Li int hclge_config_mac_tnl_int(struct hclge_dev *hdev, bool en); 25800ea6e5fSWeihang Li int hclge_config_nic_hw_error(struct hclge_dev *hdev, bool state); 25900ea6e5fSWeihang Li int hclge_config_rocee_ras_interrupt(struct hclge_dev *hdev, bool en); 260e4193e24SShiju Jose void hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev *ae_dev); 2611c360a4aSJiaran Zhang bool hclge_find_error_source(struct hclge_dev *hdev); 2621c360a4aSJiaran Zhang void hclge_handle_occurred_error(struct hclge_dev *hdev); 263381c356eSShiju Jose pci_ers_result_t hclge_handle_hw_ras_error(struct hnae3_ae_dev *ae_dev); 264f6162d44SSalil Mehta int hclge_handle_hw_msix_error(struct hclge_dev *hdev, 265f6162d44SSalil Mehta unsigned long *reset_requests); 2662e2deee7SJiaran Zhang int hclge_handle_error_info_log(struct hnae3_ae_dev *ae_dev); 2672e2deee7SJiaran Zhang int hclge_handle_mac_tnl(struct hclge_dev *hdev); 2688a45c4f9SJie Wang int hclge_handle_vf_queue_err_ras(struct hclge_dev *hdev); 2695a9f0eacSShiju Jose #endif 270