]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: dsa: add hook to determine whether EEE is supported
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 10 Dec 2024 14:18:16 +0000 (14:18 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 9 Sep 2025 16:58:19 +0000 (18:58 +0200)
commit 9723a77318b7c0cfd06ea207e52a042f8c815318 upstream.

Add a hook to determine whether the switch supports EEE. This will
return false if the switch does not, or true if it does. If the
method is not implemented, we assume (currently) that the switch
supports EEE.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://patch.msgid.link/E1tL144-006cZD-El@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/net/dsa.h
net/dsa/user.c

index d7a6c2930277ea106d9c33b7cf29f08436b5333b..fa99fc5249e995906ea09452a01f8807485c712c 100644 (file)
@@ -1003,6 +1003,7 @@ struct dsa_switch_ops {
        /*
         * Port's MAC EEE settings
         */
+       bool    (*support_eee)(struct dsa_switch *ds, int port);
        int     (*set_mac_eee)(struct dsa_switch *ds, int port,
                               struct ethtool_keee *e);
        int     (*get_mac_eee)(struct dsa_switch *ds, int port,
index 64f660d2334b77fa97e7d6d586a021d63ac5f6e2..06267c526dc4e6d7412cdcbc1c33f57279fff5ec 100644 (file)
@@ -1231,6 +1231,10 @@ static int dsa_user_set_eee(struct net_device *dev, struct ethtool_keee *e)
        struct dsa_switch *ds = dp->ds;
        int ret;
 
+       /* Check whether the switch supports EEE */
+       if (ds->ops->support_eee && !ds->ops->support_eee(ds, dp->index))
+               return -EOPNOTSUPP;
+
        /* Port's PHY and MAC both need to be EEE capable */
        if (!dev->phydev || !dp->pl)
                return -ENODEV;
@@ -1251,6 +1255,10 @@ static int dsa_user_get_eee(struct net_device *dev, struct ethtool_keee *e)
        struct dsa_switch *ds = dp->ds;
        int ret;
 
+       /* Check whether the switch supports EEE */
+       if (ds->ops->support_eee && !ds->ops->support_eee(ds, dp->index))
+               return -EOPNOTSUPP;
+
        /* Port's PHY and MAC both need to be EEE capable */
        if (!dev->phydev || !dp->pl)
                return -ENODEV;