All of lore.kernel.org
 help / color / mirror / Atom feed
From: <stefanc@marvell.com>
To: <netdev@vger.kernel.org>
Cc: <thomas.petazzoni@bootlin.com>, <davem@davemloft.net>,
	<nadavh@marvell.com>, <ymarkman@marvell.com>,
	<linux-kernel@vger.kernel.org>, <stefanc@marvell.com>,
	<kuba@kernel.org>, <linux@armlinux.org.uk>, <mw@semihalf.com>,
	<andrew@lunn.ch>, <rmk+kernel@armlinux.org.uk>,
	<atenart@kernel.org>
Subject: [PATCH v4 net-next 10/19] net: mvpp2: add FCA RXQ non occupied descriptor threshold
Date: Wed, 27 Jan 2021 13:43:26 +0200	[thread overview]
Message-ID: <1611747815-1934-11-git-send-email-stefanc@marvell.com> (raw)
In-Reply-To: <1611747815-1934-1-git-send-email-stefanc@marvell.com>

From: Stefan Chulski <stefanc@marvell.com>

RXQ non occupied descriptor threshold would be used by
Flow Control Firmware feature to move to the XOFF mode.
RXQ non occupied threshold would change interrupt cause
that polled by CM3 Firmware.
Actual non occupied interrupt masked and won't trigger interrupt.

Signed-off-by: Stefan Chulski <stefanc@marvell.com>
---
 drivers/net/ethernet/marvell/mvpp2/mvpp2.h      |  3 ++
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 46 +++++++++++++++++---
 2 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
index 73f087c..9d8993f 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
@@ -295,6 +295,8 @@
 #define     MVPP2_PON_CAUSE_TXP_OCCUP_DESC_ALL_MASK	0x3fc00000
 #define     MVPP2_PON_CAUSE_MISC_SUM_MASK		BIT(31)
 #define MVPP2_ISR_MISC_CAUSE_REG		0x55b0
+#define MVPP2_ISR_RX_ERR_CAUSE_REG(port)	(0x5520 + 4 * (port))
+#define	    MVPP2_ISR_RX_ERR_CAUSE_NONOCC_MASK	0x00ff
 
 /* Buffer Manager registers */
 #define MVPP2_BM_POOL_BASE_REG(pool)		(0x6000 + ((pool) * 4))
@@ -764,6 +766,7 @@
 #define MSS_SRAM_SIZE		0x800
 #define FC_QUANTA		0xFFFF
 #define FC_CLK_DIVIDER		100
+#define MSS_THRESHOLD_STOP	768
 
 /* RX buffer constants */
 #define MVPP2_SKB_SHINFO_SIZE \
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 8f40293a..a4933c4 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -1144,14 +1144,19 @@ static inline void mvpp2_qvec_interrupt_disable(struct mvpp2_queue_vector *qvec)
 static void mvpp2_interrupts_mask(void *arg)
 {
 	struct mvpp2_port *port = arg;
+	int cpu = smp_processor_id();
+	u32 thread;
 
 	/* If the thread isn't used, don't do anything */
-	if (smp_processor_id() > port->priv->nthreads)
+	if (cpu >= port->priv->nthreads)
 		return;
 
-	mvpp2_thread_write(port->priv,
-			   mvpp2_cpu_to_thread(port->priv, smp_processor_id()),
+	thread = mvpp2_cpu_to_thread(port->priv, cpu);
+
+	mvpp2_thread_write(port->priv, thread,
 			   MVPP2_ISR_RX_TX_MASK_REG(port->id), 0);
+	mvpp2_thread_write(port->priv, thread,
+			   MVPP2_ISR_RX_ERR_CAUSE_REG(port->id), 0);
 }
 
 /* Unmask the current thread's Rx/Tx interrupts.
@@ -1161,20 +1166,25 @@ static void mvpp2_interrupts_mask(void *arg)
 static void mvpp2_interrupts_unmask(void *arg)
 {
 	struct mvpp2_port *port = arg;
-	u32 val;
+	int cpu = smp_processor_id();
+	u32 val, thread;
 
 	/* If the thread isn't used, don't do anything */
-	if (smp_processor_id() > port->priv->nthreads)
+	if (cpu >= port->priv->nthreads)
 		return;
 
+	thread = mvpp2_cpu_to_thread(port->priv, cpu);
+
 	val = MVPP2_CAUSE_MISC_SUM_MASK |
 		MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK(port->priv->hw_version);
 	if (port->has_tx_irqs)
 		val |= MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_MASK;
 
-	mvpp2_thread_write(port->priv,
-			   mvpp2_cpu_to_thread(port->priv, smp_processor_id()),
+	mvpp2_thread_write(port->priv, thread,
 			   MVPP2_ISR_RX_TX_MASK_REG(port->id), val);
+	mvpp2_thread_write(port->priv, thread,
+			   MVPP2_ISR_RX_ERR_CAUSE_REG(port->id),
+			   MVPP2_ISR_RX_ERR_CAUSE_NONOCC_MASK);
 }
 
 static void
@@ -1199,6 +1209,9 @@ static void mvpp2_interrupts_unmask(void *arg)
 
 		mvpp2_thread_write(port->priv, v->sw_thread_id,
 				   MVPP2_ISR_RX_TX_MASK_REG(port->id), val);
+		mvpp2_thread_write(port->priv, v->sw_thread_id,
+				   MVPP2_ISR_RX_ERR_CAUSE_REG(port->id),
+				   MVPP2_ISR_RX_ERR_CAUSE_NONOCC_MASK);
 	}
 }
 
