diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-01-08 20:24:18 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-01-08 20:24:18 +0000 | 
| commit | 7a158c5f4037cf77126bf0e8d03310934da14c10 (patch) | |
| tree | 0122713a444ae4ade0031f6fd22d7c22acba8d31 /target/linux/generic/files/drivers/net/phy | |
| parent | cf57ba0b68516e3b0da71c81176a5b6dadfc69ad (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/phy')
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/rtl8366_smi.c | 40 | 
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; | 
