patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH 0/7] add setting and querying of LLRS FEC mode
@ 2023-04-08  2:27 Dongdong Liu
  2023-04-08  2:27 ` [PATCH 1/7] net/hns3: fix fec mode for 200G ports Dongdong Liu
                   ` (7 more replies)
  0 siblings, 8 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko; +Cc: stable, liudongdong3, haijie1

This patchset include some bugfixes for hns3 fec and add setting and
querying of LLRS FEC mode.

Jie Hai (7):
  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: support getting current FEC capability from firmware

 app/test-pmd/cmdline.c                      |   5 +-
 app/test-pmd/config.c                       |   4 +
 doc/guides/rel_notes/release_23_07.rst      |   3 +
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |   2 +-
 drivers/net/hns3/hns3_cmd.c                 |   1 +
 drivers/net/hns3/hns3_cmd.h                 |  11 +-
 drivers/net/hns3/hns3_ethdev.c              | 216 ++++++++++----------
 drivers/net/hns3/hns3_ethdev.h              |   2 +
 lib/ethdev/rte_ethdev.h                     |   1 +
 9 files changed, 129 insertions(+), 116 deletions(-)

--
2.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/7] net/hns3: fix fec mode for 200G ports
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-04-08  2:27 ` [PATCH 2/7] net/hns3: fix fec mode check error Dongdong Liu
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Yisen Zhuang, Chengchang Tang,
	Wei Hu (Xavier), Min Hu (Connor),
	Chengwen Feng

From: Jie Hai <haijie1@huawei.com>

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 a872cb8dd7..fbf2e5aa6c 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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 2/7] net/hns3: fix fec mode check error
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
  2023-04-08  2:27 ` [PATCH 1/7] net/hns3: fix fec mode for 200G ports Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-04-08  2:27 ` [PATCH 3/7] net/hns3: fix missing FEC capability Dongdong Liu
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Yisen Zhuang, Chengwen Feng,
	Wei Hu (Xavier), Min Hu (Connor),
	Chengchang Tang

From: Jie Hai <haijie1@huawei.com>

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 fbf2e5aa6c..9968518b2d 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -6166,52 +6166,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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 3/7] net/hns3: fix missing FEC capability
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
  2023-04-08  2:27 ` [PATCH 1/7] net/hns3: fix fec mode for 200G ports Dongdong Liu
  2023-04-08  2:27 ` [PATCH 2/7] net/hns3: fix fec mode check error Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-04-08  2:27 ` [PATCH 4/7] ethdev: introduce low latency RS FEC Dongdong Liu
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Yisen Zhuang, Chengwen Feng,
	Wei Hu (Xavier), Chengchang Tang, Min Hu (Connor)

From: Jie Hai <haijie1@huawei.com>

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 9968518b2d..80cdcc83bf 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) |
@@ -5927,56 +5934,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
@@ -5985,28 +5963,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)
 {
@@ -6144,52 +6122,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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 4/7] ethdev: introduce low latency RS FEC
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (2 preceding siblings ...)
  2023-04-08  2:27 ` [PATCH 3/7] net/hns3: fix missing FEC capability Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-06-01  8:30   ` Ferruh Yigit
  2023-04-08  2:27 ` [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko; +Cc: stable, liudongdong3, haijie1

From: Jie Hai <haijie1@huawei.com>

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>
---
 doc/guides/rel_notes/release_23_07.rst | 3 +++
 lib/ethdev/rte_ethdev.h                | 1 +
 2 files changed, 4 insertions(+)

diff --git a/doc/guides/rel_notes/release_23_07.rst b/doc/guides/rel_notes/release_23_07.rst
index a9b1293689..dcc4c84907 100644
--- a/doc/guides/rel_notes/release_23_07.rst
+++ b/doc/guides/rel_notes/release_23_07.rst
@@ -55,6 +55,9 @@ New Features
      Also, make sure to start the actual text at the margin.
      =======================================================
 
+* **Added LLRS FEC mode in ethdev.**
+
+  Added RTE_ETH_FEC_LLRS to rte_eth_fec_mode.
 
 Removed Items
 -------------
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 99fe9e238b..bea847fcc3 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -1916,6 +1916,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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (3 preceding siblings ...)
  2023-04-08  2:27 ` [PATCH 4/7] ethdev: introduce low latency RS FEC Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-04-28  6:50   ` Singh, Aman Deep
  2023-04-08  2:27 ` [PATCH 6/7] net/hns3: add LLRS FEC mode support for 200G ports Dongdong Liu
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Aman Singh, Yuying Zhang

