From 6315e70f9ecfbbbe6a271de21db8e060b9ea2e40 Mon Sep 17 00:00:00 2001 From: Trent Piepho Date: Thu, 30 Oct 2008 18:17:07 -0700 Subject: [PATCH] --- yaml --- r: 118333 b: refs/heads/master c: bdb59f949d663b7e943fb5f40b2557af4314abf9 h: refs/heads/master i: 118331: 49fa7ae710ab516c499690d20851aad49d2ec6ef v: v3 --- [refs] | 2 +- trunk/drivers/net/gianfar.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index dddca92ffee8..5b3d7659417b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c132419e560a2ecd3c8cf77f9c37e103e74b3754 +refs/heads/master: bdb59f949d663b7e943fb5f40b2557af4314abf9 diff --git a/trunk/drivers/net/gianfar.c b/trunk/drivers/net/gianfar.c index 249541a1814b..83a5cb6aa23b 100644 --- a/trunk/drivers/net/gianfar.c +++ b/trunk/drivers/net/gianfar.c @@ -591,6 +591,14 @@ static void gfar_configure_serdes(struct net_device *dev) if (bus) mutex_lock(&bus->mdio_lock); + /* If the link is already up, we must already be ok, and don't need to + * configure and reset the TBI<->SerDes link. Maybe U-Boot configured + * everything for us? Resetting it takes the link down and requires + * several seconds for it to come back. + */ + if (gfar_local_mdio_read(regs, tbipa, MII_BMSR) & BMSR_LSTATUS) + goto done; + /* Single clk mode, mii mode off(for serdes communication) */ gfar_local_mdio_write(regs, tbipa, MII_TBICON, TBICON_CLK_SELECT); @@ -601,6 +609,7 @@ static void gfar_configure_serdes(struct net_device *dev) gfar_local_mdio_write(regs, tbipa, MII_BMCR, BMCR_ANENABLE | BMCR_ANRESTART | BMCR_FULLDPLX | BMCR_SPEED1000); + done: if (bus) mutex_unlock(&bus->mdio_lock); }