patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH 01/11] net/txgbe: add Tx queue maximum limit
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 02/11] net/txgbe: fix GRE tunnel packet checksum Jiawen Wu
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Limit TX queue maximum to 64 when neither VT nor DCB are enabled,
since hardware doesn't support it.

Fixes: 75cbb1f0e8a6 ("net/txgbe: add device configuration")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 13 +++++++++++++
 drivers/net/txgbe/txgbe_ethdev.h |  1 +
 2 files changed, 14 insertions(+)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 15911a3621..479cd810f8 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1499,6 +1499,19 @@ txgbe_check_mq_mode(struct rte_eth_dev *dev)
 				return -EINVAL;
 			}
 		}
+
+		/*
+		 * When DCB/VT is off, maximum number of queues changes
+		 */
+		if (dev_conf->txmode.mq_mode == RTE_ETH_MQ_TX_NONE) {
+			if (nb_tx_q > TXGBE_NONE_MODE_TX_NB_QUEUES) {
+				PMD_INIT_LOG(ERR,
+					     "Neither VT nor DCB are enabled, "
+					     "nb_tx_q > %d.",
+					     TXGBE_NONE_MODE_TX_NB_QUEUES);
+				return -EINVAL;
+			}
+		}
 	}
 	return 0;
 }
diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h
index 6b296d6fd1..7feb45d0cf 100644
--- a/drivers/net/txgbe/txgbe_ethdev.h
+++ b/drivers/net/txgbe/txgbe_ethdev.h
@@ -41,6 +41,7 @@
 /*Default value of Max Rx Queue*/
 #define TXGBE_MAX_RX_QUEUE_NUM	128
 #define TXGBE_VMDQ_DCB_NB_QUEUES     TXGBE_MAX_RX_QUEUE_NUM
+#define TXGBE_NONE_MODE_TX_NB_QUEUES 64
 
 #ifndef NBBY
 #define NBBY	8	/* number of bits in a byte */
-- 
2.27.0


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

* [PATCH 02/11] net/txgbe: fix GRE tunnel packet checksum
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
  2023-09-28  9:47 ` [PATCH 01/11] net/txgbe: add Tx queue maximum limit Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 03/11] net/ngbe: fix to set flow control Jiawen Wu
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix transmit context descriptor for GRE tunnel packet to make the
hardware compute the checksum successfully.

Fixes: e5ece1f467aa ("net/txgbe: fix VXLAN-GPE packet checksum")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ptypes.c | 16 ----------------
 drivers/net/txgbe/txgbe_ptypes.h |  5 +++++
 drivers/net/txgbe/txgbe_rxtx.c   | 23 ++++++++++++-----------
 3 files changed, 17 insertions(+), 27 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_ptypes.c b/drivers/net/txgbe/txgbe_ptypes.c
index e1299d7363..c444d5d3f1 100644
--- a/drivers/net/txgbe/txgbe_ptypes.c
+++ b/drivers/net/txgbe/txgbe_ptypes.c
@@ -320,8 +320,6 @@ txgbe_encode_ptype_tunnel(u32 ptype)
 		ptid |= TXGBE_PTID_TUN_EI;
 		break;
 	case RTE_PTYPE_TUNNEL_GRE:
-		ptid |= TXGBE_PTID_TUN_EIG;
-		break;
 	case RTE_PTYPE_TUNNEL_VXLAN:
 	case RTE_PTYPE_TUNNEL_VXLAN_GPE:
 	case RTE_PTYPE_TUNNEL_NVGRE:
@@ -332,20 +330,6 @@ txgbe_encode_ptype_tunnel(u32 ptype)
 		return ptid;
 	}
 
-	switch (ptype & RTE_PTYPE_INNER_L2_MASK) {
-	case RTE_PTYPE_INNER_L2_ETHER:
-		ptid |= TXGBE_PTID_TUN_EIGM;
-		break;
-	case RTE_PTYPE_INNER_L2_ETHER_VLAN:
-		ptid |= TXGBE_PTID_TUN_EIGMV;
-		break;
-	case RTE_PTYPE_INNER_L2_ETHER_QINQ:
-		ptid |= TXGBE_PTID_TUN_EIGMV;
-		break;
-	default:
-		break;
-	}
-
 	switch (ptype & RTE_PTYPE_INNER_L3_MASK) {
 	case RTE_PTYPE_INNER_L3_IPV4:
 	case RTE_PTYPE_INNER_L3_IPV4_EXT:
diff --git a/drivers/net/txgbe/txgbe_ptypes.h b/drivers/net/txgbe/txgbe_ptypes.h
index fa6c347d53..6fa8147f05 100644
--- a/drivers/net/txgbe/txgbe_ptypes.h
+++ b/drivers/net/txgbe/txgbe_ptypes.h
@@ -348,4 +348,9 @@ struct txgbe_nvgrehdr {
 	__be32 tni;
 };
 
+struct txgbe_grehdr {
+	__be16 flags;
+	__be16 proto;
+};
+
 #endif /* _TXGBE_PTYPE_H_ */
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index 427f8b82ac..f7cd2333ab 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -572,7 +572,6 @@ tx_desc_ol_flags_to_ptype(uint64_t oflags)
 		ptype |= RTE_PTYPE_L2_ETHER |
 			 RTE_PTYPE_L3_IPV4 |
 			 RTE_PTYPE_TUNNEL_GRE;
-		ptype |= RTE_PTYPE_INNER_L2_ETHER;
 		break;
 	case RTE_MBUF_F_TX_TUNNEL_GENEVE:
 		ptype |= RTE_PTYPE_L2_ETHER |
@@ -705,22 +704,24 @@ txgbe_get_tun_len(struct rte_mbuf *mbuf)
 static inline uint8_t
 txgbe_parse_tun_ptid(struct rte_mbuf *tx_pkt)
 {
-	uint64_t l2_none, l2_mac, l2_mac_vlan;
+	uint64_t l2_vxlan, l2_vxlan_mac, l2_vxlan_mac_vlan;
+	uint64_t l2_gre, l2_gre_mac, l2_gre_mac_vlan;
 	uint8_t ptid = 0;
 
-	if ((tx_pkt->ol_flags & (RTE_MBUF_F_TX_TUNNEL_VXLAN |
-				RTE_MBUF_F_TX_TUNNEL_VXLAN_GPE)) == 0)
-		return ptid;
+	l2_vxlan = sizeof(struct txgbe_udphdr) + sizeof(struct txgbe_vxlanhdr);
+	l2_vxlan_mac = l2_vxlan + sizeof(struct rte_ether_hdr);
+	l2_vxlan_mac_vlan = l2_vxlan_mac + sizeof(struct rte_vlan_hdr);
 
-	l2_none = sizeof(struct txgbe_udphdr) + sizeof(struct txgbe_vxlanhdr);
-	l2_mac = l2_none + sizeof(struct rte_ether_hdr);
-	l2_mac_vlan = l2_mac + sizeof(struct rte_vlan_hdr);
+	l2_gre = sizeof(struct txgbe_grehdr);
+	l2_gre_mac = l2_gre + sizeof(struct rte_ether_hdr);
+	l2_gre_mac_vlan = l2_gre_mac + sizeof(struct rte_vlan_hdr);
 
-	if (tx_pkt->l2_len == l2_none)
+	if (tx_pkt->l2_len == l2_vxlan || tx_pkt->l2_len == l2_gre)
 		ptid = TXGBE_PTID_TUN_EIG;
-	else if (tx_pkt->l2_len == l2_mac)
+	else if (tx_pkt->l2_len == l2_vxlan_mac || tx_pkt->l2_len == l2_gre_mac)
 		ptid = TXGBE_PTID_TUN_EIGM;
-	else if (tx_pkt->l2_len == l2_mac_vlan)
+	else if (tx_pkt->l2_len == l2_vxlan_mac_vlan ||
+			tx_pkt->l2_len == l2_gre_mac_vlan)
 		ptid = TXGBE_PTID_TUN_EIGMV;
 
 	return ptid;
-- 
2.27.0


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

* [PATCH 03/11] net/ngbe: fix to set flow control
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
  2023-09-28  9:47 ` [PATCH 01/11] net/txgbe: add Tx queue maximum limit Jiawen Wu
  2023-09-28  9:47 ` [PATCH 02/11] net/txgbe: fix GRE tunnel packet checksum Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 04/11] net/ngbe: prevent the NIC from slowing down link speed Jiawen Wu
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix flow control high/low water limit.

Fixes: f40e9f0e2278 ("net/ngbe: support flow control")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/base/ngbe_type.h | 40 ++++++++++++++
 drivers/net/ngbe/ngbe_ethdev.c    | 89 +++++++++++++++++++++++++++++++
 2 files changed, 129 insertions(+)

diff --git a/drivers/net/ngbe/base/ngbe_type.h b/drivers/net/ngbe/base/ngbe_type.h
index 37be288a74..8a7d2cd331 100644
--- a/drivers/net/ngbe/base/ngbe_type.h
+++ b/drivers/net/ngbe/base/ngbe_type.h
@@ -116,6 +116,46 @@ struct ngbe_fc_info {
 	enum ngbe_fc_mode requested_mode; /* FC mode requested by caller */
 };
 
+/* Flow Control Data Sheet defined values
+ * Calculation and defines taken from 802.1bb Annex O
+ */
+/* BitTimes (BT) conversion */
+#define NGBE_BT2KB(BT)         (((BT) + (8 * 1024 - 1)) / (8 * 1024))
+#define NGBE_B2BT(BT)          ((BT) * 8)
+
+/* Calculate Delay to respond to PFC */
+#define NGBE_PFC_D     672
+
+/* Calculate Cable Delay */
+#define NGBE_CABLE_DC  5556 /* Delay Copper */
+
+/* Calculate Interface Delay */
+#define NGBE_PHY_D     12800
+#define NGBE_MAC_D     4096
+#define NGBE_XAUI_D    (2 * 1024)
+
+#define NGBE_ID        (NGBE_MAC_D + NGBE_XAUI_D + NGBE_PHY_D)
+
+/* Calculate Delay incurred from higher layer */
+#define NGBE_HD        6144
+
+/* Calculate PCI Bus delay for low thresholds */
+#define NGBE_PCI_DELAY 10000
+
+/* Calculate delay value in bit times */
+#define NGBE_DV(_max_frame_link, _max_frame_tc) \
+			((36 * \
+			  (NGBE_B2BT(_max_frame_link) + \
+			   NGBE_PFC_D + \
+			   (2 * NGBE_CABLE_DC) + \
+			   (2 * NGBE_ID) + \
+			   NGBE_HD) / 25 + 1) + \
+			 2 * NGBE_B2BT(_max_frame_tc))
+
+#define NGBE_LOW_DV(_max_frame_tc) \
+			(2 * ((2 * NGBE_B2BT(_max_frame_tc) + \
+			      (36 * NGBE_PCI_DELAY / 25) + 1)))
+
 /* Statistics counters collected by the MAC */
 /* PB[] RxTx */
 struct ngbe_pb_stats {
diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index af77081d9a..039c3c35a8 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -90,6 +90,7 @@ static int ngbe_dev_misc_interrupt_setup(struct rte_eth_dev *dev);
 static int ngbe_dev_rxq_interrupt_setup(struct rte_eth_dev *dev);
 static void ngbe_dev_interrupt_handler(void *param);
 static void ngbe_configure_msix(struct rte_eth_dev *dev);
+static void ngbe_pbthresh_set(struct rte_eth_dev *dev);
 
 #define NGBE_SET_HWSTRIP(h, q) do {\
 		uint32_t idx = (q) / (sizeof((h)->bitmap[0]) * NBBY); \
@@ -1037,6 +1038,7 @@ ngbe_dev_start(struct rte_eth_dev *dev)
 	}
 
 	hw->mac.setup_pba(hw);
+	ngbe_pbthresh_set(dev);
 	ngbe_configure_port(dev);
 
 	err = ngbe_dev_rxtx_start(dev);
@@ -2386,6 +2388,93 @@ ngbe_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	return -EIO;
 }
 
+/* Additional bittime to account for NGBE framing */
+#define NGBE_ETH_FRAMING 20
+
+/*
+ * ngbe_fc_hpbthresh_set - calculate high water mark for flow control
+ *
+ * @dv_id: device interface delay
+ * @pb: packet buffer to calculate
+ */
+static s32
+ngbe_fc_hpbthresh_set(struct rte_eth_dev *dev)
+{
+	struct ngbe_hw *hw = ngbe_dev_hw(dev);
+	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+	u32 max_frame_size, tc, dv_id, rx_pb;
+	s32 kb, marker;
+
+	/* Calculate max LAN frame size */
+	max_frame_size = rd32m(hw, NGBE_FRMSZ, NGBE_FRMSZ_MAX_MASK);
+	tc = max_frame_size + NGBE_ETH_FRAMING;
+
+	/* Calculate delay value for device */
+	dv_id = NGBE_DV(tc, tc);
+
+	/* Loopback switch introduces additional latency */
+	if (pci_dev->max_vfs)
+		dv_id += NGBE_B2BT(tc);
+
+	/* Delay value is calculated in bit times convert to KB */
+	kb = NGBE_BT2KB(dv_id);
+	rx_pb = rd32(hw, NGBE_PBRXSIZE) >> 10;
+
+	marker = rx_pb - kb;
+
+	/* It is possible that the packet buffer is not large enough
+	 * to provide required headroom. In this case throw an error
+	 * to user and do the best we can.
+	 */
+	if (marker < 0) {
+		PMD_DRV_LOG(WARNING, "Packet Buffer can not provide enough headroom to support flow control.");
+		marker = tc + 1;
+	}
+
+	return marker;
+}
+
+/*
+ * ngbe_fc_lpbthresh_set - calculate low water mark for for flow control
+ *
+ * @dv_id: device interface delay
+ */
+static s32
+ngbe_fc_lpbthresh_set(struct rte_eth_dev *dev)
+{
+	struct ngbe_hw *hw = ngbe_dev_hw(dev);
+	u32 max_frame_size, tc, dv_id;
+	s32 kb;
+
+	/* Calculate max LAN frame size */
+	max_frame_size = rd32m(hw, NGBE_FRMSZ, NGBE_FRMSZ_MAX_MASK);
+	tc = max_frame_size + NGBE_ETH_FRAMING;
+
+	/* Calculate delay value for device */
+	dv_id = NGBE_LOW_DV(tc);
+
+	/* Delay value is calculated in bit times convert to KB */
+	kb = NGBE_BT2KB(dv_id);
+
+	return kb;
+}
+
+/*
+ * ngbe_pbthresh_setup - calculate and setup high low water marks
+ */
+static void
+ngbe_pbthresh_set(struct rte_eth_dev *dev)
+{
+	struct ngbe_hw *hw = ngbe_dev_hw(dev);
+
+	hw->fc.high_water = ngbe_fc_hpbthresh_set(dev);
+	hw->fc.low_water = ngbe_fc_lpbthresh_set(dev);
+
+	/* Low water marks must not be larger than high water marks */
+	if (hw->fc.low_water > hw->fc.high_water)
+		hw->fc.low_water = 0;
+}
+
 int
 ngbe_dev_rss_reta_update(struct rte_eth_dev *dev,
 			  struct rte_eth_rss_reta_entry64 *reta_conf,
-- 
2.27.0


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

* [PATCH 04/11] net/ngbe: prevent the NIC from slowing down link speed
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (2 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 03/11] net/ngbe: fix to set flow control Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 05/11] net/txgbe: reconfigure MAC Rx when link update Jiawen Wu
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

When the signal quality is bad, the internal PHY may slow down to 100M.
Fix this weird behavior by setting dis fall 100M bit.

Fixes: 696a82117875 ("net/ngbe: redesign internal PHY init flow")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/base/ngbe_phy_rtl.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ngbe/base/ngbe_phy_rtl.c b/drivers/net/ngbe/base/ngbe_phy_rtl.c
index b0eb6c97c0..ba63a8058a 100644
--- a/drivers/net/ngbe/base/ngbe_phy_rtl.c
+++ b/drivers/net/ngbe/base/ngbe_phy_rtl.c
@@ -148,6 +148,11 @@ s32 ngbe_init_phy_rtl(struct ngbe_hw *hw)
 	hw->phy.write_reg(hw, 27, 0xa42, 0x8011);
 	hw->phy.write_reg(hw, 28, 0xa42, 0x5737);
 
+	/* Disable fall to 100m if signal is not good */
+	hw->phy.read_reg(hw, 17, 0xa44, &value);
+	value &= ~0x8;
+	hw->phy.write_reg(hw, 17, 0xa44, value);
+
 	hw->phy.write_reg(hw, RTL_SCR, 0xa46, RTL_SCR_EXTINI);
 	hw->phy.read_reg(hw, RTL_SCR, 0xa46, &value);
 	if (!(value & RTL_SCR_EXTINI)) {
-- 
2.27.0


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

* [PATCH 05/11] net/txgbe: reconfigure MAC Rx when link update
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (3 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 04/11] net/ngbe: prevent the NIC from slowing down link speed Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 06/11] net/ngbe: " Jiawen Wu
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix the bug that after setting flow control parameters, link status
change (for example, hot-plug SFP module) causes the port to no longer
receive packets.

Fixes: 0c061eadec59 ("net/txgbe: add link status change")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 479cd810f8..e789e34c01 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -2957,6 +2957,11 @@ txgbe_dev_link_update_share(struct rte_eth_dev *dev,
 		break;
 	}
 
+	/* Re configure MAC RX */
+	if (hw->mac.type == txgbe_mac_raptor)
+		wr32m(hw, TXGBE_MACRXFLT, TXGBE_MACRXFLT_PROMISC,
+			TXGBE_MACRXFLT_PROMISC);
+
 	return rte_eth_linkstatus_set(dev, &link);
 }
 
-- 
2.27.0


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

* [PATCH 06/11] net/ngbe: reconfigure MAC Rx when link update
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (4 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 05/11] net/txgbe: reconfigure MAC Rx when link update Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 07/11] net/txgbe: fix to keep link down after device close Jiawen Wu
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

Fix the bug that after setting flow control parameters, link status
change (for example, set PHY power on/off) causes the port to no longer
receive packets.

Fixes: b9246b8fa280 ("net/ngbe: support link update")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/ngbe_ethdev.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index 039c3c35a8..e027e71b24 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -1961,6 +1961,8 @@ ngbe_dev_link_update_share(struct rte_eth_dev *dev,
 			wr32m(hw, NGBE_MACTXCFG, NGBE_MACTXCFG_SPEED_MASK,
 				NGBE_MACTXCFG_SPEED_1G | NGBE_MACTXCFG_TE);
 		}
+		wr32m(hw, NGBE_MACRXFLT, NGBE_MACRXFLT_PROMISC,
+			NGBE_MACRXFLT_PROMISC);
 	}
 
 	return rte_eth_linkstatus_set(dev, &link);
-- 
2.27.0


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

* [PATCH 07/11] net/txgbe: fix to keep link down after device close
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (5 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 06/11] net/ngbe: " Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 08/11] net/ngbe: " Jiawen Wu
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

When the port is closed, hardware is reset to power on. And
txgbe_dev_stop() is just returned 0 to avoid secondary calls,
so that the link led remains on. Fix this bug by adding to turn
off the copper/laser.

Fixes: e0d876ef6bbc ("net/txgbe: support device stop and close")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index e789e34c01..2dad820cb5 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1929,7 +1929,7 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	struct txgbe_tm_conf *tm_conf = TXGBE_DEV_TM_CONF(dev);
 
 	if (hw->adapter_stopped)
-		return 0;
+		goto out;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -1953,14 +1953,6 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	for (vf = 0; vfinfo != NULL && vf < pci_dev->max_vfs; vf++)
 		vfinfo[vf].clear_to_send = false;
 
-	if (hw->phy.media_type == txgbe_media_type_copper) {
-		/* Turn off the copper */
-		hw->phy.set_phy_power(hw, false);
-	} else {
-		/* Turn off the laser */
-		hw->mac.disable_tx_laser(hw);
-	}
-
 	txgbe_dev_clear_queues(dev);
 
 	/* Clear stored conf */
@@ -1991,6 +1983,16 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	dev->data->dev_started = 0;
 	hw->dev_start = false;
 
+out:
+	/* close phy to prevent reset in dev_close from restarting physical link */
+	if (hw->phy.media_type == txgbe_media_type_copper) {
+		/* Turn off the copper */
+		hw->phy.set_phy_power(hw, false);
+	} else {
+		/* Turn off the laser */
+		hw->mac.disable_tx_laser(hw);
+	}
+
 	return 0;
 }
 
-- 
2.27.0


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

* [PATCH 08/11] net/ngbe: fix to keep link down after device close
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (6 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 07/11] net/txgbe: fix to keep link down after device close Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 09/11] net/txgbe: check process type in close operation Jiawen Wu
  2023-09-28  9:47 ` [PATCH 10/11] net/ngbe: " Jiawen Wu
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

When the port is closed, hardware is reset to power on. And
ngbe_dev_stop() is just returned 0 to avoid secondary calls,
so that the link led remains on. Fix this bug by adding to turn
off the PHY power.

Fixes: 3518df5774c7 ("net/ngbe: support device start/stop")
Fixes: 708ebe7d0399 ("net/ngbe: fix external PHY power down")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/ngbe_ethdev.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index e027e71b24..9a594a1db7 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -1167,7 +1167,7 @@ ngbe_dev_stop(struct rte_eth_dev *dev)
 	int vf;
 
 	if (hw->adapter_stopped)
-		return 0;
+		goto out;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -1189,8 +1189,6 @@ ngbe_dev_stop(struct rte_eth_dev *dev)
 	for (vf = 0; vfinfo != NULL && vf < pci_dev->max_vfs; vf++)
 		vfinfo[vf].clear_to_send = false;
 
-	hw->phy.set_phy_power(hw, false);
-
 	ngbe_dev_clear_queues(dev);
 
 	/* Clear stored conf */
@@ -1217,6 +1215,10 @@ ngbe_dev_stop(struct rte_eth_dev *dev)
 	hw->adapter_stopped = true;
 	dev->data->dev_started = 0;
 
+out:
+	/* close phy to prevent reset in dev_close from restarting physical link */
+	hw->phy.set_phy_power(hw, false);
+
 	return 0;
 }
 
