• Alexander Kochetkov's avatar
    net: phy: fix auto-negotiation stall due to unavailable interrupt · f555f34f
    Alexander Kochetkov authored
    The Ethernet link on an interrupt driven PHY was not coming up if the Ethernet
    cable was plugged before the Ethernet interface was brought up.
    
    The patch trigger PHY state machine to update link state if PHY was requested to
    do auto-negotiation and auto-negotiation complete flag already set.
    
    During power-up cycle the PHY do auto-negotiation, generate interrupt and set
    auto-negotiation complete flag. Interrupt is handled by PHY state machine but
    doesn't update link state because PHY is in PHY_READY state. After some time
    MAC bring up, start and request PHY to do auto-negotiation. If there are no new
    settings to advertise genphy_config_aneg() doesn't start PHY auto-negotiation.
    PHY continue to stay in auto-negotiation complete state and doesn't fire
    interrupt. At the same time PHY state machine expect that PHY started
    auto-negotiation and is waiting for interrupt from PHY and it won't get it.
    
    Fixes: 321beec5 ("net: phy: Use interrupts when available in NOLINK state")
    Signed-off-by: default avatarAlexander Kochetkov <al.kochet@gmail.com>
    Cc: stable <stable@vger.kernel.org> # v4.9+
    Tested-by: default avatarRoger Quadros <rogerq@ti.com>
    Tested-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f555f34f
phy.c 37.6 KB