diff mbox

[OpenWrt-Devel,bcm63xx] : Add DGND3700 v1 / DGND3800B support

Message ID 1814380.38Rm0vtjyX@tool
State Accepted
Delegated to: Jonas Gorski
Headers show

Commit Message

Daniel González Cabanelas Feb. 28, 2015, 11:09 p.m. UTC
Ok, patch updated with latest changes in trunk, and suggestions.

About SPROM fixups, I misundertsood its purpouse. Deleted since it's not required.

Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com>

Comments

David Lang Feb. 28, 2015, 11:54 p.m. UTC | #1
Is this going to include support for the DSL on these boxes? the Table of 
Hardware page still says that the DSL is not and will never be supported. I've 
seen enough changes in such things over the years to hope that this is no longer 
the case.

David Lang

On Sun, 1 Mar 2015, dani wrote:

> Date: Sun, 01 Mar 2015 00:09:59 +0100
> From: dani <dgcbueu@gmail.com>
> To: openwrt-devel@lists.openwrt.org, jogo@openwrt.org
> Subject: Re: [OpenWrt-Devel] [PATCH][bcm63xx]: Add DGND3700 v1 / DGND3800B
>     support
> 
> Ok, patch updated with latest changes in trunk, and suggestions.
>
> About SPROM fixups, I misundertsood its purpouse. Deleted since it's not required.
>
> Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com>
> diff --git a/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds b/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
> index 854b3b2..69d797e 100644
> --- a/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
> +++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
> @@ -14,6 +14,14 @@ case "$board_name" in
> 96328dg2x2)
> 	ucidef_set_led_usbdev "usb" "USB" "A4001N:green:usb" "1-1"
> 	;;
> +DGND3700v1_3800B)
> +	ucidef_set_led_netdev "lan" "LAN" "DGND3700v1_3800B:green:lan" "eth0.1"
> +	ucidef_set_led_netdev "wan" "WAN" "DGND3700v1_3800B:green:inet" "eth0.2"
> +	ucidef_set_led_netdev "wlan0" "WIFI2G" "DGND3700v1_3800B:green:wifi2g" "wlan0"
> +	ucidef_set_led_netdev "wlan1" "WIFI5G" "DGND3700v1_3800B:blue:wifi5g" "wlan1"
> +	ucidef_set_led_usbdev "usb1" "USB1" "DGND3700v1_3800B:green:usb-back" "1-1"
> +	ucidef_set_led_usbdev "usb2" "USB2" "DGND3700v1_3800B:green:usb-front" "1-2"
> +	;;
> 'F@ST2704V2')
> 	ucidef_set_led_usbdev "usb" "USB" "F@ST2704V2:green:usb" "1-1"
> 	;;
> 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 709a1c8..6b9736a 100644
> --- a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
> +++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
> @@ -108,6 +108,13 @@ P870HW-51a_v2)
> 	ucidef_add_switch_vlan "eth0" "2" "4 5t"
> 	;;
>
> +DGND3700v1_3800B)
> +	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
> +	ucidef_add_switch "eth0" "1" "1"
> +	ucidef_add_switch_vlan "eth0" "1" "1 2 3 4 8t"
> +	ucidef_add_switch_vlan "eth0" "2" "0 8t"
> +	;;
> +
> NB6)
> 	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
> 	ucidef_add_switch "switch0" "1" "1"
> diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
> index 58ce71e..53dd759 100755
> --- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
> +++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
> @@ -111,6 +111,13 @@ brcm63xx_detect() {
> 		brcm63xx_has_reset_button="true"
> 		ifname=eth0
> 		;;
> +
> +	DGND3700v1_3800B)
> +		status_led="DGND3700v1_3800B:green:power"
> +		brcm63xx_has_reset_button="true"
> +		ifname="eth0"
> +		;;
> +
> 	"F@ST2504n")
> 		status_led="fast2504n:green:ok"
> 		brcm63xx_has_reset_button="true"
> diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile
> index dd16355..3fb9b1c 100755
> --- a/target/linux/brcm63xx/image/Makefile
> +++ b/target/linux/brcm63xx/image/Makefile
> @@ -111,6 +111,12 @@ define Image/Build/HCSDTB
> 		--output_file=$(BIN_DIR)/openwrt-$(2)-$(1).bin
> endef
>
> +define Image/Build/ChkDTB
> +	# Generate Netgear factory image
> +	$(STAGING_DIR_HOST)/bin/mkchkimg -o $(BIN_DIR)/openwrt-$(2)-$(1)-factory.chk \
> +	-k $(BIN_DIR)/openwrt-$(4)-$(1)-cfe.bin -b $(5) -r $(6)
> +endef
> +
> define Build/Clean
> 	$(MAKE) -C lzma-loader clean
> endef
> @@ -303,6 +309,12 @@ $(eval $(call ImageDTB,RedBootDTB,Livebox,livebox,livebox-blue-5g))
> $(eval $(call ImageDTB,HCSDTB,CVG834G,,cvg834g,a020,0001,0022,vmlinux-cvg834g))
> # Netgear DG834GT/PN
> $(eval $(call ImageDTB,CFEDTB,DG834GTPN,DG834GT_PN,dg834gtpn,96348GW-10,6348))
> +# Netgear DGND3700 v1 / DGND3800B
> +$(eval $(call ImageDTB,CFEDTB,DGND3700v1_3800B,DGND3700v1_3800B,dgnd3700v1,96368MVWG,6368,--image-offset 0x20000 --block-size 0x20000))
> +#Netgear DGND3700 v1 factory firmware
> +$(eval $(call ImageDTB,ChkDTB,DGND3700v1_3800B,DGND3700v1,,DGND3700v1_3800B,U12L144T01_NETGEAR_NEWLED,1))
> +#Netgear DGND3800B factory firmware
> +$(eval $(call ImageDTB,ChkDTB,DGND3700v1_3800B,DGND3800B,,DGND3700v1_3800B,U12L144T11_NETGEAR_NEWLED,1))
> # Pirelli Alice Gate VoIP 2 Plus Wi-Fi AGPF-S0
> $(eval $(call ImageDTB,CFEDTB,AGPF_S0,AGV2+W,agpf-s0,AGPF-S0,6358,--block-size 0x20000 --image-offset 0x20000 --signature2 IMAGE --tag-version 8))
> # Pirelli A226G
> diff --git a/target/linux/brcm63xx/profiles/netgear.mk b/target/linux/brcm63xx/profiles/netgear.mk
> index 75ddab5..20224a2 100644
> --- a/target/linux/brcm63xx/profiles/netgear.mk
> +++ b/target/linux/brcm63xx/profiles/netgear.mk
> @@ -12,7 +12,6 @@ endef
> define Profile/CVG834G/Description
>   Package set optimized for CVG834G.
> endef
> -
> $(eval $(call Profile,CVG834G))
>
> define Profile/DG834GTPN
> @@ -23,3 +22,13 @@ define Profile/DG834GTPN/Description
>   Package set optimized for DG834GT/PN.
> endef
> $(eval $(call Profile,DG834GTPN))
> +
> +define Profile/DGND3700v1_3800B
> +  NAME:=Netgear DGND3700 v1 / DGND3800B
> +  PACKAGES:=kmod-b43 wpad-mini \
> +	kmod-usb2 kmod-usb-ohci kmod-ledtrig-usbdev
> +endef
> +define Profile/DGND3700v1_3800B/Description
> +  Package set optimized for DGND3700 v1 / DGND3800B.
> +endef
> +$(eval $(call Profile,DGND3700v1_3800B))
> diff --git a/target/linux/brcm63xx/dts/dgnd3700v1.dts b/target/linux/brcm63xx/dts/dgnd3700v1.dts
> new file mode 100644
> index 0000000..65fae44
> --- /dev/null
> +++ b/target/linux/brcm63xx/dts/dgnd3700v1.dts
> @@ -0,0 +1,110 @@
> +/dts-v1/;
> +
> +/include/ "bcm6368.dtsi"
> +
> +/ {
> +	model = "Netgear DGND3700v1/DGND3800B";
> +	compatible = "netgear,dgnd3700v1", "brcm,bcm6368";
> +
> +	gpio-keys-polled {
> +		compatible = "gpio-keys-polled";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		poll-interval = <20>;
> +		debounce-interval = <60>;
> +
> +		wlan {
> +			label = "wlan";
> +			gpios = <&gpio0 10 1>;
> +			linux,code = <0xee>;
> +		};
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio0 12 1>;
> +			linux,code = <0x198>;
> +		};
> +		wps {
> +			label = "wps";
> +			gpios = <&gpio1 3 1>;
> +			linux,code = <0x211>;
> +		};
> +	};
> +
> +	gpio-leds {
> +		compatible = "gpio-leds";
> +
> +		dsl_green {
> +			label = "DGND3700v1_3800B:green:dsl";
> +			gpios = <&gpio0 2 1>;
> +		};
> +		inet_red {
> +			label = "DGND3700v1_3800B:red:inet";
> +			gpios = <&gpio0 4 1>;
> +		};
> +		inet_green {
> +			label = "DGND3700v1_3800B:green:inet";
> +			gpios = <&gpio0 5 1>;
> +		};
> +		wps_green {
> +			label = "DGND3700v1_3800B:green:wps";
> +			gpios = <&gpio0 11 1>;
> +		};
> +		usbfront_green {
> +			label = "DGND3700v1_3800B:green:usb-front";
> +			gpios = <&gpio0 13 1>;
> +		};
> +		usbback_green {
> +			label = "DGND3700v1_3800B:green:usb-back";
> +			gpios = <&gpio0 14 1>;
> +		};
> +		power_red {
> +			label = "DGND3700v1_3800B:red:power";
> +			gpios = <&gpio0 22 1>;
> +		};
> +		lan_green {
> +			label = "DGND3700v1_3800B:green:lan";
> +			gpios = <&gpio0 23 1>;
> +		};
> +		power_green {
> +			label = "DGND3700v1_3800B:green:power";
> +			gpios = <&gpio0 24 1>;
> +			default-state = "on";
> +		};
> +		wifi2g_green {
> +			label = "DGND3700v1_3800B:green:wifi2g";
> +			gpios = <&gpio0 26 1>;
> +		};
> +		wifi5g_blue {
> +			label = "DGND3700v1_3800B:blue:wifi5g";
> +			gpios = <&gpio0 27 1>;
> +		};
> +	};
> +};
> +
> +&pflash {
> +	status = "ok";
> +
> +	linux,part-probe = "bcm63xxpart";
> +
> +	cfe@0 {
> +		label = "CFE";
> +		reg = <0x000000 0x020000>;
> +		read-only;
> +	};
> +
> +	linux@20000 {
> +		label = "linux";
> +		reg = <0x020000 0x1e20000>;
> +	};
> +
> +	board_data@1e40000 {
> +		label = "board_data";
> +		reg = <0x1e40000 0x1a0000>;
> +		read-only;
> +	};
> +
> +	nvram@1fe0000 {
> +		label = "nvram";
> +		reg = <0x1fe0000 0x20000>;
> +	};
> +};
> diff --git a/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch b/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch
> new file mode 100644
> index 0000000..b4013bb
> --- /dev/null
> +++ b/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch
> @@ -0,0 +1,67 @@
> +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
> ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
> +@@ -2132,6 +2132,48 @@
> + 	.has_ehci0 = 1,
> + };
> +
> ++static struct b53_platform_data DGND3700v1_3800B_b53_pdata = {
> ++	.alias    = "eth0",
> ++};
> ++
> ++static struct spi_board_info DGND3700v1_3800B_spi_devices[] = {
> ++	{
> ++		.modalias = "b53-switch",
> ++		.max_speed_hz = 781000,
> ++		.bus_num = 0,
> ++		.chip_select = 1,
> ++		.platform_data = &DGND3700v1_3800B_b53_pdata,
> ++	}
> ++};
> ++
> ++static struct board_info __initdata board_DGND3700v1_3800B = {
> ++	.name				= "DGND3700v1_3800B",
> ++	.expected_cpu_id		= 0x6368,
> ++
> ++	.has_uart0			= 1,
> ++	.has_pci			= 1,
> ++	.has_ohci0			= 1,
> ++	.has_ehci0			= 1,
> ++	.num_usbh_ports			= 2,
> ++
> ++	.has_enetsw			= 1,
> ++	.enetsw = {
> ++		.used_ports = {
> ++			[5] = {
> ++				.used  = 1,
> ++				.phy_id  = 0xff,
> ++				.bypass_link = 1,
> ++				.force_speed = 1000,
> ++				.force_duplex_full = 1,
> ++				.name  = "RGMII",
> ++			},
> ++		},
> ++	},
> ++
> ++	.spis = DGND3700v1_3800B_spi_devices,
> ++	.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
> ++};
> ++
> + static struct sprom_fixup __initdata vr3025u_fixups[] = {
> + 	{ .offset = 97, .value = 0xfeb3 },
> + 	{ .offset = 98, .value = 0x1618 },
> +@@ -2723,6 +2765,7 @@
> + #ifdef CONFIG_BCM63XX_CPU_6368
> + 	&board_96368mvwg,
> + 	&board_96368mvngr,
> ++	&board_DGND3700v1_3800B,
> + 	&board_P870HW51A_V2,
> + 	&board_VR3025u,
> + 	&board_VR3025un,
> +@@ -2813,6 +2856,7 @@
> + 	{ .compatible = "comtrend,vr-3025u", .data = &board_VR3025u, },
> + 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
> + 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
> ++	{ .compatible = "netgear,dgnd3700v1", .data = &board_DGND3700v1_3800B, },
> + 	{ .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, },
> + #endif
> + #ifdef CONFIG_BCM63XX_CPU_63268
> diff --git a/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch b/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch
> new file mode 100644
> index 0000000..b4013bb
> --- /dev/null
> +++ b/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch
> @@ -0,0 +1,67 @@
> +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
> ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
> +@@ -2132,6 +2132,48 @@
> + 	.has_ehci0 = 1,
> + };
> +
> ++static struct b53_platform_data DGND3700v1_3800B_b53_pdata = {
> ++	.alias    = "eth0",
> ++};
> ++
> ++static struct spi_board_info DGND3700v1_3800B_spi_devices[] = {
> ++	{
> ++		.modalias = "b53-switch",
> ++		.max_speed_hz = 781000,
> ++		.bus_num = 0,
> ++		.chip_select = 1,
> ++		.platform_data = &DGND3700v1_3800B_b53_pdata,
> ++	}
> ++};
> ++
> ++static struct board_info __initdata board_DGND3700v1_3800B = {
> ++	.name				= "DGND3700v1_3800B",
> ++	.expected_cpu_id		= 0x6368,
> ++
> ++	.has_uart0			= 1,
> ++	.has_pci			= 1,
> ++	.has_ohci0			= 1,
> ++	.has_ehci0			= 1,
> ++	.num_usbh_ports			= 2,
> ++
> ++	.has_enetsw			= 1,
> ++	.enetsw = {
> ++		.used_ports = {
> ++			[5] = {
> ++				.used  = 1,
> ++				.phy_id  = 0xff,
> ++				.bypass_link = 1,
> ++				.force_speed = 1000,
> ++				.force_duplex_full = 1,
> ++				.name  = "RGMII",
> ++			},
> ++		},
> ++	},
> ++
> ++	.spis = DGND3700v1_3800B_spi_devices,
> ++	.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
> ++};
> ++
> + static struct sprom_fixup __initdata vr3025u_fixups[] = {
> + 	{ .offset = 97, .value = 0xfeb3 },
> + 	{ .offset = 98, .value = 0x1618 },
> +@@ -2723,6 +2765,7 @@
> + #ifdef CONFIG_BCM63XX_CPU_6368
> + 	&board_96368mvwg,
> + 	&board_96368mvngr,
> ++	&board_DGND3700v1_3800B,
> + 	&board_P870HW51A_V2,
> + 	&board_VR3025u,
> + 	&board_VR3025un,
> +@@ -2813,6 +2856,7 @@
> + 	{ .compatible = "comtrend,vr-3025u", .data = &board_VR3025u, },
> + 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
> + 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
> ++	{ .compatible = "netgear,dgnd3700v1", .data = &board_DGND3700v1_3800B, },
> + 	{ .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, },
> + #endif
> + #ifdef CONFIG_BCM63XX_CPU_63268
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>
Jonas Gorski March 16, 2015, 12:01 p.m. UTC | #2
On Sun, Mar 1, 2015 at 12:09 AM, dani <dgcbueu@gmail.com> wrote:
> Ok, patch updated with latest changes in trunk, and suggestions.
>
> About SPROM fixups, I misundertsood its purpouse. Deleted since it's not required.
>
> Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com>

Thanks, applied with a few white space fixes. Next time if you
resubmit a patch please keep the commit log intact, so I can just grab
it from patchwork directly.


Jonas
Jonas Gorski March 16, 2015, 12:02 p.m. UTC | #3
On Sun, Mar 1, 2015 at 12:54 AM, David Lang <david@lang.hm> wrote:
> Is this going to include support for the DSL on these boxes? the Table of
> Hardware page still says that the DSL is not and will never be supported.
> I've seen enough changes in such things over the years to hope that this is
> no longer the case.

No, and probably never will be.


Jonas
diff mbox

Patch

diff --git a/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds b/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
index 854b3b2..69d797e 100644
--- a/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
+++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/01_leds
@@ -14,6 +14,14 @@  case "$board_name" in
 96328dg2x2)
 	ucidef_set_led_usbdev "usb" "USB" "A4001N:green:usb" "1-1"
 	;;
+DGND3700v1_3800B)
+	ucidef_set_led_netdev "lan" "LAN" "DGND3700v1_3800B:green:lan" "eth0.1"
+	ucidef_set_led_netdev "wan" "WAN" "DGND3700v1_3800B:green:inet" "eth0.2"
+	ucidef_set_led_netdev "wlan0" "WIFI2G" "DGND3700v1_3800B:green:wifi2g" "wlan0"
+	ucidef_set_led_netdev "wlan1" "WIFI5G" "DGND3700v1_3800B:blue:wifi5g" "wlan1"
+	ucidef_set_led_usbdev "usb1" "USB1" "DGND3700v1_3800B:green:usb-back" "1-1"
+	ucidef_set_led_usbdev "usb2" "USB2" "DGND3700v1_3800B:green:usb-front" "1-2"
+	;;
 'F@ST2704V2')
 	ucidef_set_led_usbdev "usb" "USB" "F@ST2704V2:green:usb" "1-1"
 	;;
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 709a1c8..6b9736a 100644
--- a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
+++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
@@ -108,6 +108,13 @@  P870HW-51a_v2)
 	ucidef_add_switch_vlan "eth0" "2" "4 5t"
 	;;
 
+DGND3700v1_3800B)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "eth0" "1" "1"
+	ucidef_add_switch_vlan "eth0" "1" "1 2 3 4 8t"
+	ucidef_add_switch_vlan "eth0" "2" "0 8t"
+	;;
+
 NB6)
 	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
 	ucidef_add_switch "switch0" "1" "1"
diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
index 58ce71e..53dd759 100755
--- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
+++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
@@ -111,6 +111,13 @@  brcm63xx_detect() {
 		brcm63xx_has_reset_button="true"
 		ifname=eth0
 		;;
+
+	DGND3700v1_3800B)
+		status_led="DGND3700v1_3800B:green:power"
+		brcm63xx_has_reset_button="true"
+		ifname="eth0"
+		;;
+
 	"F@ST2504n")
 		status_led="fast2504n:green:ok"
 		brcm63xx_has_reset_button="true"
diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile
index dd16355..3fb9b1c 100755
--- a/target/linux/brcm63xx/image/Makefile
+++ b/target/linux/brcm63xx/image/Makefile
@@ -111,6 +111,12 @@  define Image/Build/HCSDTB
 		--output_file=$(BIN_DIR)/openwrt-$(2)-$(1).bin
 endef
 
+define Image/Build/ChkDTB
+	# Generate Netgear factory image
+	$(STAGING_DIR_HOST)/bin/mkchkimg -o $(BIN_DIR)/openwrt-$(2)-$(1)-factory.chk \
+	-k $(BIN_DIR)/openwrt-$(4)-$(1)-cfe.bin -b $(5) -r $(6)
+endef
+
 define Build/Clean
 	$(MAKE) -C lzma-loader clean
 endef