@@ -2404,6 +2417,22 @@ static void mvpp2_txp_max_tx_size_set(struct mvpp2_port *port)
 	}
 }
 
+/* Routine set the number of non-occupied descriptors threshold that change
+ * interrupt error cause polled by FW Flow Control
+ */
+static void mvpp2_set_rxq_free_tresh(struct mvpp2_port *port,
+				     struct mvpp2_rx_queue *rxq)
+{
+	u32 val;
+
+	mvpp2_write(port->priv, MVPP2_RXQ_NUM_REG, rxq->id);
+
+	val = mvpp2_read(port->priv, MVPP2_RXQ_THRESH_REG);
+	val &= ~MVPP2_RXQ_NON_OCCUPIED_MASK;
+	val |= MSS_THRESHOLD_STOP << MVPP2_RXQ_NON_OCCUPIED_OFFSET;
+	mvpp2_write(port->priv, MVPP2_RXQ_THRESH_REG, val);
+}
+
 /* Set the number of packets that will be received before Rx interrupt
  * will be generated by HW.
  */
@@ -2659,6 +2688,9 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,
 	mvpp2_rx_pkts_coal_set(port, rxq);
 	mvpp2_rx_time_coal_set(port, rxq);
 
+	/* Set the number of non occupied descriptors threshold */
+	mvpp2_set_rxq_free_tresh(port, rxq);
+
 	/* Add number of descriptors ready for receiving packets */
 	mvpp2_rxq_status_update(port, rxq->id, 0, rxq->size);
 
-- 
1.9.1


  parent reply	other threads:[~2021-01-27 12:22 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-27 11:43 [PATCH v4 net-next 00/19] net: mvpp2: Add TX Flow Control support stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 01/19] doc: marvell: add cm3-mem device tree bindings description stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 02/19] dts: marvell: add CM3 SRAM memory to cp115 ethernet device tree stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 03/19] net: mvpp2: add CM3 SRAM memory map stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 04/19] doc: marvell: add PPv2.3 description to marvell-pp2.txt stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 05/19] net: mvpp2: add PPv23 version definition stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 06/19] net: mvpp2: always compare hw-version vs MVPP21 stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 07/19] net: mvpp2: increase BM pool size to 2048 buffers stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 08/19] net: mvpp2: increase RXQ size to 1024 descriptors stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 09/19] net: mvpp2: add FCA periodic timer configurations stefanc
2021-01-27 11:43 ` stefanc [this message]
2021-01-27 17:36   ` [PATCH v4 net-next 10/19] net: mvpp2: add FCA RXQ non occupied descriptor threshold Willem de Bruijn
2021-01-27 18:41     ` [EXT] " Stefan Chulski
2021-01-28 16:40       ` Russell King - ARM Linux admin
2021-01-27 11:43 ` [PATCH v4 net-next 11/19] net: mvpp2: add spinlock for FW FCA configuration path stefanc
2021-01-27 17:39   ` Willem de Bruijn
2021-01-27 18:27     ` [EXT] " Stefan Chulski
2021-01-27 11:43 ` [PATCH v4 net-next 12/19] net: mvpp2: enable global flow control stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 13/19] net: mvpp2: add RXQ flow control configurations stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 14/19] net: mvpp2: add ethtool flow control configuration support stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 15/19] net: mvpp2: add BM protection underrun feature support stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 16/19] net: mvpp2: add PPv23 RX FIFO flow control stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 17/19] net: mvpp2: set 802.3x GoP Flow Control mode stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 18/19] net: mvpp2: limit minimum ring size to 1024 descriptors stefanc
2021-01-27 11:43 ` [PATCH v4 net-next 19/19] net: mvpp2: add TX FC firmware check stefanc
2021-01-27 14:05   ` Russell King - ARM Linux admin
2021-01-27 14:37     ` [EXT] " Stefan Chulski
2021-01-27 14:59       ` Russell King - ARM Linux admin
2021-01-27 15:10         ` Stefan Chulski
2021-01-27 15:13           ` Russell King - ARM Linux admin
2021-01-27 15:23             ` Stefan Chulski
2021-01-27 17:55 ` [PATCH v4 net-next 00/19] net: mvpp2: Add TX Flow Control support Willem de Bruijn
2021-01-28 16:43 ` Russell King - ARM Linux admin
2021-01-28 16:47   ` Marcin Wojtas

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=1611747815-1934-11-git-send-email-stefanc@marvell.com \
    --to=stefanc@marvell.com \
    --cc=andrew@lunn.ch \
    --cc=atenart@kernel.org \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mw@semihalf.com \
    --cc=nadavh@marvell.com \
    --cc=netdev@vger.kernel.org \
    --cc=rmk+kernel@armlinux.org.uk \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=ymarkman@marvell.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.