From 406d582ff4c887319b5efcb0b5219d17168a48ba Mon Sep 17 00:00:00 2001 From: Troy Kisky Date: Thu, 22 Dec 2011 08:42:03 +0100 Subject: fec_mxc: add 1000 Mbps selection Also, print negotiated speed Signed-off-by: Troy Kisky --- drivers/net/fec_mxc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'drivers/net/fec_mxc.c') diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 3affda8fa..d9e9daedd 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -378,6 +378,7 @@ static int fec_set_hwaddr(struct eth_device *dev) static int fec_open(struct eth_device *edev) { struct fec_priv *fec = (struct fec_priv *)edev->priv; + int speed; debug("fec_open: fec_open(dev)\n"); /* full-duplex, heartbeat disabled */ @@ -427,8 +428,21 @@ static int fec_open(struct eth_device *edev) #endif miiphy_wait_aneg(edev); - miiphy_speed(edev->name, fec->phy_id); + speed = miiphy_speed(edev->name, fec->phy_id); miiphy_duplex(edev->name, fec->phy_id); +#ifdef CONFIG_MX6Q + { + u32 ecr = readl(&fec->eth->ecntrl) & ~(0x1 << 5); + u32 rcr = (readl(&fec->eth->r_cntrl) & ~0x300) | 0x44; + if (speed == _1000BASET) + ecr |= (0x1 << 5); + else if (speed != _100BASET) + rcr |= (0x1 << 9); + writel(ecr, &fec->eth->ecntrl); + writel(rcr, &fec->eth->r_cntrl); + } +#endif + printf("%s:Speed=%i\n", __func__, speed); /* * Enable SmartDMA receive task -- cgit v1.2.3 From 401cdfc0c0ad3a3f8111a825d4557a9bf4aa1399 Mon Sep 17 00:00:00 2001 From: Troy Kisky Date: Thu, 22 Dec 2011 08:42:04 +0100 Subject: fec_mxc: increase autonegotiation timeout Timeouts were happening to soon for some switches Signed-off-by: Troy Kisky --- drivers/net/fec_mxc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/net/fec_mxc.c') diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index d9e9daedd..b652699f8 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -226,7 +226,7 @@ static int miiphy_wait_aneg(struct eth_device *dev) */ start = get_timer(0); do { - if (get_timer(start) > (CONFIG_SYS_HZ * 5)) { + if (get_timer(start) > (CONFIG_SYS_HZ * 10)) { printf("%s: Autonegotiation timeout\n", dev->name); return -1; } -- cgit v1.2.3 From d3609db7353a2f031a696fb5b4b6204a6fcbf205 Mon Sep 17 00:00:00 2001 From: Troy Kisky Date: Wed, 28 Dec 2011 07:43:11 +0100 Subject: fec_mxc: move autonegoatiate restart after mii_postcall Allow boards to change what is advertised before an autoneg restart happens Signed-off-by: Troy Kisky --- drivers/net/fec_mxc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/net/fec_mxc.c') diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index b652699f8..24ef418a3 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -206,12 +206,12 @@ static int miiphy_restart_aneg(struct eth_device *dev) miiphy_write(dev->name, fec->phy_id, MII_ADVERTISE, LPA_100FULL | LPA_100HALF | LPA_10FULL | LPA_10HALF | PHY_ANLPAR_PSB_802_3); - miiphy_write(dev->name, fec->phy_id, MII_BMCR, - BMCR_ANENABLE | BMCR_ANRESTART); - if (fec->mii_postcall) ret = fec->mii_postcall(fec->phy_id); + miiphy_write(dev->name, fec->phy_id, MII_BMCR, + BMCR_ANENABLE | BMCR_ANRESTART); + return ret; } -- cgit v1.2.3