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

net: dsa: allow use of phylink managed EEE support



In order to allow DSA drivers to use phylink managed EEE, we need to
change the behaviour of the DSA's .set_eee() ethtool method.
Implementation of the DSA .set_mac_eee() method becomes optional with
phylink managed EEE as it is only used to validate the EEE parameters
supplied from userspace. The rest of the EEE state management should
be left to phylink.

Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1thR9l-003vXC-9F@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2001d215
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -1243,6 +1243,10 @@ static int dsa_user_set_eee(struct net_device *dev, struct ethtool_keee *e)
	if (!ds->ops->support_eee || !ds->ops->support_eee(ds, dp->index))
		return -EOPNOTSUPP;

	/* If the port is using phylink managed EEE, then an unimplemented
	 * set_mac_eee() is permissible.
	 */
	if (!phylink_mac_implements_lpi(ds->phylink_mac_ops)) {
		/* Port's PHY and MAC both need to be EEE capable */
		if (!dev->phydev)
			return -ENODEV;
@@ -1253,6 +1257,11 @@ static int dsa_user_set_eee(struct net_device *dev, struct ethtool_keee *e)
		ret = ds->ops->set_mac_eee(ds, dp->index, e);
		if (ret)
			return ret;
	} else if (ds->ops->set_mac_eee) {
		ret = ds->ops->set_mac_eee(ds, dp->index, e);
		if (ret)
			return ret;
	}

	return phylink_ethtool_set_eee(dp->pl, e);
}