Skip to content

Commit

Permalink
gianfar: Don't reset TBI<->SerDes link if it's already up
Browse files Browse the repository at this point in the history
The link may be up already via the chip's reset strapping, or though action
of U-Boot, or from the last time the interface was brought up.  Resetting
the link causes it to go down for several seconds.  This can significantly
increase the time from power-on to DHCP completion and a device being
accessible to the network.

Signed-off-by: Trent Piepho <tpiepho@freescale.com>
Acked-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
  • Loading branch information
Trent Piepho authored and Jeff Garzik committed Oct 31, 2008
1 parent c132419 commit bdb59f9
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/net/gianfar.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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);
}
Expand Down

0 comments on commit bdb59f9

Please sign in to comment.