@@ -303,6 +309,12 @@  $(eval $(call ImageDTB,RedBootDTB,Livebox,livebox,livebox-blue-5g))
 $(eval $(call ImageDTB,HCSDTB,CVG834G,,cvg834g,a020,0001,0022,vmlinux-cvg834g))
 # Netgear DG834GT/PN
 $(eval $(call ImageDTB,CFEDTB,DG834GTPN,DG834GT_PN,dg834gtpn,96348GW-10,6348))
+# Netgear DGND3700 v1 / DGND3800B
+$(eval $(call ImageDTB,CFEDTB,DGND3700v1_3800B,DGND3700v1_3800B,dgnd3700v1,96368MVWG,6368,--image-offset 0x20000 --block-size 0x20000))
+#Netgear DGND3700 v1 factory firmware
+$(eval $(call ImageDTB,ChkDTB,DGND3700v1_3800B,DGND3700v1,,DGND3700v1_3800B,U12L144T01_NETGEAR_NEWLED,1))
+#Netgear DGND3800B factory firmware
+$(eval $(call ImageDTB,ChkDTB,DGND3700v1_3800B,DGND3800B,,DGND3700v1_3800B,U12L144T11_NETGEAR_NEWLED,1))
 # Pirelli Alice Gate VoIP 2 Plus Wi-Fi AGPF-S0
 $(eval $(call ImageDTB,CFEDTB,AGPF_S0,AGV2+W,agpf-s0,AGPF-S0,6358,--block-size 0x20000 --image-offset 0x20000 --signature2 IMAGE --tag-version 8))
 # Pirelli A226G
