Skip to content

Commit 04361b8

Browse files
Russell King (Oracle)davem330
authored andcommitted
net: sfp: fix state loss when updating state_hw_mask
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: Andrew Lunn <andrew@lunn.ch> Tested-by: Andrew Lunn <andrew@lunn.ch> Fixes: 8475c4b ("net: sfp: re-implement soft state polling setup") Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 070246e commit 04361b8

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

drivers/net/phy/sfp.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,6 +2190,11 @@ static void sfp_sm_module(struct sfp *sfp, unsigned int event)
21902190
break;
21912191
}
21922192

2193+
/* Force a poll to re-read the hardware signal state after
2194+
* sfp_sm_mod_probe() changed state_hw_mask.
2195+
*/
2196+
mod_delayed_work(system_wq, &sfp->poll, 1);
2197+
21932198
err = sfp_hwmon_insert(sfp);
21942199
if (err)
21952200
dev_warn(sfp->dev, "hwmon probe failed: %pe\n",

0 commit comments

Comments
 (0)