• Petr Oros's avatar
    phy: avoid unnecessary link-up delay in polling mode · e96bd2d3
    Petr Oros authored
    commit 93c09704 ("net: phy: consider latched link-down status in
    polling mode") removed double-read of latched link-state register for
    polling mode from genphy_update_link(). This added extra ~1s delay into
    sequence link down->up.
    Following scenario:
     - After boot link goes up
     - phy_start() is called triggering an aneg restart, hence link goes
       down and link-down info is latched.
     - After aneg has finished link goes up. In phy_state_machine is checked
       link state but it is latched "link is down". The state machine is
       scheduled after one second and there is detected "link is up". This
       extra delay can be avoided when we keep link-state register double read
       in case when link was down previously.
    
    With this solution we don't miss a link-down event in polling mode and
    link-up is faster.
    
    Details about this quirky behavior on Realtek phy:
    Without patch:
    T0:    aneg is started, link goes down, link-down status is latched
    T0+3s: state machine runs, up-to-date link-down is read
    T0+4s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
           here i read link-down (BMSR_LSTATUS==0),
    T0+5s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
           up-to-date link-up is read (BMSR_LSTATUS==1),
           phydev->link goes up, state change PHY_NOLINK to PHY_RUNNING
    
    With patch:
    T0:    aneg is started, link goes down, link-down status is latched
    T0+3s: state machine runs, up-to-date link-down is read
    T0+4s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
           first BMSR read: BMSR_ANEGCOMPLETE==1 and BMSR_LSTATUS==0,
           second BMSR read: BMSR_ANEGCOMPLETE==1 and BMSR_LSTATUS==1,
           phydev->link goes up, state change PHY_NOLINK to PHY_RUNNING
    Signed-off-by: default avatarPetr Oros <poros@redhat.com>
    Reviewed-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e96bd2d3
phy-c45.c 14.3 KB