netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs
@ 2025-11-13 11:27 Russell King (Oracle)
  2025-11-13 11:29 ` [PATCH net-next v2 1/2] net: phy: allow drivers to disable EEE support via .get_features() Russell King (Oracle)
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2025-11-13 11:27 UTC (permalink / raw)
  To: Andrew Lunn, Heiner Kallweit
  Cc: David S. Miller, Emanuele Ghidoli, Eric Dumazet, Fabio Estevam,
	Jakub Kicinski, Laurent Pinchart, netdev, Oleksij Rempel,
	Paolo Abeni

Hi,

Towards the end of October, we discussed EEE on TI PHYs which seems to
cause problems with the stmmac hardware. This problem was never fully
diagnosed, but it was identified that TI PHYs do not support LPI
signalling, but report that EEE is supported, and they implement the
advertisement registers and that functionality.

This series allows PHY drivers to disable EEE support.

v2:
- integrate Oleksij Rempel's review comments, and merge update
  into patch 2 to allow EEE on non-1G variants.

 drivers/net/phy/dp83867.c    |  1 +
 drivers/net/phy/dp83869.c    |  1 +
 drivers/net/phy/phy-core.c   |  2 --
 drivers/net/phy/phy_device.c | 32 +++++++++++++++++++++++++++++---
 include/linux/phy.h          |  1 +
 5 files changed, 32 insertions(+), 5 deletions(-)

-- 
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] 5+ messages in thread

* [PATCH net-next v2 1/2] net: phy: allow drivers to disable EEE support via .get_features()
  2025-11-13 11:27 [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Russell King (Oracle)
@ 2025-11-13 11:29 ` Russell King (Oracle)
  2025-11-13 11:29 ` [PATCH net-next v2 2/2] net: phy: TI PHYs use phy_get_features_no_eee() Russell King (Oracle)
  2025-11-13 20:11 ` [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Heiner Kallweit
  2 siblings, 0 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2025-11-13 11:29 UTC (permalink / raw)
  To: Andrew Lunn, Heiner Kallweit
  Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, netdev,
	Paolo Abeni

Allow PHY drivers to hook the .get_features() method to disable EEE
support. This is useful for TI PHYs, where we have a statement that
none of their gigabit products support EEE, yet at least DP83867
reports EEE capabilties and implements EEE negotiation.

Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
 drivers/net/phy/phy-core.c   |  2 --
 drivers/net/phy/phy_device.c | 32 +++++++++++++++++++++++++++++---
 include/linux/phy.h          |  1 +
 3 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 605ca20ae192..43ccbd3a09f8 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -207,8 +207,6 @@ void of_set_phy_eee_broken(struct phy_device *phydev)
 	if (!IS_ENABLED(CONFIG_OF_MDIO) || !node)
 		return;
 
-	linkmode_zero(modes);
-
 	if (of_property_read_bool(node, "eee-broken-100tx"))
 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, modes);
 	if (of_property_read_bool(node, "eee-broken-1000t"))
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 81984d4ebb7c..b384f99a40f2 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3397,6 +3397,34 @@ struct fwnode_handle *fwnode_get_phy_node(const struct fwnode_handle *fwnode)
 }
 EXPORT_SYMBOL_GPL(fwnode_get_phy_node);
 
