* [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