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 07/15] net: mvpp2: add FCA periodic timer configurations Date: Thu, 11 Feb 2021 12:48:54 +0200 [thread overview] Message-ID: <1613040542-16500-8-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> Flow Control periodic timer would be used if port in XOFF to transmit periodic XOFF frames. Signed-off-by: Stefan Chulski <stefanc@marvell.com> Acked-by: Marcin Wojtas <mw@semihalf.com> --- drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 13 ++++++ drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 45 ++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h index e7bbf0a..9239d80 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h @@ -596,6 +596,15 @@ #define MVPP22_MPCS_CLK_RESET_DIV_RATIO(n) ((n) << 4) #define MVPP22_MPCS_CLK_RESET_DIV_SET BIT(11) +/* FCA registers. PPv2.2 and PPv2.3 */ +#define MVPP22_FCA_BASE(port) (0x7600 + (port) * 0x1000) +#define MVPP22_FCA_REG_SIZE 16 +#define MVPP22_FCA_REG_MASK 0xFFFF +#define MVPP22_FCA_CONTROL_REG 0x0 +#define MVPP22_FCA_ENABLE_PERIODIC BIT(11) +#define MVPP22_PERIODIC_COUNTER_LSB_REG (0x110) +#define MVPP22_PERIODIC_COUNTER_MSB_REG (0x114) + /* XPCS registers. PPv2.2 and PPv2.3 */ #define MVPP22_XPCS_BASE(port) (0x7400 + (port) * 0x1000) #define MVPP22_XPCS_CFG0 0x0 @@ -751,6 +760,10 @@ #define MVPP2_TX_FIFO_THRESHOLD(kb) \ ((kb) * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN) +/* MSS Flow control */ +#define FC_QUANTA 0xFFFF +#define FC_CLK_DIVIDER 100 + /* RX buffer constants */ #define MVPP2_SKB_SHINFO_SIZE \ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 5730900..761f745 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -1280,6 +1280,49 @@ static void mvpp22_gop_init_10gkr(struct mvpp2_port *port) writel(val, mpcs + MVPP22_MPCS_CLK_RESET); } +static void mvpp22_gop_fca_enable_periodic(struct mvpp2_port *port, bool en) +{ + struct mvpp2 *priv = port->priv; + void __iomem *fca = priv->iface_base + MVPP22_FCA_BASE(port->gop_id); + u32 val; + + val = readl(fca + MVPP22_FCA_CONTROL_REG); + val &= ~MVPP22_FCA_ENABLE_PERIODIC; + if (en) + val |= MVPP22_FCA_ENABLE_PERIODIC; + writel(val, fca + MVPP22_FCA_CONTROL_REG); +} + +static void mvpp22_gop_fca_set_timer(struct mvpp2_port *port, u32 timer) +{ + struct mvpp2 *priv = port->priv; + void __iomem *fca = priv->iface_base + MVPP22_FCA_BASE(port->gop_id); + u32 lsb, msb; + + lsb = timer & MVPP22_FCA_REG_MASK; + msb = timer >> MVPP22_FCA_REG_SIZE; + + writel(lsb, fca + MVPP22_PERIODIC_COUNTER_LSB_REG); + writel(msb, fca + MVPP22_PERIODIC_COUNTER_MSB_REG); +} + +/* Set Flow Control timer x100 faster than pause quanta to ensure that link + * partner won't send traffic if port is in XOFF mode. + */ +static void mvpp22_gop_fca_set_periodic_timer(struct mvpp2_port *port) +{ + u32 timer; + + timer = (port->priv->tclk / (USEC_PER_SEC * FC_CLK_DIVIDER)) + * FC_QUANTA; + + mvpp22_gop_fca_enable_periodic(port, false); + + mvpp22_gop_fca_set_timer(port, timer); + + mvpp22_gop_fca_enable_periodic(port, true); +} + static int mvpp22_gop_init(struct mvpp2_port *port) { struct mvpp2 *priv = port->priv; @@ -1324,6 +1367,8 @@ static int mvpp22_gop_init(struct mvpp2_port *port) val |= GENCONF_SOFT_RESET1_GOP; regmap_write(priv->sysctrl_base, GENCONF_SOFT_RESET1, val); + mvpp22_gop_fca_set_periodic_timer(port); + unsupported_conf: return 0; -- 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 07/15] net: mvpp2: add FCA periodic timer configurations Date: Thu, 11 Feb 2021 12:48:54 +0200 [thread overview] Message-ID: <1613040542-16500-8-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> Flow Control periodic timer would be used if port in XOFF to transmit periodic XOFF frames. Signed-off-by: Stefan Chulski <stefanc@marvell.com> Acked-by: Marcin Wojtas <mw@semihalf.com> --- drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 13 ++++++ drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 45 ++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h index e7bbf0a..9239d80 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h @@ -596,6 +596,15 @@ #define MVPP22_MPCS_CLK_RESET_DIV_RATIO(n) ((n) << 4) #define MVPP22_MPCS_CLK_RESET_DIV_SET BIT(11) +/* FCA registers. PPv2.2 and PPv2.3 */ +#define MVPP22_FCA_BASE(port) (0x7600 + (port) * 0x1000) +#define MVPP22_FCA_REG_SIZE 16 +#define MVPP22_FCA_REG_MASK 0xFFFF +#define MVPP22_FCA_CONTROL_REG 0x0 +#define MVPP22_FCA_ENABLE_PERIODIC BIT(11) +#define MVPP22_PERIODIC_COUNTER_LSB_REG (0x110) +#define MVPP22_PERIODIC_COUNTER_MSB_REG (0x114) + /* XPCS registers. PPv2.2 and PPv2.3 */ #define MVPP22_XPCS_BASE(port) (0x7400 + (port) * 0x1000) #define MVPP22_XPCS_CFG0 0x0 @@ -751,6 +760,10 @@ #define MVPP2_TX_FIFO_THRESHOLD(kb) \ ((kb) * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN) +/* MSS Flow control */ +#define FC_QUANTA 0xFFFF +#define FC_CLK_DIVIDER 100 + /* RX buffer constants */ #define MVPP2_SKB_SHINFO_SIZE \ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 5730900..761f745 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -1280,6 +1280,49 @@ static void mvpp22_gop_init_10gkr(struct mvpp2_port *port) writel(val, mpcs + MVPP22_MPCS_CLK_RESET); } +static void mvpp22_gop_fca_enable_periodic(struct mvpp2_port *port, bool en) +{ + struct mvpp2 *priv = port->priv; + void __iomem *fca = priv->iface_base + MVPP22_FCA_BASE(port->gop_id); + u32 val; + + val = readl(fca + MVPP22_FCA_CONTROL_REG); + val &= ~MVPP22_FCA_ENABLE_PERIODIC; + if (en) + val |= MVPP22_FCA_ENABLE_PERIODIC; + writel(val, fca + MVPP22_FCA_CONTROL_REG); +} + +static void mvpp22_gop_fca_set_timer(struct mvpp2_port *port, u32 timer) +{ + struct mvpp2 *priv = port->priv; + void __iomem *fca = priv->iface_base + MVPP22_FCA_BASE(port->gop_id); + u32 lsb, msb; + + lsb = timer & MVPP22_FCA_REG_MASK; + msb = timer >> MVPP22_FCA_REG_SIZE; + + writel(lsb, fca + MVPP22_PERIODIC_COUNTER_LSB_REG); + writel(msb, fca + MVPP22_PERIODIC_COUNTER_MSB_REG); +} + +/* Set Flow Control timer x100 faster than pause quanta to ensure that link + * partner won't send traffic if port is in XOFF mode. + */ +static void mvpp22_gop_fca_set_periodic_timer(struct mvpp2_port *port) +{ + u32 timer; + + timer = (port->priv->tclk / (USEC_PER_SEC * FC_CLK_DIVIDER)) + * FC_QUANTA; + + mvpp22_gop_fca_enable_periodic(port, false); + + mvpp22_gop_fca_set_timer(port, timer); + + mvpp22_gop_fca_enable_periodic(port, true); +} + static int mvpp22_gop_init(struct mvpp2_port *port) { struct mvpp2 *priv = port->priv; @@ -1324,6 +1367,8 @@ static int mvpp22_gop_init(struct mvpp2_port *port) val |= GENCONF_SOFT_RESET1_GOP; regmap_write(priv->sysctrl_base, GENCONF_SOFT_RESET1, val); + mvpp22_gop_fca_set_periodic_timer(port); + unsupported_conf: return 0; -- 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:10 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 ` stefanc [this message] 2021-02-11 10:48 ` [PATCH v13 net-next 07/15] net: mvpp2: add FCA periodic timer configurations 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 ` [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-8-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.