aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r--drivers/net/e1000/e1000_main.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index b3063e60be6e..2c723b1b8820 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -2402,7 +2402,9 @@ static void e1000_set_rx_mode(struct net_device *netdev)
2402 rctl &= ~E1000_RCTL_MPE; 2402 rctl &= ~E1000_RCTL_MPE;
2403 } 2403 }
2404 if (adapter->hw.mac_type != e1000_ich8lan) 2404 if (adapter->hw.mac_type != e1000_ich8lan)
2405 rctl |= E1000_RCTL_VFE; 2405 /* Enable VLAN filter if there is a VLAN */
2406 if (adapter->vlgrp)
2407 rctl |= E1000_RCTL_VFE;
2406 } 2408 }
2407 2409
2408 if (netdev->uc.count > rar_entries - 1) { 2410 if (netdev->uc.count > rar_entries - 1) {
@@ -4856,6 +4858,8 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
4856 /* enable VLAN receive filtering */ 4858 /* enable VLAN receive filtering */
4857 rctl = er32(RCTL); 4859 rctl = er32(RCTL);
4858 rctl &= ~E1000_RCTL_CFIEN; 4860 rctl &= ~E1000_RCTL_CFIEN;
4861 if (!(netdev->flags & IFF_PROMISC))
4862 rctl |= E1000_RCTL_VFE;
4859 ew32(RCTL, rctl); 4863 ew32(RCTL, rctl);
4860 e1000_update_mng_vlan(adapter); 4864 e1000_update_mng_vlan(adapter);
4861 } 4865 }
@@ -4866,6 +4870,11 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
4866 ew32(CTRL, ctrl); 4870 ew32(CTRL, ctrl);
4867 4871
4868 if (adapter->hw.mac_type != e1000_ich8lan) { 4872 if (adapter->hw.mac_type != e1000_ich8lan) {
4873 /* disable VLAN receive filtering */
4874 rctl = er32(RCTL);
4875 rctl &= ~E1000_RCTL_VFE;
4876 ew32(RCTL, rctl);
4877
4869 if (adapter->mng_vlan_id != 4878 if (adapter->mng_vlan_id !=
4870 (u16)E1000_MNG_VLAN_NONE) { 4879 (u16)E1000_MNG_VLAN_NONE) {
4871 e1000_vlan_rx_kill_vid(netdev, 4880 e1000_vlan_rx_kill_vid(netdev,