net: phylink: require supported_interfaces to be filled
We have been requiring the supported_interfaces bitmap to be filled in by MAC drivers that have a mac_select_pcs() method. Now that all MAC drivers fill in the supported_interfaces bitmap, it is time to enforce this. We have already required supported_interfaces to be set in order for optical SFPs to be configured in commit f81fa96d8a6c ("net: phylink: use phy_interface_t bitmaps for optical modules"). Refuse phylink creation if supported_interfaces is empty, and remove code to deal with cases where this mask is empty. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://lore.kernel.org/r/E1q0K1u-006EIP-ET@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
5859a99b52
commit
de5c9bf40c
@ -712,14 +712,11 @@ static int phylink_validate(struct phylink *pl, unsigned long *supported,
|
|||||||
{
|
{
|
||||||
const unsigned long *interfaces = pl->config->supported_interfaces;
|
const unsigned long *interfaces = pl->config->supported_interfaces;
|
||||||
|
|
||||||
if (!phy_interface_empty(interfaces)) {
|
if (state->interface == PHY_INTERFACE_MODE_NA)
|
||||||
if (state->interface == PHY_INTERFACE_MODE_NA)
|
return phylink_validate_mask(pl, supported, state, interfaces);
|
||||||
return phylink_validate_mask(pl, supported, state,
|
|
||||||
interfaces);
|
|
||||||
|
|
||||||
if (!test_bit(state->interface, interfaces))
|
if (!test_bit(state->interface, interfaces))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
return phylink_validate_mac_and_pcs(pl, supported, state);
|
return phylink_validate_mac_and_pcs(pl, supported, state);
|
||||||
}
|
}
|
||||||
@ -1513,19 +1510,18 @@ struct phylink *phylink_create(struct phylink_config *config,
|
|||||||
struct phylink *pl;
|
struct phylink *pl;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/* Validate the supplied configuration */
|
||||||
|
if (phy_interface_empty(config->supported_interfaces)) {
|
||||||
|
dev_err(config->dev,
|
||||||
|
"phylink: error: empty supported_interfaces\n");
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
if (mac_ops->mac_select_pcs &&
|
if (mac_ops->mac_select_pcs &&
|
||||||
mac_ops->mac_select_pcs(config, PHY_INTERFACE_MODE_NA) !=
|
mac_ops->mac_select_pcs(config, PHY_INTERFACE_MODE_NA) !=
|
||||||
ERR_PTR(-EOPNOTSUPP))
|
ERR_PTR(-EOPNOTSUPP))
|
||||||
using_mac_select_pcs = true;
|
using_mac_select_pcs = true;
|
||||||
|
|
||||||
/* Validate the supplied configuration */
|
|
||||||
if (using_mac_select_pcs &&
|
|
||||||
phy_interface_empty(config->supported_interfaces)) {
|
|
||||||
dev_err(config->dev,
|
|
||||||
"phylink: error: empty supported_interfaces but mac_select_pcs() method present\n");
|
|
||||||
return ERR_PTR(-EINVAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
pl = kzalloc(sizeof(*pl), GFP_KERNEL);
|
pl = kzalloc(sizeof(*pl), GFP_KERNEL);
|
||||||
if (!pl)
|
if (!pl)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user