* Re: [PATCH 2/3] net: stmmac: restore pinctrl when driver remove.
[not found] ` <20260218083618.67805-3-christophe.roullier@foss.st.com>
@ 2026-02-18 8:55 ` Russell King (Oracle)
2026-02-19 19:11 ` Linus Walleij
0 siblings, 1 reply; 4+ messages in thread
From: Russell King (Oracle) @ 2026-02-18 8:55 UTC (permalink / raw)
To: Christophe Roullier, Linus Walleij
Cc: Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Maxime Coquelin, Alexandre Torgue, Maxime Chevallier,
Vladimir Oltean, netdev, linux-gpio, linux-stm32,
linux-arm-kernel, linux-kernel
On Wed, Feb 18, 2026 at 09:36:17AM +0100, Christophe Roullier wrote:
> when system suspend or unbind, need to set pins
> to low power state to save IO power consumption.
>
> Signed-off-by: Christophe Roullier <christophe.roullier@foss.st.com>
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 067b17f03cd09..3d4f0e4cb53fb 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -8071,6 +8071,9 @@ void stmmac_dvr_remove(struct device *dev)
> mutex_destroy(&priv->lock);
> bitmap_free(priv->af_xdp_zc_qps);
>
> + /* Select sleep pin state */
> + pinctrl_pm_select_sleep_state(dev);
> +
I'm not convinced this is correct, there's nothing to match it in the
probe function, except what the driver model core does. However, the
driver model core also doesn't clean up the state if probe fails.
Adding LinusW for comment.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/3] net: stmmac: restore pinctrl when driver remove.
2026-02-18 8:55 ` [PATCH 2/3] net: stmmac: restore pinctrl when driver remove Russell King (Oracle)
@ 2026-02-19 19:11 ` Linus Walleij
2026-02-19 19:25 ` Russell King (Oracle)
0 siblings, 1 reply; 4+ messages in thread
From: Linus Walleij @ 2026-02-19 19:11 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Christophe Roullier, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maxime Coquelin, Alexandre Torgue,
Maxime Chevallier, Vladimir Oltean, netdev, linux-gpio,
linux-stm32, linux-arm-kernel, linux-kernel
On Wed, Feb 18, 2026 at 9:55 AM Russell King (Oracle)
<linux@armlinux.org.uk> wrote:
> On Wed, Feb 18, 2026 at 09:36:17AM +0100, Christophe Roullier wrote:
> > when system suspend or unbind, need to set pins
> > to low power state to save IO power consumption.
> >
> > Signed-off-by: Christophe Roullier <christophe.roullier@foss.st.com>
> > ---
> > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > index 067b17f03cd09..3d4f0e4cb53fb 100644
> > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > @@ -8071,6 +8071,9 @@ void stmmac_dvr_remove(struct device *dev)
> > mutex_destroy(&priv->lock);
> > bitmap_free(priv->af_xdp_zc_qps);
> >
> > + /* Select sleep pin state */
> > + pinctrl_pm_select_sleep_state(dev);
> > +
>
> I'm not convinced this is correct, there's nothing to match it in the
> probe function, except what the driver model core does. However, the
> driver model core also doesn't clean up the state if probe fails.
I think it looks right, if this state is indeed for the sleep state of the
device pins, and this is what you want to happen at remove().
The non-cleanup of the pin states is a (maybe ugly) feature: there
is an "init" and a "default" state. If the "init" state does not exist the
"default" state is selected in the dd.c call.
These states are just some values in dev->pins, allocated with
devm_kzalloc(), and devm_pinctrl_get() for e.g. dev->pins->p,
so IIUC this will befree:ed on driver detach,
also if the probe() fails, at least that is what the original devres
design document says
Documentation/driver-api/driver-model/devres.rst
There is really no other cleanup that can happen: there is no
before-default-or-init state we can revert to (that would be the
power-on values), so there are just these states in some pointers
that could be accessed by e.g. pinctrl_pm_select_sleep_state()
that get free:ed up, and muxing and pin config that happened
in the pin control hardware just stays around.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/3] net: stmmac: restore pinctrl when driver remove.
2026-02-19 19:11 ` Linus Walleij
@ 2026-02-19 19:25 ` Russell King (Oracle)
2026-02-19 22:20 ` Linus Walleij
0 siblings, 1 reply; 4+ messages in thread
From: Russell King (Oracle) @ 2026-02-19 19:25 UTC (permalink / raw)
To: Linus Walleij
Cc: Christophe Roullier, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maxime Coquelin, Alexandre Torgue,
Maxime Chevallier, Vladimir Oltean, netdev, linux-gpio,
linux-stm32, linux-arm-kernel, linux-kernel
On Thu, Feb 19, 2026 at 08:11:13PM +0100, Linus Walleij wrote:
> On Wed, Feb 18, 2026 at 9:55 AM Russell King (Oracle)
> <linux@armlinux.org.uk> wrote:
> > On Wed, Feb 18, 2026 at 09:36:17AM +0100, Christophe Roullier wrote:
> > > when system suspend or unbind, need to set pins
> > > to low power state to save IO power consumption.
> > >
> > > Signed-off-by: Christophe Roullier <christophe.roullier@foss.st.com>
> > > ---
> > > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++
> > > 1 file changed, 3 insertions(+)
> > >
> > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > > index 067b17f03cd09..3d4f0e4cb53fb 100644
> > > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> > > @@ -8071,6 +8071,9 @@ void stmmac_dvr_remove(struct device *dev)
> > > mutex_destroy(&priv->lock);
> > > bitmap_free(priv->af_xdp_zc_qps);
> > >
> > > + /* Select sleep pin state */
> > > + pinctrl_pm_select_sleep_state(dev);
> > > +
> >
> > I'm not convinced this is correct, there's nothing to match it in the
> > probe function, except what the driver model core does. However, the
> > driver model core also doesn't clean up the state if probe fails.
>
> I think it looks right, if this state is indeed for the sleep state of the
> device pins, and this is what you want to happen at remove().
>
> The non-cleanup of the pin states is a (maybe ugly) feature: there
> is an "init" and a "default" state. If the "init" state does not exist the
> "default" state is selected in the dd.c call.
>
> These states are just some values in dev->pins, allocated with
> devm_kzalloc(), and devm_pinctrl_get() for e.g. dev->pins->p,
> so IIUC this will befree:ed on driver detach,
> also if the probe() fails, at least that is what the original devres
> design document says
> Documentation/driver-api/driver-model/devres.rst
>
> There is really no other cleanup that can happen: there is no
> before-default-or-init state we can revert to (that would be the
> power-on values), so there are just these states in some pointers
> that could be accessed by e.g. pinctrl_pm_select_sleep_state()
> that get free:ed up, and muxing and pin config that happened
> in the pin control hardware just stays around.
What we seem to end up with is that on probe failure, we set the pins
to init or default state. However, on remove, it's up to the driver to
decide whether to put the pins into sleep state or not.
Shouldn't a driver be consistent, and place the pins into the same
state in both these scenarios?
Conversely, I'm slightly worried that putting pins into sleep state
when we're not powering down may be bad if they're allowed to then
float, which could cause the PHY to interfere on the network.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/3] net: stmmac: restore pinctrl when driver remove.
2026-02-19 19:25 ` Russell King (Oracle)
@ 2026-02-19 22:20 ` Linus Walleij
0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2026-02-19 22:20 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Christophe Roullier, Andrew Lunn, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maxime Coquelin, Alexandre Torgue,
Maxime Chevallier, Vladimir Oltean, netdev, linux-gpio,
linux-stm32, linux-arm-kernel, linux-kernel
On Thu, Feb 19, 2026 at 8:25 PM Russell King (Oracle)
<linux@armlinux.org.uk> wrote:
> On Thu, Feb 19, 2026 at 08:11:13PM +0100, Linus Walleij wrote:
> > There is really no other cleanup that can happen: there is no
> > before-default-or-init state we can revert to (that would be the
> > power-on values), so there are just these states in some pointers
> > that could be accessed by e.g. pinctrl_pm_select_sleep_state()
> > that get free:ed up, and muxing and pin config that happened
> > in the pin control hardware just stays around.
>
> What we seem to end up with is that on probe failure, we set the pins
> to init or default state.
Indeed.
> However, on remove, it's up to the driver to
> decide whether to put the pins into sleep state or not.
>
> Shouldn't a driver be consistent, and place the pins into the same
> state in both these scenarios?
I think you're right. Just very few device trees define the "sleep"
state (the infamous "so far so good...") so it has not been adressed.
> Conversely, I'm slightly worried that putting pins into sleep state
> when we're not powering down may be bad if they're allowed to then
> float, which could cause the PHY to interfere on the network.
That's a good point.
It's perfectly legal to define any random state for the driver, such
as "relaxed" or "unused". It had the only downside that the device
driver core will not help out in looking up the state by default.
I'd be happy to take a patch that e.g. looks for an "unused"
state and put the pins into that state if probe fails, or when
remove() is called, so we get something everyone can use for
this.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-02-19 22:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260218083618.67805-1-christophe.roullier@foss.st.com>
[not found] ` <20260218083618.67805-3-christophe.roullier@foss.st.com>
2026-02-18 8:55 ` [PATCH 2/3] net: stmmac: restore pinctrl when driver remove Russell King (Oracle)
2026-02-19 19:11 ` Linus Walleij
2026-02-19 19:25 ` Russell King (Oracle)
2026-02-19 22:20 ` Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox