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>
This commit is contained in:
Russell King (Oracle) 2024-10-23 14:41:51 +01:00 committed by Jakub Kicinski
parent 280ed44982
commit 41caa7e81b

View File

@ -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;
}