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>, <devicetree@vger.kernel.org>,
	<robh+dt@kernel.org>, <sebastian.hesselbarth@gmail.com>,
	<gregory.clement@bootlin.com>,
	<linux-arm-kernel@lists.infradead.org>
Subject: [PATCH v13 net-next 09/15] net: mvpp2: enable global flow control
Date: Thu, 11 Feb 2021 12:48:56 +0200	[thread overview]
Message-ID: <1613040542-16500-10-git-send-email-stefanc@marvell.com> (raw)
In-Reply-To: <1613040542-16500-1-git-send-email-stefanc@marvell.com>

From: Stefan Chulski <stefanc@marvell.com>

This patch enables global flow control in FW and in the phylink validate mask.

Signed-off-by: Stefan Chulski <stefanc@marvell.com>
Acked-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2/mvpp2.h      | 11 +++++--
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 30 +++++++++++++++++++-
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
index d2cc513c..8945fb9 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
@@ -763,9 +763,11 @@
 		((kb) * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN)
 
 /* MSS Flow control */
-#define FC_QUANTA		0xFFFF
-#define FC_CLK_DIVIDER		100
-#define MSS_THRESHOLD_STOP	768
+#define MSS_FC_COM_REG			0
+#define FLOW_CONTROL_ENABLE_BIT		BIT(0)
+#define FC_QUANTA			0xFFFF
+#define FC_CLK_DIVIDER			100
+#define MSS_THRESHOLD_STOP		768
 
 /* RX buffer constants */
 #define MVPP2_SKB_SHINFO_SIZE \
@@ -1017,6 +1019,9 @@ struct mvpp2 {
 
 	/* page_pool allocator */
 	struct page_pool *page_pool[MVPP2_PORT_MAX_RXQ];
+
+	/* Global TX Flow Control config */
+	bool global_tx_fc;
 };
 
 struct mvpp2_pcpu_stats {
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 8b4073c..027101b 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -91,6 +91,16 @@ static inline u32 mvpp2_cpu_to_thread(struct mvpp2 *priv, int cpu)
 	return cpu % priv->nthreads;
 }
 
+static void mvpp2_cm3_write(struct mvpp2 *priv, u32 offset, u32 data)
+{
+	writel(data, priv->cm3_base + offset);
+}
+
+static u32 mvpp2_cm3_read(struct mvpp2 *priv, u32 offset)
+{
+	return readl(priv->cm3_base + offset);
+}
+
 static struct page_pool *
 mvpp2_create_page_pool(struct device *dev, int num, int len,
 		       enum dma_data_direction dma_dir)
@@ -5950,6 +5960,11 @@ static void mvpp2_phylink_validate(struct phylink_config *config,
 	phylink_set(mask, Autoneg);
 	phylink_set_port_modes(mask);
 
+	if (port->priv->global_tx_fc) {
+		phylink_set(mask, Pause);
+		phylink_set(mask, Asym_Pause);
+	}
+
 	switch (state->interface) {
 	case PHY_INTERFACE_MODE_10GBASER:
 	case PHY_INTERFACE_MODE_XAUI:
@@ -6951,7 +6966,7 @@ static int mvpp2_probe(struct platform_device *pdev)
 	struct resource *res;
 	void __iomem *base;
 	int i, shared;
-	int err;
+	int err, val;
 
 	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
@@ -7003,6 +7018,10 @@ static int mvpp2_probe(struct platform_device *pdev)
 		err = mvpp2_get_sram(pdev, priv);
 		if (err)
 			dev_warn(&pdev->dev, "Fail to alloc CM3 SRAM\n");
+
+		/* Enable global Flow Control only if handler to SRAM not NULL */
+		if (priv->cm3_base)
+			priv->global_tx_fc = true;
 	}
 
 	if (priv->hw_version != MVPP21 && dev_of_node(&pdev->dev)) {
@@ -7168,6 +7187,15 @@ static int mvpp2_probe(struct platform_device *pdev)
 		goto err_port_probe;
 	}
 
+	/* Enable global flow control. In this stage global
+	 * flow control enabled, but still disabled per port.
+	 */
+	if (priv->global_tx_fc && priv->hw_version != MVPP21) {
+		val = mvpp2_cm3_read(priv, MSS_FC_COM_REG);
+		val |= FLOW_CONTROL_ENABLE_BIT;
+		mvpp2_cm3_write(priv, MSS_FC_COM_REG, val);
+	}
+
 	mvpp2_dbgfs_init(priv, pdev->name);
 
 	platform_set_drvdata(pdev, priv);
-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: <stefanc@marvell.com>
To: <netdev@vger.kernel.org>
Cc: andrew@lunn.ch, ymarkman@marvell.com, devicetree@vger.kernel.org,
	atenart@kernel.org, linux-kernel@vger.kernel.org,
	linux@armlinux.org.uk, nadavh@marvell.com,
	rmk+kernel@armlinux.org.uk, robh+dt@kernel.org,
	linux-arm-kernel@lists.infradead.org,
	thomas.petazzoni@bootlin.com, kuba@kernel.org,
	stefanc@marvell.com, mw@semihalf.com, davem@davemloft.net,
	gregory.clement@bootlin.com, sebastian.hesselbarth@gmail.com
Subject: [PATCH v13 net-next 09/15] net: mvpp2: enable global flow control
Date: Thu, 11 Feb 2021 12:48:56 +0200	[thread overview]
Message-ID: <1613040542-16500-10-git-send-email-stefanc@marvell.com> (raw)
In-Reply-To: <1613040542-16500-1-git-send-email-stefanc@marvell.com>

From: Stefan Chulski <stefanc@marvell.com>

This patch enables global flow control in FW and in the phylink validate mask.

Signed-off-by: Stefan Chulski <stefanc@marvell.com>
Acked-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2/mvpp2.h      | 11 +++++--
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 30 +++++++++++++++++++-
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
index d2cc513c..8945fb9 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
@@ -763,9 +763,11 @@
 		((kb) * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN)
 
 /* MSS Flow control */
-#define FC_QUANTA		0xFFFF
-#define FC_CLK_DIVIDER		100
-#define MSS_THRESHOLD_STOP	768
+#define MSS_FC_COM_REG			0
+#define FLOW_CONTROL_ENABLE_BIT		BIT(0)
+#define FC_QUANTA			0xFFFF
+#define FC_CLK_DIVIDER			100
+#define MSS_THRESHOLD_STOP		768
 
 /* RX buffer constants */
 #define MVPP2_SKB_SHINFO_SIZE \
@@ -1017,6 +1019,9 @@ struct mvpp2 {
 
 	/* page_pool allocator */
 	struct page_pool *page_pool[MVPP2_PORT_MAX_RXQ];
+
+	/* Global TX Flow Control config */
+	bool global_tx_fc;
 };
 
 struct mvpp2_pcpu_stats {
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 8b4073c..027101b 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -91,6 +91,16 @@ static inline u32 mvpp2_cpu_to_thread(struct mvpp2 *priv, int cpu)
 	return cpu % priv->nthreads;
 }
 
+static void mvpp2_cm3_write(struct mvpp2 *priv, u32 offset, u32 data)
+{
+	writel(data, priv->cm3_base + offset);
+}
+
+static u32 mvpp2_cm3_read(struct mvpp2 *priv, u32 offset)
+{
+	return readl(priv->cm3_base + offset);
+}
+
 static struct page_pool *
 mvpp2_create_page_pool(struct device *dev, int num, int len,
 		       enum dma_data_direction dma_dir)
@@ -5950,6 +5960,11 @@ static void mvpp2_phylink_validate(struct phylink_config *config,
 	phylink_set(mask, Autoneg);
 	phylink_set_port_modes(mask);
 
+	if (port->priv->global_tx_fc) {
+		phylink_set(mask, Pause);
+		phylink_set(mask, Asym_Pause);
+	}
+
 	switch (state->interface) {
 	case PHY_INTERFACE_MODE_10GBASER:
 	case PHY_INTERFACE_MODE_XAUI:
@@ -6951,7 +6966,7 @@ static int mvpp2_probe(struct platform_device *pdev)
 	struct resource *res;
 	void __iomem *base;
 	int i, shared;
-	int err;
+	int err, val;
 
 	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
@@ -7003,6 +7018,10 @@ static int mvpp2_probe(struct platform_device *pdev)
 		err = mvpp2_get_sram(pdev, priv);
 		if (err)
 			dev_warn(&pdev->dev, "Fail to alloc CM3 SRAM\n");
+
+		/* Enable global Flow Control only if handler to SRAM not NULL */
+		if (priv->cm3_base)
+			priv->global_tx_fc = true;
 	}
 
 	if (priv->hw_version != MVPP21 && dev_of_node(&pdev->dev)) {
@@ -7168,6 +7187,15 @@ static int mvpp2_probe(struct platform_device *pdev)
 		goto err_port_probe;
 	}
 
+	/* Enable global flow control. In this stage global
+	 * flow control enabled, but still disabled per port.
+	 */
+	if (priv->global_tx_fc && priv->hw_version != MVPP21) {
+		val = mvpp2_cm3_read(priv, MSS_FC_COM_REG);
+		val |= FLOW_CONTROL_ENABLE_BIT;
+		mvpp2_cm3_write(priv, MSS_FC_COM_REG, val);
+	}
+
 	mvpp2_dbgfs_init(priv, pdev->name);
 
 	platform_set_drvdata(pdev, priv);
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2021-02-11 11:14 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-11 10:48 [PATCH v13 net-next 00/15] net: mvpp2: Add TX Flow Control support stefanc
2021-02-11 10:48 ` stefanc
2021-02-11 10:48 ` [PATCH v13 net-next 01/15] doc: marvell: add CM3 address space and PPv2.3 description stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 11:02   ` Russell King - ARM Linux admin
2021-02-11 11:02     ` Russell King - ARM Linux admin
2021-02-11 10:48 ` [PATCH v13 net-next 02/15] dts: marvell: add CM3 SRAM memory to cp11x ethernet device tree stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 10:48 ` [PATCH v13 net-next 03/15] net: mvpp2: add CM3 SRAM memory map stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 11:05   ` Russell King - ARM Linux admin
2021-02-11 11:05     ` Russell King - ARM Linux admin
2021-02-11 10:48 ` [PATCH v13 net-next 04/15] net: mvpp2: always compare hw-version vs MVPP21 stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 11:08   ` Russell King - ARM Linux admin
2021-02-11 11:08     ` Russell King - ARM Linux admin
2021-02-11 11:10     ` [EXT] " Stefan Chulski
2021-02-11 11:10       ` Stefan Chulski
2021-02-11 10:48 ` [PATCH v13 net-next 05/15] net: mvpp2: add PPv23 version definition stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 11:42   ` Russell King - ARM Linux admin
2021-02-11 11:42     ` Russell King - ARM Linux admin
2021-02-11 11:49     ` [EXT] " Stefan Chulski
2021-02-11 11:49       ` Stefan Chulski
2021-02-11 19:26       ` Marcin Wojtas
2021-02-11 19:26         ` Marcin Wojtas
2021-02-11 10:48 ` [PATCH v13 net-next 06/15] net: mvpp2: increase BM pool and RXQ size stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 11:09   ` Russell King - ARM Linux admin
2021-02-11 11:09     ` Russell King - ARM Linux admin
2021-02-11 10:48 ` [PATCH v13 net-next 07/15] net: mvpp2: add FCA periodic timer configurations stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 12:47   ` Russell King - ARM Linux admin
2021-02-11 12:47     ` Russell King - ARM Linux admin
2021-02-11 10:48 ` [PATCH v13 net-next 08/15] net: mvpp2: add FCA RXQ non occupied descriptor threshold stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 12:50   ` Russell King - ARM Linux admin
2021-02-11 12:50     ` Russell King - ARM Linux admin
2021-02-11 13:02     ` [EXT] " Stefan Chulski
2021-02-11 13:02       ` Stefan Chulski
2021-02-11 13:29       ` Russell King - ARM Linux admin
2021-02-11 13:29         ` Russell King - ARM Linux admin
2021-02-11 13:22     ` Stefan Chulski
2021-02-11 13:22       ` Stefan Chulski
2021-02-11 13:31       ` Russell King - ARM Linux admin
2021-02-11 13:31         ` Russell King - ARM Linux admin
2021-02-11 10:48 ` stefanc [this message]
2021-02-11 10:48   ` [PATCH v13 net-next 09/15] net: mvpp2: enable global flow control stefanc
2021-02-11 12:52   ` Russell King - ARM Linux admin
2021-02-11 12:52     ` Russell King - ARM Linux admin
2021-02-11 10:48 ` [PATCH v13 net-next 10/15] net: mvpp2: add RXQ flow control configurations stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 10:48 ` [PATCH v13 net-next 11/15] net: mvpp2: add ethtool flow control configuration support stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 10:48 ` [PATCH v13 net-next 12/15] net: mvpp2: add BM protection underrun feature support stefanc
2021-02-11 10:48   ` stefanc
2021-02-11 10:49 ` [PATCH v13 net-next 13/15] net: mvpp2: add PPv23 RX FIFO flow control stefanc
2021-02-11 10:49   ` stefanc
2021-02-11 12:56   ` Russell King - ARM Linux admin
2021-02-11 12:56     ` Russell King - ARM Linux admin
2021-02-11 13:06     ` [EXT] " Stefan Chulski
2021-02-11 13:06       ` Stefan Chulski
2021-02-11 10:49 ` [PATCH v13 net-next 14/15] net: mvpp2: set 802.3x GoP Flow Control mode stefanc
2021-02-11 10:49   ` stefanc
2021-02-11 12:57   ` Russell King - ARM Linux admin
2021-02-11 12:57     ` Russell King - ARM Linux admin
2021-02-11 10:49 ` [PATCH v13 net-next 15/15] net: mvpp2: add TX FC firmware check stefanc
2021-02-11 10:49   ` stefanc
2021-02-11 23:00 ` [PATCH v13 net-next 00/15] net: mvpp2: Add TX Flow Control support patchwork-bot+netdevbpf
2021-02-11 23:00   ` patchwork-bot+netdevbpf
2021-02-12  8:54   ` [EXT] " Stefan Chulski
2021-02-12  8:54     ` Stefan Chulski

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=1613040542-16500-10-git-send-email-stefanc@marvell.com \
    --to=stefanc@marvell.com \
    --cc=andrew@lunn.ch \
    --cc=atenart@kernel.org \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=gregory.clement@bootlin.com \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.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=robh+dt@kernel.org \
    --cc=sebastian.hesselbarth@gmail.com \
    --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.