Skip to content

Commit 4994911

Browse files
Russell King (Oracle)pelwell
authored andcommitted
net: phy: fix phylib's dual eee_enabled
phylib has two eee_enabled members. Some parts of the code are using phydev->eee_enabled, other parts are using phydev->eee_cfg.eee_enabled. This leads to incorrect behaviour as their state goes out of sync. ethtool --show-eee shows incorrect information, and --set-eee sometimes doesn't take effect. Fix this by only having one eee_enabled member - that in eee_cfg. Fixes: 49168d1 ("net: phy: Add phy_support_eee() indicating MAC support EEE") Signed-off-by: Russell King (Oracle) <[email protected]> Reviewed-by: Heiner Kallweit <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent d92d252 commit 4994911

File tree

3 files changed

+3
-7
lines changed

3 files changed

+3
-7
lines changed

drivers/net/phy/phy-c45.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ EXPORT_SYMBOL_GPL(genphy_c45_read_eee_abilities);
942942
*/
943943
int genphy_c45_an_config_eee_aneg(struct phy_device *phydev)
944944
{
945-
if (!phydev->eee_enabled) {
945+
if (!phydev->eee_cfg.eee_enabled) {
946946
__ETHTOOL_DECLARE_LINK_MODE_MASK(adv) = {};
947947

948948
return genphy_c45_write_eee_adv(phydev, adv);
@@ -1575,8 +1575,6 @@ int genphy_c45_ethtool_set_eee(struct phy_device *phydev,
15751575
linkmode_copy(phydev->advertising_eee, adv);
15761576
}
15771577

1578-
phydev->eee_enabled = data->eee_enabled;
1579-
15801578
ret = genphy_c45_an_config_eee_aneg(phydev);
15811579
if (ret > 0) {
15821580
ret = phy_restart_aneg(phydev);

drivers/net/phy/phy_device.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3622,12 +3622,12 @@ static int phy_probe(struct device *dev)
36223622
/* There is no "enabled" flag. If PHY is advertising, assume it is
36233623
* kind of enabled.
36243624
*/
3625-
phydev->eee_enabled = !linkmode_empty(phydev->advertising_eee);
3625+
phydev->eee_cfg.eee_enabled = !linkmode_empty(phydev->advertising_eee);
36263626

36273627
/* Some PHYs may advertise, by default, not support EEE modes. So,
36283628
* we need to clean them.
36293629
*/
3630-
if (phydev->eee_enabled)
3630+
if (phydev->eee_cfg.eee_enabled)
36313631
linkmode_and(phydev->advertising_eee, phydev->supported_eee,
36323632
phydev->advertising_eee);
36333633

include/linux/phy.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,6 @@ struct macsec_ops;
601601
* @adv_old: Saved advertised while power saving for WoL
602602
* @supported_eee: supported PHY EEE linkmodes
603603
* @advertising_eee: Currently advertised EEE linkmodes
604-
* @eee_enabled: Flag indicating whether the EEE feature is enabled
605604
* @enable_tx_lpi: When True, MAC should transmit LPI to PHY
606605
* @eee_cfg: User configuration of EEE
607606
* @lp_advertising: Current link partner advertised linkmodes
@@ -721,7 +720,6 @@ struct phy_device {
721720
/* used for eee validation and configuration*/
722721
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported_eee);
723722
__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising_eee);
724-
bool eee_enabled;
725723

726724
/* Host supported PHY interface types. Should be ignored if empty. */
727725
DECLARE_PHY_INTERFACE_MASK(host_interfaces);

0 commit comments

Comments
 (0)