• Andrew Lunn's avatar
    net: phy: Trigger state machine on state change and not polling. · 3c293f4e
    Andrew Lunn authored
    The phy_start() is used to indicate the PHY is now ready to do its
    work. The state is changed, normally to PHY_UP which means that both
    the MAC and the PHY are ready.
    
    If the phy driver is using polling, when the next poll happens, the
    state machine notices the PHY is now in PHY_UP, and kicks off
    auto-negotiation, if needed.
    
    If however, the PHY is using interrupts, there is no polling. The phy
    is stuck in PHY_UP until the next interrupt comes along. And there is
    no reason for the PHY to interrupt.
    
    Have phy_start() schedule the state machine to run, which both speeds
    up the polling use case, and makes the interrupt use case actually
    work.
    
    This problems exists whenever there is a state change which will not
    cause an interrupt. Trigger the state machine in these cases,
    e.g. phy_error().
    Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Cc: Kyle Roeschley <kyle.roeschley@ni.com>
    Tested-by: default avatarKyle Roeschley <kyle.roeschley@ni.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3c293f4e
phy.c 34.6 KB