diff options
| author | Dan Murphy <[email protected]> | 2016-05-02 15:45:56 -0500 |
|---|---|---|
| committer | Joe Hershberger <[email protected]> | 2016-05-24 11:42:04 -0500 |
| commit | cb3862277b73b57ade3774b8fa684d3d7c324ba3 (patch) | |
| tree | bbf9dfb62df781903146ff3984e9520efc2f750e /drivers | |
| parent | 641b936fa5ba4f07d8400bd3bc0540f4ad64eeb7 (diff) | |
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 <[email protected]>
Tested-by: Mugunthan V N <[email protected]>
Acked-by: Joe Hershberger <[email protected]>
Diffstat (limited to 'drivers')
| -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 b8111197b3f..2ce4ec69f1d 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++; } |
