206 lines
7.6 KiB
Diff
206 lines
7.6 KiB
Diff
From cae1920670d4a53a2baca8fa36a2218583cfa9c0 Mon Sep 17 00:00:00 2001
|
|
From: Jiaran Zhang <zhangjiaran@huawei.com>
|
|
Date: Sat, 24 Jul 2021 15:45:13 +0800
|
|
Subject: [PATCH 078/283] net: hns3: add support for imp-handle ras capability
|
|
|
|
mainline inclusion
|
|
from mainline-v5.14-rc1
|
|
commit e65e9f5c2e4efc17657d016d767eb7010d9dd598
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMUR
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e65e9f5c2e4efc17657d016d767eb7010d9dd598
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
IMP(Intelligent Management Processor) firmware add a new feature to
|
|
handle and consolidate RAS information for new devices, NIC driver
|
|
only needs to query the reported RAS information. NIC driver adds
|
|
support for this feature.
|
|
|
|
Driver queries device capability to check whether IMP support this
|
|
feature, If yes, execute the new RAS processing branch.
|
|
|
|
In order to add a method to check whether PF supports imp-handle RAS
|
|
feature, add dumping this info in debugfs.
|
|
|
|
Signed-off-by: Jiaran Zhang <zhangjiaran@huawei.com>
|
|
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
|
|
Conflicts:
|
|
drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
|
|
---
|
|
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 8 +++-
|
|
.../ethernet/hisilicon/hns3/hns3_debugfs.c | 46 +++++++++++++++++++
|
|
.../ethernet/hisilicon/hns3/hns3_debugfs.h | 5 ++
|
|
.../hisilicon/hns3/hns3pf/hclge_cmd.c | 8 ++++
|
|
.../hisilicon/hns3/hns3pf/hclge_cmd.h | 6 +++
|
|
.../hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
|
|
6 files changed, 73 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
index 6a93ea356234..26286e76877c 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
@@ -64,7 +64,6 @@
|
|
#define HNAE3_KNIC_CLIENT_INITED_B 0x3
|
|
#define HNAE3_UNIC_CLIENT_INITED_B 0x4
|
|
#define HNAE3_ROCE_CLIENT_INITED_B 0x5
|
|
-#define HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B 0x8
|
|
#define HNAE3_DEV_SUPPORT_ROCE_DCB_BITS (BIT(HNAE3_DEV_SUPPORT_DCB_B) |\
|
|
BIT(HNAE3_DEV_SUPPORT_ROCE_B))
|
|
|
|
@@ -91,6 +90,10 @@ enum HNAE3_DEV_CAP_BITS {
|
|
HNAE3_DEV_SUPPORT_STASH_B,
|
|
HNAE3_DEV_SUPPORT_UDP_TUNNEL_CSUM_B,
|
|
HNAE3_DEV_SUPPORT_PAUSE_B,
|
|
+ HNAE3_DEV_SUPPORT_RAS_IMP_B,
|
|
+ HNAE3_DEV_SUPPORT_RXD_ADV_LAYOUT_B,
|
|
+ HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B,
|
|
+ HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B,
|
|
};
|
|
|
|
#define hnae3_dev_fd_supported(hdev) \
|
|
@@ -129,6 +132,9 @@ enum HNAE3_DEV_CAP_BITS {
|
|
#define hnae3_dev_phy_imp_supported(hdev) \
|
|
test_bit(HNAE3_DEV_SUPPORT_PHY_IMP_B, (hdev)->ae_dev->caps)
|
|
|
|
+#define hnae3_dev_ras_imp_supported(hdev) \
|
|
+ test_bit(HNAE3_DEV_SUPPORT_RAS_IMP_B, (hdev)->ae_dev->caps)
|
|
+
|
|
#define hnae3_dev_tqp_txrx_indep_supported(hdev) \
|
|
test_bit(HNAE3_DEV_SUPPORT_TQP_TXRX_INDEP_B, (hdev)->ae_dev->caps)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
|
|
index 59d9dda8f325..1d86debdc09e 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
|
|
@@ -318,6 +318,52 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = {
|
|
},
|
|
};
|
|
|
|
+static struct hns3_dbg_cap_info hns3_dbg_cap[] = {
|
|
+ {
|
|
+ .name = "support FD",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_FD_B,
|
|
+ }, {
|
|
+ .name = "support GRO",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_GRO_B,
|
|
+ }, {
|
|
+ .name = "support FEC",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_FEC_B,
|
|
+ }, {
|
|
+ .name = "support UDP GSO",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_UDP_GSO_B,
|
|
+ }, {
|
|
+ .name = "support PTP",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_PTP_B,
|
|
+ }, {
|
|
+ .name = "support INT QL",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_INT_QL_B,
|
|
+ }, {
|
|
+ .name = "support HW TX csum",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_HW_TX_CSUM_B,
|
|
+ }, {
|
|
+ .name = "support UDP tunnel csum",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_UDP_TUNNEL_CSUM_B,
|
|
+ }, {
|
|
+ .name = "support TX push",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_TX_PUSH_B,
|
|
+ }, {
|
|
+ .name = "support imp-controlled PHY",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_PHY_IMP_B,
|
|
+ }, {
|
|
+ .name = "support imp-controlled RAS",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_RAS_IMP_B,
|
|
+ }, {
|
|
+ .name = "support rxd advanced layout",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_RXD_ADV_LAYOUT_B,
|
|
+ }, {
|
|
+ .name = "support port vlan bypass",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B,
|
|
+ }, {
|
|
+ .name = "support modify vlan filter state",
|
|
+ .cap_bit = HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B,
|
|
+ }
|
|
+};
|
|
+
|
|
static void hns3_dbg_fill_content(char *content, u16 len,
|
|
const struct hns3_dbg_item *items,
|
|
const char **result, u16 size)
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.h b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.h
|
|
index 902e16d99fb7..97578eabb7d8 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.h
|
|
@@ -58,4 +58,9 @@ struct hns3_dbg_func {
|
|
int (*dbg_dump_bd)(struct hns3_dbg_data *data, char *buf, int len);
|
|
};
|
|
|
|
+struct hns3_dbg_cap_info {
|
|
+ const char *name;
|
|
+ enum HNAE3_DEV_CAP_BITS cap_bit;
|
|
+};
|
|
+
|
|
#endif
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c
|
|
index e127ca7106b7..26e9d03da720 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c
|
|
@@ -392,6 +392,14 @@ static void hclge_parse_capability(struct hclge_dev *hdev,
|
|
set_bit(HNAE3_DEV_SUPPORT_HW_TX_CSUM_B, ae_dev->caps);
|
|
if (hnae3_get_bit(caps, HCLGE_CAP_PHY_IMP_B))
|
|
set_bit(HNAE3_DEV_SUPPORT_PHY_IMP_B, ae_dev->caps);
|
|
+ if (hnae3_get_bit(caps, HCLGE_CAP_RAS_IMP_B))
|
|
+ set_bit(HNAE3_DEV_SUPPORT_RAS_IMP_B, ae_dev->caps);
|
|
+ if (hnae3_get_bit(caps, HCLGE_CAP_RXD_ADV_LAYOUT_B))
|
|
+ set_bit(HNAE3_DEV_SUPPORT_RXD_ADV_LAYOUT_B, ae_dev->caps);
|
|
+ if (hnae3_get_bit(caps, HCLGE_CAP_PORT_VLAN_BYPASS_B)) {
|
|
+ set_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, ae_dev->caps);
|
|
+ set_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps);
|
|
+ }
|
|
}
|
|
|
|
static enum hclge_cmd_status
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
|
|
index 81b726e557df..022e58235a58 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
|
|
@@ -388,6 +388,12 @@ enum HCLGE_CAP_BITS {
|
|
HCLGE_CAP_TQP_TXRX_INDEP_B,
|
|
HCLGE_CAP_HW_PAD_B,
|
|
HCLGE_CAP_STASH_B,
|
|
+ HCLGE_CAP_UDP_TUNNEL_CSUM_B,
|
|
+ HCLGE_CAP_RAS_IMP_B = 12,
|
|
+ HCLGE_CAP_FEC_B = 13,
|
|
+ HCLGE_CAP_PAUSE_B = 14,
|
|
+ HCLGE_CAP_RXD_ADV_LAYOUT_B = 15,
|
|
+ HCLGE_CAP_PORT_VLAN_BYPASS_B = 17,
|
|
};
|
|
|
|
#define HCLGE_QUERY_CAP_LENGTH 3
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
index 59d81b0f48c5..46a3bc0a9df3 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
@@ -4220,7 +4220,7 @@ static void hclge_errhand_service_task(struct hclge_dev *hdev)
|
|
if (!test_and_clear_bit(HCLGE_STATE_ERR_SERVICE_SCHED, &hdev->state))
|
|
return;
|
|
|
|
- if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3)
|
|
+ if (hnae3_dev_ras_imp_supported(hdev))
|
|
hclge_handle_err_recovery(hdev);
|
|
else
|
|
hclge_misc_err_recovery(hdev);
|
|
--
|
|
2.34.1
|
|
|