Hi Philipp, Thank you for the review. On Tue, Apr 15, 2025 at 2:38 PM Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> wrote: > > On Di, 2025-04-15 at 13:56 +0100, Prabhakar wrote: > > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> > > > > Add the DWMAC glue layer for the GBETH IP found in the Renesas RZ/V2H(P) > > SoC. > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> > > --- > > drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 ++ > > drivers/net/ethernet/stmicro/stmmac/Makefile | 1 + > > .../stmicro/stmmac/dwmac-renesas-gbeth.c | 148 ++++++++++++++++++ > > 3 files changed, 160 insertions(+) > > create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c > > > > diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig > > index 3c820ef56775..2c99b23f0faa 100644 > > --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig > > +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig > > @@ -131,6 +131,17 @@ config DWMAC_QCOM_ETHQOS > > This selects the Qualcomm ETHQOS glue layer support for the > > stmmac device driver. > > > > +config DWMAC_RENESAS_GBETH > > + tristate "Renesas RZ/V2H(P) GBETH support" > > + default ARCH_RENESAS > > + depends on OF && (ARCH_RENESAS || COMPILE_TEST) > > + help > > + Support for Gigabit Ethernet Interface (GBETH) on Renesas > > + RZ/V2H(P) SoCs. > > + > > + This selects the Renesas RZ/V2H(P) Soc specific glue layer support > > + for the stmmac device driver. > > + > > config DWMAC_ROCKCHIP > > tristate "Rockchip dwmac support" > > default ARCH_ROCKCHIP > > diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile > > index 594883fb4164..91050215511b 100644 > > --- a/drivers/net/ethernet/stmicro/stmmac/Makefile > > +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile > > @@ -20,6 +20,7 @@ obj-$(CONFIG_DWMAC_LPC18XX) += dwmac-lpc18xx.o > > obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o > > obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o > > obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o > > +obj-$(CONFIG_DWMAC_RENESAS_GBETH) += dwmac-renesas-gbeth.o > > obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o > > obj-$(CONFIG_DWMAC_RZN1) += dwmac-rzn1.o > > obj-$(CONFIG_DWMAC_S32) += dwmac-s32.o > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c > > new file mode 100644 > > index 000000000000..8674b7605d83 > > --- /dev/null > > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c > > @@ -0,0 +1,148 @@ > > +// SPDX-License-Identifier: GPL-2.0+ > > +/* > > + * dwmac-renesas-gbeth.c - DWMAC Specific Glue layer for Renesas GBETH > > + * > > + * The Rx and Tx clocks are supplied as follows for the GBETH IP. > > + * > > + * Rx / Tx > > + * -------+------------- on / off ------- > > + * | > > + * | Rx-180 / Tx-180 > > + * +---- not ---- on / off ------- > > + * > > + * Copyright (C) 2025 Renesas Electronics Corporation > > + */ > > + > > +#include <linux/clk.h> > > +#include <linux/device.h> > > +#include <linux/module.h> > > +#include <linux/platform_device.h> > > +#include <linux/reset.h> > > + > > +#include "stmmac_platform.h" > > + > > +struct renesas_gbeth { > > + struct plat_stmmacenet_data *plat_dat; > > + struct reset_control *rstc; > > + struct device *dev; > > + void __iomem *regs; > > This doesn't seem to be used anywhere. > I'll get rid of it. > > +}; > > + > > +static const char *const renesas_gbeth_clks[] = { > > + "tx", "tx-180", "rx", "rx-180", > > +}; > > + > > +static int renesas_gbeth_clks_config(struct renesas_gbeth *gbeth, bool enabled) > > +{ > > + struct plat_stmmacenet_data *plat_dat; > > + int ret; > > + > > + plat_dat = gbeth->plat_dat; > > + if (enabled) { > > + ret = reset_control_deassert(gbeth->rstc); > > + if (ret) { > > + dev_err(gbeth->dev, "Reset deassert failed\n"); > > + return ret; > > + } > > + > > + ret = clk_bulk_prepare_enable(plat_dat->num_clks, > > + plat_dat->clks); > > + if (ret) > > + reset_control_assert(gbeth->rstc); > > + } else { > > + clk_bulk_disable_unprepare(plat_dat->num_clks, plat_dat->clks); > > + ret = reset_control_assert(gbeth->rstc); > > + if (ret) > > + dev_err(gbeth->dev, "Reset assert failed\n"); > > + } > > + > > + return ret; > > +} > > Apart from the plat_dat assignment, this function has two completely > separate paths. I'd fold its contents into renesas_gbeth_init/exit(). > OK, I'll fix that in v7. Cheers, Prabhakar