Switch to using the B53 switch driver where appropriate.
Use a non-tagged default config where it isn't confirmed to be
working.
Remove the switch configuration in preinit as the switch will now
be configured by the driver to use port isolation to prevent leakage
between lan and wan.
While at it, also provide a switch config for Neufbox 6.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 35307
define KernelPackage/switch
SUBMENU:=Other modules
- DEPENDS:=@TARGET_brcm47xx||TARGET_brcm63xx
+ DEPENDS:=@TARGET_brcm47xx
TITLE:=Switch drivers
FILES:= \
$(PKG_BUILD_DIR)/switch-core.ko \
case "$board_name" in
-96328avng |\
-96328A-1241N |\
-96328A-1441N1 |\
-963281TAN |\
-963281T_TEF |\
-96348A-122 |\
+96348W3 |\
96358-502V |\
-CT6373-1 |\
-AW4339U |\
+SPW500V)
+ ucidef_set_interface_lan "eth0"
+ ;;
+
+96338GW |\
+96338W |\
+96338W2_E7T |\
+96348A-122 |\
+96348W3 |\
CPVA642 |\
CT536_CT5621 |\
+CT6373-1 |\
D-4P-W |\
"F@ST2604" |\
-HW556* |\
-NB6 |\
-SPW303V |\
-SPW500V |\
-V2110 |\
-96348W3)
+RTA1320_16M |\
+RTA770BW |\
+V2110)
ucidef_set_interface_lan "eth0"
+ ucidef_add_switch "eth0" "1" "1"
+ ucidef_add_switch_vlan "eth0" "1" "0 1 2 3 4 5"
+ ;;
+
+96348GW |\
+96348GW-10 |\
+96348GW-11 |\
+96348GW-A |\
+96358VW |\
+96358VW2 |\
+AGPF-S0 |\
+"CPVA502+" |\
+DV201AMR |\
+DWV-S0 |\
+"F@ST2404" |\
+HW553 |\
+MAGIC |\
+RTA1025W_16 |\
+V2500V_BB)
+ ucidef_set_interfaces_lan_wan "eth1" "eth0"
+ ucidef_add_switch "eth1" "1" "1"
+ ucidef_add_switch_vlan "eth1" "1" "0 1 2 3 4 5"
;;
-AW4139)
+AW4139 |\
+HW556*)
ucidef_set_interface_lan "eth0.1"
ucidef_add_switch "eth0" "1" "1"
ucidef_add_switch_vlan "eth0" "1" "0 1 2 3 4 5t"
;;
+NB4-* |\
DVG3810BN)
ucidef_set_interfaces_lan_wan "eth1.1" "eth0"
ucidef_add_switch "eth1" "1" "1"
ucidef_add_switch_vlan "eth1" "1" "0 1 2 3 4 5t"
;;
+96328avng |\
+96328A-1241N |\
+96328A-1441N1 |\
+963281TAN |\
+963281T_TEF |\
+96368MVNgr)
+ ucidef_set_interface_lan "eth0.1"
+ ucidef_add_switch "eth0" "1" "1"
+ ucidef_add_switch_vlan "eth0" "1" "0 1 2 3 8t"
+ ;;
+
+96368MVWG)
+ ucidef_set_interface_lan "eth0.1"
+ ucidef_add_switch "eth0" "1" "1"
+ ucidef_add_switch_vlan "eth0" "1" "1 2 4 5 8t"
+ ;;
+
+NB6)
+ ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+ ucidef_add_switch "switch0" "1" "1"
+ ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 9t"
+ ucidef_add_switch_vlan "switch0" "2" "0 9t"
+ ;;
+
*)
ucidef_set_interfaces_lan_wan "eth1" "eth0"
;;
brcm63xx_detect() {
board_name=$(awk 'BEGIN{FS="[ \t:/]+"} /system type/ {print $4}' /proc/cpuinfo)
- if [ "$board_name" = "96358VW" ] && [ -e /proc/switch/eth1/enable ]; then
+ if [ "$board_name" = "96358VW" ] && [ -n "$(swconfig dev eth1 help 2>/dev/null)" ]; then
board_name="DVAG3810BN"
fi
#!/bin/sh
failsafe_ip() {
- [ -d "/proc/switch/$ifname" ] && {
- ifconfig "$ifname" 0.0.0.0 down
- echo "0 1 2 3 4 ${cpu_port:-5u*}" > "/proc/switch/$ifname/vlan/0/ports"
- }
-
[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
}
ifconfig $pi_ifname 0.0.0.0 down
}
fi
- [ -d "/proc/switch/$ifname" ] && {
- echo 1 > "/proc/switch/$ifname/reset"
- echo "0 1 2 3 4 ${cpu_port:-5u*}" > "/proc/switch/$ifname/vlan/0/ports"
- }
-
}
preinit_net_echo() {
preinit_ip
-
- [ -d "/proc/switch/$ifname" ] && {
- echo 1 > "/proc/switch/$ifname/reset"
- # this would be easier if we blasted the message across all ports
- # but we don't want packets leaking across interfaces
- for port in $(seq 0 4); do {
- echo "$port ${cpu_port:-5u*}" > "/proc/switch/$ifname/vlan/0/ports"
- port_net_echo $1
- }; done
-
- echo "0 ${cpu_port:-5u*}" > "/proc/switch/$ifname/vlan/0/ports"
-
- } || port_net_echo $1
+ port_net_echo $1
}
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_AUDIT=y
CONFIG_AUDIT_GENERIC=y
+CONFIG_B53=y
+CONFIG_B53_MMAP_DRIVER=y
+CONFIG_B53_PHY_DRIVER=y
+CONFIG_B53_PHY_FIXUP=y
+CONFIG_B53_SPI_DRIVER=y
CONFIG_BCM63XX=y
CONFIG_BCM63XX_CPU_6328=y
CONFIG_BCM63XX_CPU_6338=y
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -512,6 +512,54 @@ static struct board_info __initdata boar
+@@ -512,6 +512,56 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
+ .has_uart0 = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
static struct board_info board;
/*
-@@ -709,6 +717,586 @@ static struct board_info __initdata boar
+@@ -709,6 +717,596 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -183,6 +183,38 @@ static struct board_info __initdata boar
+@@ -183,6 +183,40 @@ static struct board_info __initdata boar
},
},
};
+ .has_enet0 = 1,
+
+ .enet0 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -706,6 +706,96 @@ static struct board_info __initdata boar
+@@ -706,6 +706,98 @@ static struct board_info __initdata boar
},
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -840,6 +840,59 @@ static struct board_info __initdata boar
+@@ -840,6 +840,61 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -767,6 +767,76 @@ static struct board_info __initdata boar
+@@ -767,6 +767,78 @@ static struct board_info __initdata boar
},
},
};
+ },
+ .enet1 = {
+ /* it has BP_ENET_EXTERNAL_PHY */
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1709,6 +1709,80 @@ static struct board_info __initdata boar
+@@ -1709,6 +1709,82 @@ static struct board_info __initdata boar
.spis = nb4_spi_devices,
.num_spis = ARRAY_SIZE(nb4_spi_devices),
};
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -215,6 +215,43 @@ static struct board_info __initdata boar
+@@ -215,6 +215,45 @@ static struct board_info __initdata boar
},
},
};
+ .has_enet0 = 1,
+
+ .enet0 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -874,6 +874,63 @@ static struct board_info __initdata boar
+@@ -874,6 +874,65 @@ static struct board_info __initdata boar
},
},
};
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -438,6 +438,62 @@ static struct board_info __initdata boar
+@@ -438,6 +438,64 @@ static struct board_info __initdata boar
},
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -494,6 +494,49 @@ static struct board_info __initdata boar
+@@ -494,6 +494,51 @@ static struct board_info __initdata boar
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -537,6 +537,67 @@ static struct board_info __initdata boar
+@@ -537,6 +537,69 @@ static struct board_info __initdata boar
},
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1092,6 +1092,44 @@ static struct board_info __initdata boar
+@@ -1092,6 +1092,46 @@ static struct board_info __initdata boar
},
},
};
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1337,6 +1337,57 @@ static struct board_info __initdata boar
+@@ -1337,6 +1337,59 @@ static struct board_info __initdata boar
},
};
+ .has_pci = 1,
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
static struct board_info board;
/*
-@@ -2264,6 +2271,111 @@ static struct board_info __initdata boar
+@@ -2264,6 +2271,113 @@ static struct board_info __initdata boar
.num_spis = ARRAY_SIZE(nb4_spi_devices),
};
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -2515,6 +2515,71 @@ static struct board_info __initdata boar
+@@ -2515,6 +2515,73 @@ static struct board_info __initdata boar
},
}
};
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1013,6 +1013,55 @@ static struct board_info __initdata boar
+@@ -1013,6 +1013,57 @@ static struct board_info __initdata boar
.has_ehci0 = 1,
};
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -738,6 +738,53 @@ static struct board_info __initdata boar
+@@ -738,6 +738,55 @@ static struct board_info __initdata boar
.has_uart0 = 1,
};
+ .has_enet0 = 1,
+
+ .enet0 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -2923,6 +2923,366 @@ static struct board_info __initdata boar
+@@ -2923,6 +2923,374 @@ static struct board_info __initdata boar
},
};
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+
+ .has_enet1 = 1,
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
--- /dev/null
+--- linux-3.6.11/arch/mips/bcm63xx/boards/board_bcm963xx.c.orig 2013-01-05 21:18:15.153079713 +0100
++++ linux-3.6.11/arch/mips/bcm63xx/boards/board_bcm963xx.c 2013-01-05 21:18:27.899285369 +0100
+@@ -583,6 +583,8 @@
+ .has_uart0 = 1,
+ .has_enet0 = 1,
+ .enet0 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -626,6 +628,8 @@
+ .has_uart0 = 1,
+ .has_enet0 = 1,
+ .enet0 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -857,6 +861,8 @@
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -929,6 +935,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1158,6 +1166,8 @@
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1333,6 +1343,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1407,6 +1419,8 @@
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1428,6 +1442,8 @@
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1447,6 +1463,8 @@
+ .use_internal_phy = 1,
+ },
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1822,6 +1840,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -1874,6 +1894,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -2014,6 +2036,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },
+@@ -2131,6 +2155,8 @@
+ },
+
+ .enet1 = {
++ .has_phy = 1,
++ .phy_id = 0,
+ .force_speed_100 = 1,
+ .force_duplex_full = 1,
+ },