patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] net/ixgbe: fix flow ctrl mode setting
@ 2019-12-19  4:43 Sun GuinanX
  2019-12-19 10:17 ` [dpdk-stable] [PATCH v2] " Guinan Sun
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Sun GuinanX @ 2019-12-19  4:43 UTC (permalink / raw)
  To: dev; +Cc: Wenzhuo Lu, Qiming Yang, Qi Zhang, Sun GuinanX, stable

When the port starts, the hw register is reset first,
and then the required parameters are set again.
If the parameters to be used are not set after resetting the register,
a read register error will occur. This patch is used to fix the problem.

Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org

Signed-off-by: Sun GuinanX <guinanx.sun@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 20 ++++++++++++++++++++
 drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
 2 files changed, 21 insertions(+)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 2c6fd0f13..e602df02b 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -2539,6 +2539,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 {
 	struct ixgbe_hw *hw =
 		IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	struct ixgbe_vf_info *vfinfo =
 		*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
@@ -2555,6 +2556,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 		IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);
 	struct ixgbe_macsec_setting *macsec_setting =
 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
+	uint32_t mflcn;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -2665,6 +2667,20 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 	}
 
 	ixgbe_restore_statistics_mapping(dev);
+	err = ixgbe_fc_enable(hw);
+	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
+
+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
+
+		/* set or clear MFLCN.PMCF bit depending on configuration */
+		if (adapter->mac_ctrl_frame_fwd != 0)
+			mflcn |= IXGBE_MFLCN_PMCF;
+		else
+			mflcn &= ~IXGBE_MFLCN_PMCF;
+
+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
+		IXGBE_WRITE_FLUSH(hw);
+	}
 
 	err = ixgbe_dev_rxtx_start(dev);
 	if (err < 0) {
@@ -2893,6 +2909,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
 
 	adapter->rss_reta_updated = 0;
 
+	adapter->mac_ctrl_frame_fwd = 0;
+
 	hw->adapter_stopped = true;
 }
 
@@ -4646,6 +4664,7 @@ static int
 ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 {
 	struct ixgbe_hw *hw;
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	int err;
 	uint32_t rx_buf_size;
 	uint32_t max_high_water;
@@ -4682,6 +4701,7 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	hw->fc.low_water[0]   = fc_conf->low_water;
 	hw->fc.send_xon       = fc_conf->send_xon;
 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
 
 	err = ixgbe_fc_enable(hw);
 
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 76a1b9d18..5af584f9e 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -510,6 +510,7 @@ struct ixgbe_adapter {
 	 * mailbox status) link status.
 	 */
 	uint8_t pflink_fullchk;
+	uint8_t mac_ctrl_frame_fwd;
 };
 
 struct ixgbe_vf_representor {
-- 
2.17.1


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

* [dpdk-stable] [PATCH v2] net/ixgbe: fix flow ctrl mode setting
  2019-12-19  4:43 [dpdk-stable] [PATCH] net/ixgbe: fix flow ctrl mode setting Sun GuinanX
@ 2019-12-19 10:17 ` Guinan Sun
  2020-02-01 13:12   ` [dpdk-stable] [dpdk-dev] " Ye Xiaolong
  2020-02-17  7:51 ` [dpdk-stable] [PATCH v3] " Guinan Sun
  2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
  2 siblings, 1 reply; 14+ messages in thread
From: Guinan Sun @ 2019-12-19 10:17 UTC (permalink / raw)
  To: dev; +Cc: Wenzhuo Lu, Qiming Yang, Qi Zhang, Guinan Sun, stable

When the port starts, the hw register is reset first,
and then the required parameters are set again.
If the parameters to be used are not set after resetting the register,
a read register error will occur. This patch is used to fix the problem.

Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org

Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
---
v2: changes
* Modify the initial value of requested_mode and current_mode
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 24 ++++++++++++++++++++++--
 drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 2c6fd0f13..573117e3a 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1170,8 +1170,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
 	ixgbe_dcb_init(hw, dcb_config);
 	/* Get Hardware Flow Control setting */
-	hw->fc.requested_mode = ixgbe_fc_full;
-	hw->fc.current_mode = ixgbe_fc_full;
+	hw->fc.requested_mode = ixgbe_fc_none;
+	hw->fc.current_mode = ixgbe_fc_none;
 	hw->fc.pause_time = IXGBE_FC_PAUSE;
 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
 		hw->fc.low_water[i] = IXGBE_FC_LO;
@@ -2539,6 +2539,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 {
 	struct ixgbe_hw *hw =
 		IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	struct ixgbe_vf_info *vfinfo =
 		*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
@@ -2555,6 +2556,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 		IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);
 	struct ixgbe_macsec_setting *macsec_setting =
 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
+	uint32_t mflcn;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -2665,6 +2667,20 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 	}
 
 	ixgbe_restore_statistics_mapping(dev);
+	err = ixgbe_fc_enable(hw);
+	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
+
+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
+
+		/* set or clear MFLCN.PMCF bit depending on configuration */
+		if (adapter->mac_ctrl_frame_fwd != 0)
+			mflcn |= IXGBE_MFLCN_PMCF;
+		else
+			mflcn &= ~IXGBE_MFLCN_PMCF;
+
+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
+		IXGBE_WRITE_FLUSH(hw);
+	}
 
 	err = ixgbe_dev_rxtx_start(dev);
 	if (err < 0) {
@@ -2893,6 +2909,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
 
 	adapter->rss_reta_updated = 0;
 
+	adapter->mac_ctrl_frame_fwd = 0;
+
 	hw->adapter_stopped = true;
 }
 
@@ -4646,6 +4664,7 @@ static int
 ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 {
 	struct ixgbe_hw *hw;
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	int err;
 	uint32_t rx_buf_size;
 	uint32_t max_high_water;
@@ -4682,6 +4701,7 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	hw->fc.low_water[0]   = fc_conf->low_water;
 	hw->fc.send_xon       = fc_conf->send_xon;
 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
 
 	err = ixgbe_fc_enable(hw);
 
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 76a1b9d18..5af584f9e 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -510,6 +510,7 @@ struct ixgbe_adapter {
 	 * mailbox status) link status.
 	 */
 	uint8_t pflink_fullchk;
+	uint8_t mac_ctrl_frame_fwd;
 };
 
 struct ixgbe_vf_representor {
-- 
2.17.1


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v2] net/ixgbe: fix flow ctrl mode setting
  2019-12-19 10:17 ` [dpdk-stable] [PATCH v2] " Guinan Sun
@ 2020-02-01 13:12   ` Ye Xiaolong
  0 siblings, 0 replies; 14+ messages in thread
From: Ye Xiaolong @ 2020-02-01 13:12 UTC (permalink / raw)
  To: Guinan Sun; +Cc: dev, Wenzhuo Lu, Qiming Yang, Qi Zhang, stable

Hi, Guinan