From: Jie Hai <haijie1@huawei.com>

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>
---
 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 7b20bef4e9..38fa0f507c 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -11973,6 +11973,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;
 	}
@@ -12068,7 +12071,7 @@ cmd_set_port_fec_mode_parsed(
 static 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 096c218c12..f306d678f9 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -170,6 +170,10 @@ static const struct {
 		.mode = RTE_ETH_FEC_RS,
 		.name = "rs",
 	},
+	{
+		.mode = RTE_ETH_FEC_LLRS,
+		.name = "llrs",
+	},
 };
 
 static const struct {
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 8f23847859..fa1cea3ed6 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -1800,7 +1800,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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 6/7] net/hns3: add LLRS FEC mode support for 200G ports
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (4 preceding siblings ...)
  2023-04-08  2:27 ` [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-04-08  2:27 ` [PATCH 7/7] net/hns3: support getting current FEC capability from firmware Dongdong Liu
  2023-06-01  8:30 ` [PATCH 0/7] add setting and querying of LLRS FEC mode Ferruh Yigit
  7 siblings, 0 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Yisen Zhuang

From: Jie Hai <haijie1@huawei.com>

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 bdfc85f934..a574191ba9 100644
--- a/drivers/net/hns3/hns3_cmd.c
+++ b/drivers/net/hns3/hns3_cmd.c
@@ -637,6 +637,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);
 	}
diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
index eb394c9dec..a86f5116e4 100644
--- a/drivers/net/hns3/hns3_cmd.h
+++ b/drivers/net/hns3/hns3_cmd.h
@@ -665,6 +665,7 @@ enum hns3_promisc_type {
 #define HNS3_LINK_EVENT_REPORT_EN_B	0
 #define HNS3_NCSI_ERROR_REPORT_EN_B	1
 #define HNS3_FIRMWARE_PHY_DRIVER_EN_B	2
+#define HNS3_LLRS_FEC_EN_B		5
 struct hns3_firmware_compat_cmd {
 	uint32_t compat;
 	uint8_t rsv[20];
@@ -806,6 +807,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 80cdcc83bf..8f998947c6 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,
@@ -6059,15 +6055,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;
@@ -6108,6 +6107,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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 7/7] net/hns3: support getting current FEC capability from firmware
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (5 preceding siblings ...)
  2023-04-08  2:27 ` [PATCH 6/7] net/hns3: add LLRS FEC mode support for 200G ports Dongdong Liu
@ 2023-04-08  2:27 ` Dongdong Liu
  2023-06-01  8:30 ` [PATCH 0/7] add setting and querying of LLRS FEC mode Ferruh Yigit
  7 siblings, 0 replies; 11+ messages in thread
From: Dongdong Liu @ 2023-04-08  2:27 UTC (permalink / raw)
  To: dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, liudongdong3, haijie1, Yisen Zhuang

From: Jie Hai <haijie1@huawei.com>

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 a86f5116e4..fcf9bd90cb 100644
--- a/drivers/net/hns3/hns3_cmd.h
+++ b/drivers/net/hns3/hns3_cmd.h
@@ -789,6 +789,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)
+
 struct hns3_sfp_info_cmd {
 	uint32_t sfp_speed;
 	uint8_t query_type; /* 0: sfp speed, 1: active */
@@ -798,7 +804,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 rsv1[8];
+	uint8_t fec_ability; /* supported fec modes, see HNS3_FIBER_FEC_XXX_BIT */
+	uint8_t rsv1[7];
 };
 
 #define HNS3_MAC_CFG_FEC_AUTO_EN_B	0
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 8f998947c6..7a6c1308ac 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -4013,6 +4013,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;
 	} else {
 		mac_info->query_type = HNS3_DEFAULT_QUERY;
 	}
@@ -4095,6 +4096,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;
 
 		return 0;
 	}
@@ -6124,11 +6126,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 9acc5a3d7e..ec73792d4f 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.22.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode
  2023-04-08  2:27 ` [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode Dongdong Liu
@ 2023-04-28  6:50   ` Singh, Aman Deep
  0 siblings, 0 replies; 11+ messages in thread
From: Singh, Aman Deep @ 2023-04-28  6:50 UTC (permalink / raw)
  To: Dongdong Liu, dev, ferruh.yigit, thomas, andrew.rybchenko
  Cc: stable, haijie1, Yuying Zhang


