X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/cf57ba0b68516e3b0da71c81176a5b6dadfc69ad..9de5c06f89388ac423e517df31d3fdd83f306097:/target/linux/generic/files/drivers/net/phy/rtl8366s.c diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index 80a546a2d..3b7fcce32 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -257,9 +257,6 @@ static int rtl8366s_hw_init(struct rtl8366_smi *smi) REG_RMW(smi, RTL8366S_SGCR, RTL8366S_SGCR_MAX_LENGTH_MASK, RTL8366S_SGCR_MAX_LENGTH_1536); - /* enable all ports */ - REG_WR(smi, RTL8366S_PECR, 0); - /* enable learning for all ports */ REG_WR(smi, RTL8366S_SSCR0, 0); @@ -605,6 +602,12 @@ static int rtl8366s_is_vlan_valid(struct rtl8366_smi *smi, unsigned vlan) return 1; } +static int rtl8366s_enable_port(struct rtl8366_smi *smi, int port, int enable) +{ + return rtl8366_smi_rmwr(smi, RTL8366S_PECR, (1 << port), + (enable) ? 0 : (1 << port)); +} + static int rtl8366s_sw_reset_mibs(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) @@ -802,7 +805,15 @@ static int rtl8366s_sw_reset_switch(struct switch_dev *dev) if (err) return err; - return rtl8366_reset_vlan(smi); + err = rtl8366_reset_vlan(smi); + if (err) + return err; + + err = rtl8366_enable_vlan(smi, 1); + if (err) + return err; + + return rtl8366_enable_all_ports(smi, 1); } static struct switch_attr rtl8366s_globals[] = { @@ -1032,6 +1043,7 @@ static struct rtl8366_smi_ops rtl8366s_smi_ops = { .is_vlan_valid = rtl8366s_is_vlan_valid, .enable_vlan = rtl8366s_enable_vlan, .enable_vlan4k = rtl8366s_enable_vlan4k, + .enable_port = rtl8366s_enable_port, }; static int __devinit rtl8366s_probe(struct platform_device *pdev)