[PATCH net v1 1/2] net: phy: microchip: Use genphy_soft_reset() to purge stale LPA bits

Oleksij Rempel posted 2 patches 3 months ago
[PATCH net v1 1/2] net: phy: microchip: Use genphy_soft_reset() to purge stale LPA bits
Posted by Oleksij Rempel 3 months ago
Enable .soft_reset for the LAN88xx PHY driver by assigning
genphy_soft_reset() to ensure that the phylib core performs a proper
soft reset during reconfiguration.

Previously, the driver left .soft_reset unimplemented, so calls to
phy_init_hw() (e.g., from lan88xx_link_change_notify()) did not fully
reset the PHY. As a result, stale contents in the Link Partner Ability
(LPA) register could persist, causing the PHY to incorrectly report
that the link partner advertised autonegotiation even when it did not.

Using genphy_soft_reset() guarantees a clean reset of the PHY and
corrects the false autoneg reporting in these scenarios.

Fixes: ccb989e4d1ef ("net: phy: microchip: Reset LAN88xx PHY to ensure clean link state on LAN7800/7850")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 drivers/net/phy/microchip.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c
index 13570f628aa5..5e590b0a75e5 100644
--- a/drivers/net/phy/microchip.c
+++ b/drivers/net/phy/microchip.c
@@ -488,6 +488,7 @@ static struct phy_driver microchip_phy_driver[] = {
 	.config_init	= lan88xx_config_init,
 	.config_aneg	= lan88xx_config_aneg,
 	.link_change_notify = lan88xx_link_change_notify,
+	.soft_reset	= genphy_soft_reset,
 
 	/* Interrupt handling is broken, do not define related
 	 * functions to force polling.
-- 
2.39.5
Re: [PATCH net v1 1/2] net: phy: microchip: Use genphy_soft_reset() to purge stale LPA bits
Posted by Andrew Lunn 2 months, 4 weeks ago
On Wed, Jul 09, 2025 at 03:07:52PM +0200, Oleksij Rempel wrote:
> Enable .soft_reset for the LAN88xx PHY driver by assigning
> genphy_soft_reset() to ensure that the phylib core performs a proper
> soft reset during reconfiguration.
> 
> Previously, the driver left .soft_reset unimplemented, so calls to
> phy_init_hw() (e.g., from lan88xx_link_change_notify()) did not fully
> reset the PHY. As a result, stale contents in the Link Partner Ability
> (LPA) register could persist, causing the PHY to incorrectly report
> that the link partner advertised autonegotiation even when it did not.
> 
> Using genphy_soft_reset() guarantees a clean reset of the PHY and
> corrects the false autoneg reporting in these scenarios.
> 
> Fixes: ccb989e4d1ef ("net: phy: microchip: Reset LAN88xx PHY to ensure clean link state on LAN7800/7850")
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew