Skip to content

Commit

Permalink
net/fec: restore interrupt mask after software-reset in fec_stop()
Browse files Browse the repository at this point in the history
After the change from mdio polling to irq, it became necessary to
restore the interrupt mask after resetting the chip in fec_stop().
Otherwise, with all irqs disabled, no communication with the PHY will be
possible after e.g. un-/replugging the cable and the device gets
stalled.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Wolfram Sang authored and David S. Miller committed Jul 22, 2010
1 parent 8cd47ea commit 4bee1f9
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions drivers/net/fec.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ static unsigned char fec_mac_default[] = {
#define FEC_ENET_MII ((uint)0x00800000) /* MII interrupt */
#define FEC_ENET_EBERR ((uint)0x00400000) /* SDMA bus error */

#define FEC_DEFAULT_IMASK (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII)

/* The FEC stores dest/src/type, data, and checksum for receive packets.
*/
#define PKT_MAXBUF_SIZE 1518
Expand Down Expand Up @@ -1213,8 +1215,7 @@ fec_restart(struct net_device *dev, int duplex)
writel(0, fep->hwp + FEC_R_DES_ACTIVE);

/* Enable interrupts we wish to service */
writel(FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII,
fep->hwp + FEC_IMASK);
writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
}

static void
Expand All @@ -1233,8 +1234,8 @@ fec_stop(struct net_device *dev)
/* Whack a reset. We should wait for this. */
writel(1, fep->hwp + FEC_ECNTRL);
udelay(10);

writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
}

static int __devinit
Expand Down

0 comments on commit 4bee1f9

Please sign in to comment.