From c56ed47f65d15e972d7c75ba4633984bb669ad3e Mon Sep 17 00:00:00 2001 From: juhosg Date: Sat, 3 Jul 2010 07:29:27 +0000 Subject: [PATCH] backfire: generic: rtl8366: enable VLAN ingress filtering (backport of r22044) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@22049 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c | 8 ++++++++ target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c index c006f73de..420a5523c 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c @@ -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); diff --git a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c index 91030ac48..45da8fd8e 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c @@ -112,6 +112,7 @@ #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);