aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/gianfar.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/gianfar.c')
-rw-r--r--drivers/net/gianfar.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 3f7eab42aef1..9831b3f408aa 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -351,6 +351,9 @@ static int gfar_probe(struct of_device *ofdev,
351 /* Reset MAC layer */ 351 /* Reset MAC layer */
352 gfar_write(&priv->regs->maccfg1, MACCFG1_SOFT_RESET); 352 gfar_write(&priv->regs->maccfg1, MACCFG1_SOFT_RESET);
353 353
354 /* We need to delay at least 3 TX clocks */
355 udelay(2);
356
354 tempval = (MACCFG1_TX_FLOW | MACCFG1_RX_FLOW); 357 tempval = (MACCFG1_TX_FLOW | MACCFG1_RX_FLOW);
355 gfar_write(&priv->regs->maccfg1, tempval); 358 gfar_write(&priv->regs->maccfg1, tempval);
356 359
@@ -1281,7 +1284,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
1281 spin_lock_irqsave(&priv->txlock, flags); 1284 spin_lock_irqsave(&priv->txlock, flags);
1282 1285
1283 /* check if there is space to queue this packet */ 1286 /* check if there is space to queue this packet */
1284 if (nr_frags > priv->num_txbdfree) { 1287 if ((nr_frags+1) > priv->num_txbdfree) {
1285 /* no space, stop the queue */ 1288 /* no space, stop the queue */
1286 netif_stop_queue(dev); 1289 netif_stop_queue(dev);
1287 dev->stats.tx_fifo_errors++; 1290 dev->stats.tx_fifo_errors++;
@@ -1626,6 +1629,12 @@ static void gfar_schedule_cleanup(struct net_device *dev)
1626 if (netif_rx_schedule_prep(&priv->napi)) { 1629 if (netif_rx_schedule_prep(&priv->napi)) {
1627 gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED); 1630 gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
1628 __netif_rx_schedule(&priv->napi); 1631 __netif_rx_schedule(&priv->napi);
1632 } else {
1633 /*
1634 * Clear IEVENT, so interrupts aren't called again
1635 * because of the packets that have already arrived.
1636 */
1637 gfar_write(&priv->regs->ievent, IEVENT_RTX_MASK);
1629 } 1638 }
1630 1639
1631 spin_unlock(&priv->rxlock); 1640 spin_unlock(&priv->rxlock);