@@ -857,6 +857,7 @@ static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
857857
858858static bool xgbe_phy_finisar_phy_quirks (struct xgbe_prv_data * pdata )
859859{
860+ __ETHTOOL_DECLARE_LINK_MODE_MASK (supported ) = { 0 , };
860861 struct xgbe_phy_data * phy_data = pdata -> phy_data ;
861862 unsigned int phy_id = phy_data -> phydev -> phy_id ;
862863
@@ -878,9 +879,15 @@ static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
878879 phy_write (phy_data -> phydev , 0x04 , 0x0d01 );
879880 phy_write (phy_data -> phydev , 0x00 , 0x9140 );
880881
881- phy_data -> phydev -> supported = PHY_10BT_FEATURES |
882- PHY_100BT_FEATURES |
883- PHY_1000BT_FEATURES ;
882+ linkmode_set_bit_array (phy_10_100_features_array ,
883+ ARRAY_SIZE (phy_10_100_features_array ),
884+ supported );
885+ linkmode_set_bit_array (phy_gbit_features_array ,
886+ ARRAY_SIZE (phy_gbit_features_array ),
887+ supported );
888+
889+ linkmode_copy (phy_data -> phydev -> supported , supported );
890+
884891 phy_support_asym_pause (phy_data -> phydev );
885892
886893 netif_dbg (pdata , drv , pdata -> netdev ,
@@ -891,6 +898,7 @@ static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
891898
892899static bool xgbe_phy_belfuse_phy_quirks (struct xgbe_prv_data * pdata )
893900{
901+ __ETHTOOL_DECLARE_LINK_MODE_MASK (supported ) = { 0 , };
894902 struct xgbe_phy_data * phy_data = pdata -> phy_data ;
895903 struct xgbe_sfp_eeprom * sfp_eeprom = & phy_data -> sfp_eeprom ;
896904 unsigned int phy_id = phy_data -> phydev -> phy_id ;
@@ -951,9 +959,13 @@ static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata)
951959 reg = phy_read (phy_data -> phydev , 0x00 );
952960 phy_write (phy_data -> phydev , 0x00 , reg & ~0x00800 );
953961
954- phy_data -> phydev -> supported = (PHY_10BT_FEATURES |
955- PHY_100BT_FEATURES |
956- PHY_1000BT_FEATURES );
962+ linkmode_set_bit_array (phy_10_100_features_array ,
963+ ARRAY_SIZE (phy_10_100_features_array ),
964+ supported );
965+ linkmode_set_bit_array (phy_gbit_features_array ,
966+ ARRAY_SIZE (phy_gbit_features_array ),
967+ supported );
968+ linkmode_copy (phy_data -> phydev -> supported , supported );
957969 phy_support_asym_pause (phy_data -> phydev );
958970
959971 netif_dbg (pdata , drv , pdata -> netdev ,
@@ -976,7 +988,6 @@ static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata)
976988 struct ethtool_link_ksettings * lks = & pdata -> phy .lks ;
977989 struct xgbe_phy_data * phy_data = pdata -> phy_data ;
978990 struct phy_device * phydev ;
979- u32 advertising ;
980991 int ret ;
981992
982993 /* If we already have a PHY, just return */
@@ -1036,9 +1047,8 @@ static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata)
10361047
10371048 xgbe_phy_external_phy_quirks (pdata );
10381049
1039- ethtool_convert_link_mode_to_legacy_u32 (& advertising ,
1040- lks -> link_modes .advertising );
1041- phydev -> advertising &= advertising ;
1050+ linkmode_and (phydev -> advertising , phydev -> advertising ,
1051+ lks -> link_modes .advertising );
10421052
10431053 phy_start_aneg (phy_data -> phydev );
10441054
@@ -1497,7 +1507,7 @@ static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data *pdata)
14971507 if (!phy_data -> phydev )
14981508 return ;
14991509
1500- lcl_adv = ethtool_adv_to_lcl_adv_t (phy_data -> phydev -> advertising );
1510+ lcl_adv = linkmode_adv_to_lcl_adv_t (phy_data -> phydev -> advertising );
15011511
15021512 if (phy_data -> phydev -> pause ) {
15031513 XGBE_SET_LP_ADV (lks , Pause );
@@ -1815,7 +1825,6 @@ static int xgbe_phy_an_config(struct xgbe_prv_data *pdata)
18151825{
18161826 struct ethtool_link_ksettings * lks = & pdata -> phy .lks ;
18171827 struct xgbe_phy_data * phy_data = pdata -> phy_data ;
1818- u32 advertising ;
18191828 int ret ;
18201829
18211830 ret = xgbe_phy_find_phy_device (pdata );
@@ -1825,12 +1834,10 @@ static int xgbe_phy_an_config(struct xgbe_prv_data *pdata)
18251834 if (!phy_data -> phydev )
18261835 return 0 ;
18271836
1828- ethtool_convert_link_mode_to_legacy_u32 (& advertising ,
1829- lks -> link_modes .advertising );
1830-
18311837 phy_data -> phydev -> autoneg = pdata -> phy .autoneg ;
1832- phy_data -> phydev -> advertising = phy_data -> phydev -> supported &
1833- advertising ;
1838+ linkmode_and (phy_data -> phydev -> advertising ,
1839+ phy_data -> phydev -> supported ,
1840+ lks -> link_modes .advertising );
18341841
18351842 if (pdata -> phy .autoneg != AUTONEG_ENABLE ) {
18361843 phy_data -> phydev -> speed = pdata -> phy .speed ;
0 commit comments