[PATCH 1/4] net/bnxt: support handling PTP frames in Rx

Mohammad Shuab Siddique mohammad-shuab.siddique at broadcom.com
Mon Mar 2 18:12:33 CET 2026


From: Ajit Khaparde <ajit.khaparde at broadcom.com>

Support handling of PTP frames in the Rx path.
This feature is available in scalar mode data path.
If the Rx completion indicates a PTP timesync packet,
update the mbuf ol_flags accordingly.

This feature is not available in the compressed Rx CQE mode.

Cc: stable at dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
Signed-off-by: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
---
 drivers/net/bnxt/bnxt_rxr.c | 11 ++++++++++-
 drivers/net/bnxt/bnxt_rxr.h |  2 +-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index c94abefa01..ac4c61b850 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -724,7 +724,7 @@ bnxt_set_ol_flags(struct bnxt_rx_ring_info *rxr, struct rx_pkt_cmpl *rxcmp,
 		     RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP))
 		ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP | RTE_MBUF_F_RX_IEEE1588_TMST;
 
-	mbuf->ol_flags = ol_flags;
+	mbuf->ol_flags |= ol_flags;
 }
 
 static void
@@ -1182,6 +1182,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,
 	if (mbuf == NULL)
 		return -EBUSY;
 
+	mbuf->ol_flags = 0;
 	mbuf->data_off = RTE_PKTMBUF_HEADROOM;
 	mbuf->nb_segs = 1;
 	mbuf->next = NULL;
@@ -1199,6 +1200,14 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,
 		bnxt_parse_csum_v3(mbuf, rxcmp1);
 		bnxt_parse_pkt_type_v3(mbuf, rxcmp, rxcmp1);
 		bnxt_rx_vlan_v3(mbuf, rxcmp, rxcmp1);
+		/* Packet cannot be a PTP ethertype if it is detected as L4 */
+		if (mbuf->ol_flags & RTE_MBUF_F_RX_L4_CKSUM_GOOD)
+			mbuf->ol_flags &= ~RTE_MBUF_F_RX_IEEE1588_PTP;
+
+		/* If its a PTP frame, ptype cannot be L2_ETHER */
+		if (mbuf->ol_flags & RTE_MBUF_F_RX_IEEE1588_PTP)
+			mbuf->packet_type = RTE_PTYPE_L2_ETHER_TIMESYNC;
+
 		if (BNXT_TRUFLOW_EN(bp))
 			mark_id = bnxt_ulp_set_mark_in_mbuf_v3(rxq->bp, rxcmp1,
 							       mbuf, &vfr_flag);
diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h
index 7357ca4427..5e5496964f 100644
--- a/drivers/net/bnxt/bnxt_rxr.h
+++ b/drivers/net/bnxt/bnxt_rxr.h
@@ -535,6 +535,6 @@ bnxt_parse_csum_v3(struct rte_mbuf *mbuf, struct rx_pkt_cmpl_hi *rxcmp1)
 	uint16_t error_v2 = rte_le_to_cpu_16(v3_cmp->errors_v2);
 	uint32_t flags2 = rte_le_to_cpu_32(v3_cmp->flags2);
 
-	mbuf->ol_flags = bnxt_parse_csum_fields_v3(flags2, error_v2);
+	mbuf->ol_flags |= bnxt_parse_csum_fields_v3(flags2, error_v2);
 }
 #endif /*  _BNXT_RXR_H_ */
-- 
2.47.3



More information about the dev mailing list