Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / ethernet / freescale / gianfar.c
index e28b3e6b12d98e287ffd97fc5b90a27c88043023..2375a01715a0e93fa8f78c89dfcc90a88325585e 100644 (file)
@@ -341,7 +341,7 @@ static void gfar_init_mac(struct net_device *ndev)
        gfar_init_tx_rx_base(priv);
 
        /* Configure the coalescing support */
-       gfar_configure_coalescing(priv, 0xFF, 0xFF);
+       gfar_configure_coalescing_all(priv);
 
        /* set this when rx hw offload (TOE) functions are being used */
        priv->uses_rxfcb = 0;
@@ -386,7 +386,7 @@ static void gfar_init_mac(struct net_device *ndev)
                priv->uses_rxfcb = 1;
        }
 
-       if (ndev->features & NETIF_F_HW_VLAN_RX) {
+       if (ndev->features & NETIF_F_HW_VLAN_CTAG_RX) {
                rctrl |= RCTRL_VLEX | RCTRL_PRSDEP_INIT;
                priv->uses_rxfcb = 1;
        }
@@ -690,7 +690,7 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
        }
 
        for (i = 0; i < priv->num_tx_queues; i++)
-              priv->tx_queue[i] = NULL;
+               priv->tx_queue[i] = NULL;
        for (i = 0; i < priv->num_rx_queues; i++)
                priv->rx_queue[i] = NULL;
 
@@ -1050,8 +1050,9 @@ static int gfar_probe(struct platform_device *ofdev)
        }
 
        if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) {
-               dev->hw_features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
-               dev->features |= NETIF_F_HW_VLAN_RX;
+               dev->hw_features |= NETIF_F_HW_VLAN_CTAG_TX |
+                                   NETIF_F_HW_VLAN_CTAG_RX;
+               dev->features |= NETIF_F_HW_VLAN_CTAG_RX;
        }
 
        if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) {
@@ -1816,7 +1817,7 @@ void gfar_start(struct net_device *dev)
        dev->trans_start = jiffies; /* prevent tx timeout */
 }
 
-void gfar_configure_coalescing(struct gfar_private *priv,
+static void gfar_configure_coalescing(struct gfar_private *priv,
                               unsigned long tx_mask, unsigned long rx_mask)
 {
        struct gfar __iomem *regs = priv->gfargrp[0].regs;
@@ -1824,6 +1825,7 @@ void gfar_configure_coalescing(struct gfar_private *priv,
 
        if (priv->mode == MQ_MG_MODE) {
                int i = 0;
+
                baddr = &regs->txic0;
                for_each_set_bit(i, &tx_mask, priv->num_tx_queues) {
                        gfar_write(baddr + i, 0);
@@ -1838,7 +1840,7 @@ void gfar_configure_coalescing(struct gfar_private *priv,
                                gfar_write(baddr + i, priv->rx_queue[i]->rxic);
                }
        } else {
-               /* Backward compatible case ---- even if we enable
+               /* Backward compatible case -- even if we enable
                 * multiple queues, there's only single reg to program
                 */
                gfar_write(&regs->txic, 0);
@@ -1851,6 +1853,11 @@ void gfar_configure_coalescing(struct gfar_private *priv,
        }
 }
 
+void gfar_configure_coalescing_all(struct gfar_private *priv)
+{
+       gfar_configure_coalescing(priv, 0xFF, 0xFF);
+}
+
 static int register_grp_irqs(struct gfar_priv_grp *grp)
 {
        struct gfar_private *priv = grp->priv;
@@ -1940,7 +1947,7 @@ int startup_gfar(struct net_device *ndev)
 
        phy_start(priv->phydev);
 
-       gfar_configure_coalescing(priv, 0xFF, 0xFF);
+       gfar_configure_coalescing_all(priv);
 
        return 0;
 
@@ -2342,7 +2349,7 @@ void gfar_vlan_mode(struct net_device *dev, netdev_features_t features)
        local_irq_save(flags);
        lock_rx_qs(priv);
 
-       if (features & NETIF_F_HW_VLAN_TX) {
+       if (features & NETIF_F_HW_VLAN_CTAG_TX) {
                /* Enable VLAN tag insertion */
                tempval = gfar_read(&regs->tctrl);
                tempval |= TCTRL_VLINS;
@@ -2354,7 +2361,7 @@ void gfar_vlan_mode(struct net_device *dev, netdev_features_t features)
                gfar_write(&regs->tctrl, tempval);
        }
 
-       if (features & NETIF_F_HW_VLAN_RX) {
+       if (features & NETIF_F_HW_VLAN_CTAG_RX) {
                /* Enable VLAN tag extraction */
                tempval = gfar_read(&regs->rctrl);
                tempval |= (RCTRL_VLEX | RCTRL_PRSDEP_INIT);
@@ -2473,7 +2480,6 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
        struct net_device *dev = tx_queue->dev;
        struct netdev_queue *txq;
        struct gfar_private *priv = netdev_priv(dev);
-       struct gfar_priv_rx_q *rx_queue = NULL;
        struct txbd8 *bdp, *next = NULL;
        struct txbd8 *lbdp = NULL;
        struct txbd8 *base = tx_queue->tx_bd_base;
@@ -2488,7 +2494,6 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
        u32 lstatus;
        size_t buflen;
 
-       rx_queue = priv->rx_queue[tqi];
        txq = netdev_get_tx_queue(dev, tqi);
        bdp = tx_queue->dirty_tx;
        skb_dirtytx = tx_queue->skb_dirtytx;
@@ -2691,8 +2696,6 @@ static void gfar_process_frame(struct net_device *dev, struct sk_buff *skb,
        struct gfar_private *priv = netdev_priv(dev);
        struct rxfcb *fcb = NULL;
 
-       gro_result_t ret;
-
        /* fcb is at the beginning if exists */
        fcb = (struct rxfcb *)skb->data;
 
@@ -2722,19 +2725,17 @@ static void gfar_process_frame(struct net_device *dev, struct sk_buff *skb,
        /* Tell the skb what kind of packet this is */
        skb->protocol = eth_type_trans(skb, dev);
 
-       /* There's need to check for NETIF_F_HW_VLAN_RX here.
+       /* There's need to check for NETIF_F_HW_VLAN_CTAG_RX here.
         * Even if vlan rx accel is disabled, on some chips
         * RXFCB_VLN is pseudo randomly set.
         */
-       if (dev->features & NETIF_F_HW_VLAN_RX &&
+       if (dev->features & NETIF_F_HW_VLAN_CTAG_RX &&
            fcb->flags & RXFCB_VLN)
-               __vlan_hwaccel_put_tag(skb, fcb->vlctl);
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), fcb->vlctl);
 
        /* Send the packet up the stack */
-       ret = napi_gro_receive(napi, skb);
+       napi_gro_receive(napi, skb);
 
-       if (unlikely(GRO_DROP == ret))
-               atomic64_inc(&priv->extra_stats.kernel_dropped);
 }
 
 /* gfar_clean_rx_ring() -- Processes each frame in the rx ring
@@ -2833,7 +2834,7 @@ static int gfar_poll(struct napi_struct *napi, int budget)
        struct gfar_priv_tx_q *tx_queue = NULL;
        struct gfar_priv_rx_q *rx_queue = NULL;
        int work_done = 0, work_done_per_q = 0;
-       int i, budget_per_q;
+       int i, budget_per_q = 0;
        int has_tx_work;
        unsigned long rstat_rxf;
        int num_act_queues;