• Florian Fainelli's avatar
    net: dsa: bcm_sf2: properly propagate carrier down state for MoCA · 4ab7f913
    Florian Fainelli authored
    MoCA interfaces require the use of an user-space daemon (mocad) which
    will typically use cmd->autoneg to force the link. This is causing other
    network manager applications not to get proper carrier down
    notifications because of the following sequence of events:
    
    - link down interrupt is received, link is set to 0 by the interrupt
      handler
    - fixed_link update callback runs and updates the BMSR register
      accordingly
    - PHY library polls the PHY for link status, sees the link is down,
      proceeds with reporting that
    - mocad gets notified of the link state and call phy_ethtool_sset()
      with cmd->autoneg set to the link status (0)
    - phy_start_aneg() is called at the end of phy_ethtool_sset() and sets
      the PHY state to PHY_FORCING
    
    Just make sure we notify the interface carrier appropriately when we
    detect that the link is down in our fixed_link update callback. This is
    made local to the bcm_sf2 driver as the PHY library does the right thing
    in any case. This is similar to the GENET change introduced in
    54d7c01d ("net: bcmgenet: enable MoCA
    link state change detection").
    
    Fixes: 246d7f77 ("net: dsa: add Broadcom SF2 switch driver")
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4ab7f913
bcm_sf2.c 27.5 KB