net: ethernet: Use phy_set_max_speed() to limit advertised speed
Many Ethernet MAC drivers want to limit the PHY to only advertise a maximum speed of 100Mbs or 1Gbps. Rather than using a mask, make use of the helper function phy_set_max_speed(). Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
15d8daf7bc
commit
58056c1e1b
|
@ -377,9 +377,7 @@ static int ax_mii_probe(struct net_device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phy_dev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_dev->advertising = phy_dev->supported;
|
||||
phy_set_max_speed(phy_dev, SPEED_100);
|
||||
|
||||
netdev_info(dev, "PHY driver [%s] (mii_bus:phy_addr=%s, irq=%d)\n",
|
||||
phy_dev->drv->name, phydev_name(phy_dev), phy_dev->irq);
|
||||
|
|
|
@ -1279,9 +1279,9 @@ static int greth_mdio_probe(struct net_device *dev)
|
|||
}
|
||||
|
||||
if (greth->gbit_mac)
|
||||
phy->supported &= PHY_GBIT_FEATURES;
|
||||
phy_set_max_speed(phy, SPEED_1000);
|
||||
else
|
||||
phy->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phy, SPEED_100);
|
||||
|
||||
phy->advertising = phy->supported;
|
||||
|
||||
|
|
|
@ -3258,19 +3258,11 @@ static int et131x_mii_probe(struct net_device *netdev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
phydev->supported &= (SUPPORTED_10baseT_Half |
|
||||
SUPPORTED_10baseT_Full |
|
||||
SUPPORTED_100baseT_Half |
|
||||
SUPPORTED_100baseT_Full |
|
||||
SUPPORTED_Autoneg |
|
||||
SUPPORTED_MII |
|
||||
SUPPORTED_TP);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
if (adapter->pdev->device != ET131X_PCI_DEVICE_ID_FAST)
|
||||
phydev->supported |= SUPPORTED_1000baseT_Half |
|
||||
SUPPORTED_1000baseT_Full;
|
||||
phy_set_max_speed(phydev, SPEED_1000);
|
||||
|
||||
phydev->advertising = phydev->supported;
|
||||
phydev->autoneg = AUTONEG_ENABLE;
|
||||
|
||||
phy_attached_info(phydev);
|
||||
|
|
|
@ -172,8 +172,7 @@ static int emac_mdio_probe(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phydev->advertising = phydev->supported;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
db->link = 0;
|
||||
db->speed = 0;
|
||||
|
|
|
@ -835,13 +835,10 @@ static int init_phy(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* Stop Advertising 1000BASE Capability if interface is not GMII
|
||||
* Note: Checkpatch throws CHECKs for the camel case defines below,
|
||||
* it's ok to ignore.
|
||||
*/
|
||||
if ((priv->phy_iface == PHY_INTERFACE_MODE_MII) ||
|
||||
(priv->phy_iface == PHY_INTERFACE_MODE_RMII))
|
||||
phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
|
||||
SUPPORTED_1000baseT_Full);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
/* Broken HW is sometimes missing the pull-up resistor on the
|
||||
* MDIO line, which results in reads to non-existent devices returning
|
||||
|
|
|
@ -564,17 +564,7 @@ static int au1000_mii_probe(struct net_device *dev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= (SUPPORTED_10baseT_Half
|
||||
| SUPPORTED_10baseT_Full
|
||||
| SUPPORTED_100baseT_Half
|
||||
| SUPPORTED_100baseT_Full
|
||||
| SUPPORTED_Autoneg
|
||||
/* | SUPPORTED_Pause | SUPPORTED_Asym_Pause */
|
||||
| SUPPORTED_MII
|
||||
| SUPPORTED_TP);
|
||||
|
||||
phydev->advertising = phydev->supported;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
aup->old_link = 0;
|
||||
aup->old_speed = 0;
|
||||
|
|
|
@ -890,14 +890,8 @@ static int bcm_enet_open(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= (SUPPORTED_10baseT_Half |
|
||||
SUPPORTED_10baseT_Full |
|
||||
SUPPORTED_100baseT_Half |
|
||||
SUPPORTED_100baseT_Full |
|
||||
SUPPORTED_Autoneg |
|
||||
SUPPORTED_Pause |
|
||||
SUPPORTED_MII);
|
||||
phydev->advertising = phydev->supported;
|
||||
phydev->supported |= SUPPORTED_Pause;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
if (priv->pause_auto && priv->pause_rx && priv->pause_tx)
|
||||
phydev->advertising |= SUPPORTED_Pause;
|
||||
|
|
|
@ -214,7 +214,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
|||
|
||||
case PHY_INTERFACE_MODE_MII:
|
||||
phy_name = "external MII";
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
bcmgenet_sys_writel(priv,
|
||||
PORT_MODE_EXT_EPHY, SYS_PORT_CTRL);
|
||||
break;
|
||||
|
|
|
@ -2357,15 +2357,8 @@ static int sbmac_mii_probe(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* Remove any features not supported by the controller */
|
||||
phy_dev->supported &= SUPPORTED_10baseT_Half |
|
||||
SUPPORTED_10baseT_Full |
|
||||
SUPPORTED_100baseT_Half |
|
||||
SUPPORTED_100baseT_Full |
|
||||
SUPPORTED_1000baseT_Half |
|
||||
SUPPORTED_1000baseT_Full |
|
||||
SUPPORTED_Autoneg |
|
||||
SUPPORTED_MII |
|
||||
SUPPORTED_Pause |
|
||||
phy_set_max_speed(phy_dev, SPEED_1000);
|
||||
phy_dev->supported |= SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause;
|
||||
|
||||
phy_attached_info(phy_dev);
|
||||
|
|
|
@ -2122,15 +2122,15 @@ static int tg3_phy_init(struct tg3 *tp)
|
|||
case PHY_INTERFACE_MODE_GMII:
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
|
||||
phydev->supported &= (PHY_GBIT_FEATURES |
|
||||
SUPPORTED_Pause |
|
||||
phy_set_max_speed(phydev, SPEED_1000);
|
||||
phydev->supported &= (SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause);
|
||||
break;
|
||||
}
|
||||
/* fallthru */
|
||||
case PHY_INTERFACE_MODE_MII:
|
||||
phydev->supported &= (PHY_BASIC_FEATURES |
|
||||
SUPPORTED_Pause |
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
phydev->supported &= (SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -544,9 +544,9 @@ static int macb_mii_probe(struct net_device *dev)
|
|||
|
||||
/* mask with MAC supported features */
|
||||
if (macb_is_gem(bp) && bp->caps & MACB_CAPS_GIGABIT_MODE_AVAILABLE)
|
||||
phydev->supported &= PHY_GBIT_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_1000);
|
||||
else
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
if (bp->caps & MACB_CAPS_NO_GIGABIT_HALF)
|
||||
phydev->supported &= ~SUPPORTED_1000baseT_Half;
|
||||
|
|
|
@ -372,7 +372,7 @@ static int gmac_setup_phy(struct net_device *netdev)
|
|||
return -ENODEV;
|
||||
netdev->phydev = phy;
|
||||
|
||||
phy->supported &= PHY_GBIT_FEATURES;
|
||||
phy_set_max_speed(phy, SPEED_1000);
|
||||
phy->supported |= SUPPORTED_Asym_Pause | SUPPORTED_Pause;
|
||||
phy->advertising = phy->supported;
|
||||
|
||||
|
|
|
@ -284,9 +284,9 @@ static int dnet_mii_probe(struct net_device *dev)
|
|||
|
||||
/* mask with MAC supported features */
|
||||
if (bp->capabilities & DNET_HAS_GIGABIT)
|
||||
phydev->supported &= PHY_GBIT_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_1000);
|
||||
else
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
phydev->supported |= SUPPORTED_Asym_Pause | SUPPORTED_Pause;
|
||||
|
||||
|
|
|
@ -721,10 +721,7 @@ static int ethoc_mdio_probe(struct net_device *dev)
|
|||
return err;
|
||||
}
|
||||
|
||||
phy->advertising &= ~(ADVERTISED_1000baseT_Full |
|
||||
ADVERTISED_1000baseT_Half);
|
||||
phy->supported &= ~(SUPPORTED_1000baseT_Full |
|
||||
SUPPORTED_1000baseT_Half);
|
||||
phy_set_max_speed(phy, SPEED_100);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1946,14 +1946,14 @@ static int fec_enet_mii_probe(struct net_device *ndev)
|
|||
|
||||
/* mask with MAC supported features */
|
||||
if (fep->quirks & FEC_QUIRK_HAS_GBIT) {
|
||||
phy_dev->supported &= PHY_GBIT_FEATURES;
|
||||
phy_set_max_speed(phy_dev, 1000);
|
||||
phy_dev->supported &= ~SUPPORTED_1000baseT_Half;
|
||||
#if !defined(CONFIG_M5272)
|
||||
phy_dev->supported |= SUPPORTED_Pause;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
phy_dev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phy_dev, 100);
|
||||
|
||||
phy_dev->advertising = phy_dev->supported;
|
||||
|
||||
|
|
|
@ -1742,12 +1742,7 @@ static int init_phy(struct net_device *dev)
|
|||
if (priv->phy_interface == PHY_INTERFACE_MODE_SGMII)
|
||||
uec_configure_serdes(dev);
|
||||
|
||||
phydev->supported &= (SUPPORTED_MII |
|
||||
SUPPORTED_Autoneg |
|
||||
ADVERTISED_10baseT_Half |
|
||||
ADVERTISED_10baseT_Full |
|
||||
ADVERTISED_100baseT_Half |
|
||||
ADVERTISED_100baseT_Full);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
if (priv->max_speed == SPEED_1000)
|
||||
phydev->supported |= ADVERTISED_1000baseT_Full;
|
||||
|
|
|
@ -364,15 +364,8 @@ ltq_etop_mdio_probe(struct net_device *dev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
phydev->supported &= (SUPPORTED_10baseT_Half
|
||||
| SUPPORTED_10baseT_Full
|
||||
| SUPPORTED_100baseT_Half
|
||||
| SUPPORTED_100baseT_Full
|
||||
| SUPPORTED_Autoneg
|
||||
| SUPPORTED_MII
|
||||
| SUPPORTED_TP);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
phydev->advertising = phydev->supported;
|
||||
phy_attached_info(phydev);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -359,8 +359,8 @@ static int mtk_phy_connect(struct net_device *dev)
|
|||
dev->phydev->supported |=
|
||||
SUPPORTED_Pause | SUPPORTED_Asym_Pause;
|
||||
|
||||
dev->phydev->supported &= PHY_GBIT_FEATURES | SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause;
|
||||
phy_set_max_speed(dev->phydev, SPEED_1000);
|
||||
dev->phydev->supported &= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
|
||||
dev->phydev->advertising = dev->phydev->supported |
|
||||
ADVERTISED_Autoneg;
|
||||
phy_start_aneg(dev->phydev);
|
||||
|
|
|
@ -797,8 +797,7 @@ static int lpc_mii_probe(struct net_device *ndev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
phydev->advertising = phydev->supported;
|
||||
|
||||
|
|
|
@ -1024,16 +1024,8 @@ static int r6040_mii_probe(struct net_device *dev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= (SUPPORTED_10baseT_Half
|
||||
| SUPPORTED_10baseT_Full
|
||||
| SUPPORTED_100baseT_Half
|
||||
| SUPPORTED_100baseT_Full
|
||||
| SUPPORTED_Autoneg
|
||||
| SUPPORTED_MII
|
||||
| SUPPORTED_TP);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
phydev->advertising = phydev->supported;
|
||||
lp->old_link = 0;
|
||||
lp->old_duplex = -1;
|
||||
|
||||
|
|
|
@ -298,8 +298,8 @@ static int sxgbe_init_phy(struct net_device *ndev)
|
|||
/* Stop Advertising 1000BASE Capability if interface is not GMII */
|
||||
if ((phy_iface == PHY_INTERFACE_MODE_MII) ||
|
||||
(phy_iface == PHY_INTERFACE_MODE_RMII))
|
||||
phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
|
||||
SUPPORTED_1000baseT_Full);
|
||||
phy_set_max_speed(phydev, SPEED_1000);
|
||||
|
||||
if (phydev->phy_id == 0) {
|
||||
phy_disconnect(phydev);
|
||||
return -ENODEV;
|
||||
|
|
|
@ -1048,9 +1048,10 @@ static int smsc911x_mii_probe(struct net_device *dev)
|
|||
|
||||
phy_attached_info(phydev);
|
||||
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= (PHY_BASIC_FEATURES | SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause);
|
||||
phydev->supported &= (SUPPORTED_Pause | SUPPORTED_Asym_Pause);
|
||||
phydev->advertising = phydev->supported;
|
||||
|
||||
pdata->last_duplex = -1;
|
||||
|
|
|
@ -1135,9 +1135,10 @@ static int smsc9420_mii_probe(struct net_device *dev)
|
|||
return PTR_ERR(phydev);
|
||||
}
|
||||
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= (PHY_BASIC_FEATURES | SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause);
|
||||
phydev->supported &= (SUPPORTED_Pause | SUPPORTED_Asym_Pause);
|
||||
phydev->advertising = phydev->supported;
|
||||
|
||||
phy_attached_info(phydev);
|
||||
|
|
|
@ -1223,10 +1223,8 @@ static int ave_init(struct net_device *ndev)
|
|||
phy_ethtool_get_wol(phydev, &wol);
|
||||
device_set_wakeup_capable(&ndev->dev, !!wol.supported);
|
||||
|
||||
if (!phy_interface_is_rgmii(phydev)) {
|
||||
phydev->supported &= ~PHY_GBIT_FEATURES;
|
||||
phydev->supported |= PHY_BASIC_FEATURES;
|
||||
}
|
||||
if (!phy_interface_is_rgmii(phydev))
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
|
||||
|
||||
phy_attached_info(phydev);
|
||||
|
|
|
@ -987,8 +987,7 @@ static int stmmac_init_phy(struct net_device *dev)
|
|||
if ((interface == PHY_INTERFACE_MODE_MII) ||
|
||||
(interface == PHY_INTERFACE_MODE_RMII) ||
|
||||
(max_speed < 1000 && max_speed > 0))
|
||||
phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
|
||||
SUPPORTED_1000baseT_Full);
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
/*
|
||||
* Half-duplex mode not supported with multiqueue
|
||||
|
|
|
@ -628,7 +628,7 @@ static int tc_mii_probe(struct net_device *dev)
|
|||
phy_attached_info(phydev);
|
||||
|
||||
/* mask with MAC supported features */
|
||||
phydev->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
dropmask = 0;
|
||||
if (options.speed == 10)
|
||||
dropmask |= SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full;
|
||||
|
|
|
@ -941,8 +941,7 @@ static int xemaclite_open(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* EmacLite doesn't support giga-bit speeds */
|
||||
lp->phy_dev->supported &= (PHY_BASIC_FEATURES);
|
||||
lp->phy_dev->advertising = lp->phy_dev->supported;
|
||||
phy_set_max_speed(lp->phy_dev, SPEED_100);
|
||||
|
||||
/* Don't advertise 1000BASE-T Full/Half duplex speeds */
|
||||
phy_write(lp->phy_dev, MII_CTRL1000, 0);
|
||||
|
|
|
@ -112,7 +112,7 @@ static void phy_init(struct mtk_eth *eth, struct mtk_mac *mac,
|
|||
phy->autoneg = AUTONEG_ENABLE;
|
||||
phy->speed = 0;
|
||||
phy->duplex = 0;
|
||||
phy->supported &= PHY_BASIC_FEATURES;
|
||||
phy_set_max_speed(phy, SPEED_100);
|
||||
phy->advertising = phy->supported | ADVERTISED_Autoneg;
|
||||
|
||||
phy_start_aneg(phy);
|
||||
|
|
Loading…
Reference in New Issue