> /* mask with MAC supported features */ > - if (macb_is_gem(bp) && bp->caps & MACB_CAPS_GIGABIT_MODE_AVAILABLE) > - phy_set_max_speed(phydev, SPEED_1000); > - else > - phy_set_max_speed(phydev, SPEED_100); > + if (macb_is_gem(bp)) { > + linkmode_copy(phydev->supported, PHY_GBIT_FEATURES); > + if (bp->caps & MACB_CAPS_TWO_PT_FIVE_GIG_SPEED) > + linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, > + phydev->supported); > + } else { > + linkmode_copy(phydev->supported, PHY_BASIC_FEATURES); > + } > + > + linkmode_copy(phydev->advertising, phydev->supported);
This is not correct. Just because the MAC can do 2.5G does not mean the PHY can. So you should not be adding links modes. Also, somebody might be using a PHY that can do 2.5G with a MAC which can only do 1G. The correct thing to do is call phy_set_max_speed() with the maximum speed the MAC can do. Andrew