Re: [net-next v1] net: stmmac: starfive: Add serdes PHY init/deinit function

From: Paolo Abeni
Date: Tue Apr 15 2025 - 05:15:03 EST


On 4/10/25 9:04 AM, Minda Chen wrote:
> To support SGMII interface, add internal serdes PHY powerup/
> powerdown function.
>
> Signed-off-by: Minda Chen <minda.chen@xxxxxxxxxxxxxxxx>
> ---
> .../ethernet/stmicro/stmmac/dwmac-starfive.c | 33 +++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
> index 2013d7477eb7..f5923f847100 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
> @@ -9,6 +9,8 @@
>
> #include <linux/mod_devicetable.h>
> #include <linux/platform_device.h>
> +#include <linux/phy.h>
> +#include <linux/phy/phy.h>
> #include <linux/property.h>
> #include <linux/mfd/syscon.h>
> #include <linux/regmap.h>
> @@ -28,6 +30,7 @@ struct starfive_dwmac_data {
> struct starfive_dwmac {
> struct device *dev;
> const struct starfive_dwmac_data *data;
> + struct phy *serdes_phy;
> };
>
> static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)
> @@ -80,6 +83,26 @@ static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)
> return 0;
> }
>
> +static int starfive_dwmac_serdes_powerup(struct net_device *ndev, void *priv)
> +{
> + struct starfive_dwmac *dwmac = priv;
> + int ret;
> +
> + ret = phy_init(dwmac->serdes_phy);
> + if (ret)
> + return ret;

This is called also in case of PM suspend/resume. Do you need to keep
the init here, or should that moved at probe time only? Similar question
for phy_exit() below.

Thanks!

Paolo