From: Simon Horman <horms@kernel.org>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Richard Cochran <richardcochran@gmail.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Vinod Koul <vkoul@kernel.org>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Jose Abreu <joabreu@synopsys.com>, Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Matthew Gerlach <matthew.gerlach@altera.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Kevin Hilman <khilman@baylibre.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Jan Petrous <jan.petrous@oss.nxp.com>,
s32@nxp.com, Romain Gantois <romain.gantois@bootlin.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Heiko Stuebner <heiko@sntech.de>,
Chen Wang <unicorn_wang@outlook.com>,
Inochi Amaoto <inochiama@gmail.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Minda Chen <minda.chen@starfivetech.com>,
Drew Fustini <fustini@kernel.org>, Guo Ren <guoren@kernel.org>,
Fu Wei <wefu@redhat.com>,
Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Maxime Ripard <mripard@kernel.org>,
Shuang Liang <liangshuang@eswincomputing.com>,
Zhi Li <lizhi2@eswincomputing.com>,
Shangjuan Wei <weishangjuan@eswincomputing.com>,
"G. Jaya Kumaran" <vineetha.g.jaya.kumaran@intel.com>,
Clark Wang <xiaoning.wang@nxp.com>,
Linux Team <linux-imx@nxp.com>, Frank Li <Frank.Li@nxp.com>,
David Wu <david.wu@rock-chips.com>,
Samin Guo <samin.guo@starfivetech.com>,
Christophe Roullier <christophe.roullier@foss.st.com>,
Swathi K S <swathi.ks@samsung.com>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
Drew Fustini <dfustini@tenstorrent.com>,
linux-sunxi@lists.linux.dev, linux-amlogic@lists.infradead.org,
linux-mips@vger.kernel.org, imx@lists.linux.dev,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org, sophgo@lists.linux.dev,
linux-riscv@lists.infradead.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v5 8/8] net: stmmac: qcom-ethqos: add support for sa8255p
Date: Tue, 11 Nov 2025 11:47:53 +0000 [thread overview]
Message-ID: <aRMiafCQNPVDOljU@horms.kernel.org> (raw)
In-Reply-To: <20251107-qcom-sa8255p-emac-v5-8-01d3e3aaf388@linaro.org>
On Fri, Nov 07, 2025 at 11:29:58AM +0100, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
...
> +static int qcom_ethqos_pd_init(struct platform_device *pdev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> + int ret;
> +
> + /*
> + * Enable functional clock to prevent DMA reset after timeout due
> + * to no PHY clock being enabled after the hardware block has been
> + * power cycled. The actual configuration will be adjusted once
> + * ethqos_fix_mac_speed() is called.
> + */
> + ethqos_set_func_clk_en(ethqos);
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_CORE);
> + if (ret)
> + return ret;
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_MDIO);
> + if (ret) {
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void qcom_ethqos_pd_exit(struct platform_device *pdev, void *data)
> +{
> + struct qcom_ethqos *ethqos = data;
> +
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_MDIO);
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> +}
> +
> static void ethqos_ptp_clk_freq_config(struct stmmac_priv *priv)
> {
> struct plat_stmmacenet_data *plat_dat = priv->plat;
...
> @@ -852,28 +993,63 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> ethqos->rgmii_config_loopback_en = drv_data->rgmii_config_loopback_en;
> ethqos->has_emac_ge_3 = drv_data->has_emac_ge_3;
> ethqos->needs_sgmii_loopback = drv_data->needs_sgmii_loopback;
> -
> - ethqos->pm.link_clk = devm_clk_get(dev, clk_name);
> - if (IS_ERR(ethqos->pm.link_clk))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.link_clk),
> - "Failed to get link_clk\n");
> -
> - ret = ethqos_clks_config(ethqos, true);
> - if (ret)
> - return ret;
> -
> - ret = devm_add_action_or_reset(dev, ethqos_clks_disable, ethqos);
> - if (ret)
> - return ret;
> -
> - ethqos->pm.serdes_phy = devm_phy_optional_get(dev, "serdes");
> - if (IS_ERR(ethqos->pm.serdes_phy))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.serdes_phy),
> - "Failed to get serdes phy\n");
> -
> - ethqos->set_serdes_speed = ethqos_set_serdes_speed_phy;
> ethqos->serdes_speed = SPEED_1000;
> - ethqos_update_link_clk(ethqos, SPEED_1000);
> +
> + if (pm_data && pm_data->use_domains) {
> + ethqos->set_serdes_speed = ethqos_set_serdes_speed_pd;
> +
> + ret = devm_pm_domain_attach_list(dev, &pm_data->pd,
> + ðqos->pd.pd_list);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Failed to attach power domains\n");
> +
> + plat_dat->clks_config = ethqos_pd_clks_config;
> + plat_dat->serdes_powerup = qcom_ethqos_pd_serdes_powerup;
> + plat_dat->serdes_powerdown = qcom_ethqos_pd_serdes_powerdown;
> + plat_dat->exit = qcom_ethqos_pd_exit;
Hi Bartosz,
It seems that the intention of this is to ensure
that domains turned on by qcom_ethqos_pd_init()
are turned off again on exit or clean-up in error paths.
> + plat_dat->init = qcom_ethqos_pd_init;
> + plat_dat->clk_ptp_rate = pm_data->clk_ptp_rate;
> +
> + ret = qcom_ethqos_pd_init(pdev, ethqos);
> + if (ret)
> + return ret;
And here those domains are turned on.
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_SERDES);
> + if (ret)
But it seems that if we reach this error path then the cleanup is not
performed. This is because plat_dat and thus it's exit callback are
registered until the call to devm_stmmac_pltfr_probe() towards the end of
this function.
Sorry if I'm on the wrong track here. I did dig into it.
But this was flagged by Claude Code running
https://github.com/masoncl/review-prompts/
> + return dev_err_probe(dev, ret,
> + "Failed to enable the serdes power domain\n");
...
WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Richard Cochran <richardcochran@gmail.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Vinod Koul <vkoul@kernel.org>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Jose Abreu <joabreu@synopsys.com>, Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Matthew Gerlach <matthew.gerlach@altera.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Kevin Hilman <khilman@baylibre.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Jan Petrous <jan.petrous@oss.nxp.com>,
s32@nxp.com, Romain Gantois <romain.gantois@bootlin.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Heiko Stuebner <heiko@sntech.de>,
Chen Wang <unicorn_wang@outlook.com>,
Inochi Amaoto <inochiama@gmail.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Minda Chen <minda.chen@starfivetech.com>,
Drew Fustini <fustini@kernel.org>, Guo Ren <guoren@kernel.org>,
Fu Wei <wefu@redhat.com>,
Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Maxime Ripard <mripard@kernel.org>,
Shuang Liang <liangshuang@eswincomputing.com>,
Zhi Li <lizhi2@eswincomputing.com>,
Shangjuan Wei <weishangjuan@eswincomputing.com>,
"G. Jaya Kumaran" <vineetha.g.jaya.kumaran@intel.com>,
Clark Wang <xiaoning.wang@nxp.com>,
Linux Team <linux-imx@nxp.com>, Frank Li <Frank.Li@nxp.com>,
David Wu <david.wu@rock-chips.com>,
Samin Guo <samin.guo@starfivetech.com>,
Christophe Roullier <christophe.roullier@foss.st.com>,
Swathi K S <swathi.ks@samsung.com>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
Drew Fustini <dfustini@tenstorrent.com>,
linux-sunxi@lists.linux.dev, linux-amlogic@lists.infradead.org,
linux-mips@vger.kernel.org, imx@lists.linux.dev,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org, sophgo@lists.linux.dev,
linux-riscv@lists.infradead.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v5 8/8] net: stmmac: qcom-ethqos: add support for sa8255p
Date: Tue, 11 Nov 2025 11:47:53 +0000 [thread overview]
Message-ID: <aRMiafCQNPVDOljU@horms.kernel.org> (raw)
In-Reply-To: <20251107-qcom-sa8255p-emac-v5-8-01d3e3aaf388@linaro.org>
On Fri, Nov 07, 2025 at 11:29:58AM +0100, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
...
> +static int qcom_ethqos_pd_init(struct platform_device *pdev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> + int ret;
> +
> + /*
> + * Enable functional clock to prevent DMA reset after timeout due
> + * to no PHY clock being enabled after the hardware block has been
> + * power cycled. The actual configuration will be adjusted once
> + * ethqos_fix_mac_speed() is called.
> + */
> + ethqos_set_func_clk_en(ethqos);
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_CORE);
> + if (ret)
> + return ret;
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_MDIO);
> + if (ret) {
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void qcom_ethqos_pd_exit(struct platform_device *pdev, void *data)
> +{
> + struct qcom_ethqos *ethqos = data;
> +
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_MDIO);
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> +}
> +
> static void ethqos_ptp_clk_freq_config(struct stmmac_priv *priv)
> {
> struct plat_stmmacenet_data *plat_dat = priv->plat;
...
> @@ -852,28 +993,63 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> ethqos->rgmii_config_loopback_en = drv_data->rgmii_config_loopback_en;
> ethqos->has_emac_ge_3 = drv_data->has_emac_ge_3;
> ethqos->needs_sgmii_loopback = drv_data->needs_sgmii_loopback;
> -
> - ethqos->pm.link_clk = devm_clk_get(dev, clk_name);
> - if (IS_ERR(ethqos->pm.link_clk))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.link_clk),
> - "Failed to get link_clk\n");
> -
> - ret = ethqos_clks_config(ethqos, true);
> - if (ret)
> - return ret;
> -
> - ret = devm_add_action_or_reset(dev, ethqos_clks_disable, ethqos);
> - if (ret)
> - return ret;
> -
> - ethqos->pm.serdes_phy = devm_phy_optional_get(dev, "serdes");
> - if (IS_ERR(ethqos->pm.serdes_phy))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.serdes_phy),
> - "Failed to get serdes phy\n");
> -
> - ethqos->set_serdes_speed = ethqos_set_serdes_speed_phy;
> ethqos->serdes_speed = SPEED_1000;
> - ethqos_update_link_clk(ethqos, SPEED_1000);
> +
> + if (pm_data && pm_data->use_domains) {
> + ethqos->set_serdes_speed = ethqos_set_serdes_speed_pd;
> +
> + ret = devm_pm_domain_attach_list(dev, &pm_data->pd,
> + ðqos->pd.pd_list);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Failed to attach power domains\n");
> +
> + plat_dat->clks_config = ethqos_pd_clks_config;
> + plat_dat->serdes_powerup = qcom_ethqos_pd_serdes_powerup;
> + plat_dat->serdes_powerdown = qcom_ethqos_pd_serdes_powerdown;
> + plat_dat->exit = qcom_ethqos_pd_exit;
Hi Bartosz,
It seems that the intention of this is to ensure
that domains turned on by qcom_ethqos_pd_init()
are turned off again on exit or clean-up in error paths.
> + plat_dat->init = qcom_ethqos_pd_init;
> + plat_dat->clk_ptp_rate = pm_data->clk_ptp_rate;
> +
> + ret = qcom_ethqos_pd_init(pdev, ethqos);
> + if (ret)
> + return ret;
And here those domains are turned on.
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_SERDES);
> + if (ret)
But it seems that if we reach this error path then the cleanup is not
performed. This is because plat_dat and thus it's exit callback are
registered until the call to devm_stmmac_pltfr_probe() towards the end of
this function.
Sorry if I'm on the wrong track here. I did dig into it.
But this was flagged by Claude Code running
https://github.com/masoncl/review-prompts/
> + return dev_err_probe(dev, ret,
> + "Failed to enable the serdes power domain\n");
...
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Richard Cochran <richardcochran@gmail.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Vinod Koul <vkoul@kernel.org>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Jose Abreu <joabreu@synopsys.com>, Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Matthew Gerlach <matthew.gerlach@altera.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Kevin Hilman <khilman@baylibre.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Jan Petrous <jan.petrous@oss.nxp.com>,
s32@nxp.com, Romain Gantois <romain.gantois@bootlin.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Heiko Stuebner <heiko@sntech.de>,
Chen Wang <unicorn_wang@outlook.com>,
Inochi Amaoto <inochiama@gmail.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Minda Chen <minda.chen@starfivetech.com>,
Drew Fustini <fustini@kernel.org>, Guo Ren <guoren@kernel.org>,
Fu Wei <wefu@redhat.com>,
Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Maxime Ripard <mripard@kernel.org>,
Shuang Liang <liangshuang@eswincomputing.com>,
Zhi Li <lizhi2@eswincomputing.com>,
Shangjuan Wei <weishangjuan@eswincomputing.com>,
"G. Jaya Kumaran" <vineetha.g.jaya.kumaran@intel.com>,
Clark Wang <xiaoning.wang@nxp.com>,
Linux Team <linux-imx@nxp.com>, Frank Li <Frank.Li@nxp.com>,
David Wu <david.wu@rock-chips.com>,
Samin Guo <samin.guo@starfivetech.com>,
Christophe Roullier <christophe.roullier@foss.st.com>,
Swathi K S <swathi.ks@samsung.com>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
Drew Fustini <dfustini@tenstorrent.com>,
linux-sunxi@lists.linux.dev, linux-amlogic@lists.infradead.org,
linux-mips@vger.kernel.org, imx@lists.linux.dev,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org, sophgo@lists.linux.dev,
linux-riscv@lists.infradead.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v5 8/8] net: stmmac: qcom-ethqos: add support for sa8255p
Date: Tue, 11 Nov 2025 11:47:53 +0000 [thread overview]
Message-ID: <aRMiafCQNPVDOljU@horms.kernel.org> (raw)
In-Reply-To: <20251107-qcom-sa8255p-emac-v5-8-01d3e3aaf388@linaro.org>
On Fri, Nov 07, 2025 at 11:29:58AM +0100, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
...
> +static int qcom_ethqos_pd_init(struct platform_device *pdev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> + int ret;
> +
> + /*
> + * Enable functional clock to prevent DMA reset after timeout due
> + * to no PHY clock being enabled after the hardware block has been
> + * power cycled. The actual configuration will be adjusted once
> + * ethqos_fix_mac_speed() is called.
> + */
> + ethqos_set_func_clk_en(ethqos);
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_CORE);
> + if (ret)
> + return ret;
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_MDIO);
> + if (ret) {
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void qcom_ethqos_pd_exit(struct platform_device *pdev, void *data)
> +{
> + struct qcom_ethqos *ethqos = data;
> +
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_MDIO);
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> +}
> +
> static void ethqos_ptp_clk_freq_config(struct stmmac_priv *priv)
> {
> struct plat_stmmacenet_data *plat_dat = priv->plat;
...
> @@ -852,28 +993,63 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> ethqos->rgmii_config_loopback_en = drv_data->rgmii_config_loopback_en;
> ethqos->has_emac_ge_3 = drv_data->has_emac_ge_3;
> ethqos->needs_sgmii_loopback = drv_data->needs_sgmii_loopback;
> -
> - ethqos->pm.link_clk = devm_clk_get(dev, clk_name);
> - if (IS_ERR(ethqos->pm.link_clk))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.link_clk),
> - "Failed to get link_clk\n");
> -
> - ret = ethqos_clks_config(ethqos, true);
> - if (ret)
> - return ret;
> -
> - ret = devm_add_action_or_reset(dev, ethqos_clks_disable, ethqos);
> - if (ret)
> - return ret;
> -
> - ethqos->pm.serdes_phy = devm_phy_optional_get(dev, "serdes");
> - if (IS_ERR(ethqos->pm.serdes_phy))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.serdes_phy),
> - "Failed to get serdes phy\n");
> -
> - ethqos->set_serdes_speed = ethqos_set_serdes_speed_phy;
> ethqos->serdes_speed = SPEED_1000;
> - ethqos_update_link_clk(ethqos, SPEED_1000);
> +
> + if (pm_data && pm_data->use_domains) {
> + ethqos->set_serdes_speed = ethqos_set_serdes_speed_pd;
> +
> + ret = devm_pm_domain_attach_list(dev, &pm_data->pd,
> + ðqos->pd.pd_list);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Failed to attach power domains\n");
> +
> + plat_dat->clks_config = ethqos_pd_clks_config;
> + plat_dat->serdes_powerup = qcom_ethqos_pd_serdes_powerup;
> + plat_dat->serdes_powerdown = qcom_ethqos_pd_serdes_powerdown;
> + plat_dat->exit = qcom_ethqos_pd_exit;
Hi Bartosz,
It seems that the intention of this is to ensure
that domains turned on by qcom_ethqos_pd_init()
are turned off again on exit or clean-up in error paths.
> + plat_dat->init = qcom_ethqos_pd_init;
> + plat_dat->clk_ptp_rate = pm_data->clk_ptp_rate;
> +
> + ret = qcom_ethqos_pd_init(pdev, ethqos);
> + if (ret)
> + return ret;
And here those domains are turned on.
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_SERDES);
> + if (ret)
But it seems that if we reach this error path then the cleanup is not
performed. This is because plat_dat and thus it's exit callback are
registered until the call to devm_stmmac_pltfr_probe() towards the end of
this function.
Sorry if I'm on the wrong track here. I did dig into it.
But this was flagged by Claude Code running
https://github.com/masoncl/review-prompts/
> + return dev_err_probe(dev, ret,
> + "Failed to enable the serdes power domain\n");
...
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Richard Cochran <richardcochran@gmail.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Vinod Koul <vkoul@kernel.org>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Jose Abreu <joabreu@synopsys.com>, Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Matthew Gerlach <matthew.gerlach@altera.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Kevin Hilman <khilman@baylibre.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
Keguang Zhang <keguang.zhang@gmail.com>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Jan Petrous <jan.petrous@oss.nxp.com>,
s32@nxp.com, Romain Gantois <romain.gantois@bootlin.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Heiko Stuebner <heiko@sntech.de>,
Chen Wang <unicorn_wang@outlook.com>,
Inochi Amaoto <inochiama@gmail.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Minda Chen <minda.chen@starfivetech.com>,
Drew Fustini <fustini@kernel.org>, Guo Ren <guoren@kernel.org>,
Fu Wei <wefu@redhat.com>,
Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Maxime Ripard <mripard@kernel.org>,
Shuang Liang <liangshuang@eswincomputing.com>,
Zhi Li <lizhi2@eswincomputing.com>,
Shangjuan Wei <weishangjuan@eswincomputing.com>,
"G. Jaya Kumaran" <vineetha.g.jaya.kumaran@intel.com>,
Clark Wang <xiaoning.wang@nxp.com>,
Linux Team <linux-imx@nxp.com>, Frank Li <Frank.Li@nxp.com>,
David Wu <david.wu@rock-chips.com>,
Samin Guo <samin.guo@starfivetech.com>,
Christophe Roullier <christophe.roullier@foss.st.com>,
Swathi K S <swathi.ks@samsung.com>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
Drew Fustini <dfustini@tenstorrent.com>,
linux-sunxi@lists.linux.dev, linux-amlogic@lists.infradead.org,
linux-mips@vger.kernel.org, imx@lists.linux.dev,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org, sophgo@lists.linux.dev,
linux-riscv@lists.infradead.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v5 8/8] net: stmmac: qcom-ethqos: add support for sa8255p
Date: Tue, 11 Nov 2025 11:47:53 +0000 [thread overview]
Message-ID: <aRMiafCQNPVDOljU@horms.kernel.org> (raw)
In-Reply-To: <20251107-qcom-sa8255p-emac-v5-8-01d3e3aaf388@linaro.org>
On Fri, Nov 07, 2025 at 11:29:58AM +0100, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
...
> +static int qcom_ethqos_pd_init(struct platform_device *pdev, void *priv)
> +{
> + struct qcom_ethqos *ethqos = priv;
> + int ret;
> +
> + /*
> + * Enable functional clock to prevent DMA reset after timeout due
> + * to no PHY clock being enabled after the hardware block has been
> + * power cycled. The actual configuration will be adjusted once
> + * ethqos_fix_mac_speed() is called.
> + */
> + ethqos_set_func_clk_en(ethqos);
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_CORE);
> + if (ret)
> + return ret;
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_MDIO);
> + if (ret) {
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void qcom_ethqos_pd_exit(struct platform_device *pdev, void *data)
> +{
> + struct qcom_ethqos *ethqos = data;
> +
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_MDIO);
> + qcom_ethqos_domain_off(ethqos, ETHQOS_PD_CORE);
> +}
> +
> static void ethqos_ptp_clk_freq_config(struct stmmac_priv *priv)
> {
> struct plat_stmmacenet_data *plat_dat = priv->plat;
...
> @@ -852,28 +993,63 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
> ethqos->rgmii_config_loopback_en = drv_data->rgmii_config_loopback_en;
> ethqos->has_emac_ge_3 = drv_data->has_emac_ge_3;
> ethqos->needs_sgmii_loopback = drv_data->needs_sgmii_loopback;
> -
> - ethqos->pm.link_clk = devm_clk_get(dev, clk_name);
> - if (IS_ERR(ethqos->pm.link_clk))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.link_clk),
> - "Failed to get link_clk\n");
> -
> - ret = ethqos_clks_config(ethqos, true);
> - if (ret)
> - return ret;
> -
> - ret = devm_add_action_or_reset(dev, ethqos_clks_disable, ethqos);
> - if (ret)
> - return ret;
> -
> - ethqos->pm.serdes_phy = devm_phy_optional_get(dev, "serdes");
> - if (IS_ERR(ethqos->pm.serdes_phy))
> - return dev_err_probe(dev, PTR_ERR(ethqos->pm.serdes_phy),
> - "Failed to get serdes phy\n");
> -
> - ethqos->set_serdes_speed = ethqos_set_serdes_speed_phy;
> ethqos->serdes_speed = SPEED_1000;
> - ethqos_update_link_clk(ethqos, SPEED_1000);
> +
> + if (pm_data && pm_data->use_domains) {
> + ethqos->set_serdes_speed = ethqos_set_serdes_speed_pd;
> +
> + ret = devm_pm_domain_attach_list(dev, &pm_data->pd,
> + ðqos->pd.pd_list);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Failed to attach power domains\n");
> +
> + plat_dat->clks_config = ethqos_pd_clks_config;
> + plat_dat->serdes_powerup = qcom_ethqos_pd_serdes_powerup;
> + plat_dat->serdes_powerdown = qcom_ethqos_pd_serdes_powerdown;
> + plat_dat->exit = qcom_ethqos_pd_exit;
Hi Bartosz,
It seems that the intention of this is to ensure
that domains turned on by qcom_ethqos_pd_init()
are turned off again on exit or clean-up in error paths.
> + plat_dat->init = qcom_ethqos_pd_init;
> + plat_dat->clk_ptp_rate = pm_data->clk_ptp_rate;
> +
> + ret = qcom_ethqos_pd_init(pdev, ethqos);
> + if (ret)
> + return ret;
And here those domains are turned on.
> +
> + ret = qcom_ethqos_domain_on(ethqos, ETHQOS_PD_SERDES);
> + if (ret)
But it seems that if we reach this error path then the cleanup is not
performed. This is because plat_dat and thus it's exit callback are
registered until the call to devm_stmmac_pltfr_probe() towards the end of
this function.
Sorry if I'm on the wrong track here. I did dig into it.
But this was flagged by Claude Code running
https://github.com/masoncl/review-prompts/
> + return dev_err_probe(dev, ret,
> + "Failed to enable the serdes power domain\n");
...
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2025-11-11 11:48 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-07 10:29 [PATCH v5 0/8] net: stmmac: qcom-ethqos: add support for SCMI power domains Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 1/8] dt-bindings: net: qcom: document the ethqos device for SCMI-based systems Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 11:22 ` Rob Herring (Arm)
2025-11-07 11:22 ` Rob Herring (Arm)
2025-11-07 11:22 ` Rob Herring (Arm)
2025-11-07 11:22 ` Rob Herring (Arm)
2025-11-07 10:29 ` [PATCH v5 2/8] net: stmmac: qcom-ethqos: use generic device properties Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:49 ` Konrad Dybcio
2025-11-07 10:49 ` Konrad Dybcio
2025-11-07 10:49 ` Konrad Dybcio
2025-11-07 10:49 ` Konrad Dybcio
2025-11-13 13:18 ` Bartosz Golaszewski
2025-11-13 13:18 ` Bartosz Golaszewski
2025-11-13 13:18 ` Bartosz Golaszewski
2025-11-13 13:18 ` Bartosz Golaszewski
2025-11-13 13:32 ` Konrad Dybcio
2025-11-13 13:32 ` Konrad Dybcio
2025-11-13 13:32 ` Konrad Dybcio
2025-11-13 13:32 ` Konrad Dybcio
2025-11-13 13:41 ` Bartosz Golaszewski
2025-11-13 13:41 ` Bartosz Golaszewski
2025-11-13 13:41 ` Bartosz Golaszewski
2025-11-13 13:41 ` Bartosz Golaszewski
2025-11-13 14:47 ` Konrad Dybcio
2025-11-13 14:47 ` Konrad Dybcio
2025-11-13 14:47 ` Konrad Dybcio
2025-11-13 14:47 ` Konrad Dybcio
2025-11-07 10:29 ` [PATCH v5 3/8] net: stmmac: qcom-ethqos: improve typing in devres callback Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:50 ` Konrad Dybcio
2025-11-07 10:50 ` Konrad Dybcio
2025-11-07 10:50 ` Konrad Dybcio
2025-11-07 10:50 ` Konrad Dybcio
2025-11-13 13:31 ` Bartosz Golaszewski
2025-11-13 13:31 ` Bartosz Golaszewski
2025-11-13 13:31 ` Bartosz Golaszewski
2025-11-13 13:31 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 4/8] net: stmmac: qcom-ethqos: wrap emac driver data in additional structure Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:54 ` Konrad Dybcio
2025-11-07 10:54 ` Konrad Dybcio
2025-11-07 10:54 ` Konrad Dybcio
2025-11-07 10:54 ` Konrad Dybcio
2025-11-13 13:33 ` Bartosz Golaszewski
2025-11-13 13:33 ` Bartosz Golaszewski
2025-11-13 13:33 ` Bartosz Golaszewski
2025-11-13 13:33 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 5/8] net: stmmac: qcom-ethqos: split power management fields into a separate structure Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 6/8] net: stmmac: qcom-ethqos: split power management context into a separate struct Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 11:00 ` Konrad Dybcio
2025-11-07 11:00 ` Konrad Dybcio
2025-11-07 11:00 ` Konrad Dybcio
2025-11-07 11:00 ` Konrad Dybcio
2025-11-13 13:44 ` Bartosz Golaszewski
2025-11-13 13:44 ` Bartosz Golaszewski
2025-11-13 13:44 ` Bartosz Golaszewski
2025-11-13 13:44 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 7/8] net: stmmac: qcom-ethqos: define a callback for setting the serdes speed Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` [PATCH v5 8/8] net: stmmac: qcom-ethqos: add support for sa8255p Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 10:29 ` Bartosz Golaszewski
2025-11-07 11:10 ` Konrad Dybcio
2025-11-07 11:10 ` Konrad Dybcio
2025-11-07 11:10 ` Konrad Dybcio
2025-11-07 11:10 ` Konrad Dybcio
2025-11-11 11:47 ` Simon Horman [this message]
2025-11-11 11:47 ` Simon Horman
2025-11-11 11:47 ` Simon Horman
2025-11-11 11:47 ` Simon Horman
2025-11-13 14:39 ` Bartosz Golaszewski
2025-11-13 14:39 ` Bartosz Golaszewski
2025-11-13 14:39 ` Bartosz Golaszewski
2025-11-13 14:39 ` Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aRMiafCQNPVDOljU@horms.kernel.org \
--to=horms@kernel.org \
--cc=Frank.Li@nxp.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andersson@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=bartosz.golaszewski@linaro.org \
--cc=brgl@bgdev.pl \
--cc=christophe.roullier@foss.st.com \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=david.wu@rock-chips.com \
--cc=devicetree@vger.kernel.org \
--cc=dfustini@tenstorrent.com \
--cc=edumazet@google.com \
--cc=festevam@gmail.com \
--cc=fustini@kernel.org \
--cc=geert+renesas@glider.be \
--cc=guoren@kernel.org \
--cc=heiko@sntech.de \
--cc=imx@lists.linux.dev \
--cc=inochiama@gmail.com \
--cc=jan.petrous@oss.nxp.com \
--cc=jbrunet@baylibre.com \
--cc=jernej.skrabec@gmail.com \
--cc=joabreu@synopsys.com \
--cc=keguang.zhang@gmail.com \
--cc=kernel@esmil.dk \
--cc=kernel@pengutronix.de \
--cc=khilman@baylibre.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=liangshuang@eswincomputing.com \
--cc=linux-amlogic@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux-sunxi@lists.linux.dev \
--cc=lizhi2@eswincomputing.com \
--cc=magnus.damm@gmail.com \
--cc=martin.blumenstingl@googlemail.com \
--cc=matthew.gerlach@altera.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=minda.chen@starfivetech.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=netdev@vger.kernel.org \
--cc=nobuhiro.iwamatsu.x90@mail.toshiba \
--cc=pabeni@redhat.com \
--cc=peppe.cavallaro@st.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=richardcochran@gmail.com \
--cc=robh@kernel.org \
--cc=romain.gantois@bootlin.com \
--cc=s.hauer@pengutronix.de \
--cc=s32@nxp.com \
--cc=samin.guo@starfivetech.com \
--cc=samuel@sholland.org \
--cc=shawnguo@kernel.org \
--cc=sophgo@lists.linux.dev \
--cc=swathi.ks@samsung.com \
--cc=unicorn_wang@outlook.com \
--cc=vineetha.g.jaya.kumaran@intel.com \
--cc=vkoul@kernel.org \
--cc=wefu@redhat.com \
--cc=weishangjuan@eswincomputing.com \
--cc=wens@kernel.org \
--cc=xiaoning.wang@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.