summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/files/drivers/net
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-01-08 20:24:18 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-01-08 20:24:18 +0000
commit7a158c5f4037cf77126bf0e8d03310934da14c10 (patch)
tree0122713a444ae4ade0031f6fd22d7c22acba8d31 /target/linux/generic/files/drivers/net
parentcf57ba0b68516e3b0da71c81176a5b6dadfc69ad (diff)
generic: rtl8366_smi: init VLANs only in first switch initialization
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24936 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/files/drivers/net')
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366_smi.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
index 9fff2cc54..7995f34a4 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
+++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
@@ -507,25 +507,38 @@ int rtl8366_reset_vlan(struct rtl8366_smi *smi)
return err;
}
- for (i = 0; i < smi->num_ports; i++) {
- if (i == smi->cpu_port)
- continue;
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rtl8366_reset_vlan);
- err = rtl8366_set_vlan(smi, (i + 1),
- (1 << i) | (1 << smi->cpu_port),
- (1 << i) | (1 << smi->cpu_port),
- 0);
+static int rtl8366_init_vlan(struct rtl8366_smi *smi)
+{
+ int port;
+ int err;
+
+ err = rtl8366_reset_vlan(smi);
+ if (err)
+ return err;
+
+ for (port = 0; port < smi->num_ports; port++) {
+ u32 mask;
+
+ if (port == smi->cpu_port)
+ mask = (1 << smi->num_ports) - 1;
+ else
+ mask = (1 << port) | (1 << smi->cpu_port);
+
+ err = rtl8366_set_vlan(smi, (port + 1), mask, mask, 0);
if (err)
return err;
- err = rtl8366_set_pvid(smi, i, (i + 1));
+ err = rtl8366_set_pvid(smi, port, (port + 1));
if (err)
return err;
}
- return 0;
+ return rtl8366_enable_vlan(smi, 1);
}
-EXPORT_SYMBOL_GPL(rtl8366_reset_vlan);
#ifdef CONFIG_RTL8366S_PHY_DEBUG_FS
int rtl8366_debugfs_open(struct inode *inode, struct file *file)
@@ -1169,6 +1182,13 @@ int rtl8366_smi_init(struct rtl8366_smi *smi)
goto err_free_sck;
}
+ err = rtl8366_init_vlan(smi);
+ if (err) {
+ dev_err(smi->parent, "VLAN initialization failed, err=%d\n",
+ err);
+ goto err_disable_hw;
+ }
+
err = rtl8366_smi_mii_init(smi);
if (err)
goto err_free_sck;