1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00

ramips: allow to specify port layout for the switch of the RT305x/RT3350

Based on a patch by Roman Yeryomin <roman@advem.lv>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27990 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg
2011-08-15 14:11:43 +00:00
parent ce883e3127
commit 8b59aa7786
13 changed files with 62 additions and 13 deletions

View File

@@ -72,6 +72,9 @@
#define RT305X_ESW_PORTS_ALL \
(RT305X_ESW_PORTS_NOCPU | RT305X_ESW_PORTS_CPU)
#define RT305X_ESW_NUM_VLANS 16
#define RT305X_ESW_NUM_PORTS 7
struct rt305x_esw {
void __iomem *base;
struct rt305x_esw_platform_data *pdata;
@@ -221,8 +224,6 @@ rt305x_esw_hw_init(struct rt305x_esw *esw)
(RT305X_ESW_PORTS_CPU << RT305X_ESW_SOCPC_DISBC2CPU_S)),
RT305X_ESW_REG_SOCPC);
rt305x_esw_set_pvid(esw, RT305X_ESW_PORT4, 2);
rt305x_esw_set_pvid(esw, RT305X_ESW_PORT5, 1);
rt305x_esw_wr(esw, 0x3f502b28, RT305X_ESW_REG_FPA2);
rt305x_esw_wr(esw, 0x00000000, RT305X_ESW_REG_FPA);
@@ -252,17 +253,47 @@ rt305x_esw_hw_init(struct rt305x_esw *esw)
/* select local register */
rt305x_mii_write(esw, 0, 31, 0x8000);
/* set default vlan */
rt305x_esw_set_vlan_id(esw, 0, 1);
rt305x_esw_set_vlan_id(esw, 1, 2);
rt305x_esw_set_vmsc(esw, 0,
(BIT(RT305X_ESW_PORT0) | BIT(RT305X_ESW_PORT1) |
BIT(RT305X_ESW_PORT2) | BIT(RT305X_ESW_PORT3) |
BIT(RT305X_ESW_PORT6)));
rt305x_esw_set_vmsc(esw, 1,
(BIT(RT305X_ESW_PORT4) | BIT(RT305X_ESW_PORT6)));
rt305x_esw_set_vmsc(esw, 2, 0);
rt305x_esw_set_vmsc(esw, 3, 0);
for (i = 0; i < RT305X_ESW_NUM_VLANS; i++) {
rt305x_esw_set_vlan_id(esw, i, 0);
rt305x_esw_set_vmsc(esw, i, 0);
}
for (i = 0; i < RT305X_ESW_NUM_PORTS; i++)
rt305x_esw_set_pvid(esw, i, 1);
switch (esw->pdata->vlan_config) {
case RT305X_ESW_VLAN_CONFIG_NONE:
break;
case RT305X_ESW_VLAN_CONFIG_LLLLW:
rt305x_esw_set_vlan_id(esw, 0, 1);
rt305x_esw_set_vlan_id(esw, 1, 2);
rt305x_esw_set_pvid(esw, RT305X_ESW_PORT4, 2);
rt305x_esw_set_vmsc(esw, 0,
BIT(RT305X_ESW_PORT0) | BIT(RT305X_ESW_PORT1) |
BIT(RT305X_ESW_PORT2) | BIT(RT305X_ESW_PORT3) |
BIT(RT305X_ESW_PORT6));
rt305x_esw_set_vmsc(esw, 1,
BIT(RT305X_ESW_PORT4) | BIT(RT305X_ESW_PORT6));
break;
case RT305X_ESW_VLAN_CONFIG_WLLLL:
rt305x_esw_set_vlan_id(esw, 0, 1);
rt305x_esw_set_vlan_id(esw, 1, 2);
rt305x_esw_set_pvid(esw, RT305X_ESW_PORT0, 2);
rt305x_esw_set_vmsc(esw, 0,
BIT(RT305X_ESW_PORT1) | BIT(RT305X_ESW_PORT2) |
BIT(RT305X_ESW_PORT3) | BIT(RT305X_ESW_PORT4) |
BIT(RT305X_ESW_PORT6));
rt305x_esw_set_vmsc(esw, 1,
BIT(RT305X_ESW_PORT0) | BIT(RT305X_ESW_PORT6));
break;
default:
BUG();
}
}
static int