On 12/19, Guinan Sun wrote:
>When the port starts, the hw register is reset first,
>and then the required parameters are set again.
>If the parameters to be used are not set after resetting the register,
>a read register error will occur. This patch is used to fix the problem.
>
>Fixes: af75078fece3 ("first public release")
>Cc: stable@dpdk.org
>
>Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
>---
>v2: changes
>* Modify the initial value of requested_mode and current_mode
>---
> drivers/net/ixgbe/ixgbe_ethdev.c | 24 ++++++++++++++++++++++--
> drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
> 2 files changed, 23 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>index 2c6fd0f13..573117e3a 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -1170,8 +1170,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
> 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
> 	ixgbe_dcb_init(hw, dcb_config);
> 	/* Get Hardware Flow Control setting */
>-	hw->fc.requested_mode = ixgbe_fc_full;
>-	hw->fc.current_mode = ixgbe_fc_full;
>+	hw->fc.requested_mode = ixgbe_fc_none;
>+	hw->fc.current_mode = ixgbe_fc_none;
> 	hw->fc.pause_time = IXGBE_FC_PAUSE;
> 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
> 		hw->fc.low_water[i] = IXGBE_FC_LO;
>@@ -2539,6 +2539,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
> {
> 	struct ixgbe_hw *hw =
> 		IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
> 	struct ixgbe_vf_info *vfinfo =
> 		*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
> 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
>@@ -2555,6 +2556,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
> 		IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);
> 	struct ixgbe_macsec_setting *macsec_setting =
> 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
>+	uint32_t mflcn;
> 
> 	PMD_INIT_FUNC_TRACE();
> 
>@@ -2665,6 +2667,20 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
> 	}
> 
> 	ixgbe_restore_statistics_mapping(dev);
>+	err = ixgbe_fc_enable(hw);
>+	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
>+
>+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
>+
>+		/* set or clear MFLCN.PMCF bit depending on configuration */
>+		if (adapter->mac_ctrl_frame_fwd != 0)
>+			mflcn |= IXGBE_MFLCN_PMCF;
>+		else
>+			mflcn &= ~IXGBE_MFLCN_PMCF;
>+
>+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
>+		IXGBE_WRITE_FLUSH(hw);
>+	}

It'd be better to wrap above lines of code into a function to avoid duplication.


Thanks,
Xiaolong

> 
> 	err = ixgbe_dev_rxtx_start(dev);
> 	if (err < 0) {
>@@ -2893,6 +2909,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> 
> 	adapter->rss_reta_updated = 0;
> 
>+	adapter->mac_ctrl_frame_fwd = 0;
>+
> 	hw->adapter_stopped = true;
> }
> 
>@@ -4646,6 +4664,7 @@ static int
> ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
> {
> 	struct ixgbe_hw *hw;
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
> 	int err;
> 	uint32_t rx_buf_size;
> 	uint32_t max_high_water;
>@@ -4682,6 +4701,7 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
> 	hw->fc.low_water[0]   = fc_conf->low_water;
> 	hw->fc.send_xon       = fc_conf->send_xon;
> 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
>+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
> 
> 	err = ixgbe_fc_enable(hw);
> 
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
>index 76a1b9d18..5af584f9e 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.h
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
>@@ -510,6 +510,7 @@ struct ixgbe_adapter {
> 	 * mailbox status) link status.
> 	 */
> 	uint8_t pflink_fullchk;
>+	uint8_t mac_ctrl_frame_fwd;
> };
> 
> struct ixgbe_vf_representor {
>-- 
>2.17.1
>

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

* [dpdk-stable] [PATCH v3] net/ixgbe: fix flow ctrl mode setting
  2019-12-19  4:43 [dpdk-stable] [PATCH] net/ixgbe: fix flow ctrl mode setting Sun GuinanX
  2019-12-19 10:17 ` [dpdk-stable] [PATCH v2] " Guinan Sun
@ 2020-02-17  7:51 ` Guinan Sun
  2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
  2 siblings, 0 replies; 14+ messages in thread
From: Guinan Sun @ 2020-02-17  7:51 UTC (permalink / raw)
  To: dev; +Cc: Wenzhuo Lu, Qiming Yang, Guinan Sun, stable

When the port starts, the hw register is reset first,
and then the required parameters are set again.
If the parameters to be used are not set after resetting the register,
a read register error will occur. This patch is used to fix the problem.

Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org

Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 76 +++++++++++++++++++++-----------
 drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
 2 files changed, 51 insertions(+), 26 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 2a248a3f2..b3d6e9494 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1173,8 +1173,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
 	ixgbe_dcb_init(hw, dcb_config);
 	/* Get Hardware Flow Control setting */
-	hw->fc.requested_mode = ixgbe_fc_full;
-	hw->fc.current_mode = ixgbe_fc_full;
+	hw->fc.requested_mode = ixgbe_fc_none;
+	hw->fc.current_mode = ixgbe_fc_none;
 	hw->fc.pause_time = IXGBE_FC_PAUSE;
 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
 		hw->fc.low_water[i] = IXGBE_FC_LO;
@@ -2533,6 +2533,39 @@ ixgbe_set_vf_rate_limit(struct rte_eth_dev *dev, uint16_t vf,
 	return 0;
 }
 
+static int
+ixgbe_flow_ctrl_enable(struct rte_eth_dev *dev, struct ixgbe_hw *hw)
+{
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
+	int err;
+	uint32_t mflcn;
+
+	err = ixgbe_fc_enable(hw);
+
+	/* Not negotiated is not an error case */
+	if (err == IXGBE_SUCCESS || err == IXGBE_ERR_FC_NOT_NEGOTIATED) {
+		/*
+		 *check if we want to forward MAC frames - driver doesn't
+		 *have native capability to do that,
+		 *so we'll write the registers ourselves
+		 */
+
+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
+
+		/* set or clear MFLCN.PMCF bit depending on configuration */
+		if (adapter->mac_ctrl_frame_fwd != 0)
+			mflcn |= IXGBE_MFLCN_PMCF;
+		else
+			mflcn &= ~IXGBE_MFLCN_PMCF;
+
+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
+		IXGBE_WRITE_FLUSH(hw);
+
+		return 0;
+	}
+	return err;
+}
+
 /*
  * Configure device link speed and setup link.
  * It returns 0 on success.
@@ -2659,6 +2692,12 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 
 	ixgbe_restore_statistics_mapping(dev);
 
+	err = ixgbe_flow_ctrl_enable(dev, hw);
+	if (err < 0) {
+		PMD_INIT_LOG(ERR, "enable flow ctrl err");
+		goto error;
+	}
+
 	err = ixgbe_dev_rxtx_start(dev);
 	if (err < 0) {
 		PMD_INIT_LOG(ERR, "Unable to start rxtx queues");
@@ -2895,6 +2934,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
 
 	adapter->rss_reta_updated = 0;
 
+	adapter->mac_ctrl_frame_fwd = 0;
+
 	hw->adapter_stopped = true;
 }
 
@@ -4684,10 +4725,10 @@ static int
 ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 {
 	struct ixgbe_hw *hw;
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	int err;
 	uint32_t rx_buf_size;
 	uint32_t max_high_water;
-	uint32_t mflcn;
 	enum ixgbe_fc_mode rte_fcmode_2_ixgbe_fcmode[] = {
 		ixgbe_fc_none,
 		ixgbe_fc_rx_pause,
@@ -4720,31 +4761,14 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	hw->fc.low_water[0]   = fc_conf->low_water;
 	hw->fc.send_xon       = fc_conf->send_xon;
 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
 
-	err = ixgbe_fc_enable(hw);
-
-	/* Not negotiated is not an error case */
-	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
-
-		/* check if we want to forward MAC frames - driver doesn't have native
-		 * capability to do that, so we'll write the registers ourselves */
-
-		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
-
-		/* set or clear MFLCN.PMCF bit depending on configuration */
-		if (fc_conf->mac_ctrl_frame_fwd != 0)
-			mflcn |= IXGBE_MFLCN_PMCF;
-		else
-			mflcn &= ~IXGBE_MFLCN_PMCF;
-
-		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
-		IXGBE_WRITE_FLUSH(hw);
-
-		return 0;
+	err = ixgbe_flow_ctrl_enable(dev, hw);
+	if (err < 0) {
+		PMD_INIT_LOG(ERR, "ixgbe_flow_ctrl_enable = 0x%x", err);
+		return -EIO;
 	}
-
-	PMD_INIT_LOG(ERR, "ixgbe_fc_enable = 0x%x", err);
-	return -EIO;
+	return err;
 }
 
 /**
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index e1cd8fd16..d309813da 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -511,6 +511,7 @@ struct ixgbe_adapter {
 	 * mailbox status) link status.
 	 */
 	uint8_t pflink_fullchk;
