summaryrefslogtreecommitdiffstats
path: root/drivers/net/gianfar.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2009-02-23 14:05:56 -0800
committerH. Peter Anvin <hpa@linux.intel.com>2009-02-23 14:05:56 -0800
commitdc731ca60954310be0993e8992d450c7089fd13d (patch)
tree6a997916f963d9e6dfa76fc5564296f57c3f909e /drivers/net/gianfar.c
parentec5b3d32437571b8a742069a4cfd04edb6b6eda5 (diff)
parent20f4d6c3a2a23c5d7d9cc7f42fbb943ca7a03d1f (diff)
downloadkernel-crypto-dc731ca60954310be0993e8992d450c7089fd13d.tar.gz
kernel-crypto-dc731ca60954310be0993e8992d450c7089fd13d.tar.xz
kernel-crypto-dc731ca60954310be0993e8992d450c7089fd13d.zip
Merge branch 'x86/urgent' into x86/mce2
Diffstat (limited to 'drivers/net/gianfar.c')
-rw-r--r--drivers/net/gianfar.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 3f7eab42aef..9b12a13a640 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -351,6 +351,9 @@ static int gfar_probe(struct of_device *ofdev,
/* Reset MAC layer */
gfar_write(&priv->regs->maccfg1, MACCFG1_SOFT_RESET);
+ /* We need to delay at least 3 TX clocks */
+ udelay(2);
+
tempval = (MACCFG1_TX_FLOW | MACCFG1_RX_FLOW);
gfar_write(&priv->regs->maccfg1, tempval);
@@ -1626,6 +1629,12 @@ static void gfar_schedule_cleanup(struct net_device *dev)
if (netif_rx_schedule_prep(&priv->napi)) {
gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
__netif_rx_schedule(&priv->napi);
+ } else {
+ /*
+ * Clear IEVENT, so interrupts aren't called again
+ * because of the packets that have already arrived.
+ */
+ gfar_write(&priv->regs->ievent, IEVENT_RTX_MASK);
}
spin_unlock(&priv->rxlock);