* [PATCH net-next] net: renesas: rswitch: enable only used MFWD features
@ 2024-12-09 6:24 Nikita Yushchenko
2024-12-10 12:47 ` Yoshihiro Shimoda
2024-12-11 12:40 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Nikita Yushchenko @ 2024-12-09 6:24 UTC (permalink / raw)
To: Yoshihiro Shimoda, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Geert Uytterhoeven
Cc: netdev, linux-renesas-soc, linux-kernel, Michael Dege,
Christian Mardmoeller, Dennis Ostermann, Nikita Yushchenko
Currently, rswitch driver does not utilize most of MFWD forwarding
and processing features. It only uses port-based forwarding for ETHA
ports, and direct descriptor forwarding for GWCA port.
Update rswitch_fwd_init() to enable exactly that, and keep everything
else disabled.
Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
---
drivers/net/ethernet/renesas/rswitch.c | 30 +++++++++++++++++---------
drivers/net/ethernet/renesas/rswitch.h | 14 ++++++------
2 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
index 16b1888270eb..7f17b9656cc3 100644
--- a/drivers/net/ethernet/renesas/rswitch.c
+++ b/drivers/net/ethernet/renesas/rswitch.c
@@ -111,25 +111,35 @@ static void rswitch_top_init(struct rswitch_private *priv)
/* Forwarding engine block (MFWD) */
static void rswitch_fwd_init(struct rswitch_private *priv)
{
+ u32 all_ports_mask = GENMASK(RSWITCH_NUM_AGENTS - 1, 0);
unsigned int i;
- /* For ETHA */
- for (i = 0; i < RSWITCH_NUM_PORTS; i++) {
- iowrite32(FWPC0_DEFAULT, priv->addr + FWPC0(i));
+ /* Start with empty configuration */
+ for (i = 0; i < RSWITCH_NUM_AGENTS; i++) {
+ /* Disable all port features */
+ iowrite32(0, priv->addr + FWPC0(i));
+ /* Disallow L3 forwarding and direct descriptor forwarding */
+ iowrite32(FIELD_PREP(FWCP1_LTHFW, all_ports_mask),
+ priv->addr + FWPC1(i));
+ /* Disallow L2 forwarding */
+ iowrite32(FIELD_PREP(FWCP2_LTWFW, all_ports_mask),
+ priv->addr + FWPC2(i));
+ /* Disallow port based forwarding */
iowrite32(0, priv->addr + FWPBFC(i));
}
- for (i = 0; i < RSWITCH_NUM_PORTS; i++) {
+ /* For enabled ETHA ports, setup port based forwarding */
+ rswitch_for_each_enabled_port(priv, i) {
+ /* Port based forwarding from port i to GWCA port */
+ rswitch_modify(priv->addr, FWPBFC(i), FWPBFC_PBDV,
+ FIELD_PREP(FWPBFC_PBDV, BIT(priv->gwca.index)));
+ /* Within GWCA port, forward to Rx queue for port i */
iowrite32(priv->rdev[i]->rx_queue->index,
priv->addr + FWPBFCSDC(GWCA_INDEX, i));
- iowrite32(BIT(priv->gwca.index), priv->addr + FWPBFC(i));
}
- /* For GWCA */
- iowrite32(FWPC0_DEFAULT, priv->addr + FWPC0(priv->gwca.index));
- iowrite32(FWPC1_DDE, priv->addr + FWPC1(priv->gwca.index));
- iowrite32(0, priv->addr + FWPBFC(priv->gwca.index));
- iowrite32(GENMASK(RSWITCH_NUM_PORTS - 1, 0), priv->addr + FWPBFC(priv->gwca.index));
+ /* For GWCA port, allow direct descriptor forwarding */
+ rswitch_modify(priv->addr, FWPC1(priv->gwca.index), FWPC1_DDE, FWPC1_DDE);
}
/* Gateway CPU agent block (GWCA) */
diff --git a/drivers/net/ethernet/renesas/rswitch.h b/drivers/net/ethernet/renesas/rswitch.h
index 9ac55b4f5b14..741b089c8523 100644
--- a/drivers/net/ethernet/renesas/rswitch.h
+++ b/drivers/net/ethernet/renesas/rswitch.h
@@ -12,6 +12,7 @@
#define RSWITCH_MAX_NUM_QUEUES 128
+#define RSWITCH_NUM_AGENTS 5
#define RSWITCH_NUM_PORTS 3
#define rswitch_for_each_enabled_port(priv, i) \
for (i = 0; i < RSWITCH_NUM_PORTS; i++) \
@@ -811,6 +812,7 @@ enum rswitch_gwca_mode {
#define CABPPFLC_INIT_VALUE 0x00800080
/* MFWD */
+#define FWPC0(i) (FWPC00 + (i) * 0x10)
#define FWPC0_LTHTA BIT(0)
#define FWPC0_IP4UE BIT(3)
#define FWPC0_IP4TE BIT(4)
@@ -824,15 +826,15 @@ enum rswitch_gwca_mode {
#define FWPC0_MACHMA BIT(27)
#define FWPC0_VLANSA BIT(28)
-#define FWPC0(i) (FWPC00 + (i) * 0x10)
-#define FWPC0_DEFAULT (FWPC0_LTHTA | FWPC0_IP4UE | FWPC0_IP4TE | \
- FWPC0_IP4OE | FWPC0_L2SE | FWPC0_IP4EA | \
- FWPC0_IPDSA | FWPC0_IPHLA | FWPC0_MACSDA | \
- FWPC0_MACHLA | FWPC0_MACHMA | FWPC0_VLANSA)
#define FWPC1(i) (FWPC10 + (i) * 0x10)
+#define FWCP1_LTHFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
#define FWPC1_DDE BIT(0)
-#define FWPBFC(i) (FWPBFC0 + (i) * 0x10)
+#define FWPC2(i) (FWPC20 + (i) * 0x10)
+#define FWCP2_LTWFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
+
+#define FWPBFC(i) (FWPBFC0 + (i) * 0x10)
+#define FWPBFC_PBDV GENMASK(RSWITCH_NUM_AGENTS - 1, 0)
#define FWPBFCSDC(j, i) (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)
--
2.39.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH net-next] net: renesas: rswitch: enable only used MFWD features
2024-12-09 6:24 [PATCH net-next] net: renesas: rswitch: enable only used MFWD features Nikita Yushchenko
@ 2024-12-10 12:47 ` Yoshihiro Shimoda
2024-12-11 12:40 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Yoshihiro Shimoda @ 2024-12-10 12:47 UTC (permalink / raw)
To: nikita.yoush, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Geert Uytterhoeven
Cc: netdev, linux-renesas-soc, linux-kernel, Michael Dege,
Christian Mardmoeller, Dennis Ostermann, nikita.yoush
Hello Nikita-san,
> From: Nikita Yushchenko, Sent: Monday, December 9, 2024 3:24 PM
>
> Currently, rswitch driver does not utilize most of MFWD forwarding
> and processing features. It only uses port-based forwarding for ETHA
> ports, and direct descriptor forwarding for GWCA port.
>
> Update rswitch_fwd_init() to enable exactly that, and keep everything
> else disabled.
>
> Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Thank you for the patch. It looks good to me. So,
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
And, I tested the patch on my environment (R-Car S4 Spider), and
it worked without any regression. So,
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Best regards,
Yoshihiro Shimoda
> ---
> drivers/net/ethernet/renesas/rswitch.c | 30 +++++++++++++++++---------
> drivers/net/ethernet/renesas/rswitch.h | 14 ++++++------
> 2 files changed, 28 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
> index 16b1888270eb..7f17b9656cc3 100644
> --- a/drivers/net/ethernet/renesas/rswitch.c
> +++ b/drivers/net/ethernet/renesas/rswitch.c
> @@ -111,25 +111,35 @@ static void rswitch_top_init(struct rswitch_private *priv)
> /* Forwarding engine block (MFWD) */
> static void rswitch_fwd_init(struct rswitch_private *priv)
> {
> + u32 all_ports_mask = GENMASK(RSWITCH_NUM_AGENTS - 1, 0);
> unsigned int i;
>
> - /* For ETHA */
> - for (i = 0; i < RSWITCH_NUM_PORTS; i++) {
> - iowrite32(FWPC0_DEFAULT, priv->addr + FWPC0(i));
> + /* Start with empty configuration */
> + for (i = 0; i < RSWITCH_NUM_AGENTS; i++) {
> + /* Disable all port features */
> + iowrite32(0, priv->addr + FWPC0(i));
> + /* Disallow L3 forwarding and direct descriptor forwarding */
> + iowrite32(FIELD_PREP(FWCP1_LTHFW, all_ports_mask),
> + priv->addr + FWPC1(i));
> + /* Disallow L2 forwarding */
> + iowrite32(FIELD_PREP(FWCP2_LTWFW, all_ports_mask),
> + priv->addr + FWPC2(i));
> + /* Disallow port based forwarding */
> iowrite32(0, priv->addr + FWPBFC(i));
> }
>
> - for (i = 0; i < RSWITCH_NUM_PORTS; i++) {
> + /* For enabled ETHA ports, setup port based forwarding */
> + rswitch_for_each_enabled_port(priv, i) {
> + /* Port based forwarding from port i to GWCA port */
> + rswitch_modify(priv->addr, FWPBFC(i), FWPBFC_PBDV,
> + FIELD_PREP(FWPBFC_PBDV, BIT(priv->gwca.index)));
> + /* Within GWCA port, forward to Rx queue for port i */
> iowrite32(priv->rdev[i]->rx_queue->index,
> priv->addr + FWPBFCSDC(GWCA_INDEX, i));
> - iowrite32(BIT(priv->gwca.index), priv->addr + FWPBFC(i));
> }
>
> - /* For GWCA */
> - iowrite32(FWPC0_DEFAULT, priv->addr + FWPC0(priv->gwca.index));
> - iowrite32(FWPC1_DDE, priv->addr + FWPC1(priv->gwca.index));
> - iowrite32(0, priv->addr + FWPBFC(priv->gwca.index));
> - iowrite32(GENMASK(RSWITCH_NUM_PORTS - 1, 0), priv->addr + FWPBFC(priv->gwca.index));
> + /* For GWCA port, allow direct descriptor forwarding */
> + rswitch_modify(priv->addr, FWPC1(priv->gwca.index), FWPC1_DDE, FWPC1_DDE);
> }
>
> /* Gateway CPU agent block (GWCA) */
> diff --git a/drivers/net/ethernet/renesas/rswitch.h b/drivers/net/ethernet/renesas/rswitch.h
> index 9ac55b4f5b14..741b089c8523 100644
> --- a/drivers/net/ethernet/renesas/rswitch.h
> +++ b/drivers/net/ethernet/renesas/rswitch.h
> @@ -12,6 +12,7 @@
>
> #define RSWITCH_MAX_NUM_QUEUES 128
>
> +#define RSWITCH_NUM_AGENTS 5
> #define RSWITCH_NUM_PORTS 3
> #define rswitch_for_each_enabled_port(priv, i) \
> for (i = 0; i < RSWITCH_NUM_PORTS; i++) \
> @@ -811,6 +812,7 @@ enum rswitch_gwca_mode {
> #define CABPPFLC_INIT_VALUE 0x00800080
>
> /* MFWD */
> +#define FWPC0(i) (FWPC00 + (i) * 0x10)
> #define FWPC0_LTHTA BIT(0)
> #define FWPC0_IP4UE BIT(3)
> #define FWPC0_IP4TE BIT(4)
> @@ -824,15 +826,15 @@ enum rswitch_gwca_mode {
> #define FWPC0_MACHMA BIT(27)
> #define FWPC0_VLANSA BIT(28)
>
> -#define FWPC0(i) (FWPC00 + (i) * 0x10)
> -#define FWPC0_DEFAULT (FWPC0_LTHTA | FWPC0_IP4UE | FWPC0_IP4TE | \
> - FWPC0_IP4OE | FWPC0_L2SE | FWPC0_IP4EA | \
> - FWPC0_IPDSA | FWPC0_IPHLA | FWPC0_MACSDA | \
> - FWPC0_MACHLA | FWPC0_MACHMA | FWPC0_VLANSA)
> #define FWPC1(i) (FWPC10 + (i) * 0x10)
> +#define FWCP1_LTHFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
> #define FWPC1_DDE BIT(0)
>
> -#define FWPBFC(i) (FWPBFC0 + (i) * 0x10)
> +#define FWPC2(i) (FWPC20 + (i) * 0x10)
> +#define FWCP2_LTWFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
> +
> +#define FWPBFC(i) (FWPBFC0 + (i) * 0x10)
> +#define FWPBFC_PBDV GENMASK(RSWITCH_NUM_AGENTS - 1, 0)
>
> #define FWPBFCSDC(j, i) (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)
>
> --
> 2.39.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] net: renesas: rswitch: enable only used MFWD features
2024-12-09 6:24 [PATCH net-next] net: renesas: rswitch: enable only used MFWD features Nikita Yushchenko
2024-12-10 12:47 ` Yoshihiro Shimoda
@ 2024-12-11 12:40 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-12-11 12:40 UTC (permalink / raw)
To: Nikita Yushchenko
Cc: yoshihiro.shimoda.uh, andrew, davem, edumazet, kuba, pabeni,
geert+renesas, netdev, linux-renesas-soc, linux-kernel,
michael.dege, christian.mardmoeller, dennis.ostermann
Hello:
This patch was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:
On Mon, 9 Dec 2024 11:24:11 +0500 you wrote:
> Currently, rswitch driver does not utilize most of MFWD forwarding
> and processing features. It only uses port-based forwarding for ETHA
> ports, and direct descriptor forwarding for GWCA port.
>
> Update rswitch_fwd_init() to enable exactly that, and keep everything
> else disabled.
>
> [...]
Here is the summary with links:
- [net-next] net: renesas: rswitch: enable only used MFWD features
https://git.kernel.org/netdev/net-next/c/54d3970548bd
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-11 12:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-12-09 6:24 [PATCH net-next] net: renesas: rswitch: enable only used MFWD features Nikita Yushchenko
2024-12-10 12:47 ` Yoshihiro Shimoda
2024-12-11 12:40 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®