[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