public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Selvin Xavier <selvin.xavier@broadcom.com>
To: dledford@redhat.com
Cc: linux-rdma@vger.kernel.org,
	Michael Chan <michael.chan@broadcom.com>,
	David Miller <davem@davemloft.net>,
	netdev@vger.kernel.org,
	Selvin Xavier <selvin.xavier@broadcom.com>
Subject: [PATCH 05/28] bnxt_en: Reserve RDMA resources by default.
Date: Sun,  4 Dec 2016 22:38:09 -0800	[thread overview]
Message-ID: <1480919912-1079-6-git-send-email-selvin.xavier@broadcom.com> (raw)
In-Reply-To: <1480919912-1079-1-git-send-email-selvin.xavier@broadcom.com>

From: Michael Chan <michael.chan@broadcom.com>

If the device supports RDMA, we'll setup network default rings so that
there are enough minimum resources for RDMA, if possible.  However, the
user can still increase network rings to the max if he wants.  The actual
RDMA resources won't be reserved until the RDMA driver registers.

Cc: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 58 ++++++++++++++++++++++++++++++-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h |  9 +++++
 2 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 1f6be83..7218d65 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -4166,6 +4166,11 @@ static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
 	if (rc)
 		goto hwrm_func_qcaps_exit;
 
+	if (resp->flags & cpu_to_le32(FUNC_QCAPS_RESP_FLAGS_ROCE_V1_SUPPORTED))
+		bp->flags |= BNXT_FLAG_ROCEV1_CAP;
+	if (resp->flags & cpu_to_le32(FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED))
+		bp->flags |= BNXT_FLAG_ROCEV2_CAP;
+
 	bp->tx_push_thresh = 0;
 	if (resp->flags &
 	    cpu_to_le32(FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED))
@@ -4808,6 +4813,24 @@ static int bnxt_setup_int_mode(struct bnxt *bp)
 	return rc;
 }
 
+unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp)
+{
+	if (BNXT_PF(bp))
+		return bp->pf.max_stat_ctxs;
+#if defined(CONFIG_BNXT_SRIOV)
+	return bp->vf.max_stat_ctxs;
+#endif
+}
+
+unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp)
+{
+	if (BNXT_PF(bp))
+		return bp->pf.max_cp_rings;
+#if defined(CONFIG_BNXT_SRIOV)
+	return bp->vf.max_cp_rings;
+#endif
+}
+
 static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
 {
 	if (BNXT_PF(bp))
@@ -6832,6 +6855,39 @@ int bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx, bool shared)
 	return bnxt_trim_rings(bp, max_rx, max_tx, cp, shared);
 }
 
