From: Lad Prabhakar Extend the RZN1 A5PSW driver to support SoC-specific adjustments to the management (CPU) port frame length. Some SoCs, such as the RZ/T2H and RZ/N2H, require additional headroom on the management port to account for a special management tag added to frames. Without this adjustment, frames may be incorrectly detected as oversized and subsequently discarded. Introduce a new field, `management_port_frame_len_adj`, in `struct a5psw_of_data` to represent this adjustment, and apply it in `a5psw_port_change_mtu()` when configuring the frame length for the CPU port. This change prepares the driver for use on RZ/T2H and RZ/N2H SoCs. Signed-off-by: Lad Prabhakar --- drivers/net/dsa/rzn1_a5psw.c | 4 ++++ drivers/net/dsa/rzn1_a5psw.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/drivers/net/dsa/rzn1_a5psw.c b/drivers/net/dsa/rzn1_a5psw.c index dc42a409eaef..82f4236a726e 100644 --- a/drivers/net/dsa/rzn1_a5psw.c +++ b/drivers/net/dsa/rzn1_a5psw.c @@ -211,6 +211,10 @@ static int a5psw_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu) struct a5psw *a5psw = ds->priv; new_mtu += ETH_HLEN + A5PSW_EXTRA_MTU_LEN + ETH_FCS_LEN; + + if (dsa_is_cpu_port(ds, port)) + new_mtu += a5psw->of_data->management_port_frame_len_adj; + a5psw_reg_writel(a5psw, A5PSW_FRM_LENGTH(port), new_mtu); return 0; diff --git a/drivers/net/dsa/rzn1_a5psw.h b/drivers/net/dsa/rzn1_a5psw.h index 0fef32451e4f..41c910d534cf 100644 --- a/drivers/net/dsa/rzn1_a5psw.h +++ b/drivers/net/dsa/rzn1_a5psw.h @@ -235,11 +235,15 @@ union lk_data { * @nports: Number of ports in the switch * @cpu_port: CPU port number * @tag_proto: DSA tag protocol used by the switch + * @management_port_frame_len_adj: Adjustment to apply to management + * port frame length to account for accepting a frame with special + * management tag. */ struct a5psw_of_data { unsigned int nports; unsigned int cpu_port; enum dsa_tag_protocol tag_proto; + unsigned int management_port_frame_len_adj; }; /** -- 2.52.0