diff --git a/package/switch/Makefile b/package/switch/Makefile
index 9eda1e4d52dc69b0ffaed3694c1db90bfe1fc721..c577584803078bea743a4fa0bc5ca6d520101638 100644
--- a/package/switch/Makefile
+++ b/package/switch/Makefile
@@ -15,7 +15,7 @@ include $(INCLUDE_DIR)/package.mk
 
 define KernelPackage/switch
   SUBMENU:=Other modules
-  DEPENDS:=@TARGET_brcm47xx||TARGET_brcm63xx
+  DEPENDS:=@TARGET_brcm47xx
   TITLE:=Switch drivers
   FILES:= \
 	$(PKG_BUILD_DIR)/switch-core.ko \
diff --git a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
index 08b85580061f9e02a28b368bbb00d2635749fcfc..106bf5f86fe89e4ea799fbdb0e6a1f44d3d53b0d 100755
--- a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
+++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
@@ -14,40 +14,88 @@ ucidef_set_interface_loopback
 
 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"
 	;;
diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
index 999f775171af84ea8388b7b9f12d5a685f6699a0..8116e807ddab0239e247ffc94441d05cdeb3115a 100755
--- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
+++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
@@ -13,7 +13,7 @@ brcm63xx_has_reset_button=""
 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
 
diff --git a/target/linux/brcm63xx/base-files/lib/preinit/05_failsafe_config_switch_brcm63xx b/target/linux/brcm63xx/base-files/lib/preinit/05_failsafe_config_switch_brcm63xx
index 43da8cc0689134f19808c7e968dd7e043f5b21d3..e1653e3936034dfbd6546b700baec8092ce8f8f8 100644
--- a/target/linux/brcm63xx/base-files/lib/preinit/05_failsafe_config_switch_brcm63xx
+++ b/target/linux/brcm63xx/base-files/lib/preinit/05_failsafe_config_switch_brcm63xx
@@ -1,11 +1,6 @@
 #!/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
         }
diff --git a/target/linux/brcm63xx/base-files/lib/preinit/15_set_preinit_interface_brcm63xx b/target/linux/brcm63xx/base-files/lib/preinit/15_set_preinit_interface_brcm63xx
index 9d366fa339da715b0e5f1580d42bbd6bf1f8995f..7655fb7d53476bad60d9b9939e18226d9dc8deda 100644
--- a/target/linux/brcm63xx/base-files/lib/preinit/15_set_preinit_interface_brcm63xx
+++ b/target/linux/brcm63xx/base-files/lib/preinit/15_set_preinit_interface_brcm63xx
@@ -16,29 +16,12 @@ preinit_ip_deconfig() {
 			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
 }
 
 
diff --git a/target/linux/brcm63xx/config-3.6 b/target/linux/brcm63xx/config-3.6
index 92e6e3d6305b8b2f47f2f0602d127aac1d49a3ec..bccf2ae16f13b67f548c4270865d09d1ffa931fa 100644
--- a/target/linux/brcm63xx/config-3.6
+++ b/target/linux/brcm63xx/config-3.6
@@ -8,6 +8,11 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 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
diff --git a/target/linux/brcm63xx/patches-3.6/500-board-D4PW.patch b/target/linux/brcm63xx/patches-3.6/500-board-D4PW.patch
index 18ba06c52c0d1632d11a0221ce575aa538f967fb..db5db637c07407e8ca552fdc05b839ba36af9a4c 100644
--- a/target/linux/brcm63xx/patches-3.6/500-board-D4PW.patch
+++ b/target/linux/brcm63xx/patches-3.6/500-board-D4PW.patch
@@ -1,6 +1,6 @@
 --- 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,
  };
@@ -14,6 +14,8 @@
 +	.has_uart0 			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/501-board-NB4.patch b/target/linux/brcm63xx/patches-3.6/501-board-NB4.patch
index 21ed4422e5be4607193062bdcc90324ce211f68a..f59b71f5698d922d3994f6f44441d0f8c4e19e47 100644
--- a/target/linux/brcm63xx/patches-3.6/501-board-NB4.patch
+++ b/target/linux/brcm63xx/patches-3.6/501-board-NB4.patch
@@ -22,7 +22,7 @@
  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,
  };
