Skip to content

Commit b098dc5

Browse files
Michael Chankuba-moo
authored andcommitted
bnxt_en: Add bnxt_setup_ctxm_pg_tbls() helper function
In bnxt_alloc_ctx_mem(), the logic to set up the context memory entries and to allocate the context memory tables is done repetitively. Add a helper function to simplify the code. The setup of the Fast Path TQM entries relies on some information from the Slow Path TQM entries. Copy the SP_TQM entries to the FP_TQM entries to simplify the logic. Reviewed-by: Andy Gospodarek <[email protected]> Signed-off-by: Michael Chan <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 2ad67ae commit b098dc5

File tree

1 file changed

+59
-74
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+59
-74
lines changed

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

Lines changed: 59 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -7307,6 +7307,7 @@ static int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)
73077307
ctx->tqm_fp_rings_count = BNXT_MAX_TQM_FP_RINGS;
73087308

73097309
ctxm = &ctx->ctx_arr[BNXT_CTX_FTQM];
7310+
memcpy(ctxm, &ctx->ctx_arr[BNXT_CTX_STQM], sizeof(*ctxm));
73107311
ctxm->instance_bmap = (1 << ctx->tqm_fp_rings_count) - 1;
73117312

73127313
rc = bnxt_alloc_all_ctx_pg_info(bp, BNXT_CTX_MAX);
@@ -7574,6 +7575,30 @@ static void bnxt_free_ctx_pg_tbls(struct bnxt *bp,
75747575
ctx_pg->nr_pages = 0;
75757576
}
75767577

7578+
static int bnxt_setup_ctxm_pg_tbls(struct bnxt *bp,
7579+
struct bnxt_ctx_mem_type *ctxm, u32 entries,
7580+
u8 pg_lvl)
7581+
{
7582+
struct bnxt_ctx_pg_info *ctx_pg = ctxm->pg_info;
7583+
int i, rc = 0, n = 1;
7584+
u32 mem_size;
7585+
7586+
if (!ctxm->entry_size || !ctx_pg)
7587+
return -EINVAL;
7588+
if (ctxm->instance_bmap)
7589+
n = hweight32(ctxm->instance_bmap);
7590+
if (ctxm->entry_multiple)
7591+
entries = roundup(entries, ctxm->entry_multiple);
7592+
entries = clamp_t(u32, entries, ctxm->min_entries, ctxm->max_entries);
7593+
mem_size = entries * ctxm->entry_size;
7594+
for (i = 0; i < n && !rc; i++) {
7595+
ctx_pg[i].entries = entries;
7596+
rc = bnxt_alloc_ctx_pg_tbls(bp, &ctx_pg[i], mem_size, pg_lvl,
7597+
ctxm->init_value ? ctxm : NULL);
7598+
}
7599+
return rc;
7600+
}
7601+
75777602
void bnxt_free_ctx_mem(struct bnxt *bp)
75787603
{
75797604
struct bnxt_ctx_mem_info *ctx = bp->ctx;
@@ -7605,13 +7630,11 @@ void bnxt_free_ctx_mem(struct bnxt *bp)
76057630

76067631
static int bnxt_alloc_ctx_mem(struct bnxt *bp)
76077632
{
7608-
struct bnxt_ctx_pg_info *ctx_pg;
76097633
struct bnxt_ctx_mem_type *ctxm;
76107634
struct bnxt_ctx_mem_info *ctx;
76117635
u32 l2_qps, qp1_qps, max_qps;
7612-
u32 mem_size, ena, entries;
7613-
u32 entries_sp, min;
7614-
u32 srqs, max_srqs;
7636+
u32 ena, entries_sp, entries;
7637+
u32 srqs, max_srqs, min;
76157638
u32 num_mr, num_ah;
76167639
u32 extra_srqs = 0;
76177640
u32 extra_qps = 0;
@@ -7642,61 +7665,37 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
76427665
}
76437666

76447667
ctxm = &ctx->ctx_arr[BNXT_CTX_QP];
7645-
ctx_pg = ctxm->pg_info;
7646-
ctx_pg->entries = l2_qps + qp1_qps + extra_qps;
7647-
if (ctxm->entry_size) {
7648-
mem_size = ctxm->entry_size * ctx_pg->entries;
7649-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, ctxm);
7650-
if (rc)
7651-
return rc;
7652-
}
7668+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, l2_qps + qp1_qps + extra_qps,
7669+
pg_lvl);
7670+
if (rc)
7671+
return rc;
76537672

76547673
ctxm = &ctx->ctx_arr[BNXT_CTX_SRQ];
7655-
ctx_pg = ctxm->pg_info;
7656-
ctx_pg->entries = srqs + extra_srqs;
7657-
if (ctxm->entry_size) {
7658-
mem_size = ctxm->entry_size * ctx_pg->entries;
7659-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, ctxm);
7660-
if (rc)
7661-
return rc;
7662-
}
7674+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, srqs + extra_srqs, pg_lvl);
7675+
if (rc)
7676+
return rc;
76637677

76647678
ctxm = &ctx->ctx_arr[BNXT_CTX_CQ];
7665-
ctx_pg = ctxm->pg_info;
7666-
ctx_pg->entries = ctxm->cq_l2_entries + extra_qps * 2;
7667-
if (ctxm->entry_size) {
7668-
mem_size = ctxm->entry_size * ctx_pg->entries;
7669-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, ctxm);
7670-
if (rc)
7671-
return rc;
7672-
}
7679+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, ctxm->cq_l2_entries +
7680+
extra_qps * 2, pg_lvl);
7681+
if (rc)
7682+
return rc;
76737683

76747684
ctxm = &ctx->ctx_arr[BNXT_CTX_VNIC];
7675-
ctx_pg = ctxm->pg_info;
7676-
ctx_pg->entries = ctxm->max_entries;
7677-
if (ctxm->entry_size) {
7678-
mem_size = ctxm->entry_size * ctx_pg->entries;
7679-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, ctxm);
7680-
if (rc)
7681-
return rc;
7682-
}
7685+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, ctxm->max_entries, 1);
7686+
if (rc)
7687+
return rc;
76837688

76847689
ctxm = &ctx->ctx_arr[BNXT_CTX_STAT];
7685-
ctx_pg = ctxm->pg_info;
7686-
ctx_pg->entries = ctxm->max_entries;
7687-
if (ctxm->entry_size) {
7688-
mem_size = ctxm->entry_size * ctx_pg->entries;
7689-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, ctxm);
7690-
if (rc)
7691-
return rc;
7692-
}
7690+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, ctxm->max_entries, 1);
7691+
if (rc)
7692+
return rc;
76937693

76947694
ena = 0;
76957695
if (!(bp->flags & BNXT_FLAG_ROCE_CAP))
76967696
goto skip_rdma;
76977697

76987698
ctxm = &ctx->ctx_arr[BNXT_CTX_MRAV];
7699-
ctx_pg = ctxm->pg_info;
77007699
/* 128K extra is needed to accommodate static AH context
77017700
* allocation by f/w.
77027701
*/
@@ -7706,47 +7705,33 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
77067705
if (!ctxm->mrav_av_entries || ctxm->mrav_av_entries > num_ah)
77077706
ctxm->mrav_av_entries = num_ah;
77087707

7709-
ctx_pg->entries = num_mr + num_ah;
7710-
if (ctxm->entry_size) {
7711-
mem_size = ctxm->entry_size * ctx_pg->entries;
7712-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 2, ctxm);
7713-
if (rc)
7714-
return rc;
7715-
}
7708+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, num_mr + num_ah, 2);
7709+
if (rc)
7710+
return rc;
77167711
ena = FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV;
77177712

77187713
ctxm = &ctx->ctx_arr[BNXT_CTX_TIM];
7719-
ctx_pg = ctxm->pg_info;
7720-
ctx_pg->entries = l2_qps + qp1_qps + extra_qps;
7721-
if (ctxm->entry_size) {
7722-
mem_size = ctxm->entry_size * ctx_pg->entries;
7723-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, NULL);
7724-
if (rc)
7725-
return rc;
7726-
}
7714+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, l2_qps + qp1_qps + extra_qps, 1);
7715+
if (rc)
7716+
return rc;
77277717
ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_TIM;
77287718

77297719
skip_rdma:
77307720
ctxm = &ctx->ctx_arr[BNXT_CTX_STQM];
77317721
min = ctxm->min_entries;
77327722
entries_sp = ctx->ctx_arr[BNXT_CTX_VNIC].vnic_entries + l2_qps +
77337723
2 * (extra_qps + qp1_qps) + min;
7734-
entries_sp = roundup(entries_sp, ctxm->entry_multiple);
7724+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, entries_sp, 2);
7725+
if (rc)
7726+
return rc;
7727+
7728+
ctxm = &ctx->ctx_arr[BNXT_CTX_FTQM];
77357729
entries = l2_qps + 2 * (extra_qps + qp1_qps);
7736-
entries = roundup(entries, ctxm->entry_multiple);
7737-
entries = clamp_t(u32, entries, min, ctxm->max_entries);
7738-
for (i = 0, ctx_pg = ctxm->pg_info; i < ctx->tqm_fp_rings_count + 1;
7739-
ctx_pg = &ctx->ctx_arr[BNXT_CTX_FTQM].pg_info[i], i++) {
7740-
ctx_pg->entries = i ? entries : entries_sp;
7741-
if (ctxm->entry_size) {
7742-
mem_size = ctxm->entry_size * ctx_pg->entries;
7743-
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1,
7744-
NULL);
7745-
if (rc)
7746-
return rc;
7747-
}
7730+
rc = bnxt_setup_ctxm_pg_tbls(bp, ctxm, entries, 2);
7731+
if (rc)
7732+
return rc;
7733+
for (i = 0; i < ctx->tqm_fp_rings_count + 1; i++)
77487734
ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_TQM_SP << i;
7749-
}
77507735
ena |= FUNC_BACKING_STORE_CFG_REQ_DFLT_ENABLES;
77517736
rc = bnxt_hwrm_func_backing_store_cfg(bp, ena);
77527737
if (rc) {

0 commit comments

Comments
 (0)