drivers: net: cpsw: increment reference count on fixed-link PHY node

When a fixed-link sub-node exists in a slave node, the slave node
is also the PHY node. Since this is a separate use of the slave node,
of_node_get() should be used to increment the reference count.

Fixes: 1f71e8c96f ("drivers: net: cpsw: Add support for fixed-link PHY")
Signed-off-by: David Rivshin <drivshin@allworx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David Rivshin 2015-12-16 23:02:11 -05:00 committed by David S. Miller
parent f1eea5c15a
commit dfc0a6d39a
1 changed files with 9 additions and 4 deletions

View File

@ -2036,16 +2036,21 @@ static int cpsw_probe_dt(struct cpsw_priv *priv,
priv->phy_node = of_parse_phandle(slave_node, "phy-handle", 0); priv->phy_node = of_parse_phandle(slave_node, "phy-handle", 0);
parp = of_get_property(slave_node, "phy_id", &lenp); parp = of_get_property(slave_node, "phy_id", &lenp);
if (of_phy_is_fixed_link(slave_node)) { if (of_phy_is_fixed_link(slave_node)) {
struct phy_device *pd; struct device_node *phy_node;
struct phy_device *phy_dev;
/* In the case of a fixed PHY, the DT node associated
* to the PHY is the Ethernet MAC DT node.
*/
ret = of_phy_register_fixed_link(slave_node); ret = of_phy_register_fixed_link(slave_node);
if (ret) if (ret)
return ret; return ret;
pd = of_phy_find_device(slave_node); phy_node = of_node_get(slave_node);
if (!pd) phy_dev = of_phy_find_device(phy_node);
if (!phy_dev)
return -ENODEV; return -ENODEV;
snprintf(slave_data->phy_id, sizeof(slave_data->phy_id), snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
PHY_ID_FMT, pd->bus->id, pd->addr); PHY_ID_FMT, phy_dev->bus->id, phy_dev->addr);
} else if (parp) { } else if (parp) {
u32 phyid; u32 phyid;
struct device_node *mdio_node; struct device_node *mdio_node;