[PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC
Hariprasad Kelam
hkelam at marvell.com
Mon May 13 03:08:16 PDT 2024
> Subject: [EXTERNAL] [PATCH net-next v7 6/7] net: stmmac: add support for
> RZ/N1 GMAC
>
> Prioritize security for external emails: Confirm sender and content safety
> before clicking links or opening attachments
>
> ----------------------------------------------------------------------
> From: Clément Léger <clement.leger at 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 at bootlin.com>
> Co-developed-by: Romain Gantois <romain.gantois at bootlin.com>
> Signed-off-by: Romain Gantois <romain.gantois at bootlin.com>
> Reviewed-by: Russell King (Oracle) <rmk+kernel at armlinux.org.uk>
> ---
> MAINTAINERS | 6 ++
> drivers/net/ethernet/stmicro/stmmac/Kconfig | 12 ++++
> drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
> drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c | 86
> ++++++++++++++++++++++++
> 4 files changed, 105 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index b81b2be60b774..95bb09aacf181 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -18868,6 +18868,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 at 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 at bootlin.com>
> L: linux-rtc at vger.kernel.org
> diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig
> b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> index 4ec61f1ee71a2..05cc07b8f48c0 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 26cad4344701e..c2f0e91f6bf83 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 0000000000000..848cf3c01f4ab
> --- /dev/null
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2024 Schneider-Electric
> + *
> + * Clément Léger <clement.leger at 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 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) {
> + 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 at bootlin.com>");
> +MODULE_DESCRIPTION("Renesas RZN1 DWMAC specific glue layer");
> +MODULE_LICENSE("GPL");
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam at marvell.com>
More information about the linux-arm-kernel
mailing list