@@ -77,6 +77,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
@@ -188,6 +190,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
@@ -299,6 +303,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
@@ -410,6 +416,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
@@ -516,6 +524,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/502-board-96338W2_E7T.patch b/target/linux/brcm63xx/patches-3.6/502-board-96338W2_E7T.patch
index cbeb31b16335d0bb3df9ca937492473ed68ac83e..a1c14f40b1b478dadb01ed21f243e174b7634ce5 100644
--- a/target/linux/brcm63xx/patches-3.6/502-board-96338W2_E7T.patch
+++ b/target/linux/brcm63xx/patches-3.6/502-board-96338W2_E7T.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	},
  };
@@ -12,6 +12,8 @@
 +	.has_enet0			= 1,
 +
 +	.enet0 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/503-board-CPVA642.patch b/target/linux/brcm63xx/patches-3.6/503-board-CPVA642.patch
index c20c5bcb562489670a5ff1cc08cfbbcf31a3fe5d..ad7af8fa1d85be4874e2f670249d9b18fc23ca74 100644
--- a/target/linux/brcm63xx/patches-3.6/503-board-CPVA642.patch
+++ b/target/linux/brcm63xx/patches-3.6/503-board-CPVA642.patch
@@ -1,6 +1,6 @@
 --- 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
  	},
  };
  
@@ -13,6 +13,8 @@
 +	.has_pci                        = 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100        = 1,
 +		.force_duplex_full      = 1,
 + 	},
diff --git a/target/linux/brcm63xx/patches-3.6/504-board_dsl_274xb_rev_c.patch b/target/linux/brcm63xx/patches-3.6/504-board_dsl_274xb_rev_c.patch
index de504ec7aca420244bc864d37840dc53b77e3bec..d0c4b034d76d1f1f19c607b68c6ebc8b63b558bf 100644
--- a/target/linux/brcm63xx/patches-3.6/504-board_dsl_274xb_rev_c.patch
+++ b/target/linux/brcm63xx/patches-3.6/504-board_dsl_274xb_rev_c.patch
@@ -1,6 +1,6 @@
 --- 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,
  };
  
@@ -14,6 +14,8 @@
 +	.has_pci			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/507-board-MAGIC.patch b/target/linux/brcm63xx/patches-3.6/507-board-MAGIC.patch
index bbb163cb3f8b13adf1ab5c33a2aa6ec87b32db28..a391b36c2c0bfb2d4c50efee8bb7733cef458eae 100644
--- a/target/linux/brcm63xx/patches-3.6/507-board-MAGIC.patch
+++ b/target/linux/brcm63xx/patches-3.6/507-board-MAGIC.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	},
  };
@@ -20,6 +20,8 @@
 +	},
 +	.enet1 = {
 +		/* it has BP_ENET_EXTERNAL_PHY */
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/508-board_hw553.patch b/target/linux/brcm63xx/patches-3.6/508-board_hw553.patch
index ff7d1c2c5a6d0ece4da23a14c1797e63ec32663a..8d3b877b0aa9f7fa5752268b1e8e472ecf5a615c 100644
--- a/target/linux/brcm63xx/patches-3.6/508-board_hw553.patch
+++ b/target/linux/brcm63xx/patches-3.6/508-board_hw553.patch
@@ -1,6 +1,6 @@
 --- 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),
  };
@@ -21,6 +21,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100        = 1,
 +		.force_duplex_full      = 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/509-board_rta1320_16m.patch b/target/linux/brcm63xx/patches-3.6/509-board_rta1320_16m.patch
index 7bc815e34e4060d1bc554b1362b8e2cdf2bd6732..71e5d0ebebda0862d0642f052fd541ac42771cca 100644
--- a/target/linux/brcm63xx/patches-3.6/509-board_rta1320_16m.patch
+++ b/target/linux/brcm63xx/patches-3.6/509-board_rta1320_16m.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	},
  };
@@ -13,6 +13,8 @@
 +	.has_enet0			= 1,
 +
 +	.enet0 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/511-board_V2500V.patch b/target/linux/brcm63xx/patches-3.6/511-board_V2500V.patch
index 87341380163b23b4dadb30764c35ad572f75ff64..c739392e71699d564efd59284e528b4668542ed1 100644
--- a/target/linux/brcm63xx/patches-3.6/511-board_V2500V.patch
+++ b/target/linux/brcm63xx/patches-3.6/511-board_V2500V.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	},
  };
@@ -19,6 +19,8 @@
 +                .use_internal_phy       = 1,
 +        },
 +        .enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +                .force_speed_100        = 1,
 +                .force_duplex_full      = 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/512-board_BTV2110.patch b/target/linux/brcm63xx/patches-3.6/512-board_BTV2110.patch
index f05385a64f29ef48e066ced8089637f1a1d84d74..24fa4a6426cb0410067fdfb613f945b7f85a0942 100644
--- a/target/linux/brcm63xx/patches-3.6/512-board_BTV2110.patch
+++ b/target/linux/brcm63xx/patches-3.6/512-board_BTV2110.patch
@@ -1,6 +1,6 @@
 --- 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
  	},
  };
  
@@ -15,6 +15,8 @@
 +	.has_pci			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/514-board_ct536_ct5621.patch b/target/linux/brcm63xx/patches-3.6/514-board_ct536_ct5621.patch
index 446c9da4c560d1c3691057de46d20055a54abe2d..e91f2040a609e094b84ad344dcb03b96205a4892 100644
--- a/target/linux/brcm63xx/patches-3.6/514-board_ct536_ct5621.patch
+++ b/target/linux/brcm63xx/patches-3.6/514-board_ct536_ct5621.patch
@@ -1,6 +1,6 @@
 --- 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
  };
  
  
@@ -14,6 +14,8 @@
 +	.has_pci			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/516-board_96348A-122.patch b/target/linux/brcm63xx/patches-3.6/516-board_96348A-122.patch
index fd8ac19c616b363985358d81150991502d0c50a8..19ef500f49c7fea37fa66a3cfd7c5fae83fd238e 100644
--- a/target/linux/brcm63xx/patches-3.6/516-board_96348A-122.patch
+++ b/target/linux/brcm63xx/patches-3.6/516-board_96348A-122.patch
@@ -1,6 +1,6 @@
 --- 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
  	},
  };
  
@@ -13,6 +13,8 @@
 +	.has_pci			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/519_board_CPVA502plus.patch b/target/linux/brcm63xx/patches-3.6/519_board_CPVA502plus.patch
index c6237a6d5778ef0f82be298322e60b28fceb2996..e0f52a75cc00788c9da2609addafeb47ff949981 100644
--- a/target/linux/brcm63xx/patches-3.6/519_board_CPVA502plus.patch
+++ b/target/linux/brcm63xx/patches-3.6/519_board_CPVA502plus.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	},
  };
@@ -19,6 +19,8 @@
 +		.use_internal_phy	= 1,
 +	},
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/525-board_96348w3.patch b/target/linux/brcm63xx/patches-3.6/525-board_96348w3.patch
index 2e249f0f94be5ef9a5f4513cce0176d15c17c85a..758045cebb117cee57a49d4d65d4ce9e82f4e435 100644
--- a/target/linux/brcm63xx/patches-3.6/525-board_96348w3.patch
+++ b/target/linux/brcm63xx/patches-3.6/525-board_96348w3.patch
@@ -1,6 +1,6 @@
 --- 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
  	},
  };
  
@@ -14,6 +14,8 @@
 +	.has_pci			= 1,
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/526-board_CT6373-1.patch b/target/linux/brcm63xx/patches-3.6/526-board_CT6373-1.patch
index 20ef1e5be41765aede981083f0cdded7fcb688f7..295b80ba9fd5a79d5192b121caaa0b166c81b47d 100644
--- a/target/linux/brcm63xx/patches-3.6/526-board_CT6373-1.patch
+++ b/target/linux/brcm63xx/patches-3.6/526-board_CT6373-1.patch
@@ -14,7 +14,7 @@
  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),
  };
  
