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.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index efcbeb6c867..acae2d8cd68 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
@@ -1423,15 +1426,11 @@ static void gfar_vlan_rx_register(struct net_device *dev,
1423{ 1426{
1424 struct gfar_private *priv = netdev_priv(dev); 1427 struct gfar_private *priv = netdev_priv(dev);
1425 unsigned long flags; 1428 unsigned long flags;
1426 struct vlan_group *old_grp;
1427 u32 tempval; 1429 u32 tempval;
1428 1430
1429 spin_lock_irqsave(&priv->rxlock, flags); 1431 spin_lock_irqsave(&priv->rxlock, flags);
1430 1432
1431 old_grp = priv->vlgrp; 1433 priv->vlgrp = grp;
1432
1433 if (old_grp == grp)
1434 return;
1435 1434
1436 if (grp) { 1435 if (grp) {
1437 /* Enable VLAN tag insertion */ 1436 /* Enable VLAN tag insertion */
@@ -1622,10 +1621,18 @@ static int gfar_clean_tx_ring(struct net_device *dev)
1622static void gfar_schedule_cleanup(struct net_device *dev) 1621static void gfar_schedule_cleanup(struct net_device *dev)
1623{ 1622{
1624 struct gfar_private *priv = netdev_priv(dev); 1623 struct gfar_private *priv = netdev_priv(dev);
1624 unsigned long flags;
1625
1626 spin_lock_irqsave(&priv->txlock, flags);
1627 spin_lock(&priv->rxlock);
1628
1625 if (netif_rx_schedule_prep(&priv->napi)) { 1629 if (netif_rx_schedule_prep(&priv->napi)) {
1626 gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED); 1630 gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
1627 __netif_rx_schedule(&priv->napi); 1631 __netif_rx_schedule(&priv->napi);
1628 } 1632 }
1633
1634 spin_unlock(&priv->rxlock);
1635 spin_unlock_irqrestore(&priv->txlock, flags);
1629} 1636}
1630 1637
1631/* Interrupt Handler for Transmit complete */ 1638/* Interrupt Handler for Transmit complete */