+static int bnxt_get_dflt_rings(struct bnxt *bp, int *max_rx, int *max_tx,
+			       bool shared)
+{
+	int rc;
+
+	rc = bnxt_get_max_rings(bp, max_rx, max_tx, shared);
+	if (rc)
+		return rc;
+
+	if (bp->flags & BNXT_FLAG_ROCE_CAP) {
+		int max_cp, max_stat, max_irq;
+
+		/* Reserve minimum resources for RoCE */
+		max_cp = bnxt_get_max_func_cp_rings(bp);
+		max_stat = bnxt_get_max_func_stat_ctxs(bp);
+		max_irq = bnxt_get_max_func_irqs(bp);
+		if (max_cp <= BNXT_MIN_ROCE_CP_RINGS ||
+		    max_irq <= BNXT_MIN_ROCE_CP_RINGS ||
+		    max_stat <= BNXT_MIN_ROCE_STAT_CTXS)
+			return 0;
+
+		max_cp -= BNXT_MIN_ROCE_CP_RINGS;
+		max_irq -= BNXT_MIN_ROCE_CP_RINGS;
+		max_stat -= BNXT_MIN_ROCE_STAT_CTXS;
+		max_cp = min_t(int, max_cp, max_irq);
+		max_cp = min_t(int, max_cp, max_stat);
+		rc = bnxt_trim_rings(bp, max_rx, max_tx, max_cp, shared);
+		if (rc)
+			rc = 0;
+	}
+	return rc;
+}
+
 static int bnxt_set_dflt_rings(struct bnxt *bp)
 {
 	int dflt_rings, max_rx_rings, max_tx_rings, rc;
@@ -6840,7 +6896,7 @@ static int bnxt_set_dflt_rings(struct bnxt *bp)
 	if (sh)
 		bp->flags |= BNXT_FLAG_SHARED_RINGS;
 	dflt_rings = netif_get_num_default_rss_queues();
-	rc = bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, sh);
+	rc = bnxt_get_dflt_rings(bp, &max_rx_rings, &max_tx_rings, sh);
 	if (rc)
 		return rc;
 	bp->rx_nr_rings = min_t(int, dflt_rings, max_rx_rings);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 43a4b17..d796836 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -387,6 +387,9 @@ struct rx_tpa_end_cmp_ext {
 #define DB_KEY_TX_PUSH						(0x4 << 28)
 #define DB_LONG_TX_PUSH						(0x2 << 24)
 
+#define BNXT_MIN_ROCE_CP_RINGS	2
+#define BNXT_MIN_ROCE_STAT_CTXS	1
+
 #define INVALID_HW_RING_ID	((u16)-1)
 
 /* The hardware supports certain page sizes.  Use the supported page sizes
@@ -953,6 +956,10 @@ struct bnxt {
 	#define BNXT_FLAG_PORT_STATS	0x400
 	#define BNXT_FLAG_UDP_RSS_CAP	0x800
 	#define BNXT_FLAG_EEE_CAP	0x1000
+	#define BNXT_FLAG_ROCEV1_CAP	0x8000
+	#define BNXT_FLAG_ROCEV2_CAP	0x10000
+	#define BNXT_FLAG_ROCE_CAP	(BNXT_FLAG_ROCEV1_CAP |	\
+					 BNXT_FLAG_ROCEV2_CAP)
 	#define BNXT_FLAG_CHIP_NITRO_A0	0x1000000
 
 	#define BNXT_FLAG_ALL_CONFIG_FEATS (BNXT_FLAG_TPA |		\
@@ -1234,6 +1241,8 @@ int _hwrm_send_message(struct bnxt *, void *, u32, int);
 int hwrm_send_message(struct bnxt *, void *, u32, int);
 int hwrm_send_message_silent(struct bnxt *, void *, u32, int);
 int bnxt_hwrm_set_coal(struct bnxt *);
+unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp);
+unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp);
 void bnxt_set_max_func_irqs(struct bnxt *bp, unsigned int max);
 void bnxt_tx_disable(struct bnxt *bp);
 void bnxt_tx_enable(struct bnxt *bp);
-- 
2.5.5

  parent reply	other threads:[~2016-12-05  6:38 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-05  6:38 [PATCH 00/28] Broadcom RoCE Driver (bnxt_re) Selvin Xavier
2016-12-05  6:38 ` [PATCH 02/28] bnxt_en: Enable MSIX early in bnxt_init_one() Selvin Xavier
2016-12-05  6:38 ` [PATCH 03/28] bnxt_en: Move function reset to bnxt_init_one() Selvin Xavier
2016-12-05  6:38 ` [PATCH 04/28] bnxt_en: Improve completion ring allocation for VFs Selvin Xavier
2016-12-05  6:38 ` Selvin Xavier [this message]
2016-12-05  6:38 ` [PATCH 07/28] bnxt_en: Add interface to support RDMA driver Selvin Xavier
     [not found] ` <1480919912-1079-1-git-send-email-selvin.xavier-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-12-05  6:38   ` [PATCH 01/28] bnxt_en: Add bnxt_set_max_func_irqs() Selvin Xavier
2016-12-05 16:47     ` David Miller
2016-12-05 17:10       ` Michael Chan
2016-12-05  6:38   ` [PATCH 06/28] bnxt_en: Refactor the driver registration function with firmware Selvin Xavier
2016-12-05  6:38   ` [PATCH 08/28] bnxt_re: Add bnxt_re RoCE driver files Selvin Xavier
     [not found]     ` <1480919912-1079-9-git-send-email-selvin.xavier-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-12-05 15:16       ` Doug Ledford
     [not found]         ` <09068db2-1a14-9fbb-074b-4cf000fbddfb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-06  5:56           ` Selvin Xavier
2016-12-05  6:38   ` [PATCH 09/28] bnxt_re: Introducing autogenerated Host Software Interface(hsi) file Selvin Xavier
     [not found]     ` <1480919912-1079-10-git-send-email-selvin.xavier-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-12-07 22:32       ` Jonathan Toppins
     [not found]         ` <9d151718-c357-d1c4-bbe5-5265e6d2b6ca-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-08  9:45           ` Selvin Xavier
2016-12-05  6:38   ` [PATCH 10/28] bnxt_re: register with the NIC driver Selvin Xavier
     [not found]     ` <1480919912-1079-11-git-send-email-selvin.xavier-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-12-07 23:21       ` Jonathan Toppins
     [not found]         ` <ad3d577c-760f-c003-394a-d80efe96400c-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-08  9:42           ` Selvin Xavier
2016-12-05  6:38   ` [PATCH 11/28] bnxt_re: Enabling RoCE control path Selvin Xavier
     [not found]     ` <1480919912-1079-12-git-send-email-selvin.xavier-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-12-08 16:54       ` Jonathan Toppins
     [not found]         ` <973d0642-1d06-72d4-bbbd-d360663d287b-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-09 10:50           ` Selvin Xavier
2016-12-05  6:38   ` [PATCH 12/28] bnxt_re: Adding Notification Queue support Selvin Xavier
2016-12-05  6:38   ` [PATCH 13/28] bnxt_re: Support for PD, ucontext and mmap verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 14/28] bnxt_re: Support for query and modify device verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 15/28] bnxt_re: Adding support for port related verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 16/28] bnxt_re: Support for GID " Selvin Xavier
2016-12-05  6:38   ` [PATCH 17/28] bnxt_re: Support for CQ verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 18/28] bnxt_re: Support for AH verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 19/28] bnxt_re: Support memory registration verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 20/28] bnxt_re: Support QP verbs Selvin Xavier
2016-12-05  6:38   ` [PATCH 21/28] bnxt_re: Support post_send verb Selvin Xavier
2016-12-05  6:38   ` [PATCH 22/28] bnxt_re: Support post_recv Selvin Xavier
2016-12-05  6:38   ` [PATCH 23/28] bnxt_re: Support poll_cq verb Selvin Xavier
2016-12-05  6:38   ` [PATCH 24/28] bnxt_re: Handling dispatching of events to IB stack and cleanup during unload Selvin Xavier
2016-12-05  6:38   ` [PATCH 25/28] bnxt_re: Support for DCB Selvin Xavier
2016-12-05  6:38   ` [PATCH 26/28] bnxt_re: Support debugfs Selvin Xavier
2016-12-05  6:38   ` [PATCH 27/28] bnxt_re: Set uverbs command mask Selvin Xavier
2016-12-05  6:38   ` [PATCH 28/28] bnxt_re: Add QP event handling Selvin Xavier
2016-12-05 15:17   ` [PATCH 00/28] Broadcom RoCE Driver (bnxt_re) Doug Ledford
     [not found]     ` <ee2b9e6f-de43-ab80-d2a7-d431e33c45ba-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-06  5:38       ` Selvin Xavier
2016-12-05 16:51   ` Jason Gunthorpe
     [not found]     ` <20161205165144.GB24852-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-12-06  6:01       ` Selvin Xavier
     [not found]         ` <CA+sbYW1sUrv8CBHScMjU7ozBm709-tiVWaynDQK_Dq3AqAfggA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-12-06 16:34           ` Jason Gunthorpe
     [not found]             ` <20161206163456.GB28066-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-12-07 11:33               ` Selvin Xavier
2016-12-07 23:33   ` Jonathan Toppins
     [not found]     ` <a909ae78-ed49-407a-29c7-b86729f356b8-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-08  9:38       ` Selvin Xavier
     [not found]         ` <CA+sbYW1P4MqsBF14d9ZK_VjV4edU2bh=sLNTVnGs9F3ojF6vWQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-12-08 21:08           ` Doug Ledford
     [not found]             ` <cd667d80-cc1b-c8df-07d1-a5e7b9f94c68-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-08 21:42               ` Jonathan Toppins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1480919912-1079-6-git-send-email-selvin.xavier@broadcom.com \
    --to=selvin.xavier@broadcom.com \
    --cc=davem@davemloft.net \
    --cc=dledford@redhat.com \
    --cc=linux-rdma@vger.kernel.org \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox