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 12/15] net: mvpp2: add BM protection underrun feature support Date: Thu, 11 Feb 2021 12:48:59 +0200 [thread overview] Message-ID: <1613040542-16500-13-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> The PP2v23 hardware supports a feature allowing to double the size of BPPI by decreasing number of pools from 16 to 8. Increasing of BPPI size protect BM drop from BPPI underrun. Underrun could occurred due to stress on DDR and as result slow buffer transition from BPPE to BPPI. New BPPI threshold recommended by spec is: BPPI low threshold - 640 buffers BPPI high threshold - 832 buffers Supported only in PPv23. Signed-off-by: Stefan Chulski <stefanc@marvell.com> Acked-by: Marcin Wojtas <mw@semihalf.com> --- drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 8 ++++++ drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 26 ++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h index 0731dc7..9b525b60 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h @@ -324,6 +324,10 @@ #define MVPP2_BM_HIGH_THRESH_MASK 0x7f0000 #define MVPP2_BM_HIGH_THRESH_VALUE(val) ((val) << \ MVPP2_BM_HIGH_THRESH_OFFS) +#define MVPP2_BM_BPPI_HIGH_THRESH 0x1E +#define MVPP2_BM_BPPI_LOW_THRESH 0x1C +#define MVPP23_BM_BPPI_HIGH_THRESH 0x34 +#define MVPP23_BM_BPPI_LOW_THRESH 0x28 #define MVPP2_BM_INTR_CAUSE_REG(pool) (0x6240 + ((pool) * 4)) #define MVPP2_BM_RELEASED_DELAY_MASK BIT(0) #define MVPP2_BM_ALLOC_FAILED_MASK BIT(1) @@ -352,6 +356,10 @@ #define MVPP2_OVERRUN_ETH_DROP 0x7000 #define MVPP2_CLS_ETH_DROP 0x7020 +#define MVPP22_BM_POOL_BASE_ADDR_HIGH_REG 0x6310 +#define MVPP22_BM_POOL_BASE_ADDR_HIGH_MASK 0xff +#define MVPP23_BM_8POOL_MODE BIT(8) + /* Hit counters registers */ #define MVPP2_CTRS_IDX 0x7040 #define MVPP22_CTRS_TX_CTR(port, txq) ((txq) | ((port) << 3) | BIT(7)) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 90c9265..9226d2f 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -423,6 +423,19 @@ static int mvpp2_bm_pool_create(struct device *dev, struct mvpp2 *priv, val = mvpp2_read(priv, MVPP2_BM_POOL_CTRL_REG(bm_pool->id)); val |= MVPP2_BM_START_MASK; + + val &= ~MVPP2_BM_LOW_THRESH_MASK; + val &= ~MVPP2_BM_HIGH_THRESH_MASK; + + /* Set 8 Pools BPPI threshold for MVPP23 */ + if (priv->hw_version == MVPP23) { + val |= MVPP2_BM_LOW_THRESH_VALUE(MVPP23_BM_BPPI_LOW_THRESH); + val |= MVPP2_BM_HIGH_THRESH_VALUE(MVPP23_BM_BPPI_HIGH_THRESH); + } else { + val |= MVPP2_BM_LOW_THRESH_VALUE(MVPP2_BM_BPPI_LOW_THRESH); + val |= MVPP2_BM_HIGH_THRESH_VALUE(MVPP2_BM_BPPI_HIGH_THRESH); + } + mvpp2_write(priv, MVPP2_BM_POOL_CTRL_REG(bm_pool->id), val); bm_pool->size = size; @@ -591,6 +604,16 @@ static int mvpp2_bm_pools_init(struct device *dev, struct mvpp2 *priv) return err; } +/* Routine enable PPv23 8 pool mode */ +static void mvpp23_bm_set_8pool_mode(struct mvpp2 *priv) +{ + int val; + + val = mvpp2_read(priv, MVPP22_BM_POOL_BASE_ADDR_HIGH_REG); + val |= MVPP23_BM_8POOL_MODE; + mvpp2_write(priv, MVPP22_BM_POOL_BASE_ADDR_HIGH_REG, val); +} + static int mvpp2_bm_init(struct device *dev, struct mvpp2 *priv) { enum dma_data_direction dma_dir = DMA_FROM_DEVICE; @@ -644,6 +667,9 @@ static int mvpp2_bm_init(struct device *dev, struct mvpp2 *priv) if (!priv->bm_pools) return -ENOMEM; + if (priv->hw_version == MVPP23) + mvpp23_bm_set_8pool_mode(priv); + err = mvpp2_bm_pools_init(dev, priv); if (err < 0) return err; -- 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 12/15] net: mvpp2: add BM protection underrun feature support Date: Thu, 11 Feb 2021 12:48:59 +0200 [thread overview] Message-ID: <1613040542-16500-13-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> The PP2v23 hardware supports a feature allowing to double the size of BPPI by decreasing number of pools from 16 to 8. Increasing of BPPI size protect BM drop from BPPI underrun. Underrun could occurred due to stress on DDR and as result slow buffer transition from BPPE to BPPI. New BPPI threshold recommended by spec is: BPPI low threshold - 640 buffers BPPI high threshold - 832 buffers Supported only in PPv23. Signed-off-by: Stefan Chulski <stefanc@marvell.com> Acked-by: Marcin Wojtas <mw@semihalf.com> --- drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 8 ++++++ drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 26 ++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h index 0731dc7..9b525b60 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h @@ -324,6 +324,10 @@ #define MVPP2_BM_HIGH_THRESH_MASK 0x7f0000 #define MVPP2_BM_HIGH_THRESH_VALUE(val) ((val) << \ MVPP2_BM_HIGH_THRESH_OFFS) +#define MVPP2_BM_BPPI_HIGH_THRESH 0x1E +#define MVPP2_BM_BPPI_LOW_THRESH 0x1C +#define MVPP23_BM_BPPI_HIGH_THRESH 0x34 +#define MVPP23_BM_BPPI_LOW_THRESH 0x28 #define MVPP2_BM_INTR_CAUSE_REG(pool) (0x6240 + ((pool) * 4)) #define MVPP2_BM_RELEASED_DELAY_MASK BIT(0) #define MVPP2_BM_ALLOC_FAILED_MASK BIT(1) @@ -352,6 +356,10 @@ #define MVPP2_OVERRUN_ETH_DROP 0x7000 #define MVPP2_CLS_ETH_DROP 0x7020 +#define MVPP22_BM_POOL_BASE_ADDR_HIGH_REG 0x6310 +#define MVPP22_BM_POOL_BASE_ADDR_HIGH_MASK 0xff +#define MVPP23_BM_8POOL_MODE BIT(8) + /* Hit counters registers */ #define MVPP2_CTRS_IDX 0x7040 #define MVPP22_CTRS_TX_CTR(port, txq) ((txq) | ((port) << 3) | BIT(7)) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 90c9265..9226d2f 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -423,6 +423,19 @@ static int mvpp2_bm_pool_create(struct device *dev, struct mvpp2 *priv, val = mvpp2_read(priv, MVPP2_BM_POOL_CTRL_REG(bm_pool->id)); val |= MVPP2_BM_START_MASK; + + val &= ~MVPP2_BM_LOW_THRESH_MASK; + val &= ~MVPP2_BM_HIGH_THRESH_MASK; + + /* Set 8 Pools BPPI threshold for MVPP23 */ + if (priv->hw_version == MVPP23) { + val |= MVPP2_BM_LOW_THRESH_VALUE(MVPP23_BM_BPPI_LOW_THRESH); + val |= MVPP2_BM_HIGH_THRESH_VALUE(MVPP23_BM_BPPI_HIGH_THRESH); + } else { + val |= MVPP2_BM_LOW_THRESH_VALUE(MVPP2_BM_BPPI_LOW_THRESH); + val |= MVPP2_BM_HIGH_THRESH_VALUE(MVPP2_BM_BPPI_HIGH_THRESH); + } + mvpp2_write(priv, MVPP2_BM_POOL_CTRL_REG(bm_pool->id), val); bm_pool->size = size; @@ -591,6 +604,16 @@ static int mvpp2_bm_pools_init(struct device *dev, struct mvpp2 *priv) return err; } +/* Routine enable PPv23 8 pool mode */ +static void mvpp23_bm_set_8pool_mode(struct mvpp2 *priv) +{ + int val; + + val = mvpp2_read(priv, MVPP22_BM_POOL_BASE_ADDR_HIGH_REG); + val |= MVPP23_BM_8POOL_MODE; + mvpp2_write(priv, MVPP22_BM_POOL_BASE_ADDR_HIGH_REG, val); +} + static int mvpp2_bm_init(struct device *dev, struct mvpp2 *priv) { enum dma_data_direction dma_dir = DMA_FROM_DEVICE; @@ -644,6 +667,9 @@ static int mvpp2_bm_init(struct device *dev, struct mvpp2 *priv) if (!priv->bm_pools) return -ENOMEM; + if (priv->hw_version == MVPP23) + mvpp23_bm_set_8pool_mode(priv); + err = mvpp2_bm_pools_init(dev, priv); if (err < 0) return err; -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-02-11 11:18 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 ` [PATCH v13 net-next 09/15] net: mvpp2: enable global flow control stefanc 2021-02-11 10:48 ` 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 ` stefanc [this message] 2021-02-11 10:48 ` [PATCH v13 net-next 12/15] net: mvpp2: add BM protection underrun feature support 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-13-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: linkBe 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.