Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
| 2 | /* Copyright (c) 2016-2017 Hisilicon Limited. */ |
| 3 | |
| 4 | #ifndef __HCLGE_ERR_H |
| 5 | #define __HCLGE_ERR_H |
| 6 | |
| 7 | #include "hclge_main.h" |
Weihang Li | a83d296 | 2019-08-28 22:23:13 +0800 | [diff] [blame] | 8 | #include "hnae3.h" |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 9 | |
Weihang Li | 987b4ae | 2019-06-20 16:52:42 +0800 | [diff] [blame] | 10 | #define HCLGE_MPF_RAS_INT_MIN_BD_NUM 10 |
| 11 | #define HCLGE_PF_RAS_INT_MIN_BD_NUM 4 |
| 12 | #define HCLGE_MPF_MSIX_INT_MIN_BD_NUM 10 |
| 13 | #define HCLGE_PF_MSIX_INT_MIN_BD_NUM 4 |
| 14 | |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 15 | #define HCLGE_RAS_PF_OTHER_INT_STS_REG 0x20B00 |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 16 | #define HCLGE_RAS_REG_NFE_MASK 0xFF00 |
Shiju Jose | 630ba00 | 2018-12-07 21:08:11 +0000 | [diff] [blame] | 17 | #define HCLGE_RAS_REG_ROCEE_ERR_MASK 0x3000000 |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 18 | |
Salil Mehta | f6162d4 | 2018-12-07 21:08:06 +0000 | [diff] [blame] | 19 | #define HCLGE_VECTOR0_REG_MSIX_MASK 0x1FF00 |
| 20 | |
Shiju Jose | 6d67ee9 | 2018-10-19 20:15:29 +0100 | [diff] [blame] | 21 | #define HCLGE_IMP_TCM_ECC_ERR_INT_EN 0xFFFF0000 |
| 22 | #define HCLGE_IMP_TCM_ECC_ERR_INT_EN_MASK 0xFFFF0000 |
| 23 | #define HCLGE_IMP_ITCM4_ECC_ERR_INT_EN 0x300 |
| 24 | #define HCLGE_IMP_ITCM4_ECC_ERR_INT_EN_MASK 0x300 |
| 25 | #define HCLGE_CMDQ_NIC_ECC_ERR_INT_EN 0xFFFF |
| 26 | #define HCLGE_CMDQ_NIC_ECC_ERR_INT_EN_MASK 0xFFFF |
| 27 | #define HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN 0xFFFF0000 |
| 28 | #define HCLGE_CMDQ_ROCEE_ECC_ERR_INT_EN_MASK 0xFFFF0000 |
| 29 | #define HCLGE_IMP_RD_POISON_ERR_INT_EN 0x0100 |
| 30 | #define HCLGE_IMP_RD_POISON_ERR_INT_EN_MASK 0x0100 |
| 31 | #define HCLGE_TQP_ECC_ERR_INT_EN 0x0FFF |
| 32 | #define HCLGE_TQP_ECC_ERR_INT_EN_MASK 0x0FFF |
Shiju Jose | 332fbf5 | 2018-12-07 21:08:04 +0000 | [diff] [blame] | 33 | #define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN_MASK 0x0F000000 |
| 34 | #define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN 0x0F000000 |
Shiju Jose | bf1faf9 | 2018-10-19 20:15:30 +0100 | [diff] [blame] | 35 | #define HCLGE_IGU_ERR_INT_EN 0x0000066F |
| 36 | #define HCLGE_IGU_ERR_INT_EN_MASK 0x000F |
| 37 | #define HCLGE_IGU_TNL_ERR_INT_EN 0x0002AABF |
| 38 | #define HCLGE_IGU_TNL_ERR_INT_EN_MASK 0x003F |
Shiju Jose | da2d072 | 2018-10-19 20:15:31 +0100 | [diff] [blame] | 39 | #define HCLGE_PPP_MPF_ECC_ERR_INT0_EN 0xFFFFFFFF |
| 40 | #define HCLGE_PPP_MPF_ECC_ERR_INT0_EN_MASK 0xFFFFFFFF |
| 41 | #define HCLGE_PPP_MPF_ECC_ERR_INT1_EN 0xFFFFFFFF |
| 42 | #define HCLGE_PPP_MPF_ECC_ERR_INT1_EN_MASK 0xFFFFFFFF |
| 43 | #define HCLGE_PPP_PF_ERR_INT_EN 0x0003 |
| 44 | #define HCLGE_PPP_PF_ERR_INT_EN_MASK 0x0003 |
| 45 | #define HCLGE_PPP_MPF_ECC_ERR_INT2_EN 0x003F |
| 46 | #define HCLGE_PPP_MPF_ECC_ERR_INT2_EN_MASK 0x003F |
| 47 | #define HCLGE_PPP_MPF_ECC_ERR_INT3_EN 0x003F |
| 48 | #define HCLGE_PPP_MPF_ECC_ERR_INT3_EN_MASK 0x003F |
Shiju Jose | 01865a5 | 2018-10-19 20:15:32 +0100 | [diff] [blame] | 49 | #define HCLGE_TM_SCH_ECC_ERR_INT_EN 0x3 |
| 50 | #define HCLGE_TM_QCN_MEM_ERR_INT_EN 0xFFFFFF |
Shiju Jose | bf1faf9 | 2018-10-19 20:15:30 +0100 | [diff] [blame] | 51 | #define HCLGE_NCSI_ERR_INT_EN 0x3 |
| 52 | #define HCLGE_NCSI_ERR_INT_TYPE 0x9 |
Weihang Li | d1f55d6 | 2019-02-20 10:32:46 +0800 | [diff] [blame] | 53 | #define HCLGE_MAC_COMMON_ERR_INT_EN 0x107FF |
| 54 | #define HCLGE_MAC_COMMON_ERR_INT_EN_MASK 0x107FF |
Weihang Li | 6aa5d07 | 2019-06-03 10:09:19 +0800 | [diff] [blame] | 55 | #define HCLGE_MAC_TNL_INT_EN GENMASK(9, 0) |
| 56 | #define HCLGE_MAC_TNL_INT_EN_MASK GENMASK(9, 0) |
| 57 | #define HCLGE_MAC_TNL_INT_CLR GENMASK(9, 0) |
Shiju Jose | f69b10b | 2018-12-07 21:08:09 +0000 | [diff] [blame] | 58 | #define HCLGE_PPU_MPF_ABNORMAL_INT0_EN GENMASK(31, 0) |
| 59 | #define HCLGE_PPU_MPF_ABNORMAL_INT0_EN_MASK GENMASK(31, 0) |
| 60 | #define HCLGE_PPU_MPF_ABNORMAL_INT1_EN GENMASK(31, 0) |
| 61 | #define HCLGE_PPU_MPF_ABNORMAL_INT1_EN_MASK GENMASK(31, 0) |
| 62 | #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN 0x3FFF3FFF |
| 63 | #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN_MASK 0x3FFF3FFF |
| 64 | #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN2 0xB |
| 65 | #define HCLGE_PPU_MPF_ABNORMAL_INT2_EN2_MASK 0xB |
| 66 | #define HCLGE_PPU_MPF_ABNORMAL_INT3_EN GENMASK(7, 0) |
| 67 | #define HCLGE_PPU_MPF_ABNORMAL_INT3_EN_MASK GENMASK(23, 16) |
| 68 | #define HCLGE_PPU_PF_ABNORMAL_INT_EN GENMASK(5, 0) |
| 69 | #define HCLGE_PPU_PF_ABNORMAL_INT_EN_MASK GENMASK(5, 0) |
Shiju Jose | c352917 | 2018-12-07 21:08:10 +0000 | [diff] [blame] | 70 | #define HCLGE_SSU_1BIT_ECC_ERR_INT_EN GENMASK(31, 0) |
| 71 | #define HCLGE_SSU_1BIT_ECC_ERR_INT_EN_MASK GENMASK(31, 0) |
| 72 | #define HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN GENMASK(31, 0) |
| 73 | #define HCLGE_SSU_MULTI_BIT_ECC_ERR_INT_EN_MASK GENMASK(31, 0) |
| 74 | #define HCLGE_SSU_BIT32_ECC_ERR_INT_EN 0x0101 |
| 75 | #define HCLGE_SSU_BIT32_ECC_ERR_INT_EN_MASK 0x0101 |
| 76 | #define HCLGE_SSU_COMMON_INT_EN GENMASK(9, 0) |
| 77 | #define HCLGE_SSU_COMMON_INT_EN_MASK GENMASK(9, 0) |
| 78 | #define HCLGE_SSU_PORT_BASED_ERR_INT_EN 0x0BFF |
| 79 | #define HCLGE_SSU_PORT_BASED_ERR_INT_EN_MASK 0x0BFF0000 |
| 80 | #define HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN GENMASK(23, 0) |
| 81 | #define HCLGE_SSU_FIFO_OVERFLOW_ERR_INT_EN_MASK GENMASK(23, 0) |
Shiju Jose | 6d67ee9 | 2018-10-19 20:15:29 +0100 | [diff] [blame] | 82 | |
Shiju Jose | c352917 | 2018-12-07 21:08:10 +0000 | [diff] [blame] | 83 | #define HCLGE_SSU_COMMON_ERR_INT_MASK GENMASK(9, 0) |
| 84 | #define HCLGE_SSU_PORT_INT_MSIX_MASK 0x7BFF |
Shiju Jose | 332fbf5 | 2018-12-07 21:08:04 +0000 | [diff] [blame] | 85 | #define HCLGE_IGU_INT_MASK GENMASK(3, 0) |
| 86 | #define HCLGE_IGU_EGU_TNL_INT_MASK GENMASK(5, 0) |
| 87 | #define HCLGE_PPP_MPF_INT_ST3_MASK GENMASK(5, 0) |
Shiju Jose | f69b10b | 2018-12-07 21:08:09 +0000 | [diff] [blame] | 88 | #define HCLGE_PPU_MPF_INT_ST3_MASK GENMASK(7, 0) |
Weihang Li | 9f65e5e | 2019-06-13 17:12:25 +0800 | [diff] [blame] | 89 | #define HCLGE_PPU_MPF_INT_ST2_MSIX_MASK BIT(29) |
Weihang Li | 747fc3f | 2019-02-20 10:32:45 +0800 | [diff] [blame] | 90 | #define HCLGE_PPU_PF_INT_RAS_MASK 0x18 |
Weihang Li | 0cd8618 | 2019-06-07 10:03:07 +0800 | [diff] [blame] | 91 | #define HCLGE_PPU_PF_INT_MSIX_MASK 0x26 |
| 92 | #define HCLGE_PPU_PF_OVER_8BD_ERR_MASK 0x01 |
Shiju Jose | 332fbf5 | 2018-12-07 21:08:04 +0000 | [diff] [blame] | 93 | #define HCLGE_QCN_FIFO_INT_MASK GENMASK(17, 0) |
| 94 | #define HCLGE_QCN_ECC_INT_MASK GENMASK(21, 0) |
| 95 | #define HCLGE_NCSI_ECC_INT_MASK GENMASK(1, 0) |
| 96 | |
Shiju Jose | 630ba00 | 2018-12-07 21:08:11 +0000 | [diff] [blame] | 97 | #define HCLGE_ROCEE_RAS_NFE_INT_EN 0xF |
| 98 | #define HCLGE_ROCEE_RAS_CE_INT_EN 0x1 |
| 99 | #define HCLGE_ROCEE_RAS_NFE_INT_EN_MASK 0xF |
| 100 | #define HCLGE_ROCEE_RAS_CE_INT_EN_MASK 0x1 |
| 101 | #define HCLGE_ROCEE_RERR_INT_MASK BIT(0) |
| 102 | #define HCLGE_ROCEE_BERR_INT_MASK BIT(1) |
Xiaofei Tan | 238882c | 2019-06-07 10:03:02 +0800 | [diff] [blame] | 103 | #define HCLGE_ROCEE_AXI_ERR_INT_MASK GENMASK(1, 0) |
Shiju Jose | 630ba00 | 2018-12-07 21:08:11 +0000 | [diff] [blame] | 104 | #define HCLGE_ROCEE_ECC_INT_MASK BIT(2) |
| 105 | #define HCLGE_ROCEE_OVF_INT_MASK BIT(3) |
| 106 | #define HCLGE_ROCEE_OVF_ERR_INT_MASK 0x10000 |
| 107 | #define HCLGE_ROCEE_OVF_ERR_TYPE_MASK 0x3F |
| 108 | |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 109 | enum hclge_err_int_type { |
| 110 | HCLGE_ERR_INT_MSIX = 0, |
| 111 | HCLGE_ERR_INT_RAS_CE = 1, |
| 112 | HCLGE_ERR_INT_RAS_NFE = 2, |
| 113 | HCLGE_ERR_INT_RAS_FE = 3, |
| 114 | }; |
| 115 | |
| 116 | struct hclge_hw_blk { |
| 117 | u32 msk; |
| 118 | const char *name; |
Shiju Jose | 98da402 | 2018-12-07 21:07:59 +0000 | [diff] [blame] | 119 | int (*config_err_int)(struct hclge_dev *hdev, bool en); |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 120 | }; |
| 121 | |
Shiju Jose | 6d67ee9 | 2018-10-19 20:15:29 +0100 | [diff] [blame] | 122 | struct hclge_hw_error { |
| 123 | u32 int_msk; |
| 124 | const char *msg; |
Weihang Li | c41e672 | 2019-04-14 09:47:43 +0800 | [diff] [blame] | 125 | enum hnae3_reset_type reset_level; |
Shiju Jose | 6d67ee9 | 2018-10-19 20:15:29 +0100 | [diff] [blame] | 126 | }; |
| 127 | |
Weihang Li | a634578 | 2019-04-19 11:05:45 +0800 | [diff] [blame] | 128 | int hclge_config_mac_tnl_int(struct hclge_dev *hdev, bool en); |
Weihang Li | 00ea6e5 | 2019-06-03 10:09:22 +0800 | [diff] [blame] | 129 | int hclge_config_nic_hw_error(struct hclge_dev *hdev, bool state); |
| 130 | int hclge_config_rocee_ras_interrupt(struct hclge_dev *hdev, bool en); |
Shiju Jose | e4193e2 | 2019-06-13 17:12:23 +0800 | [diff] [blame] | 131 | void hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev *ae_dev); |
Shiju Jose | 381c356 | 2018-12-07 21:08:02 +0000 | [diff] [blame] | 132 | pci_ers_result_t hclge_handle_hw_ras_error(struct hnae3_ae_dev *ae_dev); |
Salil Mehta | f6162d4 | 2018-12-07 21:08:06 +0000 | [diff] [blame] | 133 | int hclge_handle_hw_msix_error(struct hclge_dev *hdev, |
| 134 | unsigned long *reset_requests); |
Shiju Jose | 5a9f0ea | 2018-10-19 20:15:26 +0100 | [diff] [blame] | 135 | #endif |