From: Dakota Sicher <[email protected]>

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.

Fixes: fe2f715ca580 ("net/bnxt: support backing store v2")
Cc: [email protected]

Signed-off-by: Dakota Sicher <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
 drivers/net/bnxt/bnxt.h      |  1 +
 drivers/net/bnxt/bnxt_hwrm.c | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 5ae4e620a4..b2736befd1 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -887,6 +887,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_CAP_MULTI_DB           BIT(18)
 #define BNXT_FW_BACKING_STORE_V2_EN(bp)        \
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 4a5b83d29c..273561aabb 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -6625,7 +6625,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;
                }
@@ -6702,7 +6705,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++;
                }
-- 
2.47.3

Reply via email to