net: intel: igb: Use linkmode helpers for EEE
authorAndrew Lunn <andrew@lunn.ch>
Tue, 27 Feb 2024 01:29:13 +0000 (19:29 -0600)
committerDavid S. Miller <davem@davemloft.net>
Wed, 28 Feb 2024 12:18:05 +0000 (12:18 +0000)
Make use of the existing linkmode helpers for converting PHY EEE
register values into links modes, now that ethtool_keee uses link
modes, rather than u32 values.

Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/igb/igb_ethtool.c

index b87b23d..99977a2 100644 (file)
@@ -3038,11 +3038,13 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
            (hw->phy.media_type != e1000_media_type_copper))
                return -EOPNOTSUPP;
 
-       edata->supported_u32 = (SUPPORTED_1000baseT_Full |
-                               SUPPORTED_100baseT_Full);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+                        edata->supported);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+                        edata->supported);
        if (!hw->dev_spec._82575.eee_disable)
-               edata->advertised_u32 =
-                       mmd_eee_adv_to_ethtool_adv_t(adapter->eee_advert);
+               mii_eee_cap1_mod_linkmode_t(edata->advertised,
+                                           adapter->eee_advert);
 
        /* The IPCNFG and EEER registers are not supported on I354. */
        if (hw->mac.type == e1000_i354) {
@@ -3068,7 +3070,7 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
                if (ret_val)
                        return -ENODATA;
 
-               edata->lp_advertised_u32 = mmd_eee_adv_to_ethtool_adv_t(phy_data);
+               mii_eee_cap1_mod_linkmode_t(edata->lp_advertised, phy_data);
                break;
        case e1000_i354:
        case e1000_i210:
@@ -3079,7 +3081,7 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
                if (ret_val)
                        return -ENODATA;
 
-               edata->lp_advertised_u32 = mmd_eee_adv_to_ethtool_adv_t(phy_data);
+               mii_eee_cap1_mod_linkmode_t(edata->lp_advertised, phy_data);
 
                break;
        default:
@@ -3099,7 +3101,7 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
                edata->eee_enabled = false;
                edata->eee_active = false;
                edata->tx_lpi_enabled = false;
-               edata->advertised_u32 &= ~edata->advertised_u32;
+               linkmode_zero(edata->advertised);
        }
 
        return 0;
@@ -3109,6 +3111,8 @@ static int igb_set_eee(struct net_device *netdev,
                       struct ethtool_keee *edata)
 {
        struct igb_adapter *adapter = netdev_priv(netdev);
+       __ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = {};
+       __ETHTOOL_DECLARE_LINK_MODE_MASK(tmp) = {};
        struct e1000_hw *hw = &adapter->hw;
        struct ethtool_keee eee_curr;
        bool adv1g_eee = true, adv100m_eee = true;
@@ -3138,14 +3142,21 @@ static int igb_set_eee(struct net_device *netdev,
                        return -EINVAL;
                }
 
-               if (!edata->advertised_u32 || (edata->advertised_u32 &
-                   ~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL))) {
+               linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+                                supported);
+               linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+                                supported);
+               if (linkmode_andnot(tmp, edata->advertised, supported)) {
                        dev_err(&adapter->pdev->dev,
                                "EEE Advertisement supports only 100Tx and/or 100T full duplex\n");
                        return -EINVAL;
                }
-               adv100m_eee = !!(edata->advertised_u32 & ADVERTISE_100_FULL);
-               adv1g_eee = !!(edata->advertised_u32 & ADVERTISE_1000_FULL);
+               adv100m_eee = linkmode_test_bit(
+                       ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+                       edata->advertised);
+               adv1g_eee = linkmode_test_bit(
+                       ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+                       edata->advertised);
 
        } else if (!edata->eee_enabled) {
                dev_err(&adapter->pdev->dev,
@@ -3153,7 +3164,7 @@ static int igb_set_eee(struct net_device *netdev,
                return -EINVAL;
        }
 
-       adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised_u32);
+       adapter->eee_advert = linkmode_to_mii_eee_cap1_t(edata->advertised);
        if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) {
                hw->dev_spec._82575.eee_disable = !edata->eee_enabled;
                adapter->flags |= IGB_FLAG_EEE;