mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
net: phy: clear link parameters on admin link down
[ Upstream commit 60f887b1290b43a4f5a3497982a725687b193fa4 ] When a PHY is halted (e.g. `ip link set dev lan2 down`), several fields in struct phy_device may still reflect the last active connection. This leads to ethtool showing stale values even though the link is down. Reset selected fields in _phy_state_machine() when transitioning to PHY_HALTED and the link was previously up: - speed/duplex -> UNKNOWN, but only in autoneg mode (in forced mode these fields carry configuration, not status) - master_slave_state -> UNKNOWN if previously supported - mdix -> INVALID (state only, same meaning as "unknown") - lp_advertising -> always cleared The cleanup is skipped if the PHY is in PHY_ERROR state, so the last values remain available for diagnostics. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20250917094751.2101285-1-o.rempel@pengutronix.de Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c5fa9fed62
commit
855cd3a0c4
@@ -1482,6 +1482,19 @@ void phy_state_machine(struct work_struct *work)
|
||||
}
|
||||
break;
|
||||
case PHY_HALTED:
|
||||
if (phydev->link) {
|
||||
if (phydev->autoneg == AUTONEG_ENABLE) {
|
||||
phydev->speed = SPEED_UNKNOWN;
|
||||
phydev->duplex = DUPLEX_UNKNOWN;
|
||||
}
|
||||
if (phydev->master_slave_state !=
|
||||
MASTER_SLAVE_STATE_UNSUPPORTED)
|
||||
phydev->master_slave_state =
|
||||
MASTER_SLAVE_STATE_UNKNOWN;
|
||||
phydev->mdix = ETH_TP_MDI_INVALID;
|
||||
linkmode_zero(phydev->lp_advertising);
|
||||
}
|
||||
fallthrough;
|
||||
case PHY_ERROR:
|
||||
if (phydev->link) {
|
||||
phydev->link = 0;
|
||||
|
||||
Reference in New Issue
Block a user