• Russell King (Oracle)'s avatar
    net: sfp: fix state loss when updating state_hw_mask · 04361b8b
    Russell King (Oracle) authored
    Andrew reports that the SFF modules on one of the ZII platforms do not
    indicate link up due to the SFP code believing that LOS indicating that
    there is no signal being received from the remote end, but in fact the
    LOS signal is showing that there is signal.
    
    What makes SFF modules different from SFPs is they typically have an
    inverted LOS, which uncovered this issue. When we read the hardware
    state, we mask it with state_hw_mask so we ignore anything we're not
    interested in. However, we don't re-read when state_hw_mask changes,
    leading to sfp->state being stale.
    
    Arrange for a software poll of the module state after we have parsed
    the EEPROM in sfp_sm_mod_probe() and updated state_*_mask. This will
    generate any necessary events for signal changes for the state
    machine as well as updating sfp->state.
    Reported-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Fixes: 8475c4b7 ("net: sfp: re-implement soft state polling setup")
    Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    04361b8b
sfp.c 68.7 KB