-- 
2.27.0


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

* [PATCH 09/11] net/txgbe: check process type in close operation
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (7 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 08/11] net/ngbe: " Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  2023-09-28  9:47 ` [PATCH 10/11] net/ngbe: " Jiawen Wu
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

The secondary processes are not allowed to release shared resources.
Only process-private resources should be freed in a secondary process.
Most of the time, there is no process-private resource,
so the close operation is just forbidden in a secondary process.

Fixes: e1698e383c2a ("net/txgbe: add device init and uninit")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 2dad820cb5..6bc231a130 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -2052,6 +2052,9 @@ txgbe_dev_close(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
 	txgbe_pf_reset_hw(hw);
 
 	ret = txgbe_dev_stop(dev);
-- 
2.27.0


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

* [PATCH 10/11] net/ngbe: check process type in close operation
       [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
                   ` (8 preceding siblings ...)
  2023-09-28  9:47 ` [PATCH 09/11] net/txgbe: check process type in close operation Jiawen Wu
@ 2023-09-28  9:47 ` Jiawen Wu
  9 siblings, 0 replies; 10+ messages in thread
From: Jiawen Wu @ 2023-09-28  9:47 UTC (permalink / raw)
  To: dev; +Cc: Jiawen Wu, stable

The secondary processes are not allowed to release shared resources.
Only process-private resources should be freed in a secondary process.
Most of the time, there is no process-private resource,
so the close operation is just forbidden in a secondary process.

Fixes: cc63194e89cb ("net/ngbe: support close and reset device")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/ngbe/ngbe_ethdev.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index 9a594a1db7..23daf306de 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -1262,6 +1262,9 @@ ngbe_dev_close(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
 	ngbe_pf_reset_hw(hw);
 
 	ngbe_dev_stop(dev);
-- 
2.27.0


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

end of thread, other threads:[~2023-09-28  9:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20230928094758.1076236-1-jiawenwu@trustnetic.com>
2023-09-28  9:47 ` [PATCH 01/11] net/txgbe: add Tx queue maximum limit Jiawen Wu
2023-09-28  9:47 ` [PATCH 02/11] net/txgbe: fix GRE tunnel packet checksum Jiawen Wu
2023-09-28  9:47 ` [PATCH 03/11] net/ngbe: fix to set flow control Jiawen Wu
2023-09-28  9:47 ` [PATCH 04/11] net/ngbe: prevent the NIC from slowing down link speed Jiawen Wu
2023-09-28  9:47 ` [PATCH 05/11] net/txgbe: reconfigure MAC Rx when link update Jiawen Wu
2023-09-28  9:47 ` [PATCH 06/11] net/ngbe: " Jiawen Wu
2023-09-28  9:47 ` [PATCH 07/11] net/txgbe: fix to keep link down after device close Jiawen Wu
2023-09-28  9:47 ` [PATCH 08/11] net/ngbe: " Jiawen Wu
2023-09-28  9:47 ` [PATCH 09/11] net/txgbe: check process type in close operation Jiawen Wu
2023-09-28  9:47 ` [PATCH 10/11] net/ngbe: " Jiawen Wu

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).