diff --git a/target/linux/brcm63xx/profiles/netgear.mk b/target/linux/brcm63xx/profiles/netgear.mk
index 75ddab5..20224a2 100644
--- a/target/linux/brcm63xx/profiles/netgear.mk
+++ b/target/linux/brcm63xx/profiles/netgear.mk
@@ -12,7 +12,6 @@  endef
 define Profile/CVG834G/Description
   Package set optimized for CVG834G.
 endef
-
 $(eval $(call Profile,CVG834G))
 
 define Profile/DG834GTPN
@@ -23,3 +22,13 @@  define Profile/DG834GTPN/Description
   Package set optimized for DG834GT/PN.
 endef
 $(eval $(call Profile,DG834GTPN))
+
+define Profile/DGND3700v1_3800B
+  NAME:=Netgear DGND3700 v1 / DGND3800B
+  PACKAGES:=kmod-b43 wpad-mini \
+	kmod-usb2 kmod-usb-ohci kmod-ledtrig-usbdev
+endef
+define Profile/DGND3700v1_3800B/Description
+  Package set optimized for DGND3700 v1 / DGND3800B.
+endef
+$(eval $(call Profile,DGND3700v1_3800B))
diff --git a/target/linux/brcm63xx/dts/dgnd3700v1.dts b/target/linux/brcm63xx/dts/dgnd3700v1.dts
new file mode 100644
index 0000000..65fae44
--- /dev/null
+++ b/target/linux/brcm63xx/dts/dgnd3700v1.dts
@@ -0,0 +1,110 @@ 
+/dts-v1/;
+
+/include/ "bcm6368.dtsi"
+
+/ {
+	model = "Netgear DGND3700v1/DGND3800B";
+	compatible = "netgear,dgnd3700v1", "brcm,bcm6368";
+
+	gpio-keys-polled {
+		compatible = "gpio-keys-polled";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		poll-interval = <20>;
+		debounce-interval = <60>;
+
+		wlan {
+			label = "wlan";
+			gpios = <&gpio0 10 1>;
+			linux,code = <0xee>;
+		};
+		reset {
+			label = "reset";
+			gpios = <&gpio0 12 1>;
+			linux,code = <0x198>;
+		};
+		wps {
+			label = "wps";
+			gpios = <&gpio1 3 1>;
+			linux,code = <0x211>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+
+		dsl_green {
+			label = "DGND3700v1_3800B:green:dsl";
+			gpios = <&gpio0 2 1>;
+		};
+		inet_red {
+			label = "DGND3700v1_3800B:red:inet";
+			gpios = <&gpio0 4 1>;
+		};
+		inet_green {
+			label = "DGND3700v1_3800B:green:inet";
+			gpios = <&gpio0 5 1>;
+		};
+		wps_green {
+			label = "DGND3700v1_3800B:green:wps";
+			gpios = <&gpio0 11 1>;
+		};
+		usbfront_green {
+			label = "DGND3700v1_3800B:green:usb-front";
+			gpios = <&gpio0 13 1>;
+		};
+		usbback_green {
+			label = "DGND3700v1_3800B:green:usb-back";
+			gpios = <&gpio0 14 1>;
+		};
+		power_red {
+			label = "DGND3700v1_3800B:red:power";
+			gpios = <&gpio0 22 1>;
+		};
+		lan_green {
+			label = "DGND3700v1_3800B:green:lan";
+			gpios = <&gpio0 23 1>;
+		};
+		power_green {
+			label = "DGND3700v1_3800B:green:power";
+			gpios = <&gpio0 24 1>;
+			default-state = "on";
+		};
+		wifi2g_green {
+			label = "DGND3700v1_3800B:green:wifi2g";
+			gpios = <&gpio0 26 1>;
+		};
+		wifi5g_blue {
+			label = "DGND3700v1_3800B:blue:wifi5g";
+			gpios = <&gpio0 27 1>;
+		};
+	};
+};
+
+&pflash {
+	status = "ok";
+
+	linux,part-probe = "bcm63xxpart";
+
+	cfe@0 {
+		label = "CFE";
+		reg = <0x000000 0x020000>;
+		read-only;
+	};
+
+	linux@20000 {
+		label = "linux";
+		reg = <0x020000 0x1e20000>;
+	};
+
+	board_data@1e40000 {
+		label = "board_data";
+		reg = <0x1e40000 0x1a0000>;
+		read-only;
+	};
+	
+	nvram@1fe0000 {
+		label = "nvram";
+		reg = <0x1fe0000 0x20000>;
+	};
+};
diff --git a/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch b/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch
new file mode 100644
index 0000000..b4013bb
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.14/568-board_DGND3700v1_3800B.patch
@@ -0,0 +1,67 @@ 
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -2132,6 +2132,48 @@
+ 	.has_ehci0 = 1,
+ };
+ 
++static struct b53_platform_data DGND3700v1_3800B_b53_pdata = {
++	.alias    = "eth0",
++};
++
++static struct spi_board_info DGND3700v1_3800B_spi_devices[] = {
++	{
++		.modalias = "b53-switch",
++		.max_speed_hz = 781000,
++		.bus_num = 0,
++		.chip_select = 1,
++		.platform_data = &DGND3700v1_3800B_b53_pdata,
++	}
++};
++
++static struct board_info __initdata board_DGND3700v1_3800B = {
++	.name				= "DGND3700v1_3800B",
++	.expected_cpu_id		= 0x6368,
++
++	.has_uart0			= 1,
++	.has_pci			= 1,
++	.has_ohci0			= 1,
++	.has_ehci0			= 1,
++	.num_usbh_ports			= 2,
++
++	.has_enetsw			= 1,
++	.enetsw = {
++		.used_ports = {
++			[5] = {
++				.used  = 1,
++				.phy_id  = 0xff,
++				.bypass_link = 1,
++				.force_speed = 1000,
++				.force_duplex_full = 1,
++				.name  = "RGMII",
++			},
++		},
++	},
++
++	.spis = DGND3700v1_3800B_spi_devices,
++	.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
++};
++
+ static struct sprom_fixup __initdata vr3025u_fixups[] = {
+ 	{ .offset = 97, .value = 0xfeb3 },
+ 	{ .offset = 98, .value = 0x1618 },
+@@ -2723,6 +2765,7 @@
+ #ifdef CONFIG_BCM63XX_CPU_6368
+ 	&board_96368mvwg,
+ 	&board_96368mvngr,
++	&board_DGND3700v1_3800B,
+ 	&board_P870HW51A_V2,
+ 	&board_VR3025u,
+ 	&board_VR3025un,
+@@ -2813,6 +2856,7 @@
+ 	{ .compatible = "comtrend,vr-3025u", .data = &board_VR3025u, },
+ 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
+ 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
++	{ .compatible = "netgear,dgnd3700v1", .data = &board_DGND3700v1_3800B, },
+ 	{ .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, },
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_63268
diff --git a/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch b/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch
new file mode 100644
index 0000000..b4013bb
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.18/568-board_DGND3700v1_3800B.patch
@@ -0,0 +1,67 @@ 
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -2132,6 +2132,48 @@
+ 	.has_ehci0 = 1,
+ };
+ 
++static struct b53_platform_data DGND3700v1_3800B_b53_pdata = {
++	.alias    = "eth0",
++};
++
++static struct spi_board_info DGND3700v1_3800B_spi_devices[] = {
++	{
++		.modalias = "b53-switch",
++		.max_speed_hz = 781000,
++		.bus_num = 0,
++		.chip_select = 1,
++		.platform_data = &DGND3700v1_3800B_b53_pdata,
++	}
++};
++
++static struct board_info __initdata board_DGND3700v1_3800B = {
++	.name				= "DGND3700v1_3800B",
++	.expected_cpu_id		= 0x6368,
++
++	.has_uart0			= 1,
++	.has_pci			= 1,
++	.has_ohci0			= 1,
++	.has_ehci0			= 1,
++	.num_usbh_ports			= 2,
++
++	.has_enetsw			= 1,
++	.enetsw = {
++		.used_ports = {
++			[5] = {
++				.used  = 1,
++				.phy_id  = 0xff,
++				.bypass_link = 1,
++				.force_speed = 1000,
++				.force_duplex_full = 1,
++				.name  = "RGMII",
++			},
++		},
++	},
++
++	.spis = DGND3700v1_3800B_spi_devices,
++	.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
++};
++
+ static struct sprom_fixup __initdata vr3025u_fixups[] = {
+ 	{ .offset = 97, .value = 0xfeb3 },
+ 	{ .offset = 98, .value = 0x1618 },
+@@ -2723,6 +2765,7 @@
+ #ifdef CONFIG_BCM63XX_CPU_6368
+ 	&board_96368mvwg,
+ 	&board_96368mvngr,
++	&board_DGND3700v1_3800B,
+ 	&board_P870HW51A_V2,
+ 	&board_VR3025u,
+ 	&board_VR3025un,
+@@ -2813,6 +2856,7 @@
+ 	{ .compatible = "comtrend,vr-3025u", .data = &board_VR3025u, },
+ 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
+ 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
++	{ .compatible = "netgear,dgnd3700v1", .data = &board_DGND3700v1_3800B, },
+ 	{ .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, },
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_63268