Commit f360446e authored by Clément Léger's avatar Clément Léger Committed by Jakub Kicinski

net: stmmac: add support for RZ/N1 GMAC

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: default avatarClément Léger <clement.leger@bootlin.com>
Co-developed-by: default avatarRomain Gantois <romain.gantois@bootlin.com>
Signed-off-by: default avatarRomain Gantois <romain.gantois@bootlin.com>
Reviewed-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarHariprasad Kelam <hkelam@marvell.com>
Link: https://lore.kernel.org/r/20240513-rzn1-gmac1-v7-6-6acf58b5440d@bootlin.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 81b418a6
...@@ -18874,6 +18874,12 @@ F: include/dt-bindings/net/pcs-rzn1-miic.h ...@@ -18874,6 +18874,12 @@ F: include/dt-bindings/net/pcs-rzn1-miic.h
F: include/linux/pcs-rzn1-miic.h F: include/linux/pcs-rzn1-miic.h
F: net/dsa/tag_rzn1_a5psw.c 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 RENESAS RZ/N1 RTC CONTROLLER DRIVER
M: Miquel Raynal <miquel.raynal@bootlin.com> M: Miquel Raynal <miquel.raynal@bootlin.com>
L: linux-rtc@vger.kernel.org L: linux-rtc@vger.kernel.org
......
...@@ -142,6 +142,18 @@ config DWMAC_ROCKCHIP ...@@ -142,6 +142,18 @@ config DWMAC_ROCKCHIP
This selects the Rockchip RK3288 SoC glue layer support for This selects the Rockchip RK3288 SoC glue layer support for
the stmmac device driver. 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 config DWMAC_SOCFPGA
tristate "SOCFPGA dwmac support" tristate "SOCFPGA dwmac support"
default ARCH_INTEL_SOCFPGA default ARCH_INTEL_SOCFPGA
......
...@@ -21,6 +21,7 @@ obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o ...@@ -21,6 +21,7 @@ obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o
obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o
obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o
obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.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_SOCFPGA) += dwmac-altr-socfpga.o
obj-$(CONFIG_DWMAC_STARFIVE) += dwmac-starfive.o obj-$(CONFIG_DWMAC_STARFIVE) += dwmac-starfive.o
obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o
......
// 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 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@bootlin.com>");
MODULE_DESCRIPTION("Renesas RZN1 DWMAC specific glue layer");
MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment