aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bcm63xx_enet.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bcm63xx_enet.c')
-rw-r--r--drivers/net/bcm63xx_enet.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/net/bcm63xx_enet.c b/drivers/net/bcm63xx_enet.c
index 8cdcab7655c0..faf5add894d7 100644
--- a/drivers/net/bcm63xx_enet.c
+++ b/drivers/net/bcm63xx_enet.c
@@ -21,6 +21,7 @@
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/clk.h> 22#include <linux/clk.h>
23#include <linux/etherdevice.h> 23#include <linux/etherdevice.h>
24#include <linux/slab.h>
24#include <linux/delay.h> 25#include <linux/delay.h>
25#include <linux/ethtool.h> 26#include <linux/ethtool.h>
26#include <linux/crc32.h> 27#include <linux/crc32.h>
@@ -340,11 +341,9 @@ static int bcm_enet_receive_queue(struct net_device *dev, int budget)
340 } 341 }
341 342
342 skb_put(skb, len); 343 skb_put(skb, len);
343 skb->dev = dev;
344 skb->protocol = eth_type_trans(skb, dev); 344 skb->protocol = eth_type_trans(skb, dev);
345 priv->stats.rx_packets++; 345 priv->stats.rx_packets++;
346 priv->stats.rx_bytes += len; 346 priv->stats.rx_bytes += len;
347 dev->last_rx = jiffies;
348 netif_receive_skb(skb); 347 netif_receive_skb(skb);
349 348
350 } while (--budget > 0); 349 } while (--budget > 0);
@@ -566,7 +565,6 @@ static int bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
566 565
567 priv->stats.tx_bytes += skb->len; 566 priv->stats.tx_bytes += skb->len;
568 priv->stats.tx_packets++; 567 priv->stats.tx_packets++;
569 dev->trans_start = jiffies;
570 ret = NETDEV_TX_OK; 568 ret = NETDEV_TX_OK;
571 569
572out_unlock: 570out_unlock:
@@ -604,7 +602,7 @@ static int bcm_enet_set_mac_address(struct net_device *dev, void *p)
604static void bcm_enet_set_multicast_list(struct net_device *dev) 602static void bcm_enet_set_multicast_list(struct net_device *dev)
605{ 603{
606 struct bcm_enet_priv *priv; 604 struct bcm_enet_priv *priv;
607 struct dev_mc_list *mc_list; 605 struct netdev_hw_addr *ha;
608 u32 val; 606 u32 val;
609 int i; 607 int i;
610 608
@@ -632,14 +630,14 @@ static void bcm_enet_set_multicast_list(struct net_device *dev)
632 } 630 }
633 631
634 i = 0; 632 i = 0;
635 netdev_for_each_mc_addr(mc_list, dev) { 633 netdev_for_each_mc_addr(ha, dev) {
636 u8 *dmi_addr; 634 u8 *dmi_addr;
637 u32 tmp; 635 u32 tmp;
638 636
639 if (i == 3) 637 if (i == 3)
640 break; 638 break;
641 /* update perfect match registers */ 639 /* update perfect match registers */
642 dmi_addr = mc_list->dmi_addr; 640 dmi_addr = ha->addr;
643 tmp = (dmi_addr[2] << 24) | (dmi_addr[3] << 16) | 641 tmp = (dmi_addr[2] << 24) | (dmi_addr[3] << 16) |
644 (dmi_addr[4] << 8) | dmi_addr[5]; 642 (dmi_addr[4] << 8) | dmi_addr[5];
645 enet_writel(priv, tmp, ENET_PML_REG(i + 1)); 643 enet_writel(priv, tmp, ENET_PML_REG(i + 1));
@@ -959,7 +957,9 @@ static int bcm_enet_open(struct net_device *dev)
959 /* all set, enable mac and interrupts, start dma engine and 957 /* all set, enable mac and interrupts, start dma engine and
960 * kick rx dma channel */ 958 * kick rx dma channel */
961 wmb(); 959 wmb();
962 enet_writel(priv, ENET_CTL_ENABLE_MASK, ENET_CTL_REG); 960 val = enet_readl(priv, ENET_CTL_REG);
961 val |= ENET_CTL_ENABLE_MASK;
962 enet_writel(priv, val, ENET_CTL_REG);
963 enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG); 963 enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
964 enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK, 964 enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
965 ENETDMA_CHANCFG_REG(priv->rx_chan)); 965 ENETDMA_CHANCFG_REG(priv->rx_chan));
@@ -1646,7 +1646,6 @@ static int __devinit bcm_enet_probe(struct platform_device *pdev)
1646 if (!dev) 1646 if (!dev)
1647 return -ENOMEM; 1647 return -ENOMEM;
1648 priv = netdev_priv(dev); 1648 priv = netdev_priv(dev);
1649 memset(priv, 0, sizeof(*priv));
1650 1649
1651 ret = compute_hw_mtu(priv, dev->mtu); 1650 ret = compute_hw_mtu(priv, dev->mtu);
1652 if (ret) 1651 if (ret)