Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: intel: igb: Use linkmode helpers for EEE

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>

authored by

Andrew Lunn and committed by
David S. Miller
41b9797d 02de1741

+23 -12
+23 -12
drivers/net/ethernet/intel/igb/igb_ethtool.c
··· 3038 3038 (hw->phy.media_type != e1000_media_type_copper)) 3039 3039 return -EOPNOTSUPP; 3040 3040 3041 - edata->supported_u32 = (SUPPORTED_1000baseT_Full | 3042 - SUPPORTED_100baseT_Full); 3041 + linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 3042 + edata->supported); 3043 + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 3044 + edata->supported); 3043 3045 if (!hw->dev_spec._82575.eee_disable) 3044 - edata->advertised_u32 = 3045 - mmd_eee_adv_to_ethtool_adv_t(adapter->eee_advert); 3046 + mii_eee_cap1_mod_linkmode_t(edata->advertised, 3047 + adapter->eee_advert); 3046 3048 3047 3049 /* The IPCNFG and EEER registers are not supported on I354. */ 3048 3050 if (hw->mac.type == e1000_i354) { ··· 3070 3068 if (ret_val) 3071 3069 return -ENODATA; 3072 3070 3073 - edata->lp_advertised_u32 = mmd_eee_adv_to_ethtool_adv_t(phy_data); 3071 + mii_eee_cap1_mod_linkmode_t(edata->lp_advertised, phy_data); 3074 3072 break; 3075 3073 case e1000_i354: 3076 3074 case e1000_i210: ··· 3081 3079 if (ret_val) 3082 3080 return -ENODATA; 3083 3081 3084 - edata->lp_advertised_u32 = mmd_eee_adv_to_ethtool_adv_t(phy_data); 3082 + mii_eee_cap1_mod_linkmode_t(edata->lp_advertised, phy_data); 3085 3083 3086 3084 break; 3087 3085 default: ··· 3101 3099 edata->eee_enabled = false; 3102 3100 edata->eee_active = false; 3103 3101 edata->tx_lpi_enabled = false; 3104 - edata->advertised_u32 &= ~edata->advertised_u32; 3102 + linkmode_zero(edata->advertised); 3105 3103 } 3106 3104 3107 3105 return 0; ··· 3111 3109 struct ethtool_keee *edata) 3112 3110 { 3113 3111 struct igb_adapter *adapter = netdev_priv(netdev); 3112 + __ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = {}; 3113 + __ETHTOOL_DECLARE_LINK_MODE_MASK(tmp) = {}; 3114 3114 struct e1000_hw *hw = &adapter->hw; 3115 3115 struct ethtool_keee eee_curr; 3116 3116 bool adv1g_eee = true, adv100m_eee = true; ··· 3142 3138 return -EINVAL; 3143 3139 } 3144 3140 3145 - if (!edata->advertised_u32 || (edata->advertised_u32 & 3146 - ~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL))) { 3141 + linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 3142 + supported); 3143 + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 3144 + supported); 3145 + if (linkmode_andnot(tmp, edata->advertised, supported)) { 3147 3146 dev_err(&adapter->pdev->dev, 3148 3147 "EEE Advertisement supports only 100Tx and/or 100T full duplex\n"); 3149 3148 return -EINVAL; 3150 3149 } 3151 - adv100m_eee = !!(edata->advertised_u32 & ADVERTISE_100_FULL); 3152 - adv1g_eee = !!(edata->advertised_u32 & ADVERTISE_1000_FULL); 3150 + adv100m_eee = linkmode_test_bit( 3151 + ETHTOOL_LINK_MODE_100baseT_Full_BIT, 3152 + edata->advertised); 3153 + adv1g_eee = linkmode_test_bit( 3154 + ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 3155 + edata->advertised); 3153 3156 3154 3157 } else if (!edata->eee_enabled) { 3155 3158 dev_err(&adapter->pdev->dev, ··· 3164 3153 return -EINVAL; 3165 3154 } 3166 3155 3167 - adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised_u32); 3156 + adapter->eee_advert = linkmode_to_mii_eee_cap1_t(edata->advertised); 3168 3157 if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) { 3169 3158 hw->dev_spec._82575.eee_disable = !edata->eee_enabled; 3170 3159 adapter->flags |= IGB_FLAG_EEE;