If cpsw slave is set to fixed-link cpsw probe still try to probe and use a phy. This patch fix cpsw probe in case of fixed-link. Signed-off-by: Andreas Schmidt <mail@xxxxxxxxxxxxxxxxxx> --- drivers/net/cpsw.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index d11ca33f7..37e480248 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -184,6 +184,7 @@ struct cpsw_slave { struct eth_device edev; struct cpsw_priv *cpsw; struct device_d dev; + int fixed_link; }; struct cpdma_desc { @@ -913,18 +914,20 @@ static int cpsw_slave_setup(struct cpsw_slave *slave, int slave_num, struct eth_device *edev = &slave->edev; struct device_d *dev = &slave->dev; int ret; - struct phy_device *phy; + struct phy_device *phy = NULL; - phy = mdiobus_scan(&priv->miibus, priv->slaves[slave_num].phy_id); - if (IS_ERR(phy)) { - ret = PTR_ERR(phy); - goto err_out; - } + if (!slave->fixed_link) { + phy = mdiobus_scan(&priv->miibus, priv->slaves[slave_num].phy_id); + if (IS_ERR(phy)) { + ret = PTR_ERR(phy); + goto err_out; + } - phy->dev.device_node = priv->slaves[slave_num].dev.device_node; - ret = phy_register_device(phy); - if (ret) - goto err_out; + phy->dev.device_node = priv->slaves[slave_num].dev.device_node; + ret = phy_register_device(phy); + if (ret) + goto err_out; + } sprintf(dev->name, "cpsw-slave"); dev->id = slave->slave_num; @@ -957,7 +960,8 @@ static int cpsw_slave_setup(struct cpsw_slave *slave, int slave_num, return 0; err_register_dev: - phy_unregister_device(phy); + if (!slave->fixed_link) + phy_unregister_device(phy); err_register_edev: unregister_device(dev); err_out: @@ -1103,11 +1107,20 @@ static int cpsw_probe_dt(struct cpsw_priv *priv) uint32_t phy_id[2]; ret = of_property_read_u32_array(child, "phy_id", phy_id, 2); - if (ret) - return ret; + if (!ret) { + slave->phy_id = phy_id[1]; + slave->fixed_link = 0; + } else { + struct device_node *fl_np; + fl_np = of_find_node_by_name(child, "fixed-link"); + if (fl_np) { + slave->phy_id = -1; + slave->fixed_link = 1; + } else + return ret; + } slave->dev.device_node = child; - slave->phy_id = phy_id[1]; slave->phy_if = of_get_phy_mode(child); slave->slave_num = i; -- 2.14.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox