* [PATCH v4 0/4] Wangxun fixes and new features
[not found] <20260617105959.10764-1-zaiyuwang@trustnetic.om>
@ 2026-06-30 11:16 ` Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 1/4] net/ngbe: implement USO support Zaiyu Wang
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-06-30 11:16 UTC (permalink / raw)
To: dev; +Cc: Zaiyu Wang
This patchset introduces three new features and critical fixes for our
recent release cycle.
Patches 1-2 add support for UDP Segmentation Offload (USO) to improve
large-packet transmission performance for UDP workloads.
Patch 3 enables VFs to sense PF ifconfig down/up events, allowing
better fault tolerance and fast recovery in virtualized environments.
Patch 4 adds the missing VF support for the Amber-Lite 40G NICs, which
was previously omitted in the initial integration.
---
v4:
- Patches 1-4: add release notes
- Patch 3: consume the mailbox message before checking the CTS flag;
separate CTS validation from link status processing by
returning early after handling a CTS-less control message;
make pf_running atomic.
---
v3:
- Patches 1-2: change from new feature to bug fix.
- Patch 3: fix link status update in txgbevf_get_pf_link_status();
extend speed mask from 0xFFF0 to 0x1FFFFE for 40G speed;
reduce msgbuf array to a single u32 variable;
correct commit message.
- Patch 4: add a cleanup note in commit message for dropping the
redundant mac type check in txgbevf_check_mac_link_vf();
remove a redundant blank line in txgbe_reset_hw_vf().
---
v2:
- Rebased on top of commit 72fdcb7bd19d to resolve conflict in
drivers/net/txgbe/base/txgbe_type.h.
- No code changes compared to v1.
---
Zaiyu Wang (4):
net/ngbe: implement USO support
net/txgbe: implement USO support
net/txgbe: add support for VF sensing PF down
net/txgbe: add VF support for Amber-Lite 40G NIC
doc/guides/rel_notes/release_26_07.rst | 21 ++++++
drivers/net/ngbe/ngbe_rxtx.c | 13 ++--
drivers/net/txgbe/base/txgbe_devids.h | 2 +
drivers/net/txgbe/base/txgbe_hw.c | 7 ++
drivers/net/txgbe/base/txgbe_regs.h | 7 +-
drivers/net/txgbe/base/txgbe_type.h | 2 +
drivers/net/txgbe/base/txgbe_vf.c | 6 +-
drivers/net/txgbe/txgbe_ethdev.c | 5 +-
drivers/net/txgbe/txgbe_ethdev_vf.c | 88 ++++++++++++++++++++++----
drivers/net/txgbe/txgbe_rxtx.c | 13 ++--
10 files changed, 136 insertions(+), 28 deletions(-)
--
2.21.0.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 1/4] net/ngbe: implement USO support
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
@ 2026-06-30 11:16 ` Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 2/4] net/txgbe: " Zaiyu Wang
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-06-30 11:16 UTC (permalink / raw)
To: dev; +Cc: Zaiyu Wang, stable, Jiawen Wu
USO (UDP Segmentation Offload), also known as UFO (UDP Fragmentation
Offload), is a hardware offload rarely seen in DPDK. Its implementation
is similar to TSO (TCP Segmentation Offload), so the driver enables
USO based on existing TSO support.
The driver has advertised RTE_ETH_TX_OFFLOAD_UDP_TSO in tx_offload_capa
since its initial integration, but the data path never implemented the
actual segmentation support. This commit fills that gap by enabling USO
in the transmit path, making the advertised capability fully functional.
Note:
USO segments UDP packets, requiring hardware to recalculate both IP
and UDP checksums due to length change. Thus, USO implicitly requires
IP and UDP checksum offloads, same as TSO.
Fixes: 9f3206140274 ("net/ngbe: support TSO")
Cc: stable@dpdk.org
Signed-off-by: Zaiyu Wang <zaiyuwang@trustnetic.com>
---
doc/guides/rel_notes/release_26_07.rst | 7 +++++++
drivers/net/ngbe/ngbe_rxtx.c | 13 ++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index 4ca0a9ac77..c5a168fdc9 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -177,6 +177,13 @@ New Features
Added AGENTS.md file for AI review
and supporting scripts to review patches and documentation.
+* **Updated Wangxun ngbe driver.**
+
+ * Implemented UDP Segmentation Offload (USO) in the transmit path.
+ The ``RTE_ETH_TX_OFFLOAD_UDP_TSO`` capability was advertised since the
+ driver's initial integration but the data path was missing; it is now
+ functional.
+
Removed Items
-------------
diff --git a/drivers/net/ngbe/ngbe_rxtx.c b/drivers/net/ngbe/ngbe_rxtx.c
index 91e215694c..a1389de9c0 100644
--- a/drivers/net/ngbe/ngbe_rxtx.c
+++ b/drivers/net/ngbe/ngbe_rxtx.c
@@ -30,6 +30,7 @@ static const u64 NGBE_TX_OFFLOAD_MASK = (RTE_MBUF_F_TX_IP_CKSUM |
RTE_MBUF_F_TX_VLAN |
RTE_MBUF_F_TX_L4_MASK |
RTE_MBUF_F_TX_TCP_SEG |
+ RTE_MBUF_F_TX_UDP_SEG |
NGBE_TX_IEEE1588_TMST);
#define NGBE_TX_OFFLOAD_NOTSUP_MASK \
@@ -317,7 +318,7 @@ ngbe_set_xmit_ctx(struct ngbe_tx_queue *txq,
type_tucmd_mlhl |= NGBE_TXD_PTID(tx_offload.ptid);
/* check if TCP segmentation required for this packet */
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
tx_offload_mask.l2_len |= ~0;
tx_offload_mask.l3_len |= ~0;
tx_offload_mask.l4_len |= ~0;
@@ -427,7 +428,7 @@ tx_desc_cksum_flags_to_olinfo(uint64_t ol_flags)
tmp |= NGBE_TXD_CC;
tmp |= NGBE_TXD_EIPCS;
}
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
tmp |= NGBE_TXD_CC;
/* implies IPv4 cksum */
if (ol_flags & RTE_MBUF_F_TX_IPV4)
@@ -447,7 +448,7 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
if (ol_flags & RTE_MBUF_F_TX_VLAN)
cmdtype |= NGBE_TXD_VLE;
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG)
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG))
cmdtype |= NGBE_TXD_TSE;
return cmdtype;
}
@@ -483,6 +484,8 @@ tx_desc_ol_flags_to_ptype(uint64_t oflags)
if (oflags & RTE_MBUF_F_TX_TCP_SEG)
ptype |= RTE_PTYPE_L4_TCP;
+ else if (oflags & RTE_MBUF_F_TX_UDP_SEG)
+ ptype |= RTE_PTYPE_L4_UDP;
return ptype;
}
@@ -764,7 +767,7 @@ ngbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
olinfo_status = 0;
if (tx_ol_req) {
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
/* when TSO is on, paylen in descriptor is the
* not the packet len but the tcp payload len
*/
@@ -1991,7 +1994,7 @@ ngbe_get_tx_port_offloads(struct rte_eth_dev *dev)
RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
RTE_ETH_TX_OFFLOAD_TCP_TSO |
- RTE_ETH_TX_OFFLOAD_UDP_TSO |
+ RTE_ETH_TX_OFFLOAD_UDP_TSO |
RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
if (hw->is_pf)
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/4] net/txgbe: implement USO support
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 1/4] net/ngbe: implement USO support Zaiyu Wang
@ 2026-06-30 11:16 ` Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 3/4] net/txgbe: add support for VF sensing PF down Zaiyu Wang
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-06-30 11:16 UTC (permalink / raw)
To: dev; +Cc: Zaiyu Wang, stable, Jiawen Wu, Ferruh Yigit
USO (UDP Segmentation Offload), also known as UFO (UDP Fragmentation
Offload), is a hardware offload rarely seen in DPDK. Its implementation
is similar to TSO (TCP Segmentation Offload), so the driver enables
USO based on existing TSO support.
The driver has advertised RTE_ETH_TX_OFFLOAD_UDP_TSO in tx_offload_capa
since its initial integration, but the data path never implemented the
actual segmentation support. This commit fills that gap by enabling USO
in the transmit path, making the advertised capability fully functional.
Note:
USO segments UDP packets, requiring hardware to recalculate both IP
and UDP checksums due to length change. Thus, USO implicitly requires
IP and UDP checksum offloads, same as TSO.
Fixes: 86d8adc7702c ("net/txgbe: support getting device info")
Cc: stable@dpdk.org
Signed-off-by: Zaiyu Wang <zaiyuwang@trustnetic.com>
---
doc/guides/rel_notes/release_26_07.rst | 7 +++++++
drivers/net/txgbe/txgbe_rxtx.c | 13 ++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index c5a168fdc9..06cd52b777 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -184,6 +184,13 @@ New Features
driver's initial integration but the data path was missing; it is now
functional.
+* **Updated Wangxun txgbe driver.**
+
+ * Implemented UDP Segmentation Offload (USO) in the transmit path.
+ The ``RTE_ETH_TX_OFFLOAD_UDP_TSO`` capability was advertised since the
+ driver's initial integration but the data path was missing; it is now
+ functional.
+
Removed Items
-------------
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index e2cd9b8841..c4cbdbc2b4 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -58,6 +58,7 @@ static const u64 TXGBE_TX_OFFLOAD_MASK = (RTE_MBUF_F_TX_IP_CKSUM |
RTE_MBUF_F_TX_VLAN |
RTE_MBUF_F_TX_L4_MASK |
RTE_MBUF_F_TX_TCP_SEG |
+ RTE_MBUF_F_TX_UDP_SEG |
RTE_MBUF_F_TX_TUNNEL_MASK |
RTE_MBUF_F_TX_OUTER_IP_CKSUM |
RTE_MBUF_F_TX_OUTER_UDP_CKSUM |
@@ -367,7 +368,7 @@ txgbe_set_xmit_ctx(struct txgbe_tx_queue *txq,
type_tucmd_mlhl |= TXGBE_TXD_PTID(tx_offload.ptid);
/* check if TCP segmentation required for this packet */
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
tx_offload_mask.l2_len |= ~0;
tx_offload_mask.l3_len |= ~0;
tx_offload_mask.l4_len |= ~0;
@@ -517,7 +518,7 @@ tx_desc_cksum_flags_to_olinfo(uint64_t ol_flags)
tmp |= TXGBE_TXD_CC;
tmp |= TXGBE_TXD_EIPCS;
}
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
tmp |= TXGBE_TXD_CC;
/* implies IPv4 cksum */
if (ol_flags & RTE_MBUF_F_TX_IPV4)
@@ -537,7 +538,7 @@ tx_desc_ol_flags_to_cmdtype(uint64_t ol_flags)
if (ol_flags & RTE_MBUF_F_TX_VLAN)
cmdtype |= TXGBE_TXD_VLE;
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG)
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG))
cmdtype |= TXGBE_TXD_TSE;
if (ol_flags & RTE_MBUF_F_TX_MACSEC)
cmdtype |= TXGBE_TXD_LINKSEC;
@@ -587,6 +588,8 @@ tx_desc_ol_flags_to_ptype(uint64_t oflags)
if (oflags & RTE_MBUF_F_TX_TCP_SEG)
ptype |= (tun ? RTE_PTYPE_INNER_L4_TCP : RTE_PTYPE_L4_TCP);
+ else if (oflags & RTE_MBUF_F_TX_UDP_SEG)
+ ptype |= (tun ? RTE_PTYPE_INNER_L4_UDP : RTE_PTYPE_L4_UDP);
/* Tunnel */
switch (oflags & RTE_MBUF_F_TX_TUNNEL_MASK) {
@@ -1071,7 +1074,7 @@ txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
olinfo_status = 0;
if (tx_ol_req) {
- if (ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
+ if (ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_UDP_SEG)) {
/* when TSO is on, paylen in descriptor is the
* not the packet len but the tcp payload len
*/
@@ -2389,7 +2392,7 @@ txgbe_get_tx_port_offloads(struct rte_eth_dev *dev)
RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
RTE_ETH_TX_OFFLOAD_TCP_TSO |
- RTE_ETH_TX_OFFLOAD_UDP_TSO |
+ RTE_ETH_TX_OFFLOAD_UDP_TSO |
RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO |
RTE_ETH_TX_OFFLOAD_IP_TNL_TSO |
RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 3/4] net/txgbe: add support for VF sensing PF down
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 1/4] net/ngbe: implement USO support Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 2/4] net/txgbe: " Zaiyu Wang
@ 2026-06-30 11:16 ` Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 4/4] net/txgbe: add VF support for Amber-Lite 40G NIC Zaiyu Wang
2026-06-30 14:15 ` [PATCH v4 0/4] Wangxun fixes and new features Stephen Hemminger
4 siblings, 0 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-06-30 11:16 UTC (permalink / raw)
To: dev; +Cc: Zaiyu Wang, Jiawen Wu
VFs should continue normal packet Rx/Tx after PF ifconfig down/up.
When mailbox messages lack the TXGBE_VT_MSGTYPE_CTS flag, the PF is
considered down. In this state, the VF reports link down and stops
transmitting. Upon detecting the loss of CTS, the VF sends a reset
request to the PF. If the request succeeds (indicating PF recovery),
the VF triggers an RTE_ETH_EVENT_INTR_RESET event to notify the
application or users to reset the VF.
The write_posted() based VF_RESET request is the only recovery path:
the PF only marks this VF as ready (and starts sending CTS) after it
processes VF_RESET, so this request is required for the VF to recover.
write_posted() may busy-wait for the ACK in the interrupt thread, but
the PF does not send further mailbox messages once it is down, so this
blocking is not continuously triggered.
Additionally, hw->rx_loaded and hw->offset_loaded must be reset when
PF ifconfig down; otherwise, because hardware counter registers are
cleared during PF reset, the VF's software counters will overflow to
0xFFFFFFFF.
Signed-off-by: Zaiyu Wang <zaiyuwang@trustnetic.com>
---
doc/guides/rel_notes/release_26_07.rst | 5 ++
drivers/net/txgbe/base/txgbe_type.h | 1 +
drivers/net/txgbe/txgbe_ethdev.c | 4 +-
drivers/net/txgbe/txgbe_ethdev_vf.c | 86 ++++++++++++++++++++++----
4 files changed, 83 insertions(+), 13 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index 06cd52b777..46935ba872 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -190,6 +190,11 @@ New Features
The ``RTE_ETH_TX_OFFLOAD_UDP_TSO`` capability was advertised since the
driver's initial integration but the data path was missing; it is now
functional.
+ * Added support for VF sensing PF down. VFs now detect when the PF goes
+ down (via the mailbox ``TXGBE_VT_MSGTYPE_CTS`` flag) and report link
+ down. When the PF comes back, the VF triggers an
+ ``RTE_ETH_EVENT_INTR_RESET`` event so the application can reset the VF
+ and resume normal packet Rx/Tx.
Removed Items
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index ede780321f..c73a9ebcb4 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -883,6 +883,7 @@ struct txgbe_hw {
rte_atomic32_t swfw_busy;
u32 fec_mode;
u32 cur_fec_link;
+ RTE_ATOMIC(bool) pf_running;
};
struct txgbe_backplane_ability {
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 0f484dfe91..c99734cced 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -3150,7 +3150,9 @@ txgbe_dev_link_update_share(struct rte_eth_dev *dev,
hw->mac.get_link_status = true;
- if (intr->flags & TXGBE_FLAG_NEED_LINK_CONFIG)
+ if (intr->flags & TXGBE_FLAG_NEED_LINK_CONFIG ||
+ (txgbe_is_vf(hw) && !rte_atomic_load_explicit(&hw->pf_running,
+ rte_memory_order_acquire)))
return rte_eth_linkstatus_set(dev, &link);
/* check if it needs to wait to complete, if lsc interrupt is enabled */
diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
index 7a50c7a855..c57ac57141 100644
--- a/drivers/net/txgbe/txgbe_ethdev_vf.c
+++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
@@ -281,6 +281,8 @@ eth_txgbevf_dev_init(struct rte_eth_dev *eth_dev)
hw->subsystem_device_id = pci_dev->id.subsystem_device_id;
hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id;
hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
+ rte_atomic_store_explicit(&hw->pf_running, true,
+ rte_memory_order_release);
/* initialize the vfta */
memset(shadow_vfta, 0, sizeof(*shadow_vfta));
@@ -1405,10 +1407,21 @@ static s32 txgbevf_get_pf_link_status(struct rte_eth_dev *dev)
if (retval)
return 0;
+ if (!(msgbuf[0] & TXGBE_NOFITY_VF_LINK_STATUS))
+ return 0;
+
rte_eth_linkstatus_get(dev, &link);
+ if (!rte_atomic_load_explicit(&hw->pf_running,
+ rte_memory_order_acquire)) {
+ link.link_status = RTE_ETH_LINK_DOWN;
+ link.link_speed = RTE_ETH_SPEED_NUM_NONE;
+ link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
+ return rte_eth_linkstatus_set(dev, &link);
+ }
+
link_up = msgbuf[1] & TXGBE_VFSTATUS_UP;
- link_speed = (msgbuf[1] & 0xFFF0) >> 1;
+ link_speed = (msgbuf[1] & 0x1FFFFE) >> 1;
if (link_up == link.link_status && link_speed == link.link_speed)
return 0;
@@ -1434,10 +1447,23 @@ static s32 txgbevf_get_pf_link_status(struct rte_eth_dev *dev)
static void txgbevf_check_link_for_intr(struct rte_eth_dev *dev)
{
struct rte_eth_link orig_link, new_link;
+ struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
rte_eth_linkstatus_get(dev, &orig_link);
- txgbevf_dev_link_update(dev, 0);
- rte_eth_linkstatus_get(dev, &new_link);
+
+ if (rte_atomic_load_explicit(&hw->pf_running,
+ rte_memory_order_acquire)) {
+ txgbevf_dev_link_update(dev, 0);
+ rte_eth_linkstatus_get(dev, &new_link);
+ } else {
+ DEBUGOUT("PF ifconfig down, so VF link down");
+ new_link.link_status = RTE_ETH_LINK_DOWN;
+ new_link.link_speed = RTE_ETH_SPEED_NUM_NONE;
+ new_link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
+ new_link.link_autoneg = !(dev->data->dev_conf.link_speeds &
+ RTE_ETH_LINK_SPEED_FIXED);
+ rte_eth_linkstatus_set(dev, &new_link);
+ }
PMD_DRV_LOG(INFO, "orig_link: %d, new_link: %d",
orig_link.link_status, new_link.link_status);
@@ -1450,22 +1476,58 @@ static void txgbevf_check_link_for_intr(struct rte_eth_dev *dev)
static void txgbevf_mbx_process(struct rte_eth_dev *dev)
{
struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
+ struct txgbe_mbx_info *mbx = &hw->mbx;
+ u32 msgbuf = 0;
u32 in_msg = 0;
- /* peek the message first */
+ /* Peek the message first */
in_msg = rd32(hw, TXGBE_VFMBX);
- /* PF reset VF event */
- if (in_msg & TXGBE_PF_CONTROL_MSG) {
- if (in_msg & TXGBE_NOFITY_VF_LINK_STATUS) {
- txgbevf_get_pf_link_status(dev);
- } else {
- /* dummy mbx read to ack pf */
- txgbe_read_mbx(hw, &in_msg, 1, 0);
- /* check link status if pf ping vf */
+ /* PF control message */
+ if (!(in_msg & TXGBE_PF_CONTROL_MSG))
+ return;
+
+ txgbevf_get_pf_link_status(dev);
+
+ if (!(in_msg & TXGBE_VT_MSGTYPE_CTS)) {
+ /*
+ * PF is not ready for this VF (e.g. PF ifconfig down).
+ *
+ * Send VF_RESET to ask the PF to reconfigure us. The PF only
+ * marks this VF as ready (and starts sending CTS) after it
+ * processes VF_RESET, so this request is the only way to
+ * recover. If write_posted() succeeds the PF is back up and
+ * we notify the application to reset the VF; otherwise the PF
+ * is still down, so we mark it down and reset the stats
+ * baselines (hardware counters are cleared during PF reset).
+ *
+ * write_posted() may busy-wait for the ACK in the interrupt
+ * thread, but the PF does not send further mailbox messages
+ * once it is down, so this blocking is not continuously
+ * triggered.
+ */
+ int err;
+
+ msgbuf = TXGBE_VF_RESET;
+ err = mbx->write_posted(hw, &msgbuf, 1, 0);
+ if (err) {
+ rte_atomic_store_explicit(&hw->pf_running, false,
+ rte_memory_order_release);
txgbevf_check_link_for_intr(dev);
+ hw->rx_loaded = true;
+ hw->offset_loaded = true;
+ } else {
+ rte_atomic_store_explicit(&hw->pf_running, true,
+ rte_memory_order_release);
+ rte_eth_dev_callback_process(dev,
+ RTE_ETH_EVENT_INTR_RESET, NULL);
}
+ return;
}
+
+ /* Check link status if pf only ping vf */
+ if (!(in_msg & TXGBE_NOFITY_VF_LINK_STATUS))
+ txgbevf_check_link_for_intr(dev);
}
static int
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 4/4] net/txgbe: add VF support for Amber-Lite 40G NIC
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
` (2 preceding siblings ...)
2026-06-30 11:16 ` [PATCH v4 3/4] net/txgbe: add support for VF sensing PF down Zaiyu Wang
@ 2026-06-30 11:16 ` Zaiyu Wang
2026-06-30 14:15 ` [PATCH v4 0/4] Wangxun fixes and new features Stephen Hemminger
4 siblings, 0 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-06-30 11:16 UTC (permalink / raw)
To: dev; +Cc: Zaiyu Wang, Jiawen Wu
VF support for the 40G NIC was previously omitted; only the 25G VF was
added. Now add 40G VF support based on the existing 25G VF implementation,
with no major changes but only device ID adaptation.
Also, drop the redundant mac type check in txgbe_check_mac_link_vf(),
as the function now handles all VF types uniformly.
Signed-off-by: Zaiyu Wang <zaiyuwang@trustnetic.com>
---
doc/guides/rel_notes/release_26_07.rst | 2 ++
drivers/net/txgbe/base/txgbe_devids.h | 2 ++
drivers/net/txgbe/base/txgbe_hw.c | 7 +++++++
drivers/net/txgbe/base/txgbe_regs.h | 7 +++++--
drivers/net/txgbe/base/txgbe_type.h | 1 +
drivers/net/txgbe/base/txgbe_vf.c | 6 +++---
drivers/net/txgbe/txgbe_ethdev.c | 1 +
drivers/net/txgbe/txgbe_ethdev_vf.c | 2 ++
8 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index 46935ba872..95b536a5ef 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -195,6 +195,8 @@ New Features
down. When the PF comes back, the VF triggers an
``RTE_ETH_EVENT_INTR_RESET`` event so the application can reset the VF
and resume normal packet Rx/Tx.
+ * Added VF support for the Amber-Lite 40G NIC variant, with new device
+ IDs ``0x503f`` and ``0x513f``.
Removed Items
diff --git a/drivers/net/txgbe/base/txgbe_devids.h b/drivers/net/txgbe/base/txgbe_devids.h
index b7133c7d54..f5454ffbb1 100644
--- a/drivers/net/txgbe/base/txgbe_devids.h
+++ b/drivers/net/txgbe/base/txgbe_devids.h
@@ -28,6 +28,8 @@
#define TXGBE_DEV_ID_AML_VF 0x5001
#define TXGBE_DEV_ID_AML5024_VF 0x5024
#define TXGBE_DEV_ID_AML5124_VF 0x5124
+#define TXGBE_DEV_ID_AML503F_VF 0x503f
+#define TXGBE_DEV_ID_AML513F_VF 0x513f
/*
* Subsystem IDs
diff --git a/drivers/net/txgbe/base/txgbe_hw.c b/drivers/net/txgbe/base/txgbe_hw.c
index 0f3db3a1ad..21465d68ff 100644
--- a/drivers/net/txgbe/base/txgbe_hw.c
+++ b/drivers/net/txgbe/base/txgbe_hw.c
@@ -2543,6 +2543,7 @@ s32 txgbe_init_shared_code(struct txgbe_hw *hw)
break;
case txgbe_mac_sp_vf:
case txgbe_mac_aml_vf:
+ case txgbe_mac_aml40_vf:
status = txgbe_init_ops_vf(hw);
break;
default:
@@ -2573,6 +2574,7 @@ bool txgbe_is_vf(struct txgbe_hw *hw)
switch (hw->mac.type) {
case txgbe_mac_sp_vf:
case txgbe_mac_aml_vf:
+ case txgbe_mac_aml40_vf:
return true;
default:
return false;
@@ -2620,6 +2622,11 @@ s32 txgbe_set_mac_type(struct txgbe_hw *hw)
hw->phy.media_type = txgbe_media_type_virtual;
hw->mac.type = txgbe_mac_aml_vf;
break;
+ case TXGBE_DEV_ID_AML503F_VF:
+ case TXGBE_DEV_ID_AML513F_VF:
+ hw->phy.media_type = txgbe_media_type_virtual;
+ hw->mac.type = txgbe_mac_aml40_vf;
+ break;
default:
err = TXGBE_ERR_DEVICE_NOT_SUPPORTED;
DEBUGOUT("Unsupported device id: %x", hw->device_id);
diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h
index 95c585a025..5eb92c54b6 100644
--- a/drivers/net/txgbe/base/txgbe_regs.h
+++ b/drivers/net/txgbe/base/txgbe_regs.h
@@ -1824,12 +1824,14 @@ txgbe_map_reg(struct txgbe_hw *hw, u32 reg)
switch (reg) {
case TXGBE_REG_RSSTBL:
if (hw->mac.type == txgbe_mac_sp_vf ||
- hw->mac.type == txgbe_mac_aml_vf)
+ hw->mac.type == txgbe_mac_aml_vf ||
+ hw->mac.type == txgbe_mac_aml40_vf)
reg = TXGBE_VFRSSTBL(0);
break;
case TXGBE_REG_RSSKEY:
if (hw->mac.type == txgbe_mac_sp_vf ||
- hw->mac.type == txgbe_mac_aml_vf)
+ hw->mac.type == txgbe_mac_aml_vf ||
+ hw->mac.type == txgbe_mac_aml40_vf)
reg = TXGBE_VFRSSKEY(0);
break;
default:
@@ -2012,6 +2014,7 @@ static inline void txgbe_flush(struct txgbe_hw *hw)
break;
case txgbe_mac_sp_vf:
case txgbe_mac_aml_vf:
+ case txgbe_mac_aml40_vf:
rd32(hw, TXGBE_VFSTATUS);
break;
default:
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index c73a9ebcb4..3ac4c28fd3 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -171,6 +171,7 @@ enum txgbe_mac_type {
txgbe_mac_aml40,
txgbe_mac_sp_vf,
txgbe_mac_aml_vf,
+ txgbe_mac_aml40_vf,
txgbe_num_macs
};
diff --git a/drivers/net/txgbe/base/txgbe_vf.c b/drivers/net/txgbe/base/txgbe_vf.c
index 1a8a20f104..47d9bd16ee 100644
--- a/drivers/net/txgbe/base/txgbe_vf.c
+++ b/drivers/net/txgbe/base/txgbe_vf.c
@@ -134,7 +134,8 @@ s32 txgbe_reset_hw_vf(struct txgbe_hw *hw)
}
/* amlite: bme */
- if (hw->mac.type == txgbe_mac_aml_vf)
+ if (hw->mac.type == txgbe_mac_aml_vf ||
+ hw->mac.type == txgbe_mac_aml40_vf)
wr32(hw, TXGBE_BME_AML, 0x1);
if (!timeout)
@@ -493,8 +494,7 @@ s32 txgbe_check_mac_link_vf(struct txgbe_hw *hw, u32 *speed,
/* for SFP+ modules and DA cables it can take up to 500usecs
* before the link status is correct
*/
- if ((mac->type == txgbe_mac_sp_vf ||
- mac->type == txgbe_mac_aml_vf) && wait_to_complete) {
+ if (wait_to_complete) {
if (po32m(hw, TXGBE_VFSTATUS, TXGBE_VFSTATUS_UP,
0, NULL, 5, 100))
goto out;
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index c99734cced..7c39e9f2e8 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -5229,6 +5229,7 @@ txgbe_rss_update(enum txgbe_mac_type mac_type)
case txgbe_mac_aml:
case txgbe_mac_aml40:
case txgbe_mac_aml_vf:
+ case txgbe_mac_aml40_vf:
return 1;
default:
return 0;
diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
index c57ac57141..341f62bc75 100644
--- a/drivers/net/txgbe/txgbe_ethdev_vf.c
+++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
@@ -77,6 +77,8 @@ static const struct rte_pci_id pci_id_txgbevf_map[] = {
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML_VF) },
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5024_VF) },
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5124_VF) },
+ { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML503F_VF) },
+ { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML513F_VF) },
{ .vendor_id = 0, /* sentinel */ },
};
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 0/4] Wangxun fixes and new features
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
` (3 preceding siblings ...)
2026-06-30 11:16 ` [PATCH v4 4/4] net/txgbe: add VF support for Amber-Lite 40G NIC Zaiyu Wang
@ 2026-06-30 14:15 ` Stephen Hemminger
2026-07-01 2:08 ` Zaiyu Wang
4 siblings, 1 reply; 7+ messages in thread
From: Stephen Hemminger @ 2026-06-30 14:15 UTC (permalink / raw)
To: Zaiyu Wang; +Cc: dev
On Tue, 30 Jun 2026 19:16:00 +0800
Zaiyu Wang <zaiyuwang@trustnetic.com> wrote:
> This patchset introduces three new features and critical fixes for our
> recent release cycle.
>
> Patches 1-2 add support for UDP Segmentation Offload (USO) to improve
> large-packet transmission performance for UDP workloads.
>
> Patch 3 enables VFs to sense PF ifconfig down/up events, allowing
> better fault tolerance and fast recovery in virtualized environments.
>
> Patch 4 adds the missing VF support for the Amber-Lite 40G NICs, which
> was previously omitted in the initial integration.
Applied to net-next. Had to resolve a code merge conflict from earlier
changes in net-next and also release note conflicts.
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH v4 0/4] Wangxun fixes and new features
2026-06-30 14:15 ` [PATCH v4 0/4] Wangxun fixes and new features Stephen Hemminger
@ 2026-07-01 2:08 ` Zaiyu Wang
0 siblings, 0 replies; 7+ messages in thread
From: Zaiyu Wang @ 2026-07-01 2:08 UTC (permalink / raw)
To: 'Stephen Hemminger'; +Cc: dev
> On Tue, 30 Jun 2026 19:16:00 +0800
> Zaiyu Wang <zaiyuwang@trustnetic.com> wrote:
>
> > This patchset introduces three new features and critical fixes for our
> > recent release cycle.
> >
> > Patches 1-2 add support for UDP Segmentation Offload (USO) to improve
> > large-packet transmission performance for UDP workloads.
> >
> > Patch 3 enables VFs to sense PF ifconfig down/up events, allowing
> > better fault tolerance and fast recovery in virtualized environments.
> >
> > Patch 4 adds the missing VF support for the Amber-Lite 40G NICs, which
> > was previously omitted in the initial integration.
>
> Applied to net-next. Had to resolve a code merge conflict from earlier
> changes in net-next and also release note conflicts.
>
Thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-07-01 2:08 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260617105959.10764-1-zaiyuwang@trustnetic.om>
2026-06-30 11:16 ` [PATCH v4 0/4] Wangxun fixes and new features Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 1/4] net/ngbe: implement USO support Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 2/4] net/txgbe: " Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 3/4] net/txgbe: add support for VF sensing PF down Zaiyu Wang
2026-06-30 11:16 ` [PATCH v4 4/4] net/txgbe: add VF support for Amber-Lite 40G NIC Zaiyu Wang
2026-06-30 14:15 ` [PATCH v4 0/4] Wangxun fixes and new features Stephen Hemminger
2026-07-01 2:08 ` Zaiyu Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox