net: ethernet: Convert phydev advertize and supported from u32 to link mode
There are a few MAC/PHYs combinations which now support > 1Gbps. These may need to make use of link modes with bits > 31. Thus their supported PHY features or advertised features cannot be implemented using the current bitmap in a u32. Convert to using a linkmode bitmap, which can support all the currently devices link modes, and is future proof as more modes are added. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
899a3cbbf7
commit
3c1bcc8614
@@ -1784,14 +1784,20 @@ static phy_interface_t gfar_get_interface(struct net_device *dev)
|
||||
*/
|
||||
static int init_phy(struct net_device *dev)
|
||||
{
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
uint gigabit_support =
|
||||
priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ?
|
||||
GFAR_SUPPORTED_GBIT : 0;
|
||||
phy_interface_t interface;
|
||||
struct phy_device *phydev;
|
||||
struct ethtool_eee edata;
|
||||
|
||||
linkmode_set_bit_array(phy_10_100_features_array,
|
||||
ARRAY_SIZE(phy_10_100_features_array),
|
||||
mask);
|
||||
linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mask);
|
||||
linkmode_set_bit(ETHTOOL_LINK_MODE_MII_BIT, mask);
|
||||
if (priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT)
|
||||
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, mask);
|
||||
|
||||
priv->oldlink = 0;
|
||||
priv->oldspeed = 0;
|
||||
priv->oldduplex = -1;
|
||||
@@ -1809,8 +1815,8 @@ static int init_phy(struct net_device *dev)
|
||||
gfar_configure_serdes(dev);
|
||||
|
||||
/* Remove any features not supported by the controller */
|
||||
phydev->supported &= (GFAR_SUPPORTED | gigabit_support);
|
||||
phydev->advertising = phydev->supported;
|
||||
linkmode_and(phydev->supported, phydev->supported, mask);
|
||||
linkmode_copy(phydev->advertising, phydev->supported);
|
||||
|
||||
/* Add support for flow control */
|
||||
phy_support_asym_pause(phydev);
|
||||
@@ -3656,7 +3662,7 @@ static u32 gfar_get_flowctrl_cfg(struct gfar_private *priv)
|
||||
if (phydev->asym_pause)
|
||||
rmt_adv |= LPA_PAUSE_ASYM;
|
||||
|
||||
lcl_adv = ethtool_adv_to_lcl_adv_t(phydev->advertising);
|
||||
lcl_adv = linkmode_adv_to_lcl_adv_t(phydev->advertising);
|
||||
flowctrl = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv);
|
||||
if (flowctrl & FLOW_CTRL_TX)
|
||||
val |= MACCFG1_TX_FLOW;
|
||||
|
Reference in New Issue
Block a user