Thread (49 messages) 49 messages, 4 authors, 2023-05-31

[RFC/RFTv3 21/24] net: phylink: Add MAC_EEE to mac_capabilites

From: Andrew Lunn <andrew@lunn.ch>
Date: 2023-03-31 00:56:02
Subsystem: ethernet phy library, networking drivers, sff/sfp/sfp+ module support, the rest · Maintainers: Andrew Lunn, Heiner Kallweit, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Russell King, Linus Torvalds

If the MAC supports Energy Efficient Ethernet, it should indicate this
by setting the MAC_EEE bit in the config.mac_capabilities
bitmap. phylink will then enable EEE in the PHY, if it supports it.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
v3: Move MAC_EEE to BIT(2) and renumber link modes.
---
 drivers/net/phy/phylink.c |  3 +++
 include/linux/phylink.h   | 39 ++++++++++++++++++++++-----------------
 2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 61e4502086c3..191cafd37e62 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -1647,6 +1647,9 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy,
 	 */
 	phy_support_asym_pause(phy);
 
+	if (pl->config->mac_capabilities & MAC_EEE)
+		phy_support_eee(phy);
+
 	memset(&config, 0, sizeof(config));
 	linkmode_copy(supported, phy->supported);
 	linkmode_copy(config.advertising, phy->advertising);
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index 52f29b648853..cb5204fb9106 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -52,26 +52,31 @@ enum {
 	 */
 	MAC_SYM_PAUSE	= BIT(0),
 	MAC_ASYM_PAUSE	= BIT(1),
-	MAC_10HD	= BIT(2),
-	MAC_10FD	= BIT(3),
+
+	/* MAC_EEE indicates that the MAC is Energy Efficient capable
+	 * and that the PHY should negotiate its use, if possible
+	 */
+	MAC_EEE		= BIT(2),
+	MAC_10HD	= BIT(3),
+	MAC_10FD	= BIT(4),
 	MAC_10		= MAC_10HD | MAC_10FD,
-	MAC_100HD	= BIT(4),
-	MAC_100FD	= BIT(5),
+	MAC_100HD	= BIT(5),
+	MAC_100FD	= BIT(6),
 	MAC_100		= MAC_100HD | MAC_100FD,
-	MAC_1000HD	= BIT(6),
-	MAC_1000FD	= BIT(7),
+	MAC_1000HD	= BIT(7),
+	MAC_1000FD	= BIT(8),
 	MAC_1000	= MAC_1000HD | MAC_1000FD,
-	MAC_2500FD	= BIT(8),
-	MAC_5000FD	= BIT(9),
-	MAC_10000FD	= BIT(10),
-	MAC_20000FD	= BIT(11),
-	MAC_25000FD	= BIT(12),
-	MAC_40000FD	= BIT(13),
-	MAC_50000FD	= BIT(14),
-	MAC_56000FD	= BIT(15),
-	MAC_100000FD	= BIT(16),
-	MAC_200000FD	= BIT(17),
-	MAC_400000FD	= BIT(18),
+	MAC_2500FD	= BIT(9),
+	MAC_5000FD	= BIT(10),
+	MAC_10000FD	= BIT(11),
+	MAC_20000FD	= BIT(12),
+	MAC_25000FD	= BIT(13),
+	MAC_40000FD	= BIT(14),
+	MAC_50000FD	= BIT(15),
+	MAC_56000FD	= BIT(16),
+	MAC_100000FD	= BIT(17),
+	MAC_200000FD	= BIT(18),
+	MAC_400000FD	= BIT(19),
 };
 
 static inline bool phylink_autoneg_inband(unsigned int mode)
-- 
2.40.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help