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