+	uint8_t mac_ctrl_frame_fwd;
 };
 
 struct ixgbe_vf_representor {
-- 
2.17.1


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

* [dpdk-stable] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2019-12-19  4:43 [dpdk-stable] [PATCH] net/ixgbe: fix flow ctrl mode setting Sun GuinanX
  2019-12-19 10:17 ` [dpdk-stable] [PATCH v2] " Guinan Sun
  2020-02-17  7:51 ` [dpdk-stable] [PATCH v3] " Guinan Sun
@ 2020-02-18  3:39 ` Guinan Sun
  2020-02-18  9:21   ` [dpdk-stable] [dpdk-dev] " Konieczny, TomaszX
                     ` (2 more replies)
  2 siblings, 3 replies; 14+ messages in thread
From: Guinan Sun @ 2020-02-18  3:39 UTC (permalink / raw)
  To: dev; +Cc: Wenzhuo Lu, Qiming Yang, Qi Zhang, Guinan Sun, stable

When the port starts, the hw register is reset first,
and then the required parameters are set again.
If the parameters to be used are not set after resetting the register,
a read register error will occur. This patch is used to fix the problem.

Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org

Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
---
v4: changes
* rebase to dpdk-next-net-intel

v3: changes
* wrap duplication code into a function
* Modify checkpatch warnings

v2: changes
* Modify the initial value of requested_mode and current_mode
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 76 +++++++++++++++++++++-----------
 drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
 2 files changed, 51 insertions(+), 26 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 3aab24e82..08b4cc689 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1176,8 +1176,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
 	ixgbe_dcb_init(hw, dcb_config);
 	/* Get Hardware Flow Control setting */
-	hw->fc.requested_mode = ixgbe_fc_full;
-	hw->fc.current_mode = ixgbe_fc_full;
+	hw->fc.requested_mode = ixgbe_fc_none;
+	hw->fc.current_mode = ixgbe_fc_none;
 	hw->fc.pause_time = IXGBE_FC_PAUSE;
 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
 		hw->fc.low_water[i] = IXGBE_FC_LO;
@@ -2538,6 +2538,39 @@ ixgbe_set_vf_rate_limit(struct rte_eth_dev *dev, uint16_t vf,
 	return 0;
 }
 
+static int
+ixgbe_flow_ctrl_enable(struct rte_eth_dev *dev, struct ixgbe_hw *hw)
+{
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
+	int err;
+	uint32_t mflcn;
+
+	err = ixgbe_fc_enable(hw);
+
+	/* Not negotiated is not an error case */
+	if (err == IXGBE_SUCCESS || err == IXGBE_ERR_FC_NOT_NEGOTIATED) {
+		/*
+		 *check if we want to forward MAC frames - driver doesn't
+		 *have native capability to do that,
+		 *so we'll write the registers ourselves
+		 */
+
+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
+
+		/* set or clear MFLCN.PMCF bit depending on configuration */
+		if (adapter->mac_ctrl_frame_fwd != 0)
+			mflcn |= IXGBE_MFLCN_PMCF;
+		else
+			mflcn &= ~IXGBE_MFLCN_PMCF;
+
+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
+		IXGBE_WRITE_FLUSH(hw);
+
+		return 0;
+	}
+	return err;
+}
+
 /*
  * Configure device link speed and setup link.
  * It returns 0 on success.
@@ -2664,6 +2697,12 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 
 	ixgbe_restore_statistics_mapping(dev);
 
+	err = ixgbe_flow_ctrl_enable(dev, hw);
+	if (err < 0) {
+		PMD_INIT_LOG(ERR, "enable flow ctrl err");
+		goto error;
+	}
+
 	err = ixgbe_dev_rxtx_start(dev);
 	if (err < 0) {
 		PMD_INIT_LOG(ERR, "Unable to start rxtx queues");
@@ -2900,6 +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
 
 	adapter->rss_reta_updated = 0;
 
+	adapter->mac_ctrl_frame_fwd = 0;
+
 	hw->adapter_stopped = true;
 }
 
@@ -4718,10 +4759,10 @@ static int
 ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 {
 	struct ixgbe_hw *hw;
+	struct ixgbe_adapter *adapter = dev->data->dev_private;
 	int err;
 	uint32_t rx_buf_size;
 	uint32_t max_high_water;
-	uint32_t mflcn;
 	enum ixgbe_fc_mode rte_fcmode_2_ixgbe_fcmode[] = {
 		ixgbe_fc_none,
 		ixgbe_fc_rx_pause,
@@ -4754,31 +4795,14 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	hw->fc.low_water[0]   = fc_conf->low_water;
 	hw->fc.send_xon       = fc_conf->send_xon;
 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
 
-	err = ixgbe_fc_enable(hw);
-
-	/* Not negotiated is not an error case */
-	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
-
-		/* check if we want to forward MAC frames - driver doesn't have native
-		 * capability to do that, so we'll write the registers ourselves */
-
-		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
-
-		/* set or clear MFLCN.PMCF bit depending on configuration */
-		if (fc_conf->mac_ctrl_frame_fwd != 0)
-			mflcn |= IXGBE_MFLCN_PMCF;
-		else
-			mflcn &= ~IXGBE_MFLCN_PMCF;
-
-		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
-		IXGBE_WRITE_FLUSH(hw);
-
-		return 0;
+	err = ixgbe_flow_ctrl_enable(dev, hw);
+	if (err < 0) {
+		PMD_INIT_LOG(ERR, "ixgbe_flow_ctrl_enable = 0x%x", err);
+		return -EIO;
 	}
-
-	PMD_INIT_LOG(ERR, "ixgbe_fc_enable = 0x%x", err);
-	return -EIO;
+	return err;
 }
 
 /**
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 5089347a7..b8df75657 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -511,6 +511,7 @@ struct ixgbe_adapter {
 	 * mailbox status) link status.
 	 */
 	uint8_t pflink_fullchk;
+	uint8_t mac_ctrl_frame_fwd;
 	rte_atomic32_t link_thread_running;
 	pthread_t link_thread_tid;
 };
-- 
2.17.1


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
@ 2020-02-18  9:21   ` Konieczny, TomaszX
  2020-02-19  7:06   ` Ye Xiaolong
  2020-05-09  7:34   ` Zhao1, Wei
  2 siblings, 0 replies; 14+ messages in thread
From: Konieczny, TomaszX @ 2020-02-18  9:21 UTC (permalink / raw)
  To: Sun, GuinanX, dev
  Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, Sun, GuinanX, stable

Patch fixes reported issue.

Tested-by: Tomasz Konieczny <tomaszx.konieczny@intel.com>

Regards
Tomasz Konieczny
---------------------------------------------------------------------
Intel Corporation (UK) Ltd.
Co. Reg. #1134945
Pipers Way, Swindon SN3 1RJ

>-----Original Message-----
>From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
>Sent: 18 February 2020 04:40
>To: dev@dpdk.org
>Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
><qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun, GuinanX
><guinanx.sun@intel.com>; stable@dpdk.org
>Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
>
>When the port starts, the hw register is reset first, and then the required
>parameters are set again.
>If the parameters to be used are not set after resetting the register, a read
>register error will occur. This patch is used to fix the problem.
>
>Fixes: af75078fece3 ("first public release")
>Cc: stable@dpdk.org
>
>Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
>---
>v4: changes
>* rebase to dpdk-next-net-intel
>
>v3: changes
>* wrap duplication code into a function
>* Modify checkpatch warnings
>
>v2: changes
>* Modify the initial value of requested_mode and current_mode
>---
> drivers/net/ixgbe/ixgbe_ethdev.c | 76 +++++++++++++++++++++-----------
>drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
> 2 files changed, 51 insertions(+), 26 deletions(-)
>
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>index 3aab24e82..08b4cc689 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -1176,8 +1176,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void
>*init_params __rte_unused)
> 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
> 	ixgbe_dcb_init(hw, dcb_config);
> 	/* Get Hardware Flow Control setting */
>-	hw->fc.requested_mode = ixgbe_fc_full;
>-	hw->fc.current_mode = ixgbe_fc_full;
>+	hw->fc.requested_mode = ixgbe_fc_none;
>+	hw->fc.current_mode = ixgbe_fc_none;
> 	hw->fc.pause_time = IXGBE_FC_PAUSE;
> 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
> 		hw->fc.low_water[i] = IXGBE_FC_LO;
>@@ -2538,6 +2538,39 @@ ixgbe_set_vf_rate_limit(struct rte_eth_dev *dev,
>uint16_t vf,
> 	return 0;
> }
>
>+static int
>+ixgbe_flow_ctrl_enable(struct rte_eth_dev *dev, struct ixgbe_hw *hw) {
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
>+	int err;
>+	uint32_t mflcn;
>+
>+	err = ixgbe_fc_enable(hw);
>+
>+	/* Not negotiated is not an error case */
>+	if (err == IXGBE_SUCCESS || err == IXGBE_ERR_FC_NOT_NEGOTIATED) {
>+		/*
>+		 *check if we want to forward MAC frames - driver doesn't
>+		 *have native capability to do that,
>+		 *so we'll write the registers ourselves
>+		 */
>+
>+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
>+
>+		/* set or clear MFLCN.PMCF bit depending on configuration */
>+		if (adapter->mac_ctrl_frame_fwd != 0)
>+			mflcn |= IXGBE_MFLCN_PMCF;
>+		else
>+			mflcn &= ~IXGBE_MFLCN_PMCF;
>+
>+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
>+		IXGBE_WRITE_FLUSH(hw);
>+
>+		return 0;
>+	}
>+	return err;
>+}
>+
> /*
>  * Configure device link speed and setup link.
>  * It returns 0 on success.
>@@ -2664,6 +2697,12 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
>
> 	ixgbe_restore_statistics_mapping(dev);
>
>+	err = ixgbe_flow_ctrl_enable(dev, hw);
>+	if (err < 0) {
>+		PMD_INIT_LOG(ERR, "enable flow ctrl err");
>+		goto error;
>+	}
>+
> 	err = ixgbe_dev_rxtx_start(dev);
> 	if (err < 0) {
> 		PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
>+2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
>
> 	adapter->rss_reta_updated = 0;
>
>+	adapter->mac_ctrl_frame_fwd = 0;
>+
> 	hw->adapter_stopped = true;
> }
>
>@@ -4718,10 +4759,10 @@ static int
> ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)  {
> 	struct ixgbe_hw *hw;
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
> 	int err;
> 	uint32_t rx_buf_size;
> 	uint32_t max_high_water;
>-	uint32_t mflcn;
> 	enum ixgbe_fc_mode rte_fcmode_2_ixgbe_fcmode[] = {
> 		ixgbe_fc_none,
> 		ixgbe_fc_rx_pause,
>@@ -4754,31 +4795,14 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct
>rte_eth_fc_conf *fc_conf)
> 	hw->fc.low_water[0]   = fc_conf->low_water;
> 	hw->fc.send_xon       = fc_conf->send_xon;
> 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
>+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
>
>-	err = ixgbe_fc_enable(hw);
>-
>-	/* Not negotiated is not an error case */
>-	if ((err == IXGBE_SUCCESS) || (err ==
>IXGBE_ERR_FC_NOT_NEGOTIATED)) {
>-
>-		/* check if we want to forward MAC frames - driver doesn't have
>native
>-		 * capability to do that, so we'll write the registers ourselves */
>-
>-		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
>-
>-		/* set or clear MFLCN.PMCF bit depending on configuration */
>-		if (fc_conf->mac_ctrl_frame_fwd != 0)
>-			mflcn |= IXGBE_MFLCN_PMCF;
>-		else
>-			mflcn &= ~IXGBE_MFLCN_PMCF;
>-
>-		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
>-		IXGBE_WRITE_FLUSH(hw);
>-
>-		return 0;
>+	err = ixgbe_flow_ctrl_enable(dev, hw);
>+	if (err < 0) {
>+		PMD_INIT_LOG(ERR, "ixgbe_flow_ctrl_enable = 0x%x", err);
>+		return -EIO;
> 	}
>-
>-	PMD_INIT_LOG(ERR, "ixgbe_fc_enable = 0x%x", err);
>-	return -EIO;
>+	return err;
> }
>
> /**
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
>index 5089347a7..b8df75657 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.h
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
>@@ -511,6 +511,7 @@ struct ixgbe_adapter {
> 	 * mailbox status) link status.
> 	 */
> 	uint8_t pflink_fullchk;
>+	uint8_t mac_ctrl_frame_fwd;
> 	rte_atomic32_t link_thread_running;
> 	pthread_t link_thread_tid;
> };
>--
>2.17.1


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
  2020-02-18  9:21   ` [dpdk-stable] [dpdk-dev] " Konieczny, TomaszX
@ 2020-02-19  7:06   ` Ye Xiaolong
  2020-02-19 12:44     ` Konieczny, TomaszX
  2020-05-09  7:34   ` Zhao1, Wei
  2 siblings, 1 reply; 14+ messages in thread
From: Ye Xiaolong @ 2020-02-19  7:06 UTC (permalink / raw)
  To: Guinan Sun; +Cc: dev, Wenzhuo Lu, Qiming Yang, Qi Zhang, stable

On 02/18, Guinan Sun wrote:
>When the port starts, the hw register is reset first,
>and then the required parameters are set again.
>If the parameters to be used are not set after resetting the register,
>a read register error will occur. This patch is used to fix the problem.
>
>Fixes: af75078fece3 ("first public release")
>Cc: stable@dpdk.org
>
>Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
>---
>v4: changes
>* rebase to dpdk-next-net-intel
>
>v3: changes
>* wrap duplication code into a function
>* Modify checkpatch warnings
>
>v2: changes
>* Modify the initial value of requested_mode and current_mode
>---
> drivers/net/ixgbe/ixgbe_ethdev.c | 76 +++++++++++++++++++++-----------
> drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
> 2 files changed, 51 insertions(+), 26 deletions(-)
>
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>index 3aab24e82..08b4cc689 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -1176,8 +1176,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
> 	memset(dcb_config, 0, sizeof(struct ixgbe_dcb_config));
> 	ixgbe_dcb_init(hw, dcb_config);
> 	/* Get Hardware Flow Control setting */
>-	hw->fc.requested_mode = ixgbe_fc_full;
>-	hw->fc.current_mode = ixgbe_fc_full;
>+	hw->fc.requested_mode = ixgbe_fc_none;
>+	hw->fc.current_mode = ixgbe_fc_none;
> 	hw->fc.pause_time = IXGBE_FC_PAUSE;
> 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
> 		hw->fc.low_water[i] = IXGBE_FC_LO;
>@@ -2538,6 +2538,39 @@ ixgbe_set_vf_rate_limit(struct rte_eth_dev *dev, uint16_t vf,
> 	return 0;
> }
> 
>+static int
>+ixgbe_flow_ctrl_enable(struct rte_eth_dev *dev, struct ixgbe_hw *hw)
>+{
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
>+	int err;
>+	uint32_t mflcn;
>+
>+	err = ixgbe_fc_enable(hw);
>+
>+	/* Not negotiated is not an error case */
>+	if (err == IXGBE_SUCCESS || err == IXGBE_ERR_FC_NOT_NEGOTIATED) {
>+		/*
>+		 *check if we want to forward MAC frames - driver doesn't
>+		 *have native capability to do that,
>+		 *so we'll write the registers ourselves
>+		 */
>+
>+		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
>+
>+		/* set or clear MFLCN.PMCF bit depending on configuration */
>+		if (adapter->mac_ctrl_frame_fwd != 0)
>+			mflcn |= IXGBE_MFLCN_PMCF;
>+		else
>+			mflcn &= ~IXGBE_MFLCN_PMCF;
>+
>+		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
>+		IXGBE_WRITE_FLUSH(hw);
>+
>+		return 0;
>+	}
>+	return err;
>+}
>+
> /*
>  * Configure device link speed and setup link.
>  * It returns 0 on success.
>@@ -2664,6 +2697,12 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
> 
> 	ixgbe_restore_statistics_mapping(dev);
> 
>+	err = ixgbe_flow_ctrl_enable(dev, hw);
>+	if (err < 0) {
>+		PMD_INIT_LOG(ERR, "enable flow ctrl err");
>+		goto error;
>+	}
>+
> 	err = ixgbe_dev_rxtx_start(dev);
> 	if (err < 0) {
> 		PMD_INIT_LOG(ERR, "Unable to start rxtx queues");
>@@ -2900,6 +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> 
> 	adapter->rss_reta_updated = 0;
> 
>+	adapter->mac_ctrl_frame_fwd = 0;
>+
> 	hw->adapter_stopped = true;
> }
> 
>@@ -4718,10 +4759,10 @@ static int
> ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
> {
> 	struct ixgbe_hw *hw;
>+	struct ixgbe_adapter *adapter = dev->data->dev_private;
> 	int err;
> 	uint32_t rx_buf_size;
> 	uint32_t max_high_water;
>-	uint32_t mflcn;
> 	enum ixgbe_fc_mode rte_fcmode_2_ixgbe_fcmode[] = {
> 		ixgbe_fc_none,
> 		ixgbe_fc_rx_pause,
>@@ -4754,31 +4795,14 @@ ixgbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
> 	hw->fc.low_water[0]   = fc_conf->low_water;
> 	hw->fc.send_xon       = fc_conf->send_xon;
> 	hw->fc.disable_fc_autoneg = !fc_conf->autoneg;
>+	adapter->mac_ctrl_frame_fwd = fc_conf->mac_ctrl_frame_fwd;
> 
>-	err = ixgbe_fc_enable(hw);
>-
>-	/* Not negotiated is not an error case */
>-	if ((err == IXGBE_SUCCESS) || (err == IXGBE_ERR_FC_NOT_NEGOTIATED)) {
>-
>-		/* check if we want to forward MAC frames - driver doesn't have native
>-		 * capability to do that, so we'll write the registers ourselves */
>-
>-		mflcn = IXGBE_READ_REG(hw, IXGBE_MFLCN);
>-
>-		/* set or clear MFLCN.PMCF bit depending on configuration */
>-		if (fc_conf->mac_ctrl_frame_fwd != 0)
>-			mflcn |= IXGBE_MFLCN_PMCF;
>-		else
>-			mflcn &= ~IXGBE_MFLCN_PMCF;
>-
>-		IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn);
>-		IXGBE_WRITE_FLUSH(hw);
>-
>-		return 0;
>+	err = ixgbe_flow_ctrl_enable(dev, hw);
>+	if (err < 0) {
>+		PMD_INIT_LOG(ERR, "ixgbe_flow_ctrl_enable = 0x%x", err);
>+		return -EIO;
> 	}
>-
>-	PMD_INIT_LOG(ERR, "ixgbe_fc_enable = 0x%x", err);
>-	return -EIO;
>+	return err;
> }
> 
> /**
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
>index 5089347a7..b8df75657 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.h
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
>@@ -511,6 +511,7 @@ struct ixgbe_adapter {
> 	 * mailbox status) link status.
> 	 */
> 	uint8_t pflink_fullchk;
>+	uint8_t mac_ctrl_frame_fwd;
> 	rte_atomic32_t link_thread_running;
> 	pthread_t link_thread_tid;
> };
>-- 
>2.17.1
>

Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>

