diff options
author | Dan Murphy <dmurphy@ti.com> | 2016-05-02 20:45:56 (GMT) |
---|---|---|
committer | Joe Hershberger <joe.hershberger@ni.com> | 2016-05-24 16:42:04 (GMT) |
commit | cb3862277b73b57ade3774b8fa684d3d7c324ba3 (patch) | |
tree | bbf9dfb62df781903146ff3984e9520efc2f750e /drivers/net | |
parent | 641b936fa5ba4f07d8400bd3bc0540f4ad64eeb7 (diff) | |
download | u-boot-cb3862277b73b57ade3774b8fa684d3d7c324ba3.tar.xz |
drivers: net: cpsw: Add reading of DT phy-handle node
Add the ability to read the phy-handle node of the
cpsw slave. Upon reading this handle the phy-id
can be stored based on the reg node in the DT.
The phy-handle also needs to be stored and passed
to the phy to access any phy data that is available.
Signed-off-by: Dan Murphy <dmurphy@ti.com>
Tested-by: Mugunthan V N <mugunthanvnm@ti.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/cpsw.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index b811119..2ce4ec6 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -966,6 +966,11 @@ static int cpsw_phy_init(struct cpsw_priv *priv, struct cpsw_slave *slave) phydev->supported &= supported; phydev->advertising = phydev->supported; +#ifdef CONFIG_DM_ETH + if (slave->data->phy_of_handle) + phydev->dev->of_offset = slave->data->phy_of_handle; +#endif + priv->phydev = phydev; phy_config(phydev); @@ -1226,8 +1231,22 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev) if (phy_mode) priv->data.slave_data[slave_index].phy_if = phy_get_interface_by_name(phy_mode); - fdtdec_get_int_array(fdt, subnode, "phy_id", phy_id, 2); - priv->data.slave_data[slave_index].phy_addr = phy_id[1]; + + priv->data.slave_data[slave_index].phy_of_handle = + fdtdec_lookup_phandle(fdt, subnode, + "phy-handle"); + + if (priv->data.slave_data[slave_index].phy_of_handle >= 0) { + priv->data.slave_data[slave_index].phy_addr = + fdtdec_get_int(gd->fdt_blob, + priv->data.slave_data[slave_index].phy_of_handle, + "reg", -1); + } else { + fdtdec_get_int_array(fdt, subnode, "phy_id", + phy_id, 2); + priv->data.slave_data[slave_index].phy_addr = + phy_id[1]; + } slave_index++; } |