diff options
author | Russell King (Oracle) <rmk+kernel@armlinux.org.uk> | 2024-10-23 14:41:51 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-10-29 11:57:31 -0700 |
commit | 41caa7e81b9732a10d523ed6ac57bd67f56494bf (patch) | |
tree | 35a67496381c7bf1bef6aa050ff00e00cacf6791 | |
parent | 280ed44982ff478a949a810f9ddfb4adb8207b57 (diff) | |
download | linux-41caa7e81b9732a10d523ed6ac57bd67f56494bf.tar.gz linux-41caa7e81b9732a10d523ed6ac57bd67f56494bf.tar.bz2 linux-41caa7e81b9732a10d523ed6ac57bd67f56494bf.zip |
net: phylink: validate sfp_select_interface() returned interface
Validate that the returned interface from sfp_select_interface() is
supportable by the MAC/PCS. If it isn't, print an error and return
the NA interface type. This is a preparatory step to reorganising
how a PHY on a SFP module is handled.
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1t3bcV-000c8B-Vz@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r-- | drivers/net/phy/phylink.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 2eb12bc56452..71dde95daf04 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -2414,11 +2414,22 @@ static phy_interface_t phylink_sfp_select_interface(struct phylink *pl, phy_interface_t interface; interface = sfp_select_interface(pl->sfp_bus, link_modes); - if (interface == PHY_INTERFACE_MODE_NA) + if (interface == PHY_INTERFACE_MODE_NA) { phylink_err(pl, "selection of interface failed, advertisement %*pb\n", __ETHTOOL_LINK_MODE_MASK_NBITS, link_modes); + return interface; + } + + if (!test_bit(interface, pl->config->supported_interfaces)) { + phylink_err(pl, + "selection of interface failed, SFP selected %s (%u) but MAC supports %*pbl\n", + phy_modes(interface), interface, + (int)PHY_INTERFACE_MODE_MAX, + pl->config->supported_interfaces); + return PHY_INTERFACE_MODE_NA; + } return interface; } |