You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.2 KiB
115 lines
4.2 KiB
From 075dd4d3abf9b0b014318e6c103d100703bada59 Mon Sep 17 00:00:00 2001
|
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
|
Date: Wed, 2 Oct 2019 18:22:39 -0400
|
|
Subject: [PATCH 24/96] [netdrv] bnxt_en: Separate RDMA MR/AH context
|
|
allocation
|
|
|
|
Message-id: <954dad29d938cf452dacb2aeff7e5775a8df5e6f.1570027456.git.jtoppins@redhat.com>
|
|
Patchwork-id: 276439
|
|
O-Subject: [RHEL-8.2 PATCH 17/78] bnxt_en: Separate RDMA MR/AH context allocation.
|
|
Bugzilla: 1724766
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
|
|
In newer firmware, the context memory for MR (Memory Region)
|
|
and AH (Address Handle) to support RDMA are specified separately.
|
|
Modify driver to specify and allocate the 2 context memory types
|
|
separately when supported by the firmware.
|
|
|
|
Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
|
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
(cherry picked from commit 53579e37d13a7a87430e2ec0171e091ebf2e63a1)
|
|
Bugzilla: 1724766
|
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
|
Tested: build, boot, basic ping
|
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
|
---
|
|
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 19 ++++++++++++++++++-
|
|
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
|
2 files changed, 19 insertions(+), 1 deletion(-)
|
|
|
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.384534503 +0100
|
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.520533254 +0100
|
|
@@ -6091,6 +6091,8 @@
|
|
ctx->tqm_entries_multiple = 1;
|
|
ctx->mrav_max_entries = le32_to_cpu(resp->mrav_max_entries);
|
|
ctx->mrav_entry_size = le16_to_cpu(resp->mrav_entry_size);
|
|
+ ctx->mrav_num_entries_units =
|
|
+ le16_to_cpu(resp->mrav_num_entries_units);
|
|
ctx->tim_entry_size = le16_to_cpu(resp->tim_entry_size);
|
|
ctx->tim_max_entries = le32_to_cpu(resp->tim_max_entries);
|
|
} else {
|
|
@@ -6137,6 +6139,7 @@
|
|
struct bnxt_ctx_pg_info *ctx_pg;
|
|
__le32 *num_entries;
|
|
__le64 *pg_dir;
|
|
+ u32 flags = 0;
|
|
u8 *pg_attr;
|
|
int i, rc;
|
|
u32 ena;
|
|
@@ -6196,6 +6199,9 @@
|
|
if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV) {
|
|
ctx_pg = &ctx->mrav_mem;
|
|
req.mrav_num_entries = cpu_to_le32(ctx_pg->entries);
|
|
+ if (ctx->mrav_num_entries_units)
|
|
+ flags |=
|
|
+ FUNC_BACKING_STORE_CFG_REQ_FLAGS_MRAV_RESERVATION_SPLIT;
|
|
req.mrav_entry_size = cpu_to_le16(ctx->mrav_entry_size);
|
|
bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
|
|
&req.mrav_pg_size_mrav_lvl,
|
|
@@ -6222,6 +6228,7 @@
|
|
*num_entries = cpu_to_le32(ctx_pg->entries);
|
|
bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, pg_attr, pg_dir);
|
|
}
|
|
+ req.flags = cpu_to_le32(flags);
|
|
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
|
if (rc)
|
|
rc = -EIO;
|
|
@@ -6360,6 +6367,7 @@
|
|
struct bnxt_ctx_pg_info *ctx_pg;
|
|
struct bnxt_ctx_mem_info *ctx;
|
|
u32 mem_size, ena, entries;
|
|
+ u32 num_mr, num_ah;
|
|
u32 extra_srqs = 0;
|
|
u32 extra_qps = 0;
|
|
u8 pg_lvl = 1;
|
|
@@ -6423,12 +6431,21 @@
|
|
goto skip_rdma;
|
|
|
|
ctx_pg = &ctx->mrav_mem;
|
|
- ctx_pg->entries = extra_qps * 4;
|
|
+ /* 128K extra is needed to accommodate static AH context
|
|
+ * allocation by f/w.
|
|
+ */
|
|
+ num_mr = 1024 * 256;
|
|
+ num_ah = 1024 * 128;
|
|
+ ctx_pg->entries = num_mr + num_ah;
|
|
mem_size = ctx->mrav_entry_size * ctx_pg->entries;
|
|
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 2);
|
|
if (rc)
|
|
return rc;
|
|
ena = FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV;
|
|
+ if (ctx->mrav_num_entries_units)
|
|
+ ctx_pg->entries =
|
|
+ ((num_mr / ctx->mrav_num_entries_units) << 16) |
|
|
+ (num_ah / ctx->mrav_num_entries_units);
|
|
|
|
ctx_pg = &ctx->tim_mem;
|
|
ctx_pg->entries = ctx->qp_mem.entries;
|
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
|
===================================================================
|
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.240535824 +0100
|
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.520533254 +0100
|
|
@@ -1228,6 +1228,7 @@
|
|
u16 mrav_entry_size;
|
|
u16 tim_entry_size;
|
|
u32 tim_max_entries;
|
|
+ u16 mrav_num_entries_units;
|
|
u8 tqm_entries_multiple;
|
|
|
|
u32 flags;
|