Skip to content

Commit b1b66ae

Browse files
hgao656kuba-moo
authored andcommitted
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>
1 parent 07e5c4e commit b1b66ae

File tree

4 files changed

+36
-12
lines changed

4 files changed

+36
-12
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9117,10 +9117,18 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
91179117
ena = 0;
91189118
if ((bp->flags & BNXT_FLAG_ROCE_CAP) && !is_kdump_kernel()) {
91199119
pg_lvl = 2;
9120-
extra_qps = min_t(u32, 65536, max_qps - l2_qps - qp1_qps);
9121-
/* allocate extra qps if fw supports RoCE fast qp destroy feature */
9122-
extra_qps += fast_qpmd_qps;
9123-
extra_srqs = min_t(u32, 8192, max_srqs - srqs);
9120+
if (BNXT_SW_RES_LMT(bp)) {
9121+
extra_qps = max_qps - l2_qps - qp1_qps;
9122+
extra_srqs = max_srqs - srqs;
9123+
} else {
9124+
extra_qps = min_t(u32, 65536,
9125+
max_qps - l2_qps - qp1_qps);
9126+
/* allocate extra qps if fw supports RoCE fast qp
9127+
* destroy feature
9128+
*/
9129+
extra_qps += fast_qpmd_qps;
9130+
extra_srqs = min_t(u32, 8192, max_srqs - srqs);
9131+
}
91249132
if (fast_qpmd_qps)
91259133
ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_QP_FAST_QPMD;
91269134
}
@@ -9156,14 +9164,20 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
91569164
goto skip_rdma;
91579165

91589166
ctxm = &ctx->ctx_arr[BNXT_CTX_MRAV];
9159-
/* 128K extra is needed to accommodate static AH context
9160-
* allocation by f/w.
9161-
*/
9162-
num_mr = min_t(u32, ctxm->max_entries / 2, 1024 * 256);
9163-
num_ah = min_t(u32, num_mr, 1024 * 128);
9164-
ctxm->split_entry_cnt = BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1;
9165-
if (!ctxm->mrav_av_entries || ctxm->mrav_av_entries > num_ah)
9166-
ctxm->mrav_av_entries = num_ah;
9167+
if (BNXT_SW_RES_LMT(bp) &&
9168+
ctxm->split_entry_cnt == BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1) {
9169+
num_ah = ctxm->mrav_av_entries;
9170+
num_mr = ctxm->max_entries - num_ah;
9171+
} else {
9172+
/* 128K extra is needed to accommodate static AH context
9173+
* allocation by f/w.
9174+
*/
9175+
num_mr = min_t(u32, ctxm->max_entries / 2, 1024 * 256);
9176+
num_ah = min_t(u32, num_mr, 1024 * 128);
9177+
ctxm->split_entry_cnt = BNXT_CTX_MRAV_AV_SPLIT_ENTRY + 1;
9178+
if (!ctxm->mrav_av_entries || ctxm->mrav_av_entries > num_ah)
9179+
ctxm->mrav_av_entries = num_ah;
9180+
}
91679181

91689182
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, num_mr + num_ah, 2);
91699183
if (rc)
@@ -9470,6 +9484,9 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
94709484
bp->flags |= BNXT_FLAG_UDP_GSO_CAP;
94719485
if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_TX_PKT_TS_CMPL_SUPPORTED)
94729486
bp->fw_cap |= BNXT_FW_CAP_TX_TS_CMP;
9487+
if (flags_ext2 &
9488+
FUNC_QCAPS_RESP_FLAGS_EXT2_SW_MAX_RESOURCE_LIMITS_SUPPORTED)
9489+
bp->fw_cap |= BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS;
94739490
if (BNXT_PF(bp) &&
94749491
(flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_ROCE_VF_RESOURCE_MGMT_SUPPORTED))
94759492
bp->fw_cap |= BNXT_FW_CAP_ROCE_VF_RESC_MGMT_SUPPORTED;

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2482,6 +2482,7 @@ struct bnxt {
24822482
#define BNXT_FW_CAP_CFA_NTUPLE_RX_EXT_IP_PROTO BIT_ULL(38)
24832483
#define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V3 BIT_ULL(39)
24842484
#define BNXT_FW_CAP_VNIC_RE_FLUSH BIT_ULL(40)
2485+
#define BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS BIT_ULL(41)
24852486

24862487
u32 fw_dbg_cap;
24872488

@@ -2501,6 +2502,8 @@ struct bnxt {
25012502
((bp)->fw_cap & BNXT_FW_CAP_ENABLE_RDMA_SRIOV)
25022503
#define BNXT_ROCE_VF_RESC_CAP(bp) \
25032504
((bp)->fw_cap & BNXT_FW_CAP_ROCE_VF_RESC_MGMT_SUPPORTED)
2505+
#define BNXT_SW_RES_LMT(bp) \
2506+
((bp)->fw_cap & BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS)
25042507

25052508
u32 hwrm_spec_code;
25062509
u16 hwrm_cmd_seq;

drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,8 @@ static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp)
416416
edev->flags |= BNXT_EN_FLAG_VF;
417417
if (BNXT_ROCE_VF_RESC_CAP(bp))
418418
edev->flags |= BNXT_EN_FLAG_ROCE_VF_RES_MGMT;
419+
if (BNXT_SW_RES_LMT(bp))
420+
edev->flags |= BNXT_EN_FLAG_SW_RES_LMT;
419421

420422
edev->chip_num = bp->chip_num;
421423
edev->hw_ring_stats_size = bp->hw_ring_stats_size;

drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ struct bnxt_en_dev {
6565
#define BNXT_EN_FLAG_VF 0x10
6666
#define BNXT_EN_VF(edev) ((edev)->flags & BNXT_EN_FLAG_VF)
6767
#define BNXT_EN_FLAG_ROCE_VF_RES_MGMT 0x20
68+
#define BNXT_EN_FLAG_SW_RES_LMT 0x40
69+
#define BNXT_EN_SW_RES_LMT(edev) ((edev)->flags & BNXT_EN_FLAG_SW_RES_LMT)
6870

6971
struct bnxt_ulp *ulp_tbl;
7072
int l2_db_size; /* Doorbell BAR size in

0 commit comments

Comments
 (0)