]> Pileus Git - ~andy/linux/blobdiff - drivers/net/ixgbe/ixgbe_main.c
ixgbe: Only set/clear VFE in ixgbe_set_rx_mode
[~andy/linux] / drivers / net / ixgbe / ixgbe_main.c
index ffd1f163970636833af6b7fc3352c4669a3dca78..5182b2893431d473c3567a976c2486f68756285f 100644 (file)
@@ -2066,18 +2066,18 @@ static u32 ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
  * ixgbe_configure_rscctl - enable RSC for the indicated ring
  * @adapter:    address of board private structure
  * @index:      index of ring to set
- * @rx_buf_len: rx buffer length
  **/
-static void ixgbe_configure_rscctl(struct ixgbe_adapter *adapter, int index,
-                                   int rx_buf_len)
+static void ixgbe_configure_rscctl(struct ixgbe_adapter *adapter, int index)
 {
        struct ixgbe_ring *rx_ring;
        struct ixgbe_hw *hw = &adapter->hw;
        int j;
        u32 rscctrl;
+       int rx_buf_len;
 
        rx_ring = &adapter->rx_ring[index];
        j = rx_ring->reg_idx;
+       rx_buf_len = rx_ring->rx_buf_len;
        rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j));
        rscctrl |= IXGBE_RSCCTL_RSCEN;
        /*
@@ -2285,7 +2285,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
        if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) {
                /* Enable 82599 HW-RSC */
                for (i = 0; i < adapter->num_rx_queues; i++)
-                       ixgbe_configure_rscctl(adapter, i, rx_buf_len);
+                       ixgbe_configure_rscctl(adapter, i);
 
                /* Disable RSC for ACK packets */
                IXGBE_WRITE_REG(hw, IXGBE_RSCDBU,
@@ -2336,23 +2336,25 @@ static void ixgbe_vlan_rx_register(struct net_device *netdev,
         * not in DCB mode.
         */
        ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
+
+       /* Disable CFI check */
+       ctrl &= ~IXGBE_VLNCTRL_CFIEN;
+
+       /* enable VLAN tag stripping */
        if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
-               ctrl |= IXGBE_VLNCTRL_VME | IXGBE_VLNCTRL_VFE;
-               ctrl &= ~IXGBE_VLNCTRL_CFIEN;
-               IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
+               ctrl |= IXGBE_VLNCTRL_VME;
        } else if (adapter->hw.mac.type == ixgbe_mac_82599EB) {
-               ctrl |= IXGBE_VLNCTRL_VFE;
-               /* enable VLAN tag insert/strip */
-               ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
-               ctrl &= ~IXGBE_VLNCTRL_CFIEN;
-               IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
                for (i = 0; i < adapter->num_rx_queues; i++) {
+                       u32 ctrl;
                        j = adapter->rx_ring[i].reg_idx;
                        ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_RXDCTL(j));
                        ctrl |= IXGBE_RXDCTL_VME;
                        IXGBE_WRITE_REG(&adapter->hw, IXGBE_RXDCTL(j), ctrl);
                }
        }
+
+       IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
+
        ixgbe_vlan_rx_add_vid(netdev, 0);
 
        if (!test_bit(__IXGBE_DOWN, &adapter->state))