X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/9ee3790b2ad1c280570dd7beaeb112c7fce7b314..9de5c06f89388ac423e517df31d3fdd83f306097:/target/linux/generic/files/drivers/net/phy/rtl8366rb.c diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index c991db8c1..90c37ad1f 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -274,9 +274,6 @@ static int rtl8366rb_hw_init(struct rtl8366_smi *smi) REG_RMW(smi, RTL8366RB_SGCR, RTL8366RB_SGCR_MAX_LENGTH_MASK, RTL8366RB_SGCR_MAX_LENGTH_1536); - /* enable all ports */ - REG_WR(smi, RTL8366RB_PECR, 0); - /* enable learning for all ports */ REG_WR(smi, RTL8366RB_SSCR0, 0); @@ -607,6 +604,12 @@ static int rtl8366rb_enable_vlan4k(struct rtl8366_smi *smi, int enable) (enable) ? RTL8366RB_SGCR_EN_VLAN_4KTB : 0); } +static int rtl8366rb_enable_port(struct rtl8366_smi *smi, int port, int enable) +{ + return rtl8366_smi_rmwr(smi, RTL8366RB_PECR, (1 << port), + (enable) ? 0 : (1 << port)); +} + static int rtl8366rb_sw_reset_mibs(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) @@ -956,7 +959,15 @@ static int rtl8366rb_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 rtl8366rb_globals[] = { @@ -1214,6 +1225,7 @@ static struct rtl8366_smi_ops rtl8366rb_smi_ops = { .is_vlan_valid = rtl8366rb_is_vlan_valid, .enable_vlan = rtl8366rb_enable_vlan, .enable_vlan4k = rtl8366rb_enable_vlan4k, + .enable_port = rtl8366rb_enable_port, }; static int __devinit rtl8366rb_probe(struct platform_device *pdev)