Commit 4bee1f9a authored by Wolfram Sang's avatar Wolfram Sang Committed by David S. Miller

net/fec: restore interrupt mask after software-reset in fec_stop()

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: default avatarWolfram Sang <w.sang@pengutronix.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8cd47ea1
...@@ -118,6 +118,8 @@ static unsigned char fec_mac_default[] = { ...@@ -118,6 +118,8 @@ static unsigned char fec_mac_default[] = {
#define FEC_ENET_MII ((uint)0x00800000) /* MII interrupt */ #define FEC_ENET_MII ((uint)0x00800000) /* MII interrupt */
#define FEC_ENET_EBERR ((uint)0x00400000) /* SDMA bus error */ #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. /* The FEC stores dest/src/type, data, and checksum for receive packets.
*/ */
#define PKT_MAXBUF_SIZE 1518 #define PKT_MAXBUF_SIZE 1518
...@@ -1213,8 +1215,7 @@ fec_restart(struct net_device *dev, int duplex) ...@@ -1213,8 +1215,7 @@ fec_restart(struct net_device *dev, int duplex)
writel(0, fep->hwp + FEC_R_DES_ACTIVE); writel(0, fep->hwp + FEC_R_DES_ACTIVE);
/* Enable interrupts we wish to service */ /* Enable interrupts we wish to service */
writel(FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII, writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
fep->hwp + FEC_IMASK);
} }
static void static void
...@@ -1233,8 +1234,8 @@ fec_stop(struct net_device *dev) ...@@ -1233,8 +1234,8 @@ fec_stop(struct net_device *dev)
/* Whack a reset. We should wait for this. */ /* Whack a reset. We should wait for this. */
writel(1, fep->hwp + FEC_ECNTRL); writel(1, fep->hwp + FEC_ECNTRL);
udelay(10); udelay(10);
writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
} }
static int __devinit static int __devinit
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment