• Alexandre Belloni's avatar
    phy: micrel: Disable auto negotiation on startup · 99f81afc
    Alexandre Belloni authored
    Disable auto negotiation on init to properly detect an already plugged
    cable at boot.
    
    At boot, when the phy is started, it is in the PHY_UP state.
    However, if a cable is plugged at boot, because auto negociation is already
    enabled at the time we get the first interrupt, the phy is already running.
    But the state machine then switches from PHY_UP to PHY_AN and calls
    phy_start_aneg(). phy_start_aneg() will not do anything because aneg is
    already enabled on the phy. It will then wait for a interrupt before going
    further. This interrupt will never happen unless the cable is unplugged and
    then replugged.
    
    It was working properly before 321beec5 (net: phy: Use interrupts when
    available in NOLINK state) because switching to NOLINK meant starting
    polling the phy, even if IRQ were enabled.
    
    Fixes: 321beec5 (net: phy: Use interrupts when available in NOLINK state)
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    99f81afc
micrel.c 25.4 KB