bnxt_en: Refactor TX ring allocation logic
authorMichael Chan <michael.chan@broadcom.com>
Thu, 13 Feb 2025 01:12:31 +0000 (17:12 -0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 15 Feb 2025 03:50:22 +0000 (19:50 -0800)
Add a new bnxt_hwrm_tx_ring_alloc() function to handle allocating
a transmit ring.  This will be useful later in the series.

Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://patch.msgid.link/20250213011240.1640031-4-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 0e16ea823fbdb7e458b7d2a1671f74a1c9c242c2..8ab7345acb0acc96d0335abcd1b5cd53f57ca019 100644 (file)
@@ -7218,6 +7218,20 @@ static int bnxt_hwrm_cp_ring_alloc_p5(struct bnxt *bp,
        return 0;
 }
 
+static int bnxt_hwrm_tx_ring_alloc(struct bnxt *bp,
+                                  struct bnxt_tx_ring_info *txr, u32 tx_idx)
+{
+       struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
+       const u32 type = HWRM_RING_ALLOC_TX;
+       int rc;
+
+       rc = hwrm_ring_alloc_send_msg(bp, ring, type, tx_idx);
+       if (rc)
+               return rc;
+       bnxt_set_db(bp, &txr->tx_db, type, tx_idx, ring->fw_ring_id);
+       return 0;
+}
+
 static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
 {
        bool agg_rings = !!(bp->flags & BNXT_FLAG_AGG_RINGS);
@@ -7254,23 +7268,17 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
                }
        }
 
-       type = HWRM_RING_ALLOC_TX;
        for (i = 0; i < bp->tx_nr_rings; i++) {
                struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
-               struct bnxt_ring_struct *ring;
-               u32 map_idx;
 
                if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS) {
                        rc = bnxt_hwrm_cp_ring_alloc_p5(bp, txr->tx_cpr);
                        if (rc)
                                goto err_out;
                }
-               ring = &txr->tx_ring_struct;
-               map_idx = i;
-               rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
+               rc = bnxt_hwrm_tx_ring_alloc(bp, txr, i);
                if (rc)
                        goto err_out;
-               bnxt_set_db(bp, &txr->tx_db, type, map_idx, ring->fw_ring_id);
        }
 
        for (i = 0; i < bp->rx_nr_rings; i++) {