[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aXzT1UCpG4kN-dQv@shell.armlinux.org.uk>
Date: Fri, 30 Jan 2026 15:52:53 +0000
From: "Russell King (Oracle)" <linux@...linux.org.uk>
To: Marek Vasut <marex@...ladev.com>
Cc: netdev@...r.kernel.org, "David S. Miller" <davem@...emloft.net>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
Andrew Lunn <andrew+netdev@...n.ch>,
Christophe Roullier <christophe.roullier@...com>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Krzysztof Kozlowski <krzk@...nel.org>,
Maxime Coquelin <mcoquelin.stm32@...il.com>,
Paolo Abeni <pabeni@...hat.com>, Simon Horman <horms@...nel.org>,
kernel@...electronics.com, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com
Subject: Re: [net-next,PATCH] net: stmmac: stm32: Do not suspend downed
interface
On Thu, Jan 15, 2026 at 12:27:05AM +0100, Marek Vasut wrote:
> On 1/14/26 6:12 PM, Russell King (Oracle) wrote:
> > I think I'm going to start over, trying to figure out what happened.
> >
> > c7308b2f3d0d net: stmmac: stm32: convert to suspend()/resume() methods
> >
> > Did the conversion, and it always called stm32_dwmac_clk_disable() and
> > where it exists, dwmac->ops->suspend() on suspend, provided
> > stmmac_suspend() returns zero (which it will do, even if the interface
> > is down. On resume, it always calls dwmac->ops->resume() and
> > stm32_dwmac_init() before calling stmmac_resume().
> >
> > The conversion added hooks into ny new ->suspend() and ->resume()
> > methods to handle the stm32_dwmac_clk_disable(), dwmac->ops->suspend(),
> > dwmac->ops->resume() and stm32_dwmac_init() steps.
> >
> > However, in 07bbbfe7addf I failed to realise that, in order to keep
> > things compatible with how stuff works, we need to call
> > priv->plat->suspend() even if the interface is down. This is where
> > the bug is, not in your glue driver.
> >
> > Please try this:
> >
> > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > index a8a78fe7d01f..2acbb0107cd3 100644
> > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > @@ -8066,7 +8066,7 @@ int stmmac_suspend(struct device *dev)
> > u32 chan;
> > if (!ndev || !netif_running(ndev))
> > - return 0;
> > + goto suspend_bsp;
> > mutex_lock(&priv->lock);
> > @@ -8106,6 +8106,7 @@ int stmmac_suspend(struct device *dev)
> > if (stmmac_fpe_supported(priv))
> > ethtool_mmsv_stop(&priv->fpe_cfg.mmsv);
> > +suspend_bsp:
> > if (priv->plat->suspend)
> > return priv->plat->suspend(dev, priv->plat->bsp_priv);
> This works too, thank you.
>
> Will you send this fix ?
Sorry, I appear to have dropped this patch on the floor, and just
tripped over it. I'm just build testing it and will send it later
today.
This problem affects every user of the platform ->suspend/resume()
stuff, so is not just a stm32 issue.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Powered by blists - more mailing lists