net/bnxt: fix PF resource query
authorSomnath Kotur <somnath.kotur@broadcom.com>
Thu, 3 Dec 2020 06:38:47 +0000 (12:08 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Jan 2021 15:03:05 +0000 (16:03 +0100)
This cmd should be called by every driver after 'hwrm_func_cfg'
to get the actual number of resources allocated by the HWRM.
The values returned in the cmd are the max values for that PF.

Also, now that the max values for the PF are computed in probe itself,
no need to invoke FUNC_QCAPs or any other cmd in dev_configure_op()
as that would just override the actual max values obtained above.

Fixes: f8168ca0e690 ("net/bnxt: support thor controller")
Cc: stable@dpdk.org
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/bnxt/bnxt_hwrm.c

index bf89635..21d9e26 100644 (file)
@@ -1071,13 +1071,6 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
                }
 
                pthread_mutex_unlock(&bp->def_cp_lock);
-       } else {
-               /* legacy driver needs to get updated values */
-               rc = bnxt_hwrm_func_qcaps(bp);
-               if (rc) {
-                       PMD_DRV_LOG(ERR, "hwrm func qcaps fail:%d\n", rc);
-                       return rc;
-               }
        }
 
        /* Inherit new configurations */
index cee2656..a3eb133 100644 (file)
@@ -3456,6 +3456,35 @@ static int bnxt_update_max_resources(struct bnxt *bp,
        return 0;
 }
 
+/* Update the PF resource values based on how many resources
+ * got allocated to it.
+ */
+static int bnxt_update_max_resources_pf_only(struct bnxt *bp)
+{
+       struct hwrm_func_qcfg_input req = {0};
+       struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
+       int rc;
+
+       /* Get the actual allocated values now */
+       HWRM_PREP(&req, HWRM_FUNC_QCFG, BNXT_USE_CHIMP_MB);
+       req.fid = rte_cpu_to_le_16(0xffff);
+       rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
+       HWRM_CHECK_RESULT();
+
+       bp->max_rsscos_ctx = rte_le_to_cpu_16(resp->alloc_rsscos_ctx);
+       bp->max_stat_ctx = rte_le_to_cpu_16(resp->alloc_stat_ctx);
+       bp->max_cp_rings = rte_le_to_cpu_16(resp->alloc_cmpl_rings);
+       bp->max_tx_rings = rte_le_to_cpu_16(resp->alloc_tx_rings);
+       bp->max_rx_rings = rte_le_to_cpu_16(resp->alloc_rx_rings);
+       bp->max_l2_ctx = rte_le_to_cpu_16(resp->alloc_l2_ctx);
+       bp->max_ring_grps = rte_le_to_cpu_16(resp->alloc_hw_ring_grps);
+       bp->max_vnics = rte_le_to_cpu_16(resp->alloc_vnics);
+
+       HWRM_UNLOCK();
+
+       return 0;
+}
+
 int bnxt_hwrm_func_qcfg_current_vf_vlan(struct bnxt *bp, int vf)
 {
        struct hwrm_func_qcfg_input req = {0};
@@ -3555,8 +3584,13 @@ int bnxt_hwrm_allocate_pf_only(struct bnxt *bp)
                  HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE);
        bp->pf->func_cfg_flags |=
                HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE;
+
        rc = bnxt_hwrm_pf_func_cfg(bp, &pf_resc);
-       rc = __bnxt_hwrm_func_qcaps(bp);
+       if (rc)
+               return rc;
+
+       rc = bnxt_update_max_resources_pf_only(bp);
+
        return rc;
 }