Message ID | 20240409-rzn1-gmac1-v2-4-79ca45f2fc79@bootlin.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | net: stmmac: Add support for RZN1 GMAC devices | expand |
Hi Romain, On Tue, Apr 9, 2024 at 11:21 AM Romain Gantois <romain.gantois@bootlin.com> wrote: > From: Clément Léger <clement.leger@bootlin.com> > > Add support for the Renesas RZ/N1 GMAC. This support can make use of a > custom RZ/N1 PCS which is fetched by parsing the pcs-handle device tree > property. > > Signed-off-by: "Clément Léger" <clement.leger@bootlin.com> > Co-developed-by: Romain Gantois <romain.gantois@bootlin.com> > Signed-off-by: Romain Gantois <romain.gantois@bootlin.com> Thanks for your patch! > --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig > +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig > @@ -142,6 +142,18 @@ config DWMAC_ROCKCHIP > This selects the Rockchip RK3288 SoC glue layer support for > the stmmac device driver. > > +config DWMAC_RZN1 > + tristate "Renesas RZ/N1 dwmac support" > + default ARCH_RZN1 Why default to enabled? > + depends on OF && (ARCH_RZN1 || COMPILE_TEST) > + select PCS_RZN1_MIIC > + help > + Support for Ethernet controller on Renesas RZ/N1 SoC family. > + > + This selects the Renesas RZ/N1 SoC glue layer support for > + the stmmac device driver. This support can make use of a custom MII > + converter PCS device. > + > config DWMAC_SOCFPGA > tristate "SOCFPGA dwmac support" > default ARCH_INTEL_SOCFPGA Gr{oetje,eeting}s, Geert
Hi Geert, On Tue, 9 Apr 2024, Geert Uytterhoeven wrote: > > +config DWMAC_RZN1 > > + tristate "Renesas RZ/N1 dwmac support" > > + default ARCH_RZN1 > > Why default to enabled? > > > + depends on OF && (ARCH_RZN1 || COMPILE_TEST) The kernel doc states this as one of the possible cases where setting default y/m makes sense: ``` Sub-driver behavior or similar options for a driver that is “default n”. This allows you to provide sane defaults. ``` In the case of DWMAC_RZN1, it is a suboption of stmmac which is "default n", and I think it makes sense to enable the RZN1 ethernet controller driver if both the stmmac driver and the RZN1 architecture were explicitely selected. Best Regards,
Hi Romain, On Wed, Apr 10, 2024 at 2:24 PM Romain Gantois <romain.gantois@bootlin.com> wrote: > On Tue, 9 Apr 2024, Geert Uytterhoeven wrote: > > > +config DWMAC_RZN1 > > > + tristate "Renesas RZ/N1 dwmac support" > > > + default ARCH_RZN1 > > > > Why default to enabled? > > > > > + depends on OF && (ARCH_RZN1 || COMPILE_TEST) > > The kernel doc states this as one of the possible cases where setting default > y/m makes sense: > > ``` > Sub-driver behavior or similar options for a driver that is “default n”. This > allows you to provide sane defaults. > ``` > > In the case of DWMAC_RZN1, it is a suboption of stmmac which is "default n", and > I think it makes sense to enable the RZN1 ethernet controller driver if both the > stmmac driver and the RZN1 architecture were explicitely selected. Thanks for your answer, that makes perfect sense! Gr{oetje,eeting}s, Geert
diff --git a/MAINTAINERS b/MAINTAINERS index 4745ea94d463..40bd3eb355fd 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18848,6 +18848,12 @@ F: include/dt-bindings/net/pcs-rzn1-miic.h F: include/linux/pcs-rzn1-miic.h F: net/dsa/tag_rzn1_a5psw.c +RENESAS RZ/N1 DWMAC GLUE LAYER +M: Romain Gantois <romain.gantois@bootlin.com> +S: Maintained +F: Documentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml +F: drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c + RENESAS RZ/N1 RTC CONTROLLER DRIVER M: Miquel Raynal <miquel.raynal@bootlin.com> L: linux-rtc@vger.kernel.org diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig index 4ec61f1ee71a..05cc07b8f48c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig @@ -142,6 +142,18 @@ config DWMAC_ROCKCHIP This selects the Rockchip RK3288 SoC glue layer support for the stmmac device driver. +config DWMAC_RZN1 + tristate "Renesas RZ/N1 dwmac support" + default ARCH_RZN1 + depends on OF && (ARCH_RZN1 || COMPILE_TEST) + select PCS_RZN1_MIIC + help + Support for Ethernet controller on Renesas RZ/N1 SoC family. + + This selects the Renesas RZ/N1 SoC glue layer support for + the stmmac device driver. This support can make use of a custom MII + converter PCS device. + config DWMAC_SOCFPGA tristate "SOCFPGA dwmac support" default ARCH_INTEL_SOCFPGA diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile index 26cad4344701..c2f0e91f6bf8 100644 --- a/drivers/net/ethernet/stmicro/stmmac/Makefile +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile @@ -21,6 +21,7 @@ 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_ROCKCHIP) += dwmac-rk.o +obj-$(CONFIG_DWMAC_RZN1) += dwmac-rzn1.o obj-$(CONFIG_DWMAC_SOCFPGA) += dwmac-altr-socfpga.o obj-$(CONFIG_DWMAC_STARFIVE) += dwmac-starfive.o obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c new file mode 100644 index 000000000000..e85524c2017c --- /dev/null +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2024 Schneider-Electric + * + * Clément Léger <clement.leger@bootlin.com> + */ + +#include <linux/of.h> +#include <linux/pcs-rzn1-miic.h> +#include <linux/phylink.h> +#include <linux/platform_device.h> + +#include "stmmac_platform.h" +#include "stmmac.h" + +static int rzn1_dwmac_pcs_init(struct stmmac_priv *priv, + struct mac_device_info *hw) +{ + struct device_node *np = priv->device->of_node; + struct device_node *pcs_node; + struct phylink_pcs *pcs; + + pcs_node = of_parse_phandle(np, "pcs-handle", 0); + + if (pcs_node) { + pcs = miic_create(priv->device, pcs_node); + of_node_put(pcs_node); + if (IS_ERR(pcs)) + return PTR_ERR(pcs); + + priv->hw->phylink_pcs = pcs; + } + + return 0; +} + +static void rzn1_dwmac_pcs_exit(struct stmmac_priv *priv, + struct mac_device_info *hw) +{ + if (priv->hw->phylink_pcs) + miic_destroy(priv->hw->phylink_pcs); +} + +static int rzn1_dwmac_probe(struct platform_device *pdev) +{ + struct plat_stmmacenet_data *plat_dat; + struct stmmac_resources stmmac_res; + struct device *dev = &pdev->dev; + int ret; + + ret = stmmac_get_platform_resources(pdev, &stmmac_res); + if (ret) + return ret; + + plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac); + if (IS_ERR(plat_dat)) + return PTR_ERR(plat_dat); + + plat_dat->bsp_priv = plat_dat; + plat_dat->pcs_init = rzn1_dwmac_pcs_init; + plat_dat->pcs_exit = rzn1_dwmac_pcs_exit; + + ret = stmmac_dvr_probe(dev, plat_dat, &stmmac_res); + if (ret) + return ret; + + return 0; +} + +static const struct of_device_id rzn1_dwmac_match[] = { + { .compatible = "renesas,rzn1-gmac" }, + { } +}; +MODULE_DEVICE_TABLE(of, rzn1_dwmac_match); + +static struct platform_driver rzn1_dwmac_driver = { + .probe = rzn1_dwmac_probe, + .remove_new = stmmac_pltfr_remove, + .driver = { + .name = "rzn1-dwmac", + .of_match_table = rzn1_dwmac_match, + }, +}; +module_platform_driver(rzn1_dwmac_driver); + +MODULE_AUTHOR("Clément Léger <clement.leger@bootlin.com>"); +MODULE_DESCRIPTION("Renesas RZN1 DWMAC specific glue layer"); +MODULE_LICENSE("GPL");