On 4/8/2023 7:57 AM, Dongdong Liu wrote:
> From: Jie Hai <haijie1@huawei.com>
>
> 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 7b20bef4e9..38fa0f507c 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -11973,6 +11973,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;
>   	}
> @@ -12068,7 +12071,7 @@ cmd_set_port_fec_mode_parsed(
>   static 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 096c218c12..f306d678f9 100644
> --- a/app/test-pmd/config.c
> +++ b/app/test-pmd/config.c
> @@ -170,6 +170,10 @@ static const struct {
>   		.mode = RTE_ETH_FEC_RS,
>   		.name = "rs",
>   	},
> +	{
> +		.mode = RTE_ETH_FEC_LLRS,
> +		.name = "llrs",
> +	},
>   };
>   
>   static const struct {
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index 8f23847859..fa1cea3ed6 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -1800,7 +1800,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
>   ~~~~~~~~~~~~~~~~~~~~~~~~~~

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 4/7] ethdev: introduce low latency RS FEC
  2023-04-08  2:27 ` [PATCH 4/7] ethdev: introduce low latency RS FEC Dongdong Liu
@ 2023-06-01  8:30   ` Ferruh Yigit
  0 siblings, 0 replies; 11+ messages in thread
From: Ferruh Yigit @ 2023-06-01  8:30 UTC (permalink / raw)
  To: Dongdong Liu, dev, thomas, andrew.rybchenko; +Cc: stable, haijie1

On 4/8/2023 3:27 AM, Dongdong Liu wrote:
> From: Jie Hai <haijie1@huawei.com>
> 
> 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>
> ---
>  doc/guides/rel_notes/release_23_07.rst | 3 +++
>  lib/ethdev/rte_ethdev.h                | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/doc/guides/rel_notes/release_23_07.rst b/doc/guides/rel_notes/release_23_07.rst
> index a9b1293689..dcc4c84907 100644
> --- a/doc/guides/rel_notes/release_23_07.rst
> +++ b/doc/guides/rel_notes/release_23_07.rst
> @@ -55,6 +55,9 @@ New Features
>       Also, make sure to start the actual text at the margin.
>       =======================================================
>  
> +* **Added LLRS FEC mode in ethdev.**
> +
> +  Added RTE_ETH_FEC_LLRS to rte_eth_fec_mode.
>  
>  Removed Items
>  -------------
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 99fe9e238b..bea847fcc3 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -1916,6 +1916,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 */

Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/7] add setting and querying of LLRS FEC mode
  2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
                   ` (6 preceding siblings ...)
  2023-04-08  2:27 ` [PATCH 7/7] net/hns3: support getting current FEC capability from firmware Dongdong Liu
@ 2023-06-01  8:30 ` Ferruh Yigit
  7 siblings, 0 replies; 11+ messages in thread
From: Ferruh Yigit @ 2023-06-01  8:30 UTC (permalink / raw)
  To: Dongdong Liu, dev, thomas, andrew.rybchenko; +Cc: stable, haijie1

On 4/8/2023 3:27 AM, Dongdong Liu wrote:
> This patchset include some bugfixes for hns3 fec and add setting and
> querying of LLRS FEC mode.
> 
> Jie Hai (7):
>   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: support getting current FEC capability from firmware
>

Series applied to dpdk-next-net/main, thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-06-01  8:31 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-08  2:27 [PATCH 0/7] add setting and querying of LLRS FEC mode Dongdong Liu
2023-04-08  2:27 ` [PATCH 1/7] net/hns3: fix fec mode for 200G ports Dongdong Liu
2023-04-08  2:27 ` [PATCH 2/7] net/hns3: fix fec mode check error Dongdong Liu
2023-04-08  2:27 ` [PATCH 3/7] net/hns3: fix missing FEC capability Dongdong Liu
2023-04-08  2:27 ` [PATCH 4/7] ethdev: introduce low latency RS FEC Dongdong Liu
2023-06-01  8:30   ` Ferruh Yigit
2023-04-08  2:27 ` [PATCH 5/7] app/testpmd: add setting and querying of LLRS FEC mode Dongdong Liu
2023-04-28  6:50   ` Singh, Aman Deep
2023-04-08  2:27 ` [PATCH 6/7] net/hns3: add LLRS FEC mode support for 200G ports Dongdong Liu
2023-04-08  2:27 ` [PATCH 7/7] net/hns3: support getting current FEC capability from firmware Dongdong Liu
2023-06-01  8:30 ` [PATCH 0/7] add setting and querying of LLRS FEC mode Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).