net: phy: microchip: Use genphy_soft_reset() to purge stale LPA bits
authorOleksij Rempel <o.rempel@pengutronix.de>
Wed, 9 Jul 2025 13:07:52 +0000 (15:07 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 11 Jul 2025 01:08:16 +0000 (18:08 -0700)
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>
Link: https://patch.msgid.link/20250709130753.3994461-2-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/microchip.c

index 13570f628aa5831a32ca16fb9cdb7110000158a4..5e590b0a75e56b98288dff911494ce7e5035c70d 100644 (file)
@@ -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.