[Linux-stm32] [PATCH] net: dwmac-rk: MAC clock should be truned off
lizhe
sensor1010 at 163.com
Sat May 24 17:57:09 UTC 2025
Hi, Andrew
It looks pretty deliberate ignoring errors
If that's the case, then these lines of code:
if (ret) {
gmac_clk_enable(bsp_priv, false);
return ret;
}
Will never get executed. I will send another patch to fix this issue
If the PHY power-on fails, then in the MAC-PHY connected configuration, the network interface cannot operate properly.
BUT, the MAC clock remains enabled and is not turned off, which is incorrec
At 2025-05-24 22:48:15, "Andrew Lunn" <andrew at lunn.ch> wrote:
>On Sat, May 24, 2025 at 10:05:47PM +0800, lizhe wrote:
>> Hi, Anerdw
>> The following is the logic for calling this function:
>>
>>
>> rk_gmac_powerup() {
>>
>> ret = phy_power_on(bsp_priv, true); // here.
>>
>> if (ret) {
>>
>> gmac_clk_enable(bsp_priv, false);
>>
>> return ret;
>>
>> }
>>
>> }
>
>Ah, there is something funny with your patch. Look at the diff:
>
>diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
>index 700858ff6f7c..036e45be5828 100644
>--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
>+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
>@@ -1648,7 +1648,7 @@ static int gmac_clk_enable(struct rk_priv_data *bsp_priv, bool enable)
>
>This line tells you where in the file you are patching, and the
>function to be patched. This is what i looked at,
>gmac_clk_enable(). And gmac_clk_enable() has a similar structure, ret
>declared at the beginning, return 0 at the end. But the only way to
>that return 0 is without error.
>
>But patch is actually for:
>
> static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
> {
> struct regulator *ldo = bsp_priv->regulator;
>- int ret;
>+ int ret = 0;
> struct device *dev = &bsp_priv->pdev->dev;
>
> if (enable) {
>@@ -1661,7 +1661,7 @@ static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
> dev_err(dev, "fail to disable phy-supply\n");
> }
>
>- return 0;
>+ return ret;
> }
>
>And agree, the error codes are ignored in phy_power_on().
>
>But i have a few questions:
>
>How did you generate this diff? This is the first time i've made this
>mistake, as far as i know. I trust the context information when
>reviewing patches. Yet here it is wrong. Why? Is this actually normal?
>I know diff gets it wrong for python, i don't trust it at all with
>that language, but i've not noticed such problems with C.
>
>Did you look at the history of phy_power_on()? It looks pretty
>deliberate ignoring errors. Maybe there is a reason why this happens?
>git blame and git log might explain why it is like this.
>
> Andrew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://st-md-mailman.stormreply.com/pipermail/linux-stm32/attachments/20250525/44204e25/attachment.html>
More information about the Linux-stm32
mailing list