Commit 41caa7e8 authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

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: default avatarMaxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: default avatarMaxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1t3bcV-000c8B-Vz@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 280ed449
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -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;
}