+static int phy_get_features(struct phy_device *phydev)
+{
+	int err;
+
+	if (phydev->is_c45)
+		err = genphy_c45_pma_read_abilities(phydev);
+	else
+		err = genphy_read_abilities(phydev);
+
+	return err;
+}
+
+/**
+ * phy_get_features_no_eee - read the PHY features, disabling all EEE
+ * @phydev: phy_device structure to be added to the MDIO bus
+ *
+ * Read the PHY features, and fill the @phydev->eee_disabled_modes to
+ * prevent EEE being used. This is intended to be used for PHY .get_feature
+ * methods where a PHY reports incorrect capabilities.
+ */
+int phy_get_features_no_eee(struct phy_device *phydev)
+{
+	linkmode_fill(phydev->eee_disabled_modes);
+
+	return phy_get_features(phydev);
+}
+EXPORT_SYMBOL_GPL(phy_get_features_no_eee);
+
 /**
  * phy_probe - probe and init a PHY device
  * @dev: device to probe and init
@@ -3442,10 +3470,8 @@ static int phy_probe(struct device *dev)
 	}
 	else if (phydrv->get_features)
 		err = phydrv->get_features(phydev);
-	else if (phydev->is_c45)
-		err = genphy_c45_pma_read_abilities(phydev);
 	else
-		err = genphy_read_abilities(phydev);
+		err = phy_get_features(phydev);
 
 	if (err)
 		goto out;
diff --git a/include/linux/phy.h b/include/linux/phy.h
index bf5457341ca8..2655c0ae6488 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -2299,6 +2299,7 @@ void phy_support_sym_pause(struct phy_device *phydev);
 void phy_support_asym_pause(struct phy_device *phydev);
 void phy_support_eee(struct phy_device *phydev);
 void phy_disable_eee(struct phy_device *phydev);
+int phy_get_features_no_eee(struct phy_device *phydev);
 void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
 		       bool autoneg);
 void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 2/2] net: phy: TI PHYs use phy_get_features_no_eee()
  2025-11-13 11:27 [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Russell King (Oracle)
  2025-11-13 11:29 ` [PATCH net-next v2 1/2] net: phy: allow drivers to disable EEE support via .get_features() Russell King (Oracle)
@ 2025-11-13 11:29 ` Russell King (Oracle)
  2025-11-13 20:11 ` [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Heiner Kallweit
  2 siblings, 0 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2025-11-13 11:29 UTC (permalink / raw)
  To: Andrew Lunn, Heiner Kallweit
  Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, netdev,
	Paolo Abeni

As TI Gigabit PHYs do not support EEE, use the newly introduced
phy_get_features_no_eee() to read the features but mark EEE as
disabled.

Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
 drivers/net/phy/dp83867.c | 1 +
 drivers/net/phy/dp83869.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c
index 36a0c1b7f59c..da055ff861be 100644
--- a/drivers/net/phy/dp83867.c
+++ b/drivers/net/phy/dp83867.c
@@ -1124,6 +1124,7 @@ static struct phy_driver dp83867_driver[] = {
 		/* PHY_GBIT_FEATURES */
 
 		.probe          = dp83867_probe,
+		.get_features	= phy_get_features_no_eee,
 		.config_init	= dp83867_config_init,
 		.soft_reset	= dp83867_phy_reset,
 
diff --git a/drivers/net/phy/dp83869.c b/drivers/net/phy/dp83869.c
index 1f381d7b13ff..4400654b0f72 100644
--- a/drivers/net/phy/dp83869.c
+++ b/drivers/net/phy/dp83869.c
@@ -906,6 +906,7 @@ static int dp83869_phy_reset(struct phy_device *phydev)
 	PHY_ID_MATCH_MODEL(_id),				\
 	.name		= (_name),				\
 	.probe          = dp83869_probe,			\