@@ -64,6 +64,8 @@
 +
 +	.has_enet1			= 1,
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/527-board_dva-g3810bn-tl-1.patch b/target/linux/brcm63xx/patches-3.6/527-board_dva-g3810bn-tl-1.patch
index 19ffc13ad77f02eb7b8f7e661c1bb2184c1b9858..b3b88192027231740e61100a7cee841595b7de23 100644
--- a/target/linux/brcm63xx/patches-3.6/527-board_dva-g3810bn-tl-1.patch
+++ b/target/linux/brcm63xx/patches-3.6/527-board_dva-g3810bn-tl-1.patch
@@ -1,6 +1,6 @@
 --- 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
  		},
  	}
  };
@@ -23,6 +23,8 @@
 +	},
 +
 +	.enet1 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/529-board_fast2604.patch b/target/linux/brcm63xx/patches-3.6/529-board_fast2604.patch
index c09e07f0ea10367ef8d9e5f5753aa5a6cf96fa7d..e04dcd1ef78ae8a22ae77757976e0d0beeba98b4 100644
--- a/target/linux/brcm63xx/patches-3.6/529-board_fast2604.patch
+++ b/target/linux/brcm63xx/patches-3.6/529-board_fast2604.patch
@@ -1,6 +1,6 @@
 --- 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,
  };
  
@@ -14,6 +14,8 @@
 +
 +	.has_enet1					= 1,
 +	.enet1 = {
++		.has_phy			= 1,
++		.phy_id				= 0,
 +		.force_speed_100		= 1,
 +		.force_duplex_full		= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/553-board_rta770bw.patch b/target/linux/brcm63xx/patches-3.6/553-board_rta770bw.patch
index 9de099767435a8945a5eb84ce6567953e7fef16c..cd1ee996c56dbfee9b9664672d78f63eab58f705 100644
--- a/target/linux/brcm63xx/patches-3.6/553-board_rta770bw.patch
+++ b/target/linux/brcm63xx/patches-3.6/553-board_rta770bw.patch
@@ -1,6 +1,6 @@
 --- 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,
  };
@@ -14,6 +14,8 @@
 +	.has_enet0			= 1,
 +
 +	.enet0 = {
++		.has_phy		= 1,
++		.phy_id			= 0,
 +		.force_speed_100	= 1,
 +		.force_duplex_full	= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/554-board_hw556.patch b/target/linux/brcm63xx/patches-3.6/554-board_hw556.patch
index 3d07ca144fc581451a77bcffd514b08d05820a43..69f0539ce92ac74729a44f2627d1241935f80a91 100644
--- a/target/linux/brcm63xx/patches-3.6/554-board_hw556.patch
+++ b/target/linux/brcm63xx/patches-3.6/554-board_hw556.patch
@@ -1,6 +1,6 @@
 --- 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
  	},
  };
  
@@ -22,6 +22,8 @@
 +
 +	.has_enet1				= 1,
 +	.enet1 = {
++		.has_phy			= 1,
++		.phy_id				= 0,
 +		.force_speed_100		= 1,
 +		.force_duplex_full		= 1,
 +	},
@@ -112,6 +114,8 @@
 +
 +	.has_enet1				= 1,
 +	.enet1 = {
++		.has_phy			= 1,
++		.phy_id				= 0,
 +		.force_speed_100		= 1,
 +		.force_duplex_full		= 1,
 +	},
@@ -203,6 +207,8 @@
 +
 +	.has_enet1				= 1,
 +	.enet1 = {
++		.has_phy			= 1,
++		.phy_id				= 0,
 +		.force_speed_100		= 1,
 +		.force_duplex_full		= 1,
 +	},
@@ -294,6 +300,8 @@
 +
 +	.has_enet1				= 1,
 +	.enet1 = {
++		.has_phy			= 1,
++		.phy_id				= 0,
 +		.force_speed_100		= 1,
 +		.force_duplex_full		= 1,
 +	},
diff --git a/target/linux/brcm63xx/patches-3.6/555-boards_probe_switch.patch b/target/linux/brcm63xx/patches-3.6/555-boards_probe_switch.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5dd1bf460a6d589196f61198e9b065de0a9da3e0
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.6/555-boards_probe_switch.patch
@@ -0,0 +1,119 @@
+--- 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,
+ 	},