Signed-off-by: Troy Kisky <troy.ki...@boundarydevices.com> --- drivers/net/fec_mxc.c | 35 ++++++++++++++++++++++++++++++----- drivers/net/fec_mxc.h | 1 + 2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 3fffe79..4d7a38d 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -371,6 +371,20 @@ static int fec_set_hwaddr(struct eth_device *dev) return 0; } +static void fec_eth_phy_config(struct eth_device *dev) +{ +#ifdef CONFIG_PHYLIB + struct fec_priv *fec = (struct fec_priv *)dev->priv; + struct phy_device *phydev; + + phydev = phy_connect(miiphy_get_dev_by_name(dev->name), + fec->phy_id, dev, PHY_INTERFACE_MODE_RGMII); + fec->phydev = phydev; + if (phydev) + phy_config(phydev); +#endif +} + /** * Start the FEC engine * @param[in] dev Our device to handle @@ -427,9 +441,19 @@ static int fec_open(struct eth_device *edev) } #endif - miiphy_wait_aneg(edev); - speed = miiphy_speed(edev->name, fec->phy_id); - miiphy_duplex(edev->name, fec->phy_id); + if (fec->phydev) { + /* Start up the PHY */ +#ifdef CONFIG_PHYLIB + phy_startup(fec->phydev); +#endif + speed = fec->phydev->speed; + } else { + miiphy_wait_aneg(edev); + speed = miiphy_speed(edev->name, fec->phy_id); + miiphy_duplex(edev->name, fec->phy_id); + } + + #ifdef CONFIG_MX6Q { u32 ecr = readl(&fec->eth->ecntrl) & ~FEC_ECNTRL_SPEED; @@ -556,7 +580,7 @@ static int fec_init(struct eth_device *dev, bd_t* bd) fec_tbd_init(fec); - if (fec->xcv_type != SEVENWIRE) + if (!fec->phydev && fec->xcv_type != SEVENWIRE) miiphy_restart_aneg(dev); fec_open(dev); @@ -842,7 +866,8 @@ static int fec_probe(bd_t *bd, int dev_id, int phy_id, uint32_t base_addr) debug("got MAC address from fuse: %pM\n", ethaddr); memcpy(edev->enetaddr, ethaddr, 6); } - + /* Configure phy */ + fec_eth_phy_config(edev); return ret; err3: diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index 1d6ab06..36125b5 100644 --- a/drivers/net/fec_mxc.h +++ b/drivers/net/fec_mxc.h @@ -286,6 +286,7 @@ struct fec_priv { void *base_ptr; int dev_id; int phy_id; + struct phy_device *phydev; int (*mii_postcall)(int); }; -- 1.7.5.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot