Message ID | 20241209062411.152927-1-nikita.yoush@cogentembedded.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | [net-next] net: renesas: rswitch: enable only used MFWD features | expand |
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
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!
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)
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(-)