diff mbox series

[net,2/2] net: phy: Skip PHY LEDs OF registration for Generic PHY driver

Message ID 20241003221006.4568-2-ansuelsmth@gmail.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series [net,1/2] net: phy: Remove LED entry from LEDs list on unregister | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 6 this patch: 6
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 9 of 9 maintainers
netdev/build_clang success Errors and warnings before: 6 this patch: 6
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 5 this patch: 5
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 11 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 40 this patch: 40
netdev/source_inline success Was 0 now: 0

Commit Message

Christian Marangi Oct. 3, 2024, 10:10 p.m. UTC
It might happen that a PHY driver fails to probe or is not present in
the system as it's a kmod. In such case the Device Tree might have LED
entry but the Generic PHY is probed instead.

In this scenario, PHY LEDs OF registration should be skipped as
controlling the PHY LEDs is not possible.

Tested-by: Daniel Golle <daniel@makrotopia.org>
Cc: stable@vger.kernel.org
Fixes: 01e5b728e9e4 ("net: phy: Add a binding for PHY LEDs")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
 drivers/net/phy/phy_device.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Andrew Lunn Oct. 3, 2024, 10:50 p.m. UTC | #1
On Fri, Oct 04, 2024 at 12:10:05AM +0200, Christian Marangi wrote:
> It might happen that a PHY driver fails to probe or is not present in
> the system as it's a kmod. In such case the Device Tree might have LED
> entry but the Generic PHY is probed instead.
> 
> In this scenario, PHY LEDs OF registration should be skipped as
> controlling the PHY LEDs is not possible.
> 
> Tested-by: Daniel Golle <daniel@makrotopia.org>
> Cc: stable@vger.kernel.org
> Fixes: 01e5b728e9e4 ("net: phy: Add a binding for PHY LEDs")
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> ---
>  drivers/net/phy/phy_device.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index 499797646580..af088bf00bae 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -3411,6 +3411,11 @@ static int of_phy_leds(struct phy_device *phydev)
>  	struct device_node *leds;
>  	int err;
>  
> +	/* Skip LED registration if we are Generic PHY */
> +	if (phy_driver_is_genphy(phydev) ||
> +	    phy_driver_is_genphy_10g(phydev))
> +		return 0;

Why fix it link this, when what you propose for net-next, that the drv
ops must also exist, would fix it.

I don't see any need to special case genphy.

	Andrew
Christian Marangi Oct. 4, 2024, 9:13 a.m. UTC | #2
On Fri, Oct 04, 2024 at 12:50:39AM +0200, Andrew Lunn wrote:
> On Fri, Oct 04, 2024 at 12:10:05AM +0200, Christian Marangi wrote:
> > It might happen that a PHY driver fails to probe or is not present in
> > the system as it's a kmod. In such case the Device Tree might have LED
> > entry but the Generic PHY is probed instead.
> > 
> > In this scenario, PHY LEDs OF registration should be skipped as
> > controlling the PHY LEDs is not possible.
> > 
> > Tested-by: Daniel Golle <daniel@makrotopia.org>
> > Cc: stable@vger.kernel.org
> > Fixes: 01e5b728e9e4 ("net: phy: Add a binding for PHY LEDs")
> > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> > ---
> >  drivers/net/phy/phy_device.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> > index 499797646580..af088bf00bae 100644
> > --- a/drivers/net/phy/phy_device.c
> > +++ b/drivers/net/phy/phy_device.c
> > @@ -3411,6 +3411,11 @@ static int of_phy_leds(struct phy_device *phydev)
> >  	struct device_node *leds;
> >  	int err;
> >  
> > +	/* Skip LED registration if we are Generic PHY */
> > +	if (phy_driver_is_genphy(phydev) ||
> > +	    phy_driver_is_genphy_10g(phydev))
> > +		return 0;
> 
> Why fix it link this, when what you propose for net-next, that the drv
> ops must also exist, would fix it.
> 
> I don't see any need to special case genphy.
>

While the patch in net-next fix a broken condition (PHY driver exist but
doesn't have LEDs OPs), this account a much possible scenario.

It's totally ok if the PHY driver is not loaded and we fallback to the
Generic PHY and there are LEDs node.

This is the case with something like
ip link set eth0 down
rmmod air_en8811h
ip link set eth0 up

On this up, the Generic PHY is loaded and LEDs will wrongly be
registered. We should not add the LED to the phydev LEDs list.

Do you think this logic is wrong and we should print a warning also in
this case? Or should we bite it and just return 0 with no warning at
all? (again my concern is the additional LEDs entry in sysfs that won't
be actually usable as everything will be rejected)
Andrew Lunn Oct. 4, 2024, 1:44 p.m. UTC | #3
> While the patch in net-next fix a broken condition (PHY driver exist but
> doesn't have LEDs OPs), this account a much possible scenario.
> 
> It's totally ok if the PHY driver is not loaded and we fallback to the
> Generic PHY and there are LEDs node.
> 
> This is the case with something like
> ip link set eth0 down
> rmmod air_en8811h
> ip link set eth0 up
> 
> On this up, the Generic PHY is loaded and LEDs will wrongly be
> registered. We should not add the LED to the phydev LEDs list.
> 
> Do you think this logic is wrong and we should print a warning also in
> this case? Or should we bite it and just return 0 with no warning at
> all? (again my concern is the additional LEDs entry in sysfs that won't
> be actually usable as everything will be rejected)

We should not add LEDs which we cannot drive. That much is clear to
me.

I would also agree that LEDs in DT which we cannot drive is not
fatal. So the return value should be 0.

The only really open point is phydev_err(), phydev_warn() or
phydev_dbg(). Since it is not fatal, phydev_err() is wrong. I would
probably go with phydev_dbg(), to aid somebody debugging why the LEDs
don't appear in some conditions.

	Andrew
Christian Marangi Oct. 4, 2024, 1:46 p.m. UTC | #4
On Fri, Oct 04, 2024 at 03:44:33PM +0200, Andrew Lunn wrote:
> > While the patch in net-next fix a broken condition (PHY driver exist but
> > doesn't have LEDs OPs), this account a much possible scenario.
> > 
> > It's totally ok if the PHY driver is not loaded and we fallback to the
> > Generic PHY and there are LEDs node.
> > 
> > This is the case with something like
> > ip link set eth0 down
> > rmmod air_en8811h
> > ip link set eth0 up
> > 
> > On this up, the Generic PHY is loaded and LEDs will wrongly be
> > registered. We should not add the LED to the phydev LEDs list.
> > 
> > Do you think this logic is wrong and we should print a warning also in
> > this case? Or should we bite it and just return 0 with no warning at
> > all? (again my concern is the additional LEDs entry in sysfs that won't
> > be actually usable as everything will be rejected)
> 
> We should not add LEDs which we cannot drive. That much is clear to
> me.
> 
> I would also agree that LEDs in DT which we cannot drive is not
> fatal. So the return value should be 0.
> 
> The only really open point is phydev_err(), phydev_warn() or
> phydev_dbg(). Since it is not fatal, phydev_err() is wrong. I would
> probably go with phydev_dbg(), to aid somebody debugging why the LEDs
> don't appear in some conditions.
>

Ok I will squash this and the net-next patch and change to dbg.

Do you think it's still "net" content? I'm more tempted to post in
net-next since I have to drop the Generic PHY condition.
Andrew Lunn Oct. 4, 2024, 2:11 p.m. UTC | #5
> Ok I will squash this and the net-next patch and change to dbg.
> 
> Do you think it's still "net" content? I'm more tempted to post in
> net-next since I have to drop the Generic PHY condition.

Does it cause real problems for users? That is the requirement for
stable.

	Andrew
Christian Marangi Oct. 4, 2024, 2:12 p.m. UTC | #6
On Fri, Oct 04, 2024 at 04:11:22PM +0200, Andrew Lunn wrote:
> > Ok I will squash this and the net-next patch and change to dbg.
> > 
> > Do you think it's still "net" content? I'm more tempted to post in
> > net-next since I have to drop the Generic PHY condition.
> 
> Does it cause real problems for users? That is the requirement for
> stable.
>

Not strictly bugs or kernel panic, just annoyance, ok will post to
net-next.
diff mbox series

Patch

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 499797646580..af088bf00bae 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3411,6 +3411,11 @@  static int of_phy_leds(struct phy_device *phydev)
 	struct device_node *leds;
 	int err;
 
+	/* Skip LED registration if we are Generic PHY */
+	if (phy_driver_is_genphy(phydev) ||
+	    phy_driver_is_genphy_10g(phydev))
+		return 0;
+
 	if (!IS_ENABLED(CONFIG_OF_MDIO))
 		return 0;