- net/hns3: fix log about indirection table size - net/hns3: extract common function to query device - net/hns3: refactor set RSS hash algorithm and key interface - net/hns3: fix RSS key size compatibility - net/hns3: fix clearing RSS configuration - net/hns3: use RSS filter list to check duplicated rule - net/hns3: remove useless code when destroy valid RSS rule - net/hns3: fix warning on flush or destroy rule - net/hns3: fix config struct used for conversion - net/hns3: fix duplicate RSS rule check
292 lines
8.8 KiB
Diff
292 lines
8.8 KiB
Diff
From 6fb8330396b77c4a4acc73ff895a8d2b62a5ab93 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Tue, 31 Jan 2023 21:02:52 +0800
|
|
Subject: net/hns3: extract common function to query device
|
|
|
|
[ upstream commit 52a4e960b49c526dd1ad7c1e91ebcfa664a38e6d ]
|
|
|
|
Extract common function to query device specifications used by VF and
|
|
PF.
|
|
|
|
Fixes: 9c740336f024 ("net/hns3: get device specifications from firmware")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_common.c | 75 +++++++++++++++++++++++++++++++
|
|
drivers/net/hns3/hns3_common.h | 2 +
|
|
drivers/net/hns3/hns3_ethdev.c | 63 --------------------------
|
|
drivers/net/hns3/hns3_ethdev_vf.c | 65 +--------------------------
|
|
4 files changed, 79 insertions(+), 126 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c
|
|
index 2ebcf5695b..212b35d842 100644
|
|
--- a/drivers/net/hns3/hns3_common.c
|
|
+++ b/drivers/net/hns3/hns3_common.c
|
|
@@ -10,6 +10,7 @@
|
|
#include "hns3_logs.h"
|
|
#include "hns3_regs.h"
|
|
#include "hns3_rxtx.h"
|
|
+#include "hns3_dcb.h"
|
|
#include "hns3_common.h"
|
|
|
|
int
|
|
@@ -843,3 +844,77 @@ hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id)
|
|
|
|
return 0;
|
|
}
|
|
+
|
|
+void
|
|
+hns3_set_default_dev_specifications(struct hns3_hw *hw)
|
|
+{
|
|
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
|
|
+
|
|
+ hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT;
|
|
+ hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE;
|
|
+ hw->rss_key_size = HNS3_RSS_KEY_SIZE;
|
|
+ hw->intr.int_ql_max = HNS3_INTR_QL_NONE;
|
|
+
|
|
+ if (hns->is_vf)
|
|
+ return;
|
|
+
|
|
+ hw->max_tm_rate = HNS3_ETHER_MAX_RATE;
|
|
+}
|
|
+
|
|
+static void
|
|
+hns3_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc)
|
|
+{
|
|
+ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
|
|
+ struct hns3_dev_specs_0_cmd *req0;
|
|
+ struct hns3_dev_specs_1_cmd *req1;
|
|
+
|
|
+ req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data;
|
|
+ req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data;
|
|
+
|
|
+ hw->max_non_tso_bd_num = req0->max_non_tso_bd_num;
|
|
+ hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size);
|
|
+ hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size);
|
|
+ hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max);
|
|
+ hw->min_tx_pkt_len = req1->min_tx_pkt_len;
|
|
+
|
|
+ if (hns->is_vf)
|
|
+ return;
|
|
+
|
|
+ hw->max_tm_rate = rte_le_to_cpu_32(req0->max_tm_rate);
|
|
+}
|
|
+
|
|
+static int
|
|
+hns3_check_dev_specifications(struct hns3_hw *hw)
|
|
+{
|
|
+ if (hw->rss_ind_tbl_size == 0 ||
|
|
+ hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) {
|
|
+ hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)",
|
|
+ hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int
|
|
+hns3_query_dev_specifications(struct hns3_hw *hw)
|
|
+{
|
|
+ struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM];
|
|
+ int ret;
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) {
|
|
+ hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS,
|
|
+ true);
|
|
+ desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
|
|
+ }
|
|
+ hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true);
|
|
+
|
|
+ ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ hns3_parse_dev_specifications(hw, desc);
|
|
+
|
|
+ return hns3_check_dev_specifications(hw);
|
|
+}
|
|
diff --git a/drivers/net/hns3/hns3_common.h b/drivers/net/hns3/hns3_common.h
|
|
index 5aa001f0cc..8eaeda26e7 100644
|
|
--- a/drivers/net/hns3/hns3_common.h
|
|
+++ b/drivers/net/hns3/hns3_common.h
|
|
@@ -60,5 +60,7 @@ void hns3_unmap_rx_interrupt(struct rte_eth_dev *dev);
|
|
int hns3_restore_rx_interrupt(struct hns3_hw *hw);
|
|
|
|
int hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id);
|
|
+void hns3_set_default_dev_specifications(struct hns3_hw *hw);
|
|
+int hns3_query_dev_specifications(struct hns3_hw *hw);
|
|
|
|
#endif /* HNS3_COMMON_H */
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
|
index ed273b5b69..8fa12d91bb 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev.c
|
|
@@ -2647,69 +2647,6 @@ hns3_parse_speed(int speed_cmd, uint32_t *speed)
|
|
return 0;
|
|
}
|
|
|
|
-static void
|
|
-hns3_set_default_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT;
|
|
- hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE;
|
|
- hw->rss_key_size = HNS3_RSS_KEY_SIZE;
|
|
- hw->max_tm_rate = HNS3_ETHER_MAX_RATE;
|
|
- hw->intr.int_ql_max = HNS3_INTR_QL_NONE;
|
|
-}
|
|
-
|
|
-static void
|
|
-hns3_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc)
|
|
-{
|
|
- struct hns3_dev_specs_0_cmd *req0;
|
|
- struct hns3_dev_specs_1_cmd *req1;
|
|
-
|
|
- req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data;
|
|
- req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data;
|
|
-
|
|
- hw->max_non_tso_bd_num = req0->max_non_tso_bd_num;
|
|
- hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size);
|
|
- hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size);
|
|
- hw->max_tm_rate = rte_le_to_cpu_32(req0->max_tm_rate);
|
|
- hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max);
|
|
- hw->min_tx_pkt_len = req1->min_tx_pkt_len;
|
|
-}
|
|
-
|
|
-static int
|
|
-hns3_check_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- if (hw->rss_ind_tbl_size == 0 ||
|
|
- hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) {
|
|
- hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)",
|
|
- hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX);
|
|
- return -EINVAL;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static int
|
|
-hns3_query_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM];
|
|
- int ret;
|
|
- int i;
|
|
-
|
|
- for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) {
|
|
- hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS,
|
|
- true);
|
|
- desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
|
|
- }
|
|
- hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true);
|
|
-
|
|
- ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- hns3_parse_dev_specifications(hw, desc);
|
|
-
|
|
- return hns3_check_dev_specifications(hw);
|
|
-}
|
|
-
|
|
static int
|
|
hns3_get_capability(struct hns3_hw *hw)
|
|
{
|
|
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
index 8a3a3cc657..a3a1b71a63 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev_vf.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
@@ -688,67 +688,6 @@ hns3vf_interrupt_handler(void *param)
|
|
hns3vf_enable_irq0(hw);
|
|
}
|
|
|
|
-static void
|
|
-hns3vf_set_default_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT;
|
|
- hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE;
|
|
- hw->rss_key_size = HNS3_RSS_KEY_SIZE;
|
|
- hw->intr.int_ql_max = HNS3_INTR_QL_NONE;
|
|
-}
|
|
-
|
|
-static void
|
|
-hns3vf_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc)
|
|
-{
|
|
- struct hns3_dev_specs_0_cmd *req0;
|
|
- struct hns3_dev_specs_1_cmd *req1;
|
|
-
|
|
- req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data;
|
|
- req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data;
|
|
-
|
|
- hw->max_non_tso_bd_num = req0->max_non_tso_bd_num;
|
|
- hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size);
|
|
- hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size);
|
|
- hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max);
|
|
- hw->min_tx_pkt_len = req1->min_tx_pkt_len;
|
|
-}
|
|
-
|
|
-static int
|
|
-hns3vf_check_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- if (hw->rss_ind_tbl_size == 0 ||
|
|
- hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) {
|
|
- hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)",
|
|
- hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX);
|
|
- return -EINVAL;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static int
|
|
-hns3vf_query_dev_specifications(struct hns3_hw *hw)
|
|
-{
|
|
- struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM];
|
|
- int ret;
|
|
- int i;
|
|
-
|
|
- for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) {
|
|
- hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS,
|
|
- true);
|
|
- desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
|
|
- }
|
|
- hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true);
|
|
-
|
|
- ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- hns3vf_parse_dev_specifications(hw, desc);
|
|
-
|
|
- return hns3vf_check_dev_specifications(hw);
|
|
-}
|
|
-
|
|
void
|
|
hns3vf_update_push_lsc_cap(struct hns3_hw *hw, bool supported)
|
|
{
|
|
@@ -826,7 +765,7 @@ hns3vf_get_capability(struct hns3_hw *hw)
|
|
return ret;
|
|
|
|
if (hw->revision < PCI_REVISION_ID_HIP09_A) {
|
|
- hns3vf_set_default_dev_specifications(hw);
|
|
+ hns3_set_default_dev_specifications(hw);
|
|
hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE;
|
|
hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US;
|
|
hw->tso_mode = HNS3_TSO_SW_CAL_PSEUDO_H_CSUM;
|
|
@@ -837,7 +776,7 @@ hns3vf_get_capability(struct hns3_hw *hw)
|
|
return 0;
|
|
}
|
|
|
|
- ret = hns3vf_query_dev_specifications(hw);
|
|
+ ret = hns3_query_dev_specifications(hw);
|
|
if (ret) {
|
|
PMD_INIT_LOG(ERR,
|
|
"failed to query dev specifications, ret = %d",
|
|
--
|
|
2.23.0
|
|
|