diff options
Diffstat (limited to 'drivers/net/gianfar.c')
| -rw-r--r-- | drivers/net/gianfar.c | 11 |
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); |
