net/bnxt: fix PF resource query

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: f8168ca0e6 ("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>
This commit is contained in:
Somnath Kotur 2020-12-03 12:08:47 +05:30 committed by Ferruh Yigit
parent 5f0f9a45ac
commit 70517a3a8f
2 changed files with 35 additions and 8 deletions

View 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 */

View 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;
}