mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-18 12:30:31 +00:00
bnxt_en: Use FW defined resource limits for RoCE
If FW supports setting resource limits for RoCE, then just use the FW limits instead of using some fixed values in the driver. These limits will be used to allocate context memory for QP, SRQ, AH, and MR resources for RoCE. Reviewed-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Signed-off-by: Hongguang Gao <hongguang.gao@broadcom.com> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20241217182620.2454075-2-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
07e5c4eb94
commit
b1b66ae094
4 changed files with 36 additions and 12 deletions
|
@ -9117,10 +9117,18 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
|
|||
ena = 0;
|
||||
if ((bp->flags & BNXT_FLAG_ROCE_CAP) && !is_kdump_kernel()) {
|
||||
pg_lvl = 2;
|
||||
extra_qps = min_t(u32, 65536, max_qps - l2_qps - qp1_qps);
|
||||
/* allocate extra qps if fw supports RoCE fast qp destroy feature */
|
||||
extra_qps += fast_qpmd_qps;
|
||||
extra_srqs = min_t(u32, 8192, max_srqs - srqs);
|
||||
if (BNXT_SW_RES_LMT(bp)) {
|
||||
extra_qps = max_qps - l2_qps - qp1_qps;
|
||||
extra_srqs = max_srqs - srqs;
|
||||
} else {
|
||||
extra_qps = min_t(u32, 65536,
|
||||
max_qps - l2_qps - qp1_qps);
|
||||
/* allocate extra qps if fw supports RoCE fast qp
|
||||
* destroy feature
|
||||
*/
|
||||
extra_qps += fast_qpmd_qps;
|
||||
extra_srqs = min_t(u32, 8192, max_srqs - srqs);
|
||||
}
|
||||
if (fast_qpmd_qps)
|
||||
ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_QP_FAST_QPMD;
|
||||
}
|
||||
|
@ -9156,14 +9164,20 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
|
|||
goto skip_rdma;
|
||||
|
||||
ctxm = &ctx->ctx_arr[BNXT_CTX_MRAV];
|
||||
/* 128K extra is needed to accommodate static AH context
|
||||
* allocation by f/w.
|
||||
*/
|
||||
num_mr = min_t(u32, ctxm->max_entries / 2, 1024 * 256);
|
||||
num_ah = min_t(u32, num_mr, 1024 * 128);
|
||||
ctxm->split_entry_cnt = BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1;
|
||||
if (!ctxm->mrav_av_entries || ctxm->mrav_av_entries > num_ah)
|
||||
ctxm->mrav_av_entries = num_ah;
|
||||
if (BNXT_SW_RES_LMT(bp) &&
|
||||
ctxm->split_entry_cnt == BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1) {
|
||||
num_ah = ctxm->mrav_av_entries;
|
||||
num_mr = ctxm->max_entries - num_ah;
|
||||
} else {
|
||||
/* 128K extra is needed to accommodate static AH context
|
||||
* allocation by f/w.
|
||||
*/
|
||||
num_mr = min_t(u32, ctxm->max_entries / 2, 1024 * 256);
|
||||
num_ah = min_t(u32, num_mr, 1024 * 128);
|
||||
ctxm->split_entry_cnt = BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1;
|
||||
if (!ctxm->mrav_av_entries || ctxm->mrav_av_entries > num_ah)
|
||||
ctxm->mrav_av_entries = num_ah;
|
||||
}
|
||||
|
||||
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, num_mr + num_ah, 2);
|
||||
if (rc)
|
||||
|
@ -9470,6 +9484,9 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
|
|||
bp->flags |= BNXT_FLAG_UDP_GSO_CAP;
|
||||
if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_TX_PKT_TS_CMPL_SUPPORTED)
|
||||
bp->fw_cap |= BNXT_FW_CAP_TX_TS_CMP;
|
||||
if (flags_ext2 &
|
||||
FUNC_QCAPS_RESP_FLAGS_EXT2_SW_MAX_RESOURCE_LIMITS_SUPPORTED)
|
||||
bp->fw_cap |= BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS;
|
||||
if (BNXT_PF(bp) &&
|
||||
(flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_ROCE_VF_RESOURCE_MGMT_SUPPORTED))
|
||||
bp->fw_cap |= BNXT_FW_CAP_ROCE_VF_RESC_MGMT_SUPPORTED;
|
||||
|
|
|
@ -2482,6 +2482,7 @@ struct bnxt {
|
|||
#define BNXT_FW_CAP_CFA_NTUPLE_RX_EXT_IP_PROTO BIT_ULL(38)
|
||||
#define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V3 BIT_ULL(39)
|
||||
#define BNXT_FW_CAP_VNIC_RE_FLUSH BIT_ULL(40)
|
||||
#define BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS BIT_ULL(41)
|
||||
|
||||
u32 fw_dbg_cap;
|
||||
|
||||
|
@ -2501,6 +2502,8 @@ struct bnxt {
|
|||
((bp)->fw_cap & BNXT_FW_CAP_ENABLE_RDMA_SRIOV)
|
||||
#define BNXT_ROCE_VF_RESC_CAP(bp) \
|
||||
((bp)->fw_cap & BNXT_FW_CAP_ROCE_VF_RESC_MGMT_SUPPORTED)
|
||||
#define BNXT_SW_RES_LMT(bp) \
|
||||
((bp)->fw_cap & BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS)
|
||||
|
||||
u32 hwrm_spec_code;
|
||||
u16 hwrm_cmd_seq;
|
||||
|
|
|
@ -416,6 +416,8 @@ static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp)
|
|||
edev->flags |= BNXT_EN_FLAG_VF;
|
||||
if (BNXT_ROCE_VF_RESC_CAP(bp))
|
||||
edev->flags |= BNXT_EN_FLAG_ROCE_VF_RES_MGMT;
|
||||
if (BNXT_SW_RES_LMT(bp))
|
||||
edev->flags |= BNXT_EN_FLAG_SW_RES_LMT;
|
||||
|
||||
edev->chip_num = bp->chip_num;
|
||||
edev->hw_ring_stats_size = bp->hw_ring_stats_size;
|
||||
|
|
|
@ -65,6 +65,8 @@ struct bnxt_en_dev {
|
|||
#define BNXT_EN_FLAG_VF 0x10
|
||||
#define BNXT_EN_VF(edev) ((edev)->flags & BNXT_EN_FLAG_VF)
|
||||
#define BNXT_EN_FLAG_ROCE_VF_RES_MGMT 0x20
|
||||
#define BNXT_EN_FLAG_SW_RES_LMT 0x40
|
||||
#define BNXT_EN_SW_RES_LMT(edev) ((edev)->flags & BNXT_EN_FLAG_SW_RES_LMT)
|
||||
|
||||
struct bnxt_ulp *ulp_tbl;
|
||||
int l2_db_size; /* Doorbell BAR size in
|
||||
|
|
Loading…
Add table
Reference in a new issue