#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
/* 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);
struct switch_val *val)
{
struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
- int err = 0;
-
- if (val->value.i == 1)
- err = rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 0, (1 << 2));
- return err;
+ return rtl8366_smi_rmwr(smi, RTL8366S_MIB_CTRL_REG, 0, (1 << 2));
}
static int rtl8366s_sw_get_vlan_enable(struct switch_dev *dev,
.max = 1,
.ofs = 2
}, {
- .type = SWITCH_TYPE_INT,
+ .type = SWITCH_TYPE_NOVAL,
.name = "reset_mibs",
.description = "Reset all MIB counters",
.set = rtl8366s_sw_reset_mibs,
- .get = NULL,
- .max = 1
}, {
.type = SWITCH_TYPE_INT,
.name = "blinkrate",
.set = NULL,
.get = rtl8366s_sw_get_port_link,
}, {
- .type = SWITCH_TYPE_INT,
+ .type = SWITCH_TYPE_NOVAL,
.name = "reset_mib",
.description = "Reset single port MIB counters",
- .max = 1,
.set = rtl8366s_sw_reset_port_mibs,
- .get = NULL,
}, {
.type = SWITCH_TYPE_STRING,
.name = "mib",