OSDN Git Service

bnxt_en: Add helper function to return the number of RSS contexts.
authorMichael Chan <michael.chan@broadcom.com>
Wed, 8 Jul 2020 11:53:56 +0000 (07:53 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 8 Jul 2020 22:21:13 +0000 (15:21 -0700)
On some chips, this varies based on the number of RX rings.  Add this
helper function and refactor the existing code to use it.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index 228ba66..3d0bb43 100644 (file)
@@ -4869,6 +4869,15 @@ static void bnxt_set_dflt_rss_indir_tbl(struct bnxt *bp)
                memset(&bp->rss_indir_tbl[i], 0, pad * sizeof(u16));
 }
 
+int bnxt_get_nr_rss_ctxs(struct bnxt *bp, int rx_rings)
+{
+       if (bp->flags & BNXT_FLAG_CHIP_P5)
+               return DIV_ROUND_UP(rx_rings, BNXT_RSS_TABLE_ENTRIES_P5);
+       if (BNXT_CHIP_TYPE_NITRO_A0(bp))
+               return 2;
+       return 1;
+}
+
 static int bnxt_hwrm_vnic_set_rss(struct bnxt *bp, u16 vnic_id, bool set_rss)
 {
        u32 i, j, max_rings;
@@ -4924,7 +4933,7 @@ static int bnxt_hwrm_vnic_set_rss_p5(struct bnxt *bp, u16 vnic_id, bool set_rss)
        req.hash_mode_flags = VNIC_RSS_CFG_REQ_HASH_MODE_FLAGS_DEFAULT;
        req.ring_grp_tbl_addr = cpu_to_le64(vnic->rss_table_dma_addr);
        req.hash_key_tbl_addr = cpu_to_le64(vnic->rss_hash_key_dma_addr);
-       nr_ctxs = DIV_ROUND_UP(bp->rx_nr_rings, 64);
+       nr_ctxs = bnxt_get_nr_rss_ctxs(bp, bp->rx_nr_rings);
        for (i = 0, k = 0; i < nr_ctxs; i++) {
                __le16 *ring_tbl = vnic->rss_table;
                int rc;
@@ -7677,7 +7686,7 @@ static int __bnxt_setup_vnic_p5(struct bnxt *bp, u16 vnic_id)
 {
        int rc, i, nr_ctxs;
 
-       nr_ctxs = DIV_ROUND_UP(bp->rx_nr_rings, 64);
+       nr_ctxs = bnxt_get_nr_rss_ctxs(bp, bp->rx_nr_rings);
        for (i = 0; i < nr_ctxs; i++) {
                rc = bnxt_hwrm_vnic_ctx_alloc(bp, vnic_id, i);
                if (rc) {
index 6de2813..5890913 100644 (file)
@@ -2039,6 +2039,7 @@ int hwrm_send_message(struct bnxt *, void *, u32, int);
 int hwrm_send_message_silent(struct bnxt *, void *, u32, int);
 int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp, unsigned long *bmap,
                            int bmap_size, bool async_only);
+int bnxt_get_nr_rss_ctxs(struct bnxt *bp, int rx_rings);
 int bnxt_hwrm_vnic_cfg(struct bnxt *bp, u16 vnic_id);
 int __bnxt_hwrm_get_tx_rings(struct bnxt *bp, u16 fid, int *tx_rings);
 int bnxt_nq_rings_in_use(struct bnxt *bp);