+	.get_features	= phy_get_features_no_eee,		\
 	.config_init	= dp83869_config_init,			\
 	.soft_reset	= dp83869_phy_reset,			\
 	.config_intr	= dp83869_config_intr,			\
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs
  2025-11-13 11:27 [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Russell King (Oracle)
  2025-11-13 11:29 ` [PATCH net-next v2 1/2] net: phy: allow drivers to disable EEE support via .get_features() Russell King (Oracle)
  2025-11-13 11:29 ` [PATCH net-next v2 2/2] net: phy: TI PHYs use phy_get_features_no_eee() Russell King (Oracle)
@ 2025-11-13 20:11 ` Heiner Kallweit
  2025-11-13 21:46   ` Russell King (Oracle)
  2 siblings, 1 reply; 5+ messages in thread
From: Heiner Kallweit @ 2025-11-13 20:11 UTC (permalink / raw)
  To: Russell King (Oracle), Andrew Lunn
  Cc: David S. Miller, Emanuele Ghidoli, Eric Dumazet, Fabio Estevam,
	Jakub Kicinski, Laurent Pinchart, netdev, Oleksij Rempel,
	Paolo Abeni

On 11/13/2025 12:27 PM, Russell King (Oracle) wrote:
> Hi,
> 
> Towards the end of October, we discussed EEE on TI PHYs which seems to
> cause problems with the stmmac hardware. This problem was never fully
> diagnosed, but it was identified that TI PHYs do not support LPI
> signalling, but report that EEE is supported, and they implement the
> advertisement registers and that functionality.
> 
> This series allows PHY drivers to disable EEE support.
> 
> v2:
> - integrate Oleksij Rempel's review comments, and merge update
>   into patch 2 to allow EEE on non-1G variants.
> 
>  drivers/net/phy/dp83867.c    |  1 +
>  drivers/net/phy/dp83869.c    |  1 +
>  drivers/net/phy/phy-core.c   |  2 --
>  drivers/net/phy/phy_device.c | 32 +++++++++++++++++++++++++++++---
>  include/linux/phy.h          |  1 +
>  5 files changed, 32 insertions(+), 5 deletions(-)
> 

Alternatively the PHY driver could call phy_disable_eee()
in its config_init. Then we wouldn't have to touch core code.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs
  2025-11-13 20:11 ` [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Heiner Kallweit
@ 2025-11-13 21:46   ` Russell King (Oracle)
  0 siblings, 0 replies; 5+ messages in thread
From: Russell King (Oracle) @ 2025-11-13 21:46 UTC (permalink / raw)
  To: Heiner Kallweit
  Cc: Andrew Lunn, David S. Miller, Emanuele Ghidoli, Eric Dumazet,
	Fabio Estevam, Jakub Kicinski, Laurent Pinchart, netdev,
	Oleksij Rempel, Paolo Abeni

On Thu, Nov 13, 2025 at 09:11:32PM +0100, Heiner Kallweit wrote:
> On 11/13/2025 12:27 PM, Russell King (Oracle) wrote:
> > Hi,
> > 
> > Towards the end of October, we discussed EEE on TI PHYs which seems to
> > cause problems with the stmmac hardware. This problem was never fully
> > diagnosed, but it was identified that TI PHYs do not support LPI
> > signalling, but report that EEE is supported, and they implement the
> > advertisement registers and that functionality.
> > 
> > This series allows PHY drivers to disable EEE support.
> > 
> > v2:
> > - integrate Oleksij Rempel's review comments, and merge update
> >   into patch 2 to allow EEE on non-1G variants.
> > 
> >  drivers/net/phy/dp83867.c    |  1 +
> >  drivers/net/phy/dp83869.c    |  1 +
> >  drivers/net/phy/phy-core.c   |  2 --
> >  drivers/net/phy/phy_device.c | 32 +++++++++++++++++++++++++++++---
> >  include/linux/phy.h          |  1 +
> >  5 files changed, 32 insertions(+), 5 deletions(-)
> > 
> 
> Alternatively the PHY driver could call phy_disable_eee()
> in its config_init. Then we wouldn't have to touch core code.

If that's what you intend, then please update the kerneldoc for
phy_disable_eee() so that it doesn't state that it's for MAC use
(because that implies it's not for PHY drivers.)

-- 
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] 5+ messages in thread

end of thread, other threads:[~2025-11-13 21:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-13 11:27 [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Russell King (Oracle)
2025-11-13 11:29 ` [PATCH net-next v2 1/2] net: phy: allow drivers to disable EEE support via .get_features() Russell King (Oracle)
2025-11-13 11:29 ` [PATCH net-next v2 2/2] net: phy: TI PHYs use phy_get_features_no_eee() Russell King (Oracle)
2025-11-13 20:11 ` [PATCH net-next v2 0/2] net: phy: disable EEE on TI PHYs Heiner Kallweit
2025-11-13 21:46   ` Russell King (Oracle)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).