* [PATCH net-next v7 1/7] dt-bindings: net: renesas,rzn1-gmac: Document RZ/N1 GMAC support
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 7:25 ` [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method Romain Gantois
` (6 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, Romain Gantois
From: Clément Léger <clement.leger@bootlin.com>
The RZ/N1 series of MPUs feature up to two Gigabit Ethernet controllers.
These controllers are based on Synopsys IPs. They can be connected to
RZ/N1 RGMII/RMII converters.
Add a binding that describes these GMAC devices.
Signed-off-by: Clément Léger <clement.leger@bootlin.com>
[rgantois: commit log]
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
---
.../devicetree/bindings/net/renesas,rzn1-gmac.yaml | 66 ++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml b/Documentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml
new file mode 100644
index 0000000000000..d9a8d586e260c
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/renesas,rzn1-gmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Renesas GMAC
+
+maintainers:
+ - Romain Gantois <romain.gantois@bootlin.com>
+
+select:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,r9a06g032-gmac
+ - renesas,rzn1-gmac
+ required:
+ - compatible
+
+allOf:
+ - $ref: snps,dwmac.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - renesas,r9a06g032-gmac
+ - const: renesas,rzn1-gmac
+ - const: snps,dwmac
+
+ pcs-handle:
+ description:
+ phandle pointing to a PCS sub-node compatible with
+ renesas,rzn1-miic.yaml#
+
+required:
+ - compatible
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/r9a06g032-sysctrl.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ ethernet@44000000 {
+ compatible = "renesas,r9a06g032-gmac", "renesas,rzn1-gmac", "snps,dwmac";
+ reg = <0x44000000 0x2000>;
+ interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
+ clock-names = "stmmaceth";
+ clocks = <&sysctrl R9A06G032_HCLK_GMAC0>;
+ power-domains = <&sysctrl>;
+ snps,multicast-filter-bins = <256>;
+ snps,perfect-filter-entries = <128>;
+ tx-fifo-depth = <2048>;
+ rx-fifo-depth = <4096>;
+ pcs-handle = <&mii_conv1>;
+ phy-mode = "mii";
+ };
+
+...
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
2024-05-13 7:25 ` [PATCH net-next v7 1/7] dt-bindings: net: renesas,rzn1-gmac: Document RZ/N1 GMAC support Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 10:13 ` Hariprasad Kelam
2024-05-13 11:12 ` Serge Semin
2024-05-13 7:25 ` [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices Romain Gantois
` (5 subsequent siblings)
7 siblings, 2 replies; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, Romain Gantois,
Russell King (Oracle)
From: Serge Semin <fancer.lancer@gmail.com>
Currently the XPCS handler destruction is performed in the
stmmac_mdio_unregister() method. It doesn't look good because the handler
isn't originally created in the corresponding protagonist
stmmac_mdio_unregister(), but in the stmmac_xpcs_setup() function. In
order to have more coherent MDIO and XPCS setup/cleanup procedures,
let's move the DW XPCS destruction to the dedicated stmmac_pcs_clean()
method.
This method will also be used to cleanup PCS hardware using the
pcs_exit() callback that will be introduced to stmmac in a subsequent
patch.
Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
---
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 +
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++++-
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 14 +++++++++++---
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index dddcaa9220cc3..badfe686a5702 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -361,6 +361,7 @@ int stmmac_mdio_unregister(struct net_device *ndev);
int stmmac_mdio_register(struct net_device *ndev);
int stmmac_mdio_reset(struct mii_bus *mii);
int stmmac_xpcs_setup(struct mii_bus *mii);
+void stmmac_pcs_clean(struct net_device *ndev);
void stmmac_set_ethtool_ops(struct net_device *netdev);
int stmmac_init_tstamp_counter(struct stmmac_priv *priv, u32 systime_flags);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 3d828904db0d3..0ac99c132733d 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -7789,8 +7789,9 @@ int stmmac_dvr_probe(struct device *device,
error_netdev_register:
phylink_destroy(priv->phylink);
-error_xpcs_setup:
error_phy_setup:
+ stmmac_pcs_clean(ndev);
+error_xpcs_setup:
if (priv->hw->pcs != STMMAC_PCS_TBI &&
priv->hw->pcs != STMMAC_PCS_RTBI)
stmmac_mdio_unregister(ndev);
@@ -7832,6 +7833,9 @@ void stmmac_dvr_remove(struct device *dev)
if (priv->plat->stmmac_rst)
reset_control_assert(priv->plat->stmmac_rst);
reset_control_assert(priv->plat->stmmac_ahb_rst);
+
+ stmmac_pcs_clean(ndev);
+
if (priv->hw->pcs != STMMAC_PCS_TBI &&
priv->hw->pcs != STMMAC_PCS_RTBI)
stmmac_mdio_unregister(ndev);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 0542cfd1817e6..73ba9901a4439 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -523,6 +523,17 @@ int stmmac_xpcs_setup(struct mii_bus *bus)
return 0;
}
+void stmmac_pcs_clean(struct net_device *ndev)
+{
+ struct stmmac_priv *priv = netdev_priv(ndev);
+
+ if (!priv->hw->xpcs)
+ return;
+
+ xpcs_destroy(priv->hw->xpcs);
+ priv->hw->xpcs = NULL;
+}
+
/**
* stmmac_mdio_register
* @ndev: net device structure
@@ -679,9 +690,6 @@ int stmmac_mdio_unregister(struct net_device *ndev)
if (!priv->mii)
return 0;
- if (priv->hw->xpcs)
- xpcs_destroy(priv->hw->xpcs);
-
mdiobus_unregister(priv->mii);
priv->mii->priv = NULL;
mdiobus_free(priv->mii);
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method
2024-05-13 7:25 ` [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method Romain Gantois
@ 2024-05-13 10:13 ` Hariprasad Kelam
2024-05-13 11:12 ` Serge Semin
1 sibling, 0 replies; 17+ messages in thread
From: Hariprasad Kelam @ 2024-05-13 10:13 UTC (permalink / raw)
To: Romain Gantois, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, Russell King (Oracle)
> From: Serge Semin <fancer.lancer@gmail.com>
>
> Currently the XPCS handler destruction is performed in the
> stmmac_mdio_unregister() method. It doesn't look good because the handler
> isn't originally created in the corresponding protagonist
> stmmac_mdio_unregister(), but in the stmmac_xpcs_setup() function. In
> order to have more coherent MDIO and XPCS setup/cleanup procedures, let's
> move the DW XPCS destruction to the dedicated stmmac_pcs_clean()
> method.
>
> This method will also be used to cleanup PCS hardware using the
> pcs_exit() callback that will be introduced to stmmac in a subsequent patch.
>
> Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 +
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++++-
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 14 +++++++++++---
> 3 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> index dddcaa9220cc3..badfe686a5702 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> @@ -361,6 +361,7 @@ int stmmac_mdio_unregister(struct net_device
> *ndev); int stmmac_mdio_register(struct net_device *ndev); int
> stmmac_mdio_reset(struct mii_bus *mii); int stmmac_xpcs_setup(struct
> mii_bus *mii);
> +void stmmac_pcs_clean(struct net_device *ndev);
> void stmmac_set_ethtool_ops(struct net_device *netdev);
>
> int stmmac_init_tstamp_counter(struct stmmac_priv *priv, u32
> systime_flags); diff --git
> a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 3d828904db0d3..0ac99c132733d 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -7789,8 +7789,9 @@ int stmmac_dvr_probe(struct device *device,
>
> error_netdev_register:
> phylink_destroy(priv->phylink);
> -error_xpcs_setup:
> error_phy_setup:
> + stmmac_pcs_clean(ndev);
> +error_xpcs_setup:
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> @@ -7832,6 +7833,9 @@ void stmmac_dvr_remove(struct device *dev)
> if (priv->plat->stmmac_rst)
> reset_control_assert(priv->plat->stmmac_rst);
> reset_control_assert(priv->plat->stmmac_ahb_rst);
> +
> + stmmac_pcs_clean(ndev);
> +
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> index 0542cfd1817e6..73ba9901a4439 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> @@ -523,6 +523,17 @@ int stmmac_xpcs_setup(struct mii_bus *bus)
> return 0;
> }
>
> +void stmmac_pcs_clean(struct net_device *ndev) {
> + struct stmmac_priv *priv = netdev_priv(ndev);
> +
> + if (!priv->hw->xpcs)
> + return;
> +
> + xpcs_destroy(priv->hw->xpcs);
> + priv->hw->xpcs = NULL;
> +}
> +
> /**
> * stmmac_mdio_register
> * @ndev: net device structure
> @@ -679,9 +690,6 @@ int stmmac_mdio_unregister(struct net_device *ndev)
> if (!priv->mii)
> return 0;
>
> - if (priv->hw->xpcs)
> - xpcs_destroy(priv->hw->xpcs);
> -
> mdiobus_unregister(priv->mii);
> priv->mii->priv = NULL;
> mdiobus_free(priv->mii);
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method
2024-05-13 7:25 ` [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method Romain Gantois
2024-05-13 10:13 ` Hariprasad Kelam
@ 2024-05-13 11:12 ` Serge Semin
1 sibling, 0 replies; 17+ messages in thread
From: Serge Semin @ 2024-05-13 11:12 UTC (permalink / raw)
To: Romain Gantois
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel,
Russell King (Oracle)
Hi Romain
On Mon, May 13, 2024 at 09:25:13AM +0200, Romain Gantois wrote:
> From: Serge Semin <fancer.lancer@gmail.com>
>
> Currently the XPCS handler destruction is performed in the
> stmmac_mdio_unregister() method. It doesn't look good because the handler
> isn't originally created in the corresponding protagonist
> stmmac_mdio_unregister(), but in the stmmac_xpcs_setup() function. In
> order to have more coherent MDIO and XPCS setup/cleanup procedures,
> let's move the DW XPCS destruction to the dedicated stmmac_pcs_clean()
> method.
>
> This method will also be used to cleanup PCS hardware using the
> pcs_exit() callback that will be introduced to stmmac in a subsequent
> patch.
>
> Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
Looking good. Thanks!
* Not sure whether my explicit Rb tag will be required in such the tags
disposition.)
-Serge(y)
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 +
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++++-
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 14 +++++++++++---
> 3 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> index dddcaa9220cc3..badfe686a5702 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> @@ -361,6 +361,7 @@ int stmmac_mdio_unregister(struct net_device *ndev);
> int stmmac_mdio_register(struct net_device *ndev);
> int stmmac_mdio_reset(struct mii_bus *mii);
> int stmmac_xpcs_setup(struct mii_bus *mii);
> +void stmmac_pcs_clean(struct net_device *ndev);
> void stmmac_set_ethtool_ops(struct net_device *netdev);
>
> int stmmac_init_tstamp_counter(struct stmmac_priv *priv, u32 systime_flags);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 3d828904db0d3..0ac99c132733d 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -7789,8 +7789,9 @@ int stmmac_dvr_probe(struct device *device,
>
> error_netdev_register:
> phylink_destroy(priv->phylink);
> -error_xpcs_setup:
> error_phy_setup:
> + stmmac_pcs_clean(ndev);
> +error_xpcs_setup:
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> @@ -7832,6 +7833,9 @@ void stmmac_dvr_remove(struct device *dev)
> if (priv->plat->stmmac_rst)
> reset_control_assert(priv->plat->stmmac_rst);
> reset_control_assert(priv->plat->stmmac_ahb_rst);
> +
> + stmmac_pcs_clean(ndev);
> +
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> index 0542cfd1817e6..73ba9901a4439 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> @@ -523,6 +523,17 @@ int stmmac_xpcs_setup(struct mii_bus *bus)
> return 0;
> }
>
> +void stmmac_pcs_clean(struct net_device *ndev)
> +{
> + struct stmmac_priv *priv = netdev_priv(ndev);
> +
> + if (!priv->hw->xpcs)
> + return;
> +
> + xpcs_destroy(priv->hw->xpcs);
> + priv->hw->xpcs = NULL;
> +}
> +
> /**
> * stmmac_mdio_register
> * @ndev: net device structure
> @@ -679,9 +690,6 @@ int stmmac_mdio_unregister(struct net_device *ndev)
> if (!priv->mii)
> return 0;
>
> - if (priv->hw->xpcs)
> - xpcs_destroy(priv->hw->xpcs);
> -
> mdiobus_unregister(priv->mii);
> priv->mii->priv = NULL;
> mdiobus_free(priv->mii);
>
> --
> 2.44.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
2024-05-13 7:25 ` [PATCH net-next v7 1/7] dt-bindings: net: renesas,rzn1-gmac: Document RZ/N1 GMAC support Romain Gantois
2024-05-13 7:25 ` [PATCH net-next v7 2/7] net: stmmac: Add dedicated XPCS cleanup method Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 10:20 ` Hariprasad Kelam
2024-05-13 11:18 ` Serge Semin
2024-05-13 7:25 ` [PATCH net-next v7 4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations Romain Gantois
` (4 subsequent siblings)
7 siblings, 2 replies; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, Romain Gantois,
Russell King (Oracle)
From: Serge Semin <fancer.lancer@gmail.com>
A pcs_init() callback will be introduced to stmmac in a future patch. This
new function will be called during the hardware initialization phase.
Instead of separately initializing XPCS and PCS components, let's group all
PCS-related hardware initialization logic in the current
stmmac_xpcs_setup() function.
Rename stmmac_xpcs_setup() to stmmac_pcs_setup() and move the conditional
call to stmmac_xpcs_setup() inside the function itself.
Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
---
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 +++-----
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 30 ++++++++++++++---------
3 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index badfe686a5702..ed38099ca7406 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -360,7 +360,7 @@ enum stmmac_state {
int stmmac_mdio_unregister(struct net_device *ndev);
int stmmac_mdio_register(struct net_device *ndev);
int stmmac_mdio_reset(struct mii_bus *mii);
-int stmmac_xpcs_setup(struct mii_bus *mii);
+int stmmac_pcs_setup(struct net_device *ndev);
void stmmac_pcs_clean(struct net_device *ndev);
void stmmac_set_ethtool_ops(struct net_device *netdev);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 0ac99c132733d..ef285b3c56ab9 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -7754,11 +7754,9 @@ int stmmac_dvr_probe(struct device *device,
if (priv->plat->speed_mode_2500)
priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
- if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
- ret = stmmac_xpcs_setup(priv->mii);
- if (ret)
- goto error_xpcs_setup;
- }
+ ret = stmmac_pcs_setup(ndev);
+ if (ret)
+ goto error_pcs_setup;
ret = stmmac_phy_setup(priv);
if (ret) {
@@ -7791,7 +7789,7 @@ int stmmac_dvr_probe(struct device *device,
phylink_destroy(priv->phylink);
error_phy_setup:
stmmac_pcs_clean(ndev);
-error_xpcs_setup:
+error_pcs_setup:
if (priv->hw->pcs != STMMAC_PCS_TBI &&
priv->hw->pcs != STMMAC_PCS_RTBI)
stmmac_mdio_unregister(ndev);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 73ba9901a4439..54708440e27b8 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -495,31 +495,37 @@ int stmmac_mdio_reset(struct mii_bus *bus)
return 0;
}
-int stmmac_xpcs_setup(struct mii_bus *bus)
+int stmmac_pcs_setup(struct net_device *ndev)
{
- struct net_device *ndev = bus->priv;
+ struct dw_xpcs *xpcs = NULL;
struct stmmac_priv *priv;
- struct dw_xpcs *xpcs;
+ int ret = -ENODEV;
int mode, addr;
priv = netdev_priv(ndev);
mode = priv->plat->phy_interface;
- /* Try to probe the XPCS by scanning all addresses. */
- for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
- xpcs = xpcs_create_mdiodev(bus, addr, mode);
- if (IS_ERR(xpcs))
- continue;
+ if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
+ /* Try to probe the XPCS by scanning all addresses */
+ for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
+ xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
+ if (IS_ERR(xpcs))
+ continue;
- priv->hw->xpcs = xpcs;
- break;
+ ret = 0;
+ break;
+ }
+ } else {
+ return 0;
}
- if (!priv->hw->xpcs) {
+ if (ret) {
dev_warn(priv->device, "No xPCS found\n");
- return -ENODEV;
+ return ret;
}
+ priv->hw->xpcs = xpcs;
+
return 0;
}
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices
2024-05-13 7:25 ` [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices Romain Gantois
@ 2024-05-13 10:20 ` Hariprasad Kelam
2024-05-13 11:18 ` Serge Semin
1 sibling, 0 replies; 17+ messages in thread
From: Hariprasad Kelam @ 2024-05-13 10:20 UTC (permalink / raw)
To: Romain Gantois, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, Russell King (Oracle)
> From: Serge Semin <fancer.lancer@gmail.com>
>
> A pcs_init() callback will be introduced to stmmac in a future patch. This new
> function will be called during the hardware initialization phase.
> Instead of separately initializing XPCS and PCS components, let's group all
> PCS-related hardware initialization logic in the current
> stmmac_xpcs_setup() function.
>
> Rename stmmac_xpcs_setup() to stmmac_pcs_setup() and move the
> conditional call to stmmac_xpcs_setup() inside the function itself.
>
> Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 +++-----
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 30 ++++++++++++++-
> --------
> 3 files changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> index badfe686a5702..ed38099ca7406 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> @@ -360,7 +360,7 @@ enum stmmac_state {
> int stmmac_mdio_unregister(struct net_device *ndev); int
> stmmac_mdio_register(struct net_device *ndev); int
> stmmac_mdio_reset(struct mii_bus *mii); -int stmmac_xpcs_setup(struct
> mii_bus *mii);
> +int stmmac_pcs_setup(struct net_device *ndev);
> void stmmac_pcs_clean(struct net_device *ndev); void
> stmmac_set_ethtool_ops(struct net_device *netdev);
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 0ac99c132733d..ef285b3c56ab9 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -7754,11 +7754,9 @@ int stmmac_dvr_probe(struct device *device,
> if (priv->plat->speed_mode_2500)
> priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
>
> - if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data-
> >has_xpcs) {
> - ret = stmmac_xpcs_setup(priv->mii);
> - if (ret)
> - goto error_xpcs_setup;
> - }
> + ret = stmmac_pcs_setup(ndev);
> + if (ret)
> + goto error_pcs_setup;
>
> ret = stmmac_phy_setup(priv);
> if (ret) {
> @@ -7791,7 +7789,7 @@ int stmmac_dvr_probe(struct device *device,
> phylink_destroy(priv->phylink);
> error_phy_setup:
> stmmac_pcs_clean(ndev);
> -error_xpcs_setup:
> +error_pcs_setup:
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> index 73ba9901a4439..54708440e27b8 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> @@ -495,31 +495,37 @@ int stmmac_mdio_reset(struct mii_bus *bus)
> return 0;
> }
>
> -int stmmac_xpcs_setup(struct mii_bus *bus)
> +int stmmac_pcs_setup(struct net_device *ndev)
> {
> - struct net_device *ndev = bus->priv;
> + struct dw_xpcs *xpcs = NULL;
> struct stmmac_priv *priv;
> - struct dw_xpcs *xpcs;
> + int ret = -ENODEV;
> int mode, addr;
>
> priv = netdev_priv(ndev);
> mode = priv->plat->phy_interface;
>
> - /* Try to probe the XPCS by scanning all addresses. */
> - for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
> - xpcs = xpcs_create_mdiodev(bus, addr, mode);
> - if (IS_ERR(xpcs))
> - continue;
> + if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data-
> >has_xpcs) {
> + /* Try to probe the XPCS by scanning all addresses */
> + for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
> + xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
> + if (IS_ERR(xpcs))
> + continue;
>
> - priv->hw->xpcs = xpcs;
> - break;
> + ret = 0;
> + break;
> + }
> + } else {
> + return 0;
> }
>
> - if (!priv->hw->xpcs) {
> + if (ret) {
> dev_warn(priv->device, "No xPCS found\n");
> - return -ENODEV;
> + return ret;
> }
>
> + priv->hw->xpcs = xpcs;
> +
> return 0;
> }
>
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices
2024-05-13 7:25 ` [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices Romain Gantois
2024-05-13 10:20 ` Hariprasad Kelam
@ 2024-05-13 11:18 ` Serge Semin
1 sibling, 0 replies; 17+ messages in thread
From: Serge Semin @ 2024-05-13 11:18 UTC (permalink / raw)
To: Romain Gantois
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel,
Russell King (Oracle)
On Mon, May 13, 2024 at 09:25:14AM +0200, Romain Gantois wrote:
> From: Serge Semin <fancer.lancer@gmail.com>
>
> A pcs_init() callback will be introduced to stmmac in a future patch. This
> new function will be called during the hardware initialization phase.
> Instead of separately initializing XPCS and PCS components, let's group all
> PCS-related hardware initialization logic in the current
> stmmac_xpcs_setup() function.
>
> Rename stmmac_xpcs_setup() to stmmac_pcs_setup() and move the conditional
> call to stmmac_xpcs_setup() inside the function itself.
>
> Signed-off-by: Serge Semin <fancer.lancer@gmail.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>
Looking good. Thanks.
-Serge(y)
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 +++-----
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 30 ++++++++++++++---------
> 3 files changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> index badfe686a5702..ed38099ca7406 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> @@ -360,7 +360,7 @@ enum stmmac_state {
> int stmmac_mdio_unregister(struct net_device *ndev);
> int stmmac_mdio_register(struct net_device *ndev);
> int stmmac_mdio_reset(struct mii_bus *mii);
> -int stmmac_xpcs_setup(struct mii_bus *mii);
> +int stmmac_pcs_setup(struct net_device *ndev);
> void stmmac_pcs_clean(struct net_device *ndev);
> void stmmac_set_ethtool_ops(struct net_device *netdev);
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 0ac99c132733d..ef285b3c56ab9 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -7754,11 +7754,9 @@ int stmmac_dvr_probe(struct device *device,
> if (priv->plat->speed_mode_2500)
> priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
>
> - if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
> - ret = stmmac_xpcs_setup(priv->mii);
> - if (ret)
> - goto error_xpcs_setup;
> - }
> + ret = stmmac_pcs_setup(ndev);
> + if (ret)
> + goto error_pcs_setup;
>
> ret = stmmac_phy_setup(priv);
> if (ret) {
> @@ -7791,7 +7789,7 @@ int stmmac_dvr_probe(struct device *device,
> phylink_destroy(priv->phylink);
> error_phy_setup:
> stmmac_pcs_clean(ndev);
> -error_xpcs_setup:
> +error_pcs_setup:
> if (priv->hw->pcs != STMMAC_PCS_TBI &&
> priv->hw->pcs != STMMAC_PCS_RTBI)
> stmmac_mdio_unregister(ndev);
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> index 73ba9901a4439..54708440e27b8 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> @@ -495,31 +495,37 @@ int stmmac_mdio_reset(struct mii_bus *bus)
> return 0;
> }
>
> -int stmmac_xpcs_setup(struct mii_bus *bus)
> +int stmmac_pcs_setup(struct net_device *ndev)
> {
> - struct net_device *ndev = bus->priv;
> + struct dw_xpcs *xpcs = NULL;
> struct stmmac_priv *priv;
> - struct dw_xpcs *xpcs;
> + int ret = -ENODEV;
> int mode, addr;
>
> priv = netdev_priv(ndev);
> mode = priv->plat->phy_interface;
>
> - /* Try to probe the XPCS by scanning all addresses. */
> - for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
> - xpcs = xpcs_create_mdiodev(bus, addr, mode);
> - if (IS_ERR(xpcs))
> - continue;
> + if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
> + /* Try to probe the XPCS by scanning all addresses */
> + for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
> + xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
> + if (IS_ERR(xpcs))
> + continue;
>
> - priv->hw->xpcs = xpcs;
> - break;
> + ret = 0;
> + break;
> + }
> + } else {
> + return 0;
> }
>
> - if (!priv->hw->xpcs) {
> + if (ret) {
> dev_warn(priv->device, "No xPCS found\n");
> - return -ENODEV;
> + return ret;
> }
>
> + priv->hw->xpcs = xpcs;
> +
> return 0;
> }
>
>
> --
> 2.44.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v7 4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
` (2 preceding siblings ...)
2024-05-13 7:25 ` [PATCH net-next v7 3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 10:21 ` Hariprasad Kelam
2024-05-13 7:25 ` [PATCH net-next v7 5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit Romain Gantois
` (3 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel,
Russell King (Oracle), Maxime Chevallier, Romain Gantois
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Introduce a mechanism whereby platforms can create their PCS instances
prior to the network device being published to userspace, but after
some of the core stmmac initialisation has been completed. This means
that the data structures that platforms need will be available.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Co-developed-by: Romain Gantois <romain.gantois@bootlin.com>
Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 8 +++++++-
include/linux/stmmac.h | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 54708440e27b8..aa43117134d38 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -505,7 +505,10 @@ int stmmac_pcs_setup(struct net_device *ndev)
priv = netdev_priv(ndev);
mode = priv->plat->phy_interface;
- if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
+ if (priv->plat->pcs_init) {
+ ret = priv->plat->pcs_init(priv);
+ } else if (priv->plat->mdio_bus_data &&
+ priv->plat->mdio_bus_data->has_xpcs) {
/* Try to probe the XPCS by scanning all addresses */
for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
@@ -533,6 +536,9 @@ void stmmac_pcs_clean(struct net_device *ndev)
{
struct stmmac_priv *priv = netdev_priv(ndev);
+ if (priv->plat->pcs_exit)
+ priv->plat->pcs_exit(priv);
+
if (!priv->hw->xpcs)
return;
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index dfa1828cd756a..4a24a246c617d 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -285,6 +285,8 @@ struct plat_stmmacenet_data {
int (*crosststamp)(ktime_t *device, struct system_counterval_t *system,
void *ctx);
void (*dump_debug_regs)(void *priv);
+ int (*pcs_init)(struct stmmac_priv *priv);
+ void (*pcs_exit)(struct stmmac_priv *priv);
void *bsp_priv;
struct clk *stmmac_clk;
struct clk *pclk;
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations
2024-05-13 7:25 ` [PATCH net-next v7 4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations Romain Gantois
@ 2024-05-13 10:21 ` Hariprasad Kelam
0 siblings, 0 replies; 17+ messages in thread
From: Hariprasad Kelam @ 2024-05-13 10:21 UTC (permalink / raw)
To: Romain Gantois, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, Russell King (Oracle),
Maxime Chevallier
> From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
>
> Introduce a mechanism whereby platforms can create their PCS instances
> prior to the network device being published to userspace, but after some of
> the core stmmac initialisation has been completed. This means that the data
> structures that platforms need will be available.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
> Co-developed-by: Romain Gantois <romain.gantois@bootlin.com>
> Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 8 +++++++-
> include/linux/stmmac.h | 2 ++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> index 54708440e27b8..aa43117134d38 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
> @@ -505,7 +505,10 @@ int stmmac_pcs_setup(struct net_device *ndev)
> priv = netdev_priv(ndev);
> mode = priv->plat->phy_interface;
>
> - if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data-
> >has_xpcs) {
> + if (priv->plat->pcs_init) {
> + ret = priv->plat->pcs_init(priv);
> + } else if (priv->plat->mdio_bus_data &&
> + priv->plat->mdio_bus_data->has_xpcs) {
> /* Try to probe the XPCS by scanning all addresses */
> for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
> xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
> @@ -533,6 +536,9 @@ void stmmac_pcs_clean(struct net_device *ndev) {
> struct stmmac_priv *priv = netdev_priv(ndev);
>
> + if (priv->plat->pcs_exit)
> + priv->plat->pcs_exit(priv);
> +
> if (!priv->hw->xpcs)
> return;
>
> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index
> dfa1828cd756a..4a24a246c617d 100644
> --- a/include/linux/stmmac.h
> +++ b/include/linux/stmmac.h
> @@ -285,6 +285,8 @@ struct plat_stmmacenet_data {
> int (*crosststamp)(ktime_t *device, struct system_counterval_t
> *system,
> void *ctx);
> void (*dump_debug_regs)(void *priv);
> + int (*pcs_init)(struct stmmac_priv *priv);
> + void (*pcs_exit)(struct stmmac_priv *priv);
> void *bsp_priv;
> struct clk *stmmac_clk;
> struct clk *pclk;
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v7 5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
` (3 preceding siblings ...)
2024-05-13 7:25 ` [PATCH net-next v7 4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 10:10 ` Hariprasad Kelam
2024-05-13 7:25 ` [PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC Romain Gantois
` (2 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel,
Russell King (Oracle), Maxime Chevallier, Romain Gantois
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Use the newly introduced pcs_init() and pcs_exit() operations to
create and destroy the PCS instance at a more appropriate moment during
the driver lifecycle, thereby avoiding publishing a network device to
userspace that has not yet finished its PCS initialisation.
There are other similar issues with this driver which remain
unaddressed, but these are out of scope for this patch.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
[rgantois: removed second parameters of new callbacks]
Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
---
.../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 107 ++++++++++-----------
1 file changed, 53 insertions(+), 54 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
index 12b4a80ea3aa1..b3d45f9dfb556 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
@@ -379,6 +379,56 @@ static int socfpga_gen10_set_phy_mode(struct socfpga_dwmac *dwmac)
return 0;
}
+static int socfpga_dwmac_pcs_init(struct stmmac_priv *priv)
+{
+ struct socfpga_dwmac *dwmac = priv->plat->bsp_priv;
+ struct regmap_config pcs_regmap_cfg = {
+ .reg_bits = 16,
+ .val_bits = 16,
+ .reg_shift = REGMAP_UPSHIFT(1),
+ };
+ struct mdio_regmap_config mrc;
+ struct regmap *pcs_regmap;
+ struct phylink_pcs *pcs;
+ struct mii_bus *pcs_bus;
+
+ if (!dwmac->tse_pcs_base)
+ return 0;
+
+ pcs_regmap = devm_regmap_init_mmio(priv->device, dwmac->tse_pcs_base,
+ &pcs_regmap_cfg);
+ if (IS_ERR(pcs_regmap))
+ return PTR_ERR(pcs_regmap);
+
+ memset(&mrc, 0, sizeof(mrc));
+ mrc.regmap = pcs_regmap;
+ mrc.parent = priv->device;
+ mrc.valid_addr = 0x0;
+ mrc.autoscan = false;
+
+ /* Can't use ndev->name here because it will not have been initialised,
+ * and in any case, the user can rename network interfaces at runtime.
+ */
+ snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii",
+ dev_name(priv->device));
+ pcs_bus = devm_mdio_regmap_register(priv->device, &mrc);
+ if (IS_ERR(pcs_bus))
+ return PTR_ERR(pcs_bus);
+
+ pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
+ if (IS_ERR(pcs))
+ return PTR_ERR(pcs);
+
+ priv->hw->phylink_pcs = pcs;
+ return 0;
+}
+
+static void socfpga_dwmac_pcs_exit(struct stmmac_priv *priv)
+{
+ if (priv->hw->phylink_pcs)
+ lynx_pcs_destroy(priv->hw->phylink_pcs);
+}
+
static int socfpga_dwmac_probe(struct platform_device *pdev)
{
struct plat_stmmacenet_data *plat_dat;
@@ -426,6 +476,8 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
dwmac->ops = ops;
plat_dat->bsp_priv = dwmac;
plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed;
+ plat_dat->pcs_init = socfpga_dwmac_pcs_init;
+ plat_dat->pcs_exit = socfpga_dwmac_pcs_exit;
ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
if (ret)
@@ -444,48 +496,6 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
if (ret)
goto err_dvr_remove;
- /* Create a regmap for the PCS so that it can be used by the PCS driver,
- * if we have such a PCS
- */
- if (dwmac->tse_pcs_base) {
- struct regmap_config pcs_regmap_cfg;
- struct mdio_regmap_config mrc;
- struct regmap *pcs_regmap;
- struct mii_bus *pcs_bus;
-
- memset(&pcs_regmap_cfg, 0, sizeof(pcs_regmap_cfg));
- memset(&mrc, 0, sizeof(mrc));
-
- pcs_regmap_cfg.reg_bits = 16;
- pcs_regmap_cfg.val_bits = 16;
- pcs_regmap_cfg.reg_shift = REGMAP_UPSHIFT(1);
-
- pcs_regmap = devm_regmap_init_mmio(&pdev->dev, dwmac->tse_pcs_base,
- &pcs_regmap_cfg);
- if (IS_ERR(pcs_regmap)) {
- ret = PTR_ERR(pcs_regmap);
- goto err_dvr_remove;
- }
-
- mrc.regmap = pcs_regmap;
- mrc.parent = &pdev->dev;
- mrc.valid_addr = 0x0;
- mrc.autoscan = false;
-
- snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii", ndev->name);
- pcs_bus = devm_mdio_regmap_register(&pdev->dev, &mrc);
- if (IS_ERR(pcs_bus)) {
- ret = PTR_ERR(pcs_bus);
- goto err_dvr_remove;
- }
-
- stpriv->hw->phylink_pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
- if (IS_ERR(stpriv->hw->phylink_pcs)) {
- ret = PTR_ERR(stpriv->hw->phylink_pcs);
- goto err_dvr_remove;
- }
- }
-
return 0;
err_dvr_remove:
@@ -494,17 +504,6 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
return ret;
}
-static void socfpga_dwmac_remove(struct platform_device *pdev)
-{
- struct net_device *ndev = platform_get_drvdata(pdev);
- struct stmmac_priv *priv = netdev_priv(ndev);
- struct phylink_pcs *pcs = priv->hw->phylink_pcs;
-
- stmmac_pltfr_remove(pdev);
-
- lynx_pcs_destroy(pcs);
-}
-
#ifdef CONFIG_PM_SLEEP
static int socfpga_dwmac_resume(struct device *dev)
{
@@ -576,7 +575,7 @@ MODULE_DEVICE_TABLE(of, socfpga_dwmac_match);
static struct platform_driver socfpga_dwmac_driver = {
.probe = socfpga_dwmac_probe,
- .remove_new = socfpga_dwmac_remove,
+ .remove_new = stmmac_pltfr_remove,
.driver = {
.name = "socfpga-dwmac",
.pm = &socfpga_dwmac_pm_ops,
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit
2024-05-13 7:25 ` [PATCH net-next v7 5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit Romain Gantois
@ 2024-05-13 10:10 ` Hariprasad Kelam
0 siblings, 0 replies; 17+ messages in thread
From: Hariprasad Kelam @ 2024-05-13 10:10 UTC (permalink / raw)
To: Romain Gantois, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, Russell King (Oracle),
Maxime Chevallier
> From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
>
> Use the newly introduced pcs_init() and pcs_exit() operations to create and
> destroy the PCS instance at a more appropriate moment during the driver
> lifecycle, thereby avoiding publishing a network device to userspace that has
> not yet finished its PCS initialisation.
>
> There are other similar issues with this driver which remain unaddressed, but
> these are out of scope for this patch.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
> [rgantois: removed second parameters of new callbacks]
> Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
> ---
> .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 107 ++++++++++-------
> ----
> 1 file changed, 53 insertions(+), 54 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
> b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
> index 12b4a80ea3aa1..b3d45f9dfb556 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
> @@ -379,6 +379,56 @@ static int socfpga_gen10_set_phy_mode(struct
> socfpga_dwmac *dwmac)
> return 0;
> }
>
> +static int socfpga_dwmac_pcs_init(struct stmmac_priv *priv) {
> + struct socfpga_dwmac *dwmac = priv->plat->bsp_priv;
> + struct regmap_config pcs_regmap_cfg = {
> + .reg_bits = 16,
> + .val_bits = 16,
> + .reg_shift = REGMAP_UPSHIFT(1),
> + };
> + struct mdio_regmap_config mrc;
> + struct regmap *pcs_regmap;
> + struct phylink_pcs *pcs;
> + struct mii_bus *pcs_bus;
> +
> + if (!dwmac->tse_pcs_base)
> + return 0;
> +
> + pcs_regmap = devm_regmap_init_mmio(priv->device, dwmac-
> >tse_pcs_base,
> + &pcs_regmap_cfg);
> + if (IS_ERR(pcs_regmap))
> + return PTR_ERR(pcs_regmap);
> +
> + memset(&mrc, 0, sizeof(mrc));
> + mrc.regmap = pcs_regmap;
> + mrc.parent = priv->device;
> + mrc.valid_addr = 0x0;
> + mrc.autoscan = false;
> +
> + /* Can't use ndev->name here because it will not have been
> initialised,
> + * and in any case, the user can rename network interfaces at
> runtime.
> + */
> + snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii",
> + dev_name(priv->device));
> + pcs_bus = devm_mdio_regmap_register(priv->device, &mrc);
> + if (IS_ERR(pcs_bus))
> + return PTR_ERR(pcs_bus);
> +
> + pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
> + if (IS_ERR(pcs))
> + return PTR_ERR(pcs);
> +
> + priv->hw->phylink_pcs = pcs;
> + return 0;
> +}
> +
> +static void socfpga_dwmac_pcs_exit(struct stmmac_priv *priv) {
> + if (priv->hw->phylink_pcs)
> + lynx_pcs_destroy(priv->hw->phylink_pcs);
> +}
> +
> static int socfpga_dwmac_probe(struct platform_device *pdev) {
> struct plat_stmmacenet_data *plat_dat; @@ -426,6 +476,8 @@ static
> int socfpga_dwmac_probe(struct platform_device *pdev)
> dwmac->ops = ops;
> plat_dat->bsp_priv = dwmac;
> plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed;
> + plat_dat->pcs_init = socfpga_dwmac_pcs_init;
> + plat_dat->pcs_exit = socfpga_dwmac_pcs_exit;
>
> ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
> if (ret)
> @@ -444,48 +496,6 @@ static int socfpga_dwmac_probe(struct
> platform_device *pdev)
> if (ret)
> goto err_dvr_remove;
>
> - /* Create a regmap for the PCS so that it can be used by the PCS
> driver,
> - * if we have such a PCS
> - */
> - if (dwmac->tse_pcs_base) {
> - struct regmap_config pcs_regmap_cfg;
> - struct mdio_regmap_config mrc;
> - struct regmap *pcs_regmap;
> - struct mii_bus *pcs_bus;
> -
> - memset(&pcs_regmap_cfg, 0, sizeof(pcs_regmap_cfg));
> - memset(&mrc, 0, sizeof(mrc));
> -
> - pcs_regmap_cfg.reg_bits = 16;
> - pcs_regmap_cfg.val_bits = 16;
> - pcs_regmap_cfg.reg_shift = REGMAP_UPSHIFT(1);
> -
> - pcs_regmap = devm_regmap_init_mmio(&pdev->dev,
> dwmac->tse_pcs_base,
> - &pcs_regmap_cfg);
> - if (IS_ERR(pcs_regmap)) {
> - ret = PTR_ERR(pcs_regmap);
> - goto err_dvr_remove;
> - }
> -
> - mrc.regmap = pcs_regmap;
> - mrc.parent = &pdev->dev;
> - mrc.valid_addr = 0x0;
> - mrc.autoscan = false;
> -
> - snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii", ndev-
> >name);
> - pcs_bus = devm_mdio_regmap_register(&pdev->dev, &mrc);
> - if (IS_ERR(pcs_bus)) {
> - ret = PTR_ERR(pcs_bus);
> - goto err_dvr_remove;
> - }
> -
> - stpriv->hw->phylink_pcs = lynx_pcs_create_mdiodev(pcs_bus,
> 0);
> - if (IS_ERR(stpriv->hw->phylink_pcs)) {
> - ret = PTR_ERR(stpriv->hw->phylink_pcs);
> - goto err_dvr_remove;
> - }
> - }
> -
> return 0;
>
> err_dvr_remove:
> @@ -494,17 +504,6 @@ static int socfpga_dwmac_probe(struct
> platform_device *pdev)
> return ret;
> }
>
> -static void socfpga_dwmac_remove(struct platform_device *pdev) -{
> - struct net_device *ndev = platform_get_drvdata(pdev);
> - struct stmmac_priv *priv = netdev_priv(ndev);
> - struct phylink_pcs *pcs = priv->hw->phylink_pcs;
> -
> - stmmac_pltfr_remove(pdev);
> -
> - lynx_pcs_destroy(pcs);
> -}
> -
> #ifdef CONFIG_PM_SLEEP
> static int socfpga_dwmac_resume(struct device *dev) { @@ -576,7 +575,7
> @@ MODULE_DEVICE_TABLE(of, socfpga_dwmac_match);
>
> static struct platform_driver socfpga_dwmac_driver = {
> .probe = socfpga_dwmac_probe,
> - .remove_new = socfpga_dwmac_remove,
> + .remove_new = stmmac_pltfr_remove,
> .driver = {
> .name = "socfpga-dwmac",
> .pm = &socfpga_dwmac_pm_ops,
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
` (4 preceding siblings ...)
2024-05-13 7:25 ` [PATCH net-next v7 5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-13 10:08 ` Hariprasad Kelam
2024-05-13 7:25 ` [PATCH net-next v7 7/7] ARM: dts: r9a06g032: describe GMAC1 Romain Gantois
2024-05-14 0:40 ` [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices patchwork-bot+netdevbpf
7 siblings, 1 reply; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, Romain Gantois,
Russell King (Oracle)
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>
Reviewed-by: Russell King (Oracle) <rmk+kernel@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@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 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@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");
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC
2024-05-13 7:25 ` [PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC Romain Gantois
@ 2024-05-13 10:08 ` Hariprasad Kelam
0 siblings, 0 replies; 17+ messages in thread
From: Hariprasad Kelam @ 2024-05-13 10:08 UTC (permalink / raw)
To: Romain Gantois, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, Russell King (Oracle)
> 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@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>
> Reviewed-by: Russell King (Oracle) <rmk+kernel@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@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 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@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");
>
> --
> 2.44.0
>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v7 7/7] ARM: dts: r9a06g032: describe GMAC1
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
` (5 preceding siblings ...)
2024-05-13 7:25 ` [PATCH net-next v7 6/7] net: stmmac: add support for RZ/N1 GMAC Romain Gantois
@ 2024-05-13 7:25 ` Romain Gantois
2024-05-27 9:39 ` Geert Uytterhoeven
2024-05-14 0:40 ` [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices patchwork-bot+netdevbpf
7 siblings, 1 reply; 17+ messages in thread
From: Romain Gantois @ 2024-05-13 7:25 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Alexandre Torgue, Jose Abreu,
Maxime Coquelin, Russell King, Clément Léger,
Serge Semin
Cc: Thomas Petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, Romain Gantois
From: Clément Léger <clement.leger@bootlin.com>
The r9a06g032 SoC of the RZ/N1 family features two GMAC devices named
GMAC1/2, that are based on Synopsys cores. GMAC1 is connected to a
RGMII/RMII converter that is already described in this device tree.
Signed-off-by: Clément Léger <clement.leger@bootlin.com>
[rgantois: commit log]
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
---
arch/arm/boot/dts/renesas/r9a06g032.dtsi | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm/boot/dts/renesas/r9a06g032.dtsi b/arch/arm/boot/dts/renesas/r9a06g032.dtsi
index fa63e1afc4ef4..57c730f43442e 100644
--- a/arch/arm/boot/dts/renesas/r9a06g032.dtsi
+++ b/arch/arm/boot/dts/renesas/r9a06g032.dtsi
@@ -316,6 +316,24 @@ dma1: dma-controller@40105000 {
data-width = <8>;
};
+ gmac1: ethernet@44000000 {
+ compatible = "renesas,r9a06g032-gmac", "renesas,rzn1-gmac", "snps,dwmac";
+ reg = <0x44000000 0x2000>;
+ interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
+ clocks = <&sysctrl R9A06G032_HCLK_GMAC0>;
+ clock-names = "stmmaceth";
+ power-domains = <&sysctrl>;
+ snps,multicast-filter-bins = <256>;
+ snps,perfect-filter-entries = <128>;
+ tx-fifo-depth = <2048>;
+ rx-fifo-depth = <4096>;
+ pcs-handle = <&mii_conv1>;
+ status = "disabled";
+ };
+
gmac2: ethernet@44002000 {
compatible = "renesas,r9a06g032-gmac", "renesas,rzn1-gmac", "snps,dwmac";
reg = <0x44002000 0x2000>;
--
2.44.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH net-next v7 7/7] ARM: dts: r9a06g032: describe GMAC1
2024-05-13 7:25 ` [PATCH net-next v7 7/7] ARM: dts: r9a06g032: describe GMAC1 Romain Gantois
@ 2024-05-27 9:39 ` Geert Uytterhoeven
0 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2024-05-27 9:39 UTC (permalink / raw)
To: Romain Gantois
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Magnus Damm,
Alexandre Torgue, Jose Abreu, Maxime Coquelin, Russell King,
Clément Léger, Serge Semin, Thomas Petazzoni, netdev,
devicetree, linux-kernel, linux-renesas-soc, linux-stm32,
linux-arm-kernel
On Mon, May 13, 2024 at 9:24 AM Romain Gantois
<romain.gantois@bootlin.com> wrote:
> From: Clément Léger <clement.leger@bootlin.com>
>
> The r9a06g032 SoC of the RZ/N1 family features two GMAC devices named
> GMAC1/2, that are based on Synopsys cores. GMAC1 is connected to a
> RGMII/RMII converter that is already described in this device tree.
>
> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
> [rgantois: commit log]
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
Thanks, will queue in renesas-devel for v6.11.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices
2024-05-13 7:25 [PATCH net-next v7 0/7] net: stmmac: Add support for RZN1 GMAC devices Romain Gantois
` (6 preceding siblings ...)
2024-05-13 7:25 ` [PATCH net-next v7 7/7] ARM: dts: r9a06g032: describe GMAC1 Romain Gantois
@ 2024-05-14 0:40 ` patchwork-bot+netdevbpf
7 siblings, 0 replies; 17+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-05-14 0:40 UTC (permalink / raw)
To: Romain Gantois
Cc: davem, edumazet, kuba, pabeni, robh, krzysztof.kozlowski+dt,
conor+dt, geert+renesas, magnus.damm, alexandre.torgue, joabreu,
mcoquelin.stm32, linux, clement.leger, fancer.lancer,
thomas.petazzoni, netdev, devicetree, linux-kernel,
linux-renesas-soc, linux-stm32, linux-arm-kernel, rmk+kernel,
maxime.chevallier
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Mon, 13 May 2024 09:25:11 +0200 you wrote:
> Hello everyone,
>
> This is version seven of my series that adds support for a Gigabit Ethernet
> controller featured in the Renesas r9a06g032 SoC, of the RZ/N1 family. This
> GMAC device is based on a Synopsys IP and is compatible with the stmmac driver.
>
> My former colleague Clément Léger originally sent a series for this driver,
> but an issue in bringing up the PCS clock had blocked the upstreaming
> process. This issue has since been resolved by the following series:
>
> [...]
Here is the summary with links:
- [net-next,v7,1/7] dt-bindings: net: renesas,rzn1-gmac: Document RZ/N1 GMAC support
https://git.kernel.org/netdev/net-next/c/ab5588703981
- [net-next,v7,2/7] net: stmmac: Add dedicated XPCS cleanup method
https://git.kernel.org/netdev/net-next/c/d5c50937d50f
- [net-next,v7,3/7] net: stmmac: Make stmmac_xpcs_setup() generic to all PCS devices
https://git.kernel.org/netdev/net-next/c/f9cdff1bdacc
- [net-next,v7,4/7] net: stmmac: introduce pcs_init/pcs_exit stmmac operations
https://git.kernel.org/netdev/net-next/c/f0ef433fc264
- [net-next,v7,5/7] net: stmmac: dwmac-socfpga: use pcs_init/pcs_exit
https://git.kernel.org/netdev/net-next/c/81b418a65657
- [net-next,v7,6/7] net: stmmac: add support for RZ/N1 GMAC
https://git.kernel.org/netdev/net-next/c/f360446ec1d0
- [net-next,v7,7/7] ARM: dts: r9a06g032: describe GMAC1
(no matching commit)
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 17+ messages in thread