net: of_mdio: parse "max-speed" property to set PHY supported features
The "max-speed" property is defined per the ePAPR specification to express the maximum speed a PHY supports. Use that property, if present to set the phydev->supported features which properly restricts the PHY within the range of defined speeds. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e9fbdf176d
commit
8fdade4be7
1 changed files with 24 additions and 1 deletions
|
@ -22,12 +22,30 @@
|
|||
MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static void of_set_phy_supported(struct phy_device *phydev, u32 max_speed)
|
||||
{
|
||||
phydev->supported |= PHY_DEFAULT_FEATURES;
|
||||
|
||||
switch (max_speed) {
|
||||
default:
|
||||
return;
|
||||
|
||||
case SPEED_1000:
|
||||
phydev->supported |= PHY_1000BT_FEATURES;
|
||||
case SPEED_100:
|
||||
phydev->supported |= PHY_100BT_FEATURES;
|
||||
case SPEED_10:
|
||||
phydev->supported |= PHY_10BT_FEATURES;
|
||||
}
|
||||
}
|
||||
|
||||
static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *child,
|
||||
u32 addr)
|
||||
{
|
||||
struct phy_device *phy;
|
||||
bool is_c45;
|
||||
int rc, prev_irq;
|
||||
u32 max_speed = 0;
|
||||
|
||||
is_c45 = of_device_is_compatible(child,
|
||||
"ethernet-phy-ieee802.3-c45");
|
||||
|
@ -58,8 +76,13 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *chi
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Set phydev->supported based on the "max-speed" property
|
||||
* if present */
|
||||
if (!of_property_read_u32(child, "max-speed", &max_speed))
|
||||
of_set_phy_supported(phy, max_speed);
|
||||
|
||||
dev_dbg(&mdio->dev, "registered phy %s at address %i\n",
|
||||
child->name, addr);
|
||||
child->name, addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue