mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
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: 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> Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Hariprasad Kelam <hkelam@marvell.com> Link: https://lore.kernel.org/r/20240513-rzn1-gmac1-v7-6-6acf58b5440d@bootlin.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
81b418a656
commit
f360446ec1
4 changed files with 105 additions and 0 deletions
|
@ -18874,6 +18874,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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
86
drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c
Normal file
86
drivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
// 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");
|
Loading…
Add table
Reference in a new issue