generic: rtl8366: enable VLAN ingress filtering
authorGabor Juhos <juhosg@openwrt.org>
Fri, 2 Jul 2010 09:55:57 +0000 (09:55 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Fri, 2 Jul 2010 09:55:57 +0000 (09:55 +0000)
SVN-Revision: 22044

target/linux/generic/files/drivers/net/phy/rtl8366rb.c
target/linux/generic/files/drivers/net/phy/rtl8366s.c

index c006f73defd82780d8873d02c85e2799bef236af..420a5523cfbdbeee187c104f746c125f4f7059f9 100644 (file)
@@ -70,6 +70,8 @@
 #define RTL8366RB_PHY_NO_OFFSET                        9
 #define RTL8366RB_PHY_NO_MASK                  (0x1f << 9)
 
+#define RTL8366RB_VLAN_INGRESS_CTRL2_REG       0x037f
+
 /* LED control registers */
 #define RTL8366RB_LED_BLINKRATE_REG            0x0430
 #define RTL8366RB_LED_BLINKRATE_BIT            0
@@ -288,6 +290,12 @@ static int rtl8366rb_hw_init(struct rtl8366_smi *smi)
        /* disable auto ageing for all ports */
        REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL);
 
+       /*
+        * discard VLAN tagged packets if the port is not a member of
+        * the VLAN with which the packets is associated.
+        */
+       REG_WR(smi, RTL8366RB_VLAN_INGRESS_CTRL2_REG, RTL8366RB_PORT_ALL);
+
        /* don't drop packets whose DA has not been learned */
        REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 0);
 
index 91030ac48e882bb33f29a215cab8b19d54a854b3..45da8fd8e582b7ebac0acadc0f6d533d942d2e7c 100644 (file)
 
 #define RTL8366S_VLAN_MEMCONF_BASE             0x0016
 
+#define RTL8366S_VLAN_MEMBERINGRESS_REG                0x0379
 
 #define RTL8366S_PORT_LINK_STATUS_BASE         0x0060
 #define RTL8366S_PORT_STATUS_SPEED_MASK                0x0003
@@ -299,6 +300,12 @@ static int rtl8366s_hw_init(struct rtl8366_smi *smi)
        /* disable auto ageing for all ports */
        REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL);
 
+       /*
+        * discard VLAN tagged packets if the port is not a member of
+        * the VLAN with which the packets is associated.
+        */
+       REG_WR(smi, RTL8366S_VLAN_MEMBERINGRESS_REG, RTL8366S_PORT_ALL);
+
        /* don't drop packets whose DA has not been learned */
        REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 0);