[PATCH 24.11] net/bnxt: skip timed Tx pacing setup when unsupported

Mohammad Shuab Siddique mohammad-shuab.siddique at broadcom.com
Thu Jul 23 21:59:58 CEST 2026


From: Dakota Sicher <dakota.sicher at broadcom.com>

[ upstream commit edff93f638540783af448de1d40a365b9aee52a6 ]

Driver attempts to configure the TTX pacing TQM rings regardless
of firmware capabilities. When the card does not support timed TX
pacing the device fails to initialize.

Skip the TTX_PACING_TQM_RING backing store type when
BNXT_FW_CAP_TIMED_TX_PACING is not set. The capability is defined
but not set until timed TX pacing support is enabled, so the ring
type is unconditionally skipped on unaffected cards.

The HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TTX_PACING_TQM_RING
definition is not present in this branch's hsi_struct_def_dpdk.h,
so it is added here to allow this fix to build.

Fixes: fe2f715ca580 ("net/bnxt: support backing store v2")

Signed-off-by: Dakota Sicher <dakota.sicher at broadcom.com>
Signed-off-by: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
---
 drivers/net/bnxt/bnxt.h                |  1 +
 drivers/net/bnxt/bnxt_hwrm.c           | 10 ++++++++--
 drivers/net/bnxt/hsi_struct_def_dpdk.h |  3 +++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 37c81d0288..78d11624c2 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -880,6 +880,7 @@ struct bnxt {
 #define BNXT_FW_CAP_TX_COAL_CMPL	BIT(10)
 #define BNXT_FW_CAP_RX_ALL_PKT_TS	BIT(11)
 #define BNXT_FW_CAP_BACKING_STORE_V2	BIT(12)
+#define BNXT_FW_CAP_TIMED_TX_PACING	BIT(15)
 #define BNXT_FW_CAP_RX_RATE_PROFILE	BIT(17)
 #define BNXT_FW_BACKING_STORE_V2_EN(bp)	\
 	((bp)->fw_cap & BNXT_FW_CAP_BACKING_STORE_V2)
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index ca7e0f4ebf..8559158bb5 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -6828,7 +6828,10 @@ int bnxt_hwrm_func_backing_store_qcaps_v2(struct bnxt *bp)
 
 		flags = rte_le_to_cpu_32(resp->flags);
 		type = rte_le_to_cpu_16(resp->next_valid_type);
-		if (!(flags & HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID)) {
+		if (!(flags & HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID) ||
+		    (rte_le_to_cpu_16(req.type) ==
+		    HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TTX_PACING_TQM_RING &&
+		    !(bp->fw_cap & BNXT_FW_CAP_TIMED_TX_PACING))) {
 			cnt = false;
 			goto next;
 		}
@@ -6905,7 +6908,10 @@ int bnxt_hwrm_func_backing_store_types_count(struct bnxt *bp)
 		type = rte_le_to_cpu_16(resp->next_valid_type);
 		HWRM_UNLOCK();
 
-		if (flags & HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID) {
+		if ((flags & HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID) &&
+		    !(rte_le_to_cpu_16(req.type) ==
+		    HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TTX_PACING_TQM_RING &&
+		    !(bp->fw_cap & BNXT_FW_CAP_TIMED_TX_PACING))) {
 			PMD_DRV_LOG_LINE(DEBUG, "Valid types 0x%x", req.type);
 			types++;
 		}
diff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h b/drivers/net/bnxt/hsi_struct_def_dpdk.h
index 737bf2693b..0a986f4a30 100644
--- a/drivers/net/bnxt/hsi_struct_def_dpdk.h
+++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h
@@ -24457,6 +24457,9 @@ struct hwrm_func_backing_store_qcaps_v2_input {
 	/* RoCE HWRM trace. */
 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_ROCE_HWRM_TRACE \
 		UINT32_C(0x24)
+	/* TimedTx pacing TQM ring. */
+	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TTX_PACING_TQM_RING \
+		UINT32_C(0x25)
 	/* Invalid type. */
 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_INVALID \
 		UINT32_C(0xffff)
-- 
2.47.3



More information about the stable mailing list