Applied to dpdk-next-net-intel, Thanks.

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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-02-19  7:06   ` Ye Xiaolong
@ 2020-02-19 12:44     ` Konieczny, TomaszX
  2020-02-19 15:27       ` Ye Xiaolong
  0 siblings, 1 reply; 14+ messages in thread
From: Konieczny, TomaszX @ 2020-02-19 12:44 UTC (permalink / raw)
  To: Ye, Xiaolong, Sun, GuinanX
  Cc: dev, Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable

>-----Original Message-----
>From: dev <dev-bounces@dpdk.org> On Behalf Of Ye Xiaolong
>Sent: 19 February 2020 08:06
>To: Sun, GuinanX <guinanx.sun@intel.com>
>Cc: dev@dpdk.org; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
><qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; stable@dpdk.org
>Subject: Re: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
>
>On 02/18, Guinan Sun wrote:
>>When the port starts, the hw register is reset first, and then the
>>required parameters are set again.
>>If the parameters to be used are not set after resetting the register,
>>a read register error will occur. This patch is used to fix the problem.
>>
>>Fixes: af75078fece3 ("first public release")
>>Cc: stable@dpdk.org
>>
>>Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
>>
>
>Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
>
>Applied to dpdk-next-net-intel, Thanks.

This should be backported to 19.11 and 18.11

Regards
Tomasz Konieczny
---------------------------------------------------------------------
Intel Corporation (UK) Ltd.
Co. Reg. #1134945
Pipers Way, Swindon SN3 1RJ


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-02-19 12:44     ` Konieczny, TomaszX
@ 2020-02-19 15:27       ` Ye Xiaolong
  0 siblings, 0 replies; 14+ messages in thread
From: Ye Xiaolong @ 2020-02-19 15:27 UTC (permalink / raw)
  To: Konieczny, TomaszX
  Cc: Sun, GuinanX, dev, Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable

On 02/19, Konieczny, TomaszX wrote:
>>-----Original Message-----
>>From: dev <dev-bounces@dpdk.org> On Behalf Of Ye Xiaolong
>>Sent: 19 February 2020 08:06
>>To: Sun, GuinanX <guinanx.sun@intel.com>
>>Cc: dev@dpdk.org; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
>><qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; stable@dpdk.org
>>Subject: Re: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
>>
>>On 02/18, Guinan Sun wrote:
>>>When the port starts, the hw register is reset first, and then the
>>>required parameters are set again.
>>>If the parameters to be used are not set after resetting the register,
>>>a read register error will occur. This patch is used to fix the problem.
>>>
>>>Fixes: af75078fece3 ("first public release")
>>>Cc: stable@dpdk.org
>>>
>>>Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
>>>
>>
>>Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
>>
>>Applied to dpdk-next-net-intel, Thanks.
>
>This should be backported to 19.11 and 18.11

Sure, this patch has added "Cc: stable@dpdk.org", so the LTS maintainer would
backport them to 19.11 and 18.11.

Thanks,
Xiaolong

>
>Regards
>Tomasz Konieczny
>---------------------------------------------------------------------
>Intel Corporation (UK) Ltd.
>Co. Reg. #1134945
>Pipers Way, Swindon SN3 1RJ
>

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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
  2020-02-18  9:21   ` [dpdk-stable] [dpdk-dev] " Konieczny, TomaszX
  2020-02-19  7:06   ` Ye Xiaolong
@ 2020-05-09  7:34   ` Zhao1, Wei
  2020-05-09  8:54     ` Sun, GuinanX
  2 siblings, 1 reply; 14+ messages in thread
From: Zhao1, Wei @ 2020-05-09  7:34 UTC (permalink / raw)
  To: Sun, GuinanX, dev
  Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, Sun, GuinanX, stable, Guo, Jia

Hi, guinan

 In this patch, you have add a new parameter of mac_ctrl_frame_fwd, it should not be clear in ixgbe_dev_stop(),
Or it will be over write when do port reset, and also you should add mac_ctrl_frame_fwd in ixgbe_flow_ctrl_get() for FC info get.
Although this patch has been merged, please commit fix patch for it, thanks!



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
> Sent: Tuesday, February 18, 2020 11:40 AM
> To: dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun, GuinanX
> <guinanx.sun@intel.com>; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> 
> When the port starts, the hw register is reset first, and then the required
> parameters are set again.
> If the parameters to be used are not set after resetting the register, a read
> register error will occur. This patch is used to fix the problem.
> 
> Fixes: af75078fece3 ("first public release")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
> ---
> v4: changes
> * rebase to dpdk-next-net-intel
> 
> v3: changes
> * wrap duplication code into a function
> * Modify checkpatch warnings
> 
> v2: changes
> * Modify the initial value of requested_mode and current_mode
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 76 +++++++++++++++++++++-----------
> drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
>  2 files changed, 51 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 3aab24e82..08b4cc689 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +	}
> +
>  	err = ixgbe_dev_rxtx_start(dev);
>  	if (err < 0) {
>  		PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
> +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> 
>  	adapter->rss_reta_updated = 0;
> 
> +	adapter->mac_ctrl_frame_fwd = 0;
> +

Delete it please.






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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-05-09  7:34   ` Zhao1, Wei
@ 2020-05-09  8:54     ` Sun, GuinanX
  2020-05-09  9:30       ` Zhao1, Wei
  2020-05-09  9:49       ` Zhao1, Wei
  0 siblings, 2 replies; 14+ messages in thread
From: Sun, GuinanX @ 2020-05-09  8:54 UTC (permalink / raw)
  To: Zhao1, Wei, dev; +Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable, Guo, Jia

Hi ,zhaowei

> -----Original Message-----
> From: Zhao1, Wei
> Sent: Saturday, May 9, 2020 3:35 PM
> To: Sun, GuinanX <guinanx.sun@intel.com>; dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun, GuinanX
> <guinanx.sun@intel.com>; stable@dpdk.org; Guo, Jia <jia.guo@intel.com>
> Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> 
> Hi, guinan
> 
>  In this patch, you have add a new parameter of mac_ctrl_frame_fwd, it should
> not be clear in ixgbe_dev_stop(), Or it will be over write when do port reset, and
> also you should add mac_ctrl_frame_fwd in ixgbe_flow_ctrl_get() for FC info
> get.
> Although this patch has been merged, please commit fix patch for it, thanks!
> 

For this question, I need to confirm the requirements with Konieczny TomaszX before I can decide whether to make changes.

> 
> 
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
> > Sent: Tuesday, February 18, 2020 11:40 AM
> > To: dev@dpdk.org
> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org
> > Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> >
> > When the port starts, the hw register is reset first, and then the
> > required parameters are set again.
> > If the parameters to be used are not set after resetting the register,
> > a read register error will occur. This patch is used to fix the problem.
> >
> > Fixes: af75078fece3 ("first public release")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
> > ---
> > v4: changes
> > * rebase to dpdk-next-net-intel
> >
> > v3: changes
> > * wrap duplication code into a function
> > * Modify checkpatch warnings
> >
> > v2: changes
> > * Modify the initial value of requested_mode and current_mode
> > ---
> >  drivers/net/ixgbe/ixgbe_ethdev.c | 76
> > +++++++++++++++++++++----------- drivers/net/ixgbe/ixgbe_ethdev.h |  1
> > +
> >  2 files changed, 51 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > index 3aab24e82..08b4cc689 100644
> > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > +}
> > +
> >  err = ixgbe_dev_rxtx_start(dev);
> >  if (err < 0) {
> >  PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
> > +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> >
> >  adapter->rss_reta_updated = 0;
> >
> > +adapter->mac_ctrl_frame_fwd = 0;
> > +
> 
> Delete it please.
> 
> 
> 
> 
> 


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-05-09  8:54     ` Sun, GuinanX
@ 2020-05-09  9:30       ` Zhao1, Wei
  2020-05-09  9:48         ` Sun, GuinanX
  2020-05-09  9:49       ` Zhao1, Wei
  1 sibling, 1 reply; 14+ messages in thread
From: Zhao1, Wei @ 2020-05-09  9:30 UTC (permalink / raw)
  To: Sun, GuinanX, dev
  Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable, Guo, Jia

Hi,guinan

	More info for this problem:
If some user set mac_ctrl_frame_fwd to 1 from fc ops, then he do a port reset process of
"
1. testpmd> start
2. testpmd> set flow_ctrl mac_ctrl_frame_fwd on 0
3. testpmd> stop
4. testpmd> port stop 0
5. testpmd> port start 0
6. testpmd> start
"
Then after this process, the mac_ctrl_frame_fwd has been change to "off", 
so we should delete " adapter->mac_ctrl_frame_fwd = 0;" from dev-stop.
  
Another problem is "add mac_ctrl_frame_fwd in ixgbe_flow_ctrl_get() for FC info get", it is
Independent on the above one.


> -----Original Message-----
> From: Sun, GuinanX <guinanx.sun@intel.com>
> Sent: Saturday, May 9, 2020 4:55 PM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> stable@dpdk.org; Guo, Jia <jia.guo@intel.com>
> Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> 
> Hi ,zhaowei
> 
> > -----Original Message-----
> > From: Zhao1, Wei
> > Sent: Saturday, May 9, 2020 3:35 PM
> > To: Sun, GuinanX <guinanx.sun@intel.com>; dev@dpdk.org
> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org; Guo, Jia
> > <jia.guo@intel.com>
> > Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode
> > setting
> >
> > Hi, guinan
> >
> >  In this patch, you have add a new parameter of mac_ctrl_frame_fwd, it
> > should not be clear in ixgbe_dev_stop(), Or it will be over write when
> > do port reset, and also you should add mac_ctrl_frame_fwd in
> > ixgbe_flow_ctrl_get() for FC info get.
> > Although this patch has been merged, please commit fix patch for it, thanks!
> >
> 
> For this question, I need to confirm the requirements with Konieczny TomaszX
> before I can decide whether to make changes.
> 
> >
> >
> > > -----Original Message-----
> > > From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
> > > Sent: Tuesday, February 18, 2020 11:40 AM
> > > To: dev@dpdk.org
> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org
> > > Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> > >
> > > When the port starts, the hw register is reset first, and then the
> > > required parameters are set again.
> > > If the parameters to be used are not set after resetting the
> > > register, a read register error will occur. This patch is used to fix the
> problem.
> > >
> > > Fixes: af75078fece3 ("first public release")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
> > > ---
> > > v4: changes
> > > * rebase to dpdk-next-net-intel
> > >
> > > v3: changes
> > > * wrap duplication code into a function
> > > * Modify checkpatch warnings
> > >
> > > v2: changes
> > > * Modify the initial value of requested_mode and current_mode
> > > ---
> > >  drivers/net/ixgbe/ixgbe_ethdev.c | 76
> > > +++++++++++++++++++++----------- drivers/net/ixgbe/ixgbe_ethdev.h |
> > > +++++++++++++++++++++1
> > > +
> > >  2 files changed, 51 insertions(+), 26 deletions(-)
> > >
> > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > > index 3aab24e82..08b4cc689 100644
> > > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > +}
> > > +
> > >  err = ixgbe_dev_rxtx_start(dev);
> > >  if (err < 0) {
> > >  PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
> > > +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> > >
> > >  adapter->rss_reta_updated = 0;
> > >
> > > +adapter->mac_ctrl_frame_fwd = 0;
> > > +
> >
> > Delete it please.
> >
> >
> >
> >
> >
> 


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-05-09  9:30       ` Zhao1, Wei
@ 2020-05-09  9:48         ` Sun, GuinanX
  0 siblings, 0 replies; 14+ messages in thread
From: Sun, GuinanX @ 2020-05-09  9:48 UTC (permalink / raw)
  To: Zhao1, Wei, dev; +Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable, Guo, Jia

Hi, zhaowei

> -----Original Message-----
> From: Zhao1, Wei
> Sent: Saturday, May 9, 2020 5:30 PM
> To: Sun, GuinanX <guinanx.sun@intel.com>; dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> stable@dpdk.org; Guo, Jia <jia.guo@intel.com>
> Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> 
> Hi,guinan
> 
> More info for this problem:
> If some user set mac_ctrl_frame_fwd to 1 from fc ops, then he do a port reset
> process of "
> 1. testpmd> start
> 2. testpmd> set flow_ctrl mac_ctrl_frame_fwd on 0 3. testpmd> stop 4. testpmd>
> port stop 0 5. testpmd> port start 0 6. testpmd> start "
> Then after this process, the mac_ctrl_frame_fwd has been change to "off", so
> we should delete " adapter->mac_ctrl_frame_fwd = 0;" from dev-stop.
> 
Thank you very much , I get it.

> Another problem is "add mac_ctrl_frame_fwd in ixgbe_flow_ctrl_get() for FC
> info get", it is Independent on the above one.
> 
> 
> > -----Original Message-----
> > From: Sun, GuinanX <guinanx.sun@intel.com>
> > Sent: Saturday, May 9, 2020 4:55 PM
> > To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> > stable@dpdk.org; Guo, Jia <jia.guo@intel.com>
> > Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode
> > setting
> >
> > Hi ,zhaowei
> >
> > > -----Original Message-----
> > > From: Zhao1, Wei
> > > Sent: Saturday, May 9, 2020 3:35 PM
> > > To: Sun, GuinanX <guinanx.sun@intel.com>; dev@dpdk.org
> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org; Guo, Jia
> > > <jia.guo@intel.com>
> > > Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode
> > > setting
> > >
> > > Hi, guinan
> > >
> > >  In this patch, you have add a new parameter of mac_ctrl_frame_fwd,
> > > it should not be clear in ixgbe_dev_stop(), Or it will be over write
> > > when do port reset, and also you should add mac_ctrl_frame_fwd in
> > > ixgbe_flow_ctrl_get() for FC info get.
> > > Although this patch has been merged, please commit fix patch for it, thanks!
> > >
> >
> > For this question, I need to confirm the requirements with Konieczny
> > TomaszX before I can decide whether to make changes.
> >
> > >
> > >
> > > > -----Original Message-----
> > > > From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
> > > > Sent: Tuesday, February 18, 2020 11:40 AM
> > > > To: dev@dpdk.org
> > > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > > > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > > > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org
> > > > Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode
> > > > setting
> > > >
> > > > When the port starts, the hw register is reset first, and then the
> > > > required parameters are set again.
> > > > If the parameters to be used are not set after resetting the
> > > > register, a read register error will occur. This patch is used to
> > > > fix the
> > problem.
> > > >
> > > > Fixes: af75078fece3 ("first public release")
> > > > Cc: stable@dpdk.org
> > > >
> > > > Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
> > > > ---
> > > > v4: changes
> > > > * rebase to dpdk-next-net-intel
> > > >
> > > > v3: changes
> > > > * wrap duplication code into a function
> > > > * Modify checkpatch warnings
> > > >
> > > > v2: changes
> > > > * Modify the initial value of requested_mode and current_mode
> > > > ---
> > > >  drivers/net/ixgbe/ixgbe_ethdev.c | 76
> > > > +++++++++++++++++++++----------- drivers/net/ixgbe/ixgbe_ethdev.h
> > > > +++++++++++++++++++++|
> > > > +++++++++++++++++++++1
> > > > +
> > > >  2 files changed, 51 insertions(+), 26 deletions(-)
> > > >
> > > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > > > index 3aab24e82..08b4cc689 100644
> > > > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > > +}
> > > > +
> > > >  err = ixgbe_dev_rxtx_start(dev);
> > > >  if (err < 0) {
> > > >  PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
> > > > +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> > > >
> > > >  adapter->rss_reta_updated = 0;
> > > >
> > > > +adapter->mac_ctrl_frame_fwd = 0;
> > > > +
> > >
> > > Delete it please.
> > >
> > >
> > >
> > >
> > >
> >
> 


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

* Re: [dpdk-stable] [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
  2020-05-09  8:54     ` Sun, GuinanX
  2020-05-09  9:30       ` Zhao1, Wei
@ 2020-05-09  9:49       ` Zhao1, Wei
  1 sibling, 0 replies; 14+ messages in thread
From: Zhao1, Wei @ 2020-05-09  9:49 UTC (permalink / raw)
  To: Sun, GuinanX, dev
  Cc: Lu, Wenzhuo, Yang, Qiming, Zhang, Qi Z, stable, Guo, Jia

Hi,guinan

	More info for this problem:
If some user set mac_ctrl_frame_fwd to 1 from fc ops, then he do a port reset process of

"
1. testpmd> start
2. testpmd> set flow_ctrl mac_ctrl_frame_fwd on 0 
3. testpmd> stop 
4. testpmd> port stop 0 
5. testpmd> port start 0 
6. testpmd> start 
"

Then after this process, the mac_ctrl_frame_fwd has been change to "off", so we should delete " adapter->mac_ctrl_frame_fwd = 0;" from dev-stop. 
Another problem is "add mac_ctrl_frame_fwd in ixgbe_flow_ctrl_get() for FC info get", it is Independent on the above one.

> -----Original Message-----
> From: Sun, GuinanX <guinanx.sun@intel.com>
> Sent: Saturday, May 9, 2020 4:55 PM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> stable@dpdk.org; Guo, Jia <jia.guo@intel.com>
> Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> 
> Hi ,zhaowei
> 
> > -----Original Message-----
> > From: Zhao1, Wei
> > Sent: Saturday, May 9, 2020 3:35 PM
> > To: Sun, GuinanX <guinanx.sun@intel.com>; dev@dpdk.org
> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org; Guo, Jia
> > <jia.guo@intel.com>
> > Subject: RE: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode
> > setting
> >
> > Hi, guinan
> >
> >  In this patch, you have add a new parameter of mac_ctrl_frame_fwd, it
> > should not be clear in ixgbe_dev_stop(), Or it will be over write when
> > do port reset, and also you should add mac_ctrl_frame_fwd in
> > ixgbe_flow_ctrl_get() for FC info get.
> > Although this patch has been merged, please commit fix patch for it, thanks!
> >
> 
> For this question, I need to confirm the requirements with Konieczny TomaszX
> before I can decide whether to make changes.
> 
> >
> >
> > > -----Original Message-----
> > > From: dev <dev-bounces@dpdk.org> On Behalf Of Guinan Sun
> > > Sent: Tuesday, February 18, 2020 11:40 AM
> > > To: dev@dpdk.org
> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yang, Qiming
> > > <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Sun,
> > > GuinanX <guinanx.sun@intel.com>; stable@dpdk.org
> > > Subject: [dpdk-dev] [PATCH v4] net/ixgbe: fix flow ctrl mode setting
> > >
> > > When the port starts, the hw register is reset first, and then the
> > > required parameters are set again.
> > > If the parameters to be used are not set after resetting the
> > > register, a read register error will occur. This patch is used to fix the
> problem.
> > >
> > > Fixes: af75078fece3 ("first public release")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
> > > ---
> > > v4: changes
> > > * rebase to dpdk-next-net-intel
> > >
> > > v3: changes
> > > * wrap duplication code into a function
> > > * Modify checkpatch warnings
> > >
> > > v2: changes
> > > * Modify the initial value of requested_mode and current_mode
> > > ---
> > >  drivers/net/ixgbe/ixgbe_ethdev.c | 76
> > > +++++++++++++++++++++----------- drivers/net/ixgbe/ixgbe_ethdev.h |
> > > +++++++++++++++++++++1
> > > +
> > >  2 files changed, 51 insertions(+), 26 deletions(-)
> > >
> > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > > index 3aab24e82..08b4cc689 100644
> > > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > +}
> > > +
> > >  err = ixgbe_dev_rxtx_start(dev);
> > >  if (err < 0) {
> > >  PMD_INIT_LOG(ERR, "Unable to start rxtx queues"); @@ -2900,6
> > > +2939,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
> > >
> > >  adapter->rss_reta_updated = 0;
> > >
> > > +adapter->mac_ctrl_frame_fwd = 0;
> > > +
> >
> > Delete it please.
> >
> >
> >
> >
> >
> 


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

end of thread, other threads:[~2020-05-09  9:49 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-19  4:43 [dpdk-stable] [PATCH] net/ixgbe: fix flow ctrl mode setting Sun GuinanX
2019-12-19 10:17 ` [dpdk-stable] [PATCH v2] " Guinan Sun
2020-02-01 13:12   ` [dpdk-stable] [dpdk-dev] " Ye Xiaolong
2020-02-17  7:51 ` [dpdk-stable] [PATCH v3] " Guinan Sun
2020-02-18  3:39 ` [dpdk-stable] [PATCH v4] " Guinan Sun
2020-02-18  9:21   ` [dpdk-stable] [dpdk-dev] " Konieczny, TomaszX
2020-02-19  7:06   ` Ye Xiaolong
2020-02-19 12:44     ` Konieczny, TomaszX
2020-02-19 15:27       ` Ye Xiaolong
2020-05-09  7:34   ` Zhao1, Wei
2020-05-09  8:54     ` Sun, GuinanX
2020-05-09  9:30       ` Zhao1, Wei
2020-05-09  9:48         ` Sun, GuinanX
2020-05-09  9:49       ` Zhao1, Wei

patches for DPDK stable branches

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/stable/0 stable/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 stable stable/ https://inbox.dpdk.org/stable \
		stable@dpdk.org
	public-inbox-index stable

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.stable


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git