!389 [sync] PR-386: net/hns3: add LLRS FEC mode support for 200G ports
From: @openeuler-sync-bot Reviewed-by: @li-huisong Signed-off-by: @li-huisong
This commit is contained in:
commit
b2475af37f
36
0293-net-hns3-fix-FEC-mode-for-200G-ports.patch
Normal file
36
0293-net-hns3-fix-FEC-mode-for-200G-ports.patch
Normal file
@ -0,0 +1,36 @@
|
||||
From 6c8780bfc15e2a039dca70e615a3568032ebcf21 Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:33 +0800
|
||||
Subject: net/hns3: fix FEC mode for 200G ports
|
||||
|
||||
[ upstream commit 0ed9d6d08faf83dcaef02dc22edff2ee0f18c41a ]
|
||||
|
||||
The hardware does not support NOFEC for 200G ports. So delete this
|
||||
bit.
|
||||
|
||||
Fixes: 9bf2ea8dbc65 ("net/hns3: support FEC")
|
||||
Cc: stable@dpdk.org
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
---
|
||||
drivers/net/hns3/hns3_ethdev.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
||||
index 2fb9e68039..06d4752ab1 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.c
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.c
|
||||
@@ -83,8 +83,7 @@ static const struct rte_eth_fec_capa speed_fec_capa_tbl[] = {
|
||||
RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) |
|
||||
RTE_ETH_FEC_MODE_CAPA_MASK(RS) },
|
||||
|
||||
- { RTE_ETH_SPEED_NUM_200G, RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
|
||||
- RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) |
|
||||
+ { RTE_ETH_SPEED_NUM_200G, RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) |
|
||||
RTE_ETH_FEC_MODE_CAPA_MASK(RS) }
|
||||
};
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
108
0294-net-hns3-fix-FEC-mode-check-error.patch
Normal file
108
0294-net-hns3-fix-FEC-mode-check-error.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From be516a78df6de13d6e87aaae19dad374819fca19 Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:34 +0800
|
||||
Subject: net/hns3: fix FEC mode check error
|
||||
|
||||
[ upstream commit 5aba4e41d02222c5cf414b48876cff829f0b6a6f ]
|
||||
|
||||
The function is_fec_mode_one_bit_set() is used to check whether
|
||||
the binary of the mode from user only contains one '1'. But it
|
||||
uses the bytes number this mode variable occupied to calculate
|
||||
the count. So this patch uses __builtin_popcount() to replace it.
|
||||
|
||||
This patch also extracts the code for verifying mode parameter into
|
||||
a function.
|
||||
|
||||
Fixes: 9bf2ea8dbc65 ("net/hns3: support FEC")
|
||||
Cc: stable@dpdk.org
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
---
|
||||
drivers/net/hns3/hns3_ethdev.c | 50 ++++++++++++++++------------------
|
||||
1 file changed, 24 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
||||
index 06d4752ab1..74e785c0cf 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.c
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.c
|
||||
@@ -6139,52 +6139,50 @@ get_current_speed_fec_cap(struct hns3_hw *hw, struct rte_eth_fec_capa *fec_capa)
|
||||
return cur_capa;
|
||||
}
|
||||
|
||||
-static bool
|
||||
-is_fec_mode_one_bit_set(uint32_t mode)
|
||||
-{
|
||||
- int cnt = 0;
|
||||
- uint8_t i;
|
||||
-
|
||||
- for (i = 0; i < sizeof(mode); i++)
|
||||
- if (mode >> i & 0x1)
|
||||
- cnt++;
|
||||
-
|
||||
- return cnt == 1 ? true : false;
|
||||
-}
|
||||
-
|
||||
static int
|
||||
-hns3_fec_set(struct rte_eth_dev *dev, uint32_t mode)
|
||||
+hns3_fec_mode_valid(struct rte_eth_dev *dev, uint32_t mode)
|
||||
{
|
||||
#define FEC_CAPA_NUM 2
|
||||
struct hns3_adapter *hns = dev->data->dev_private;
|
||||
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(hns);
|
||||
- struct hns3_pf *pf = &hns->pf;
|
||||
struct rte_eth_fec_capa fec_capa[FEC_CAPA_NUM];
|
||||
- uint32_t cur_capa;
|
||||
uint32_t num = FEC_CAPA_NUM;
|
||||
+ uint32_t cur_capa;
|
||||
int ret;
|
||||
|
||||
- ret = hns3_fec_get_capability(dev, fec_capa, num);
|
||||
- if (ret < 0)
|
||||
- return ret;
|
||||
-
|
||||
- /* HNS3 PMD only support one bit set mode, e.g. 0x1, 0x4 */
|
||||
- if (!is_fec_mode_one_bit_set(mode)) {
|
||||
- hns3_err(hw, "FEC mode(0x%x) not supported in HNS3 PMD, "
|
||||
- "FEC mode should be only one bit set", mode);
|
||||
+ if (__builtin_popcount(mode) != 1) {
|
||||
+ hns3_err(hw, "FEC mode(0x%x) should be only one bit set", mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ ret = hns3_fec_get_capability(dev, fec_capa, num);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
/*
|
||||
* Check whether the configured mode is within the FEC capability.
|
||||
* If not, the configured mode will not be supported.
|
||||
*/
|
||||
cur_capa = get_current_speed_fec_cap(hw, fec_capa);
|
||||
- if (!(cur_capa & mode)) {
|
||||
- hns3_err(hw, "unsupported FEC mode = 0x%x", mode);
|
||||
+ if ((cur_capa & mode) == 0) {
|
||||
+ hns3_err(hw, "unsupported FEC mode(0x%x)", mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+hns3_fec_set(struct rte_eth_dev *dev, uint32_t mode)
|
||||
+{
|
||||
+ struct hns3_adapter *hns = dev->data->dev_private;
|
||||
+ struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(hns);
|
||||
+ struct hns3_pf *pf = &hns->pf;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = hns3_fec_mode_valid(dev, mode);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+
|
||||
rte_spinlock_lock(&hw->lock);
|
||||
ret = hns3_set_fec_hw(hw, mode);
|
||||
if (ret) {
|
||||
--
|
||||
2.23.0
|
||||
|
||||
222
0295-net-hns3-fix-missing-FEC-capability.patch
Normal file
222
0295-net-hns3-fix-missing-FEC-capability.patch
Normal file
@ -0,0 +1,222 @@
|
||||
From 19c77a23c28779fdbaca1e477749bcb3a9c3ecdd Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:35 +0800
|
||||
Subject: net/hns3: fix missing FEC capability
|
||||
|
||||
[ upstream commit f611c42363f434d62500b7c7f4b7ecaa46774bdd ]
|
||||
|
||||
Currently, FEC capabilities are reported based on the device ID.
|
||||
And a device ID is bound to only one or two rates. So some cases
|
||||
hns3 driver only reports the FEC capabilities corresponding to
|
||||
the rate. But hns3 supports speed switching function, which causes
|
||||
the FEC capabilities of other rates are not reported. So this patch
|
||||
reports the FEC capabilities by the speed capabilities of the
|
||||
network port.
|
||||
|
||||
Fixes: 9bf2ea8dbc65 ("net/hns3: support FEC")
|
||||
Cc: stable@dpdk.org
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
---
|
||||
drivers/net/hns3/hns3_ethdev.c | 129 ++++++++++++---------------------
|
||||
1 file changed, 45 insertions(+), 84 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
||||
index 74e785c0cf..05d489a12b 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.c
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.c
|
||||
@@ -60,6 +60,13 @@ enum hns3_evt_cause {
|
||||
HNS3_VECTOR0_EVENT_OTHER,
|
||||
};
|
||||
|
||||
+#define HNS3_SPEEDS_SUPP_FEC (RTE_ETH_LINK_SPEED_10G | \
|
||||
+ RTE_ETH_LINK_SPEED_25G | \
|
||||
+ RTE_ETH_LINK_SPEED_40G | \
|
||||
+ RTE_ETH_LINK_SPEED_50G | \
|
||||
+ RTE_ETH_LINK_SPEED_100G | \
|
||||
+ RTE_ETH_LINK_SPEED_200G)
|
||||
+
|
||||
static const struct rte_eth_fec_capa speed_fec_capa_tbl[] = {
|
||||
{ RTE_ETH_SPEED_NUM_10G, RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
|
||||
RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) |
|
||||
@@ -5900,56 +5907,27 @@ hns3_reset_service(void *param)
|
||||
hns3_msix_process(hns, reset_level);
|
||||
}
|
||||
|
||||
-static unsigned int
|
||||
-hns3_get_speed_capa_num(uint16_t device_id)
|
||||
+static uint32_t
|
||||
+hns3_get_speed_fec_capa(struct rte_eth_fec_capa *speed_fec_capa,
|
||||
+ uint32_t speed_capa)
|
||||
{
|
||||
- unsigned int num;
|
||||
-
|
||||
- switch (device_id) {
|
||||
- case HNS3_DEV_ID_25GE:
|
||||
- case HNS3_DEV_ID_25GE_RDMA:
|
||||
- num = 2;
|
||||
- break;
|
||||
- case HNS3_DEV_ID_100G_RDMA_MACSEC:
|
||||
- case HNS3_DEV_ID_200G_RDMA:
|
||||
- num = 1;
|
||||
- break;
|
||||
- default:
|
||||
- num = 0;
|
||||
- break;
|
||||
- }
|
||||
+ uint32_t speed_bit;
|
||||
+ uint32_t num = 0;
|
||||
+ uint32_t i;
|
||||
|
||||
- return num;
|
||||
-}
|
||||
+ for (i = 0; i < RTE_DIM(speed_fec_capa_tbl); i++) {
|
||||
+ speed_bit =
|
||||
+ rte_eth_speed_bitflag(speed_fec_capa_tbl[i].speed,
|
||||
+ RTE_ETH_LINK_FULL_DUPLEX);
|
||||
+ if ((speed_capa & speed_bit) == 0)
|
||||
+ continue;
|
||||
|
||||
-static int
|
||||
-hns3_get_speed_fec_capa(struct rte_eth_fec_capa *speed_fec_capa,
|
||||
- uint16_t device_id)
|
||||
-{
|
||||
- switch (device_id) {
|
||||
- case HNS3_DEV_ID_25GE:
|
||||
- /* fallthrough */
|
||||
- case HNS3_DEV_ID_25GE_RDMA:
|
||||
- speed_fec_capa[0].speed = speed_fec_capa_tbl[1].speed;
|
||||
- speed_fec_capa[0].capa = speed_fec_capa_tbl[1].capa;
|
||||
-
|
||||
- /* In HNS3 device, the 25G NIC is compatible with 10G rate */
|
||||
- speed_fec_capa[1].speed = speed_fec_capa_tbl[0].speed;
|
||||
- speed_fec_capa[1].capa = speed_fec_capa_tbl[0].capa;
|
||||
- break;
|
||||
- case HNS3_DEV_ID_100G_RDMA_MACSEC:
|
||||
- speed_fec_capa[0].speed = speed_fec_capa_tbl[4].speed;
|
||||
- speed_fec_capa[0].capa = speed_fec_capa_tbl[4].capa;
|
||||
- break;
|
||||
- case HNS3_DEV_ID_200G_RDMA:
|
||||
- speed_fec_capa[0].speed = speed_fec_capa_tbl[5].speed;
|
||||
- speed_fec_capa[0].capa = speed_fec_capa_tbl[5].capa;
|
||||
- break;
|
||||
- default:
|
||||
- return -ENOTSUP;
|
||||
+ speed_fec_capa[num].speed = speed_fec_capa_tbl[i].speed;
|
||||
+ speed_fec_capa[num].capa = speed_fec_capa_tbl[i].capa;
|
||||
+ num++;
|
||||
}
|
||||
|
||||
- return 0;
|
||||
+ return num;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -5958,28 +5936,28 @@ hns3_fec_get_capability(struct rte_eth_dev *dev,
|
||||
unsigned int num)
|
||||
{
|
||||
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
||||
- struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
|
||||
- uint16_t device_id = pci_dev->id.device_id;
|
||||
- unsigned int capa_num;
|
||||
- int ret;
|
||||
+ unsigned int speed_num;
|
||||
+ uint32_t speed_capa;
|
||||
|
||||
- capa_num = hns3_get_speed_capa_num(device_id);
|
||||
- if (capa_num == 0) {
|
||||
- hns3_err(hw, "device(0x%x) is not supported by hns3 PMD",
|
||||
- device_id);
|
||||
+ speed_capa = hns3_get_speed_capa(hw);
|
||||
+ /* speed_num counts number of speed capabilities */
|
||||
+ speed_num = __builtin_popcount(speed_capa & HNS3_SPEEDS_SUPP_FEC);
|
||||
+ if (speed_num == 0)
|
||||
return -ENOTSUP;
|
||||
- }
|
||||
|
||||
- if (speed_fec_capa == NULL || num < capa_num)
|
||||
- return capa_num;
|
||||
+ if (speed_fec_capa == NULL)
|
||||
+ return speed_num;
|
||||
|
||||
- ret = hns3_get_speed_fec_capa(speed_fec_capa, device_id);
|
||||
- if (ret)
|
||||
- return -ENOTSUP;
|
||||
+ if (num < speed_num) {
|
||||
+ hns3_err(hw, "not enough array size(%u) to store FEC capabilities, should not be less than %u",
|
||||
+ num, speed_num);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
- return capa_num;
|
||||
+ return hns3_get_speed_fec_capa(speed_fec_capa, speed_capa);
|
||||
}
|
||||
|
||||
+
|
||||
static int
|
||||
get_current_fec_auto_state(struct hns3_hw *hw, uint8_t *state)
|
||||
{
|
||||
@@ -6117,52 +6095,35 @@ hns3_set_fec_hw(struct hns3_hw *hw, uint32_t mode)
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
-get_current_speed_fec_cap(struct hns3_hw *hw, struct rte_eth_fec_capa *fec_capa)
|
||||
+hns3_get_current_speed_fec_cap(struct hns3_mac *mac)
|
||||
{
|
||||
- struct hns3_mac *mac = &hw->mac;
|
||||
- uint32_t cur_capa;
|
||||
+ uint32_t i;
|
||||
|
||||
- switch (mac->link_speed) {
|
||||
- case RTE_ETH_SPEED_NUM_10G:
|
||||
- cur_capa = fec_capa[1].capa;
|
||||
- break;
|
||||
- case RTE_ETH_SPEED_NUM_25G:
|
||||
- case RTE_ETH_SPEED_NUM_100G:
|
||||
- case RTE_ETH_SPEED_NUM_200G:
|
||||
- cur_capa = fec_capa[0].capa;
|
||||
- break;
|
||||
- default:
|
||||
- cur_capa = 0;
|
||||
- break;
|
||||
+ for (i = 0; i < RTE_DIM(speed_fec_capa_tbl); i++) {
|
||||
+ if (mac->link_speed == speed_fec_capa_tbl[i].speed)
|
||||
+ return speed_fec_capa_tbl[i].capa;
|
||||
}
|
||||
|
||||
- return cur_capa;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
hns3_fec_mode_valid(struct rte_eth_dev *dev, uint32_t mode)
|
||||
{
|
||||
-#define FEC_CAPA_NUM 2
|
||||
struct hns3_adapter *hns = dev->data->dev_private;
|
||||
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(hns);
|
||||
- struct rte_eth_fec_capa fec_capa[FEC_CAPA_NUM];
|
||||
- uint32_t num = FEC_CAPA_NUM;
|
||||
uint32_t cur_capa;
|
||||
- int ret;
|
||||
|
||||
if (__builtin_popcount(mode) != 1) {
|
||||
hns3_err(hw, "FEC mode(0x%x) should be only one bit set", mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- ret = hns3_fec_get_capability(dev, fec_capa, num);
|
||||
- if (ret < 0)
|
||||
- return ret;
|
||||
/*
|
||||
* Check whether the configured mode is within the FEC capability.
|
||||
* If not, the configured mode will not be supported.
|
||||
*/
|
||||
- cur_capa = get_current_speed_fec_cap(hw, fec_capa);
|
||||
+ cur_capa = hns3_get_current_speed_fec_cap(&hw->mac);
|
||||
if ((cur_capa & mode) == 0) {
|
||||
hns3_err(hw, "unsupported FEC mode(0x%x)", mode);
|
||||
return -EINVAL;
|
||||
--
|
||||
2.23.0
|
||||
|
||||
33
0296-ethdev-introduce-low-latency-RS-FEC.patch
Normal file
33
0296-ethdev-introduce-low-latency-RS-FEC.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From 7b36a2f27f2dbe8cd518885461473349a2c04314 Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:36 +0800
|
||||
Subject: ethdev: introduce low latency RS FEC
|
||||
|
||||
[ upstream commit 371c8ec7498f9ea41c84d5d1fe0ab7d44e1325b9 ]
|
||||
|
||||
This patch introduces LLRS (low latency Reed Solomon FEC).
|
||||
LLRS supports for 25 Gbps, 50 Gbps, 100 Gbps, 200 Gbps and
|
||||
400 Gbps Ethernet networks.
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
|
||||
---
|
||||
lib/ethdev/rte_ethdev.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
|
||||
index 9df50c30b4..2064d439c8 100644
|
||||
--- a/lib/ethdev/rte_ethdev.h
|
||||
+++ b/lib/ethdev/rte_ethdev.h
|
||||
@@ -1973,6 +1973,7 @@ enum rte_eth_fec_mode {
|
||||
RTE_ETH_FEC_AUTO, /**< FEC autonegotiation modes */
|
||||
RTE_ETH_FEC_BASER, /**< FEC using common algorithm */
|
||||
RTE_ETH_FEC_RS, /**< FEC using RS algorithm */
|
||||
+ RTE_ETH_FEC_LLRS, /**< FEC using LLRS algorithm */
|
||||
};
|
||||
|
||||
/* Translate from FEC mode to FEC capa */
|
||||
--
|
||||
2.23.0
|
||||
|
||||
@ -0,0 +1,72 @@
|
||||
From 8f50b71d99a1a071b62c3b36a11a95398fc863c3 Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:37 +0800
|
||||
Subject: app/testpmd: add setting and querying of LLRS FEC mode
|
||||
|
||||
[ upstream commit 6cb1eaa6f2cd024a8c56e15e4a23ada7f9006aae ]
|
||||
|
||||
This patch supports setting and querying of LLRS FEC mode.
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
Acked-by: Aman Singh <aman.deep.singh@intel.com>
|
||||
---
|
||||
app/test-pmd/cmdline.c | 5 ++++-
|
||||
app/test-pmd/config.c | 4 ++++
|
||||
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 +-
|
||||
3 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
|
||||
index 9e0e725913..0d9c7d449c 100644
|
||||
--- a/app/test-pmd/cmdline.c
|
||||
+++ b/app/test-pmd/cmdline.c
|
||||
@@ -17078,6 +17078,9 @@ cmd_show_fec_mode_parsed(void *parsed_result,
|
||||
case RTE_ETH_FEC_MODE_CAPA_MASK(RS):
|
||||
strlcpy(buf, "rs", sizeof(buf));
|
||||
break;
|
||||
+ case RTE_ETH_FEC_MODE_CAPA_MASK(LLRS):
|
||||
+ strlcpy(buf, "llrs", sizeof(buf));
|
||||
+ break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -17173,7 +17176,7 @@ cmd_set_port_fec_mode_parsed(
|
||||
cmdline_parse_inst_t cmd_set_fec_mode = {
|
||||
.f = cmd_set_port_fec_mode_parsed,
|
||||
.data = NULL,
|
||||
- .help_str = "set port <port_id> fec_mode auto|off|rs|baser",
|
||||
+ .help_str = "set port <port_id> fec_mode auto|off|rs|baser|llrs",
|
||||
.tokens = {
|
||||
(void *)&cmd_set_port_fec_mode_set,
|
||||
(void *)&cmd_set_port_fec_mode_port,
|
||||
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
|
||||
index 78af232a8a..22c63e214e 100644
|
||||
--- a/app/test-pmd/config.c
|
||||
+++ b/app/test-pmd/config.c
|
||||
@@ -167,6 +167,10 @@ static const struct {
|
||||
.mode = RTE_ETH_FEC_RS,
|
||||
.name = "rs",
|
||||
},
|
||||
+ {
|
||||
+ .mode = RTE_ETH_FEC_LLRS,
|
||||
+ .name = "llrs",
|
||||
+ },
|
||||
};
|
||||
|
||||
static void
|
||||
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
|
||||
index e0edd349bc..ecf89aa46c 100644
|
||||
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
|
||||
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
|
||||
@@ -1993,7 +1993,7 @@ Set fec mode
|
||||
|
||||
Set fec mode for a specific port::
|
||||
|
||||
- testpmd> set port (port_id) fec_mode auto|off|rs|baser
|
||||
+ testpmd> set port (port_id) fec_mode auto|off|rs|baser|llrs
|
||||
|
||||
Config Sample actions list
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
--
|
||||
2.23.0
|
||||
|
||||
111
0298-net-hns3-add-LLRS-FEC-mode-support-for-200G-ports.patch
Normal file
111
0298-net-hns3-add-LLRS-FEC-mode-support-for-200G-ports.patch
Normal file
@ -0,0 +1,111 @@
|
||||
From 85597c087e93576197c6e11d41caab7d8f43dbeb Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:38 +0800
|
||||
Subject: net/hns3: add LLRS FEC mode support for 200G ports
|
||||
|
||||
[ upstream commit cddeaee10f974bda1202e82e36a3d8f09450e80a ]
|
||||
|
||||
This patch supports the query and configuration of LLRS FEC mode.
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
---
|
||||
drivers/net/hns3/hns3_cmd.c | 1 +
|
||||
drivers/net/hns3/hns3_cmd.h | 2 ++
|
||||
drivers/net/hns3/hns3_ethdev.c | 21 ++++++++++++---------
|
||||
3 files changed, 15 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/hns3/hns3_cmd.c b/drivers/net/hns3/hns3_cmd.c
|
||||
index d0a3853656..ca1d3f1b8c 100644
|
||||
--- a/drivers/net/hns3/hns3_cmd.c
|
||||
+++ b/drivers/net/hns3/hns3_cmd.c
|
||||
@@ -666,6 +666,7 @@ hns3_firmware_compat_config(struct hns3_hw *hw, bool is_init)
|
||||
if (is_init) {
|
||||
hns3_set_bit(compat, HNS3_LINK_EVENT_REPORT_EN_B, 1);
|
||||
hns3_set_bit(compat, HNS3_NCSI_ERROR_REPORT_EN_B, 0);
|
||||
+ hns3_set_bit(compat, HNS3_LLRS_FEC_EN_B, 1);
|
||||
if (hns3_dev_get_support(hw, COPPER))
|
||||
hns3_set_bit(compat, HNS3_FIRMWARE_PHY_DRIVER_EN_B, 1);
|
||||
if (hns3_dev_get_support(hw, FC_AUTO))
|
||||
diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
|
||||
index d78c1b401e..929278521f 100644
|
||||
--- a/drivers/net/hns3/hns3_cmd.h
|
||||
+++ b/drivers/net/hns3/hns3_cmd.h
|
||||
@@ -668,6 +668,7 @@ enum hns3_promisc_type {
|
||||
#define HNS3_NCSI_ERROR_REPORT_EN_B 1
|
||||
#define HNS3_FIRMWARE_PHY_DRIVER_EN_B 2
|
||||
|
||||
+#define HNS3_LLRS_FEC_EN_B 5
|
||||
#define HNS3_MAC_FC_AUTONEG_EN_B 6
|
||||
|
||||
struct hns3_firmware_compat_cmd {
|
||||
@@ -825,6 +826,7 @@ struct hns3_sfp_info_cmd {
|
||||
#define HNS3_MAC_FEC_OFF 0
|
||||
#define HNS3_MAC_FEC_BASER 1
|
||||
#define HNS3_MAC_FEC_RS 2
|
||||
+#define HNS3_MAC_FEC_LLRS 3
|
||||
|
||||
/* Configure FEC mode, opcode:0x031A */
|
||||
struct hns3_config_fec_cmd {
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
||||
index 05d489a12b..2ca5e4ced5 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.c
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.c
|
||||
@@ -47,11 +47,6 @@
|
||||
#define HNS3_RESET_WAIT_MS 100
|
||||
#define HNS3_RESET_WAIT_CNT 200
|
||||
|
||||
-/* FEC mode order defined in HNS3 hardware */
|
||||
-#define HNS3_HW_FEC_MODE_NOFEC 0
|
||||
-#define HNS3_HW_FEC_MODE_BASER 1
|
||||
-#define HNS3_HW_FEC_MODE_RS 2
|
||||
-
|
||||
enum hns3_evt_cause {
|
||||
HNS3_VECTOR0_EVENT_RST,
|
||||
HNS3_VECTOR0_EVENT_MBX,
|
||||
@@ -91,7 +86,8 @@ static const struct rte_eth_fec_capa speed_fec_capa_tbl[] = {
|
||||
RTE_ETH_FEC_MODE_CAPA_MASK(RS) },
|
||||
|
||||
{ RTE_ETH_SPEED_NUM_200G, RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) |
|
||||
- RTE_ETH_FEC_MODE_CAPA_MASK(RS) }
|
||||
+ RTE_ETH_FEC_MODE_CAPA_MASK(RS) |
|
||||
+ RTE_ETH_FEC_MODE_CAPA_MASK(LLRS) }
|
||||
};
|
||||
|
||||
static enum hns3_reset_level hns3_get_reset_level(struct hns3_adapter *hns,
|
||||
@@ -6032,15 +6028,18 @@ hns3_fec_get_internal(struct hns3_hw *hw, uint32_t *fec_capa)
|
||||
* to be converted.
|
||||
*/
|
||||
switch (resp->active_fec) {
|
||||
- case HNS3_HW_FEC_MODE_NOFEC:
|
||||
+ case HNS3_MAC_FEC_OFF:
|
||||
tmp_fec_capa = RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
|
||||
break;
|
||||
- case HNS3_HW_FEC_MODE_BASER:
|
||||
+ case HNS3_MAC_FEC_BASER:
|
||||
tmp_fec_capa = RTE_ETH_FEC_MODE_CAPA_MASK(BASER);
|
||||
break;
|
||||
- case HNS3_HW_FEC_MODE_RS:
|
||||
+ case HNS3_MAC_FEC_RS:
|
||||
tmp_fec_capa = RTE_ETH_FEC_MODE_CAPA_MASK(RS);
|
||||
break;
|
||||
+ case HNS3_MAC_FEC_LLRS:
|
||||
+ tmp_fec_capa = RTE_ETH_FEC_MODE_CAPA_MASK(LLRS);
|
||||
+ break;
|
||||
default:
|
||||
tmp_fec_capa = RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
|
||||
break;
|
||||
@@ -6081,6 +6080,10 @@ hns3_set_fec_hw(struct hns3_hw *hw, uint32_t mode)
|
||||
hns3_set_field(req->fec_mode, HNS3_MAC_CFG_FEC_MODE_M,
|
||||
HNS3_MAC_CFG_FEC_MODE_S, HNS3_MAC_FEC_RS);
|
||||
break;
|
||||
+ case RTE_ETH_FEC_MODE_CAPA_MASK(LLRS):
|
||||
+ hns3_set_field(req->fec_mode, HNS3_MAC_CFG_FEC_MODE_M,
|
||||
+ HNS3_MAC_CFG_FEC_MODE_S, HNS3_MAC_FEC_LLRS);
|
||||
+ break;
|
||||
case RTE_ETH_FEC_MODE_CAPA_MASK(AUTO):
|
||||
hns3_set_bit(req->fec_mode, HNS3_MAC_CFG_FEC_AUTO_EN_B, 1);
|
||||
break;
|
||||
--
|
||||
2.23.0
|
||||
|
||||
122
0299-net-hns3-get-current-FEC-capability-from-firmware.patch
Normal file
122
0299-net-hns3-get-current-FEC-capability-from-firmware.patch
Normal file
@ -0,0 +1,122 @@
|
||||
From 02fad185915874c196d03966947a5b705b9bdff4 Mon Sep 17 00:00:00 2001
|
||||
From: Jie Hai <haijie1@huawei.com>
|
||||
Date: Sat, 8 Apr 2023 10:27:39 +0800
|
||||
Subject: net/hns3: get current FEC capability from firmware
|
||||
|
||||
[ upstream commit 7a475771aeb1d4f74a6bfd03a68462eb85151738 ]
|
||||
|
||||
Obtain the supported FEC capability from the firmware to
|
||||
enhance code compatibility.
|
||||
|
||||
Cc: stable@dpdk.org
|
||||
|
||||
Signed-off-by: Jie Hai <haijie1@huawei.com>
|
||||
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
||||
---
|
||||
drivers/net/hns3/hns3_cmd.h | 9 ++++++++-
|
||||
drivers/net/hns3/hns3_ethdev.c | 29 +++++++++++++++++++++++++++++
|
||||
drivers/net/hns3/hns3_ethdev.h | 2 ++
|
||||
3 files changed, 39 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
|
||||
index 929278521f..3f2bb4fd29 100644
|
||||
--- a/drivers/net/hns3/hns3_cmd.h
|
||||
+++ b/drivers/net/hns3/hns3_cmd.h
|
||||
@@ -795,6 +795,12 @@ struct hns3_sfp_type {
|
||||
#define HNS3_FIBER_LINK_SPEED_10M_BIT BIT(7)
|
||||
#define HNS3_FIBER_LINK_SPEED_200G_BIT BIT(8)
|
||||
|
||||
+#define HNS3_FIBER_FEC_AUTO_BIT BIT(0)
|
||||
+#define HNS3_FIBER_FEC_BASER_BIT BIT(1)
|
||||
+#define HNS3_FIBER_FEC_RS_BIT BIT(2)
|
||||
+#define HNS3_FIBER_FEC_LLRS_BIT BIT(3)
|
||||
+#define HNS3_FIBER_FEC_NOFEC_BIT BIT(4)
|
||||
+
|
||||
/* Flags for pause status field */
|
||||
#define HNS3_FIBER_LOCAL_PAUSE_BIT BIT(0)
|
||||
#define HNS3_FIBER_LOCAL_ASYM_PAUSE_BIT BIT(1)
|
||||
@@ -815,7 +821,8 @@ struct hns3_sfp_info_cmd {
|
||||
uint8_t autoneg_ability;
|
||||
uint32_t supported_speed; /* speed supported by current media */
|
||||
uint32_t module_type;
|
||||
- uint8_t rsv[2];
|
||||
+ uint8_t fec_ability; /* supported fec modes, see HNS3_FIBER_FEC_XXX_BIT */
|
||||
+ uint8_t rsv0;
|
||||
uint8_t pause_status;
|
||||
uint8_t rsv1[5];
|
||||
};
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
||||
index 2ca5e4ced5..d6214415b7 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.c
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.c
|
||||
@@ -4028,6 +4028,7 @@ hns3_get_sfp_info(struct hns3_hw *hw, struct hns3_mac *mac_info)
|
||||
mac_info->support_autoneg = resp->autoneg_ability;
|
||||
mac_info->link_autoneg = (resp->autoneg == 0) ? RTE_ETH_LINK_FIXED
|
||||
: RTE_ETH_LINK_AUTONEG;
|
||||
+ mac_info->fec_capa = resp->fec_ability;
|
||||
local_pause = resp->pause_status & HNS3_FIBER_LOCAL_PAUSE_MASK;
|
||||
lp_pause = (resp->pause_status & HNS3_FIBER_LP_PAUSE_MASK) >>
|
||||
HNS3_FIBER_LP_PAUSE_S;
|
||||
@@ -4117,6 +4118,7 @@ hns3_update_fiber_link_info(struct hns3_hw *hw)
|
||||
mac->supported_speed = mac_info.supported_speed;
|
||||
mac->support_autoneg = mac_info.support_autoneg;
|
||||
mac->link_autoneg = mac_info.link_autoneg;
|
||||
+ mac->fec_capa = mac_info.fec_capa;
|
||||
mac->advertising = mac_info.advertising;
|
||||
mac->lp_advertising = mac_info.lp_advertising;
|
||||
|
||||
@@ -6097,11 +6099,38 @@ hns3_set_fec_hw(struct hns3_hw *hw, uint32_t mode)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static uint32_t
|
||||
+hns3_parse_hw_fec_capa(uint8_t hw_fec_capa)
|
||||
+{
|
||||
+ const struct {
|
||||
+ uint32_t hw_fec_capa;
|
||||
+ uint32_t fec_capa;
|
||||
+ } fec_capa_map[] = {
|
||||
+ { HNS3_FIBER_FEC_AUTO_BIT, RTE_ETH_FEC_MODE_CAPA_MASK(AUTO) },
|
||||
+ { HNS3_FIBER_FEC_BASER_BIT, RTE_ETH_FEC_MODE_CAPA_MASK(BASER) },
|
||||
+ { HNS3_FIBER_FEC_RS_BIT, RTE_ETH_FEC_MODE_CAPA_MASK(RS) },
|
||||
+ { HNS3_FIBER_FEC_LLRS_BIT, RTE_ETH_FEC_MODE_CAPA_MASK(LLRS) },
|
||||
+ { HNS3_FIBER_FEC_NOFEC_BIT, RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) },
|
||||
+ };
|
||||
+ uint32_t capa = 0;
|
||||
+ uint32_t i;
|
||||
+
|
||||
+ for (i = 0; i < RTE_DIM(fec_capa_map); i++) {
|
||||
+ if ((hw_fec_capa & fec_capa_map[i].hw_fec_capa) != 0)
|
||||
+ capa |= fec_capa_map[i].fec_capa;
|
||||
+ }
|
||||
+
|
||||
+ return capa;
|
||||
+}
|
||||
+
|
||||
static uint32_t
|
||||
hns3_get_current_speed_fec_cap(struct hns3_mac *mac)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
+ if (mac->fec_capa != 0)
|
||||
+ return hns3_parse_hw_fec_capa(mac->fec_capa);
|
||||
+
|
||||
for (i = 0; i < RTE_DIM(speed_fec_capa_tbl); i++) {
|
||||
if (mac->link_speed == speed_fec_capa_tbl[i].speed)
|
||||
return speed_fec_capa_tbl[i].capa;
|
||||
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
|
||||
index 88146f5054..c04edf622f 100644
|
||||
--- a/drivers/net/hns3/hns3_ethdev.h
|
||||
+++ b/drivers/net/hns3/hns3_ethdev.h
|
||||
@@ -214,6 +214,8 @@ struct hns3_mac {
|
||||
uint32_t advertising; /* advertised capability in the local part */
|
||||
uint32_t lp_advertising; /* advertised capability in the link partner */
|
||||
uint8_t support_autoneg;
|
||||
+ /* current supported fec modes. see HNS3_FIBER_FEC_XXX_BIT */
|
||||
+ uint32_t fec_capa;
|
||||
};
|
||||
|
||||
struct hns3_fake_queue_data {
|
||||
--
|
||||
2.23.0
|
||||
|
||||
20
dpdk.spec
20
dpdk.spec
@ -1,6 +1,6 @@
|
||||
Name: dpdk
|
||||
Version: 21.11
|
||||
Release: 44
|
||||
Release: 45
|
||||
Packager: packaging@6wind.com
|
||||
URL: http://dpdk.org
|
||||
%global source_version 21.11
|
||||
@ -311,6 +311,13 @@ Patch9289: 0289-net-hns3-add-flow-control-autoneg-for-fiber-port.patch
|
||||
Patch9290: 0290-net-hns3-fix-variable-type-mismatch.patch
|
||||
Patch9291: 0291-net-hns3-fix-Rx-multiple-firmware-reset-interrupts.patch
|
||||
Patch9292: 0292-net-hns3-add-Tx-Rx-descriptor-logs.patch
|
||||
Patch9293: 0293-net-hns3-fix-FEC-mode-for-200G-ports.patch
|
||||
Patch9294: 0294-net-hns3-fix-FEC-mode-check-error.patch
|
||||
Patch9295: 0295-net-hns3-fix-missing-FEC-capability.patch
|
||||
Patch9296: 0296-ethdev-introduce-low-latency-RS-FEC.patch
|
||||
Patch9297: 0297-app-testpmd-add-setting-and-querying-of-LLRS-FEC-mod.patch
|
||||
Patch9298: 0298-net-hns3-add-LLRS-FEC-mode-support-for-200G-ports.patch
|
||||
Patch9299: 0299-net-hns3-get-current-FEC-capability-from-firmware.patch
|
||||
|
||||
Summary: Data Plane Development Kit core
|
||||
Group: System Environment/Libraries
|
||||
@ -455,6 +462,17 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko
|
||||
/usr/sbin/depmod
|
||||
|
||||
%changelog
|
||||
* Fri Jun 02 2023 chenjiji <chenjiji09@163.com> - 21.11-45
|
||||
Sync some patchs from upstreaming about FEC feature. Patchs
|
||||
are as follow:
|
||||
- net/hns3: fix FEC mode for 200G ports
|
||||
- net/hns3: fix FEC mode check error
|
||||
- net/hns3: fix missing FEC capability
|
||||
- ethdev: introduce low latency RS FEC
|
||||
- app/testpmd: add setting and querying of LLRS FEC mode
|
||||
- net/hns3: add LLRS FEC mode support for 200G ports
|
||||
- net/hns3: get current FEC capability from firmware
|
||||
|
||||
* Sat May 27 2023 jiangheng <jiangheng14@huawei.com> - 21.11-44
|
||||
- examples use static libraries to avoid unlinked dynamic libraries
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user