blob: 608fe26fc3fed422b42fa5a90a4cce20b9cc575b [file] [log] [blame]
Shiju Jose5a9f0ea2018-10-19 20:15:26 +01001/* 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 Lia83d2962019-08-28 22:23:13 +08008#include "hnae3.h"
Shiju Jose5a9f0ea2018-10-19 20:15:26 +01009
Weihang Li987b4ae2019-06-20 16:52:42 +080010#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 Jose5a9f0ea2018-10-19 20:15:26 +010015#define HCLGE_RAS_PF_OTHER_INT_STS_REG 0x20B00
Shiju Jose5a9f0ea2018-10-19 20:15:26 +010016#define HCLGE_RAS_REG_NFE_MASK 0xFF00
Shiju Jose630ba002018-12-07 21:08:11 +000017#define HCLGE_RAS_REG_ROCEE_ERR_MASK 0x3000000
Shiju Jose5a9f0ea2018-10-19 20:15:26 +010018
Salil Mehtaf6162d42018-12-07 21:08:06 +000019#define HCLGE_VECTOR0_REG_MSIX_MASK 0x1FF00
20
Shiju Jose6d67ee92018-10-19 20:15:29 +010021#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 Jose332fbf52018-12-07 21:08:04 +000033#define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN_MASK 0x0F000000
34#define HCLGE_MSIX_SRAM_ECC_ERR_INT_EN 0x0F000000
Shiju Josebf1faf92018-10-19 20:15:30 +010035#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 Joseda2d0722018-10-19 20:15:31 +010039#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 Jose01865a52018-10-19 20:15:32 +010049#define HCLGE_TM_SCH_ECC_ERR_INT_EN 0x3
50#define HCLGE_TM_QCN_MEM_ERR_INT_EN 0xFFFFFF
Shiju Josebf1faf92018-10-19 20:15:30 +010051#define HCLGE_NCSI_ERR_INT_EN 0x3
52#define HCLGE_NCSI_ERR_INT_TYPE 0x9
Weihang Lid1f55d62019-02-20 10:32:46 +080053#define HCLGE_MAC_COMMON_ERR_INT_EN 0x107FF
54#define HCLGE_MAC_COMMON_ERR_INT_EN_MASK 0x107FF
Weihang Li6aa5d072019-06-03 10:09:19 +080055#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 Josef69b10b2018-12-07 21:08:09 +000058#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 Josec3529172018-12-07 21:08:10 +000070#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 Jose6d67ee92018-10-19 20:15:29 +010082
Shiju Josec3529172018-12-07 21:08:10 +000083#define HCLGE_SSU_COMMON_ERR_INT_MASK GENMASK(9, 0)
84#define HCLGE_SSU_PORT_INT_MSIX_MASK 0x7BFF
Shiju Jose332fbf52018-12-07 21:08:04 +000085#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 Josef69b10b2018-12-07 21:08:09 +000088#define HCLGE_PPU_MPF_INT_ST3_MASK GENMASK(7, 0)
Weihang Li9f65e5e2019-06-13 17:12:25 +080089#define HCLGE_PPU_MPF_INT_ST2_MSIX_MASK BIT(29)
Weihang Li747fc3f2019-02-20 10:32:45 +080090#define HCLGE_PPU_PF_INT_RAS_MASK 0x18
Weihang Li0cd86182019-06-07 10:03:07 +080091#define HCLGE_PPU_PF_INT_MSIX_MASK 0x26
92#define HCLGE_PPU_PF_OVER_8BD_ERR_MASK 0x01
Shiju Jose332fbf52018-12-07 21:08:04 +000093#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 Jose630ba002018-12-07 21:08:11 +000097#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 Tan238882c2019-06-07 10:03:02 +0800103#define HCLGE_ROCEE_AXI_ERR_INT_MASK GENMASK(1, 0)
Shiju Jose630ba002018-12-07 21:08:11 +0000104#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 Jose5a9f0ea2018-10-19 20:15:26 +0100109enum 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
116struct hclge_hw_blk {
117 u32 msk;
118 const char *name;
Shiju Jose98da4022018-12-07 21:07:59 +0000119 int (*config_err_int)(struct hclge_dev *hdev, bool en);
Shiju Jose5a9f0ea2018-10-19 20:15:26 +0100120};
121
Shiju Jose6d67ee92018-10-19 20:15:29 +0100122struct hclge_hw_error {
123 u32 int_msk;
124 const char *msg;
Weihang Lic41e6722019-04-14 09:47:43 +0800125 enum hnae3_reset_type reset_level;
Shiju Jose6d67ee92018-10-19 20:15:29 +0100126};
127
Weihang Lia6345782019-04-19 11:05:45 +0800128int hclge_config_mac_tnl_int(struct hclge_dev *hdev, bool en);
Weihang Li00ea6e52019-06-03 10:09:22 +0800129int hclge_config_nic_hw_error(struct hclge_dev *hdev, bool state);
130int hclge_config_rocee_ras_interrupt(struct hclge_dev *hdev, bool en);
Shiju Josee4193e22019-06-13 17:12:23 +0800131void hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev *ae_dev);
Shiju Jose381c3562018-12-07 21:08:02 +0000132pci_ers_result_t hclge_handle_hw_ras_error(struct hnae3_ae_dev *ae_dev);
Salil Mehtaf6162d42018-12-07 21:08:06 +0000133int hclge_handle_hw_msix_error(struct hclge_dev *hdev,
134 unsigned long *reset_requests);
Shiju Jose5a9f0ea2018-10-19 20:15:26 +0100135#endif