diff mbox series

[OpenWrt-Devel,v2] ath79: add support for Netgear WNR2200

Message ID 20191030100727.45e6a165@kosmio.komorska
State Accepted
Delegated to: John Crispin
Headers show
Series [OpenWrt-Devel,v2] ath79: add support for Netgear WNR2200 | expand

Commit Message

Michal Cieslakiewicz Oct. 30, 2019, 9:07 a.m. UTC
This patch adds ath79 support for Netgear WNR2200.
Router was previously supported by ar71xx target only (8 MiB variant).
Netgear WNR2200 has two flash versions - 8MiB sold in EU, US etc. and
16 MiB for Russia and China markets. Apart from flash size both variants
share the same hardware specification.

Specification
=============
  * Description: Netgear WNR2200
  * Loader: U-boot
  * SOC: Atheros AR7241 (360 MHz)
  * RAM: 64 MiB
  * Flash: 8 MiB or 16 MiB (SPI NOR)
	- U-boot binary: 256 KiB
	- U-boot environment: 64 KiB
	- Firmware: 7808 KiB or 16000 KiB
	- ART: 64 KiB
  * Ethernet: 4 x 10/100 LAN + 1 x 10/100 WAN
  * Wireless: 2.4 GHz b/g/n (Atheros AR9287)
  * USB: yes, 1 x USB 2.0
  * Buttons:
	- Reset
	- WiFi (rfkill)
	- WPS
  * LEDs:
	- Power (amber/green)
	- WAN (amber/green)
	- WLAN (blue)
	- 4 x LAN (amber/green)
	- WPS (green)
  * UART: 4-pin connector JP1, 3.3V (Vcc, TX, RX, GND), 115200 8N1
  * Power supply: DC 12V 1.5A
  * MAC addresses: LAN on case label, WAN +1, WLAN +2

Installation
============
  * TFTP recovery
  * TFTP via U-boot prompt
  * sysupgrade
  * Web interface

Test build configuration
========================
CONFIG_TARGET_ath79=y
CONFIG_TARGET_ath79_generic=y
CONFIG_TARGET_ath79_generic_DEVICE_netgear_wnr2200-8m=y
CONFIG_ALL_KMODS=y
CONFIG_DEVEL=y
CONFIG_CCACHE=y
CONFIG_COLLECT_KERNEL_DEBUG=y
CONFIG_IMAGEOPT=y
CONFIG_KERNEL_DEBUG_INFO=y
CONFIG_KERNEL_DEBUG_KERNEL=y

Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
---
 package/boot/uboot-envtools/files/ath79       |   2 +
 .../ath79/dts/ar7241_netgear_wnr2200-16m.dts  |  34 +++
 .../ath79/dts/ar7241_netgear_wnr2200-8m.dts   |  34 +++
 .../ath79/dts/ar7241_netgear_wnr2200.dtsi     | 207 ++++++++++++++++++
 .../generic/base-files/etc/board.d/01_leds    |  12 +
 .../generic/base-files/etc/board.d/02_network |   6 +
 .../etc/hotplug.d/firmware/10-ath9k-eeprom    |   2 +
 target/linux/ath79/image/generic.mk           |  34 +++
 8 files changed, 331 insertions(+)
 create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
 create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
 create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi

Comments

John Crispin Oct. 31, 2019, 12:48 p.m. UTC | #1
On 30/10/2019 10:07, Michal Cieslakiewicz wrote:
> This patch adds ath79 support for Netgear WNR2200.
> Router was previously supported by ar71xx target only (8 MiB variant).
> Netgear WNR2200 has two flash versions - 8MiB sold in EU, US etc. and
> 16 MiB for Russia and China markets. Apart from flash size both variants
> share the same hardware specification.
> 
> Specification
> =============
>    * Description: Netgear WNR2200
>    * Loader: U-boot
>    * SOC: Atheros AR7241 (360 MHz)
>    * RAM: 64 MiB
>    * Flash: 8 MiB or 16 MiB (SPI NOR)
> 	- U-boot binary: 256 KiB
> 	- U-boot environment: 64 KiB
> 	- Firmware: 7808 KiB or 16000 KiB
> 	- ART: 64 KiB
>    * Ethernet: 4 x 10/100 LAN + 1 x 10/100 WAN
>    * Wireless: 2.4 GHz b/g/n (Atheros AR9287)
>    * USB: yes, 1 x USB 2.0
>    * Buttons:
> 	- Reset
> 	- WiFi (rfkill)
> 	- WPS
>    * LEDs:
> 	- Power (amber/green)
> 	- WAN (amber/green)
> 	- WLAN (blue)
> 	- 4 x LAN (amber/green)
> 	- WPS (green)
>    * UART: 4-pin connector JP1, 3.3V (Vcc, TX, RX, GND), 115200 8N1
>    * Power supply: DC 12V 1.5A
>    * MAC addresses: LAN on case label, WAN +1, WLAN +2
> 
> Installation
> ============
>    * TFTP recovery
>    * TFTP via U-boot prompt
>    * sysupgrade
>    * Web interface
> 
> Test build configuration
> ========================
> CONFIG_TARGET_ath79=y
> CONFIG_TARGET_ath79_generic=y
> CONFIG_TARGET_ath79_generic_DEVICE_netgear_wnr2200-8m=y
> CONFIG_ALL_KMODS=y
> CONFIG_DEVEL=y
> CONFIG_CCACHE=y
> CONFIG_COLLECT_KERNEL_DEBUG=y
> CONFIG_IMAGEOPT=y
> CONFIG_KERNEL_DEBUG_INFO=y
> CONFIG_KERNEL_DEBUG_KERNEL=y
> 


Hi,
sorry for the foo, patch fails to apply, kindly rebase/resend it
	John




> Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
> ---
>   package/boot/uboot-envtools/files/ath79       |   2 +
>   .../ath79/dts/ar7241_netgear_wnr2200-16m.dts  |  34 +++
>   .../ath79/dts/ar7241_netgear_wnr2200-8m.dts   |  34 +++
>   .../ath79/dts/ar7241_netgear_wnr2200.dtsi     | 207 ++++++++++++++++++
>   .../generic/base-files/etc/board.d/01_leds    |  12 +
>   .../generic/base-files/etc/board.d/02_network |   6 +
>   .../etc/hotplug.d/firmware/10-ath9k-eeprom    |   2 +
>   target/linux/ath79/image/generic.mk           |  34 +++
>   8 files changed, 331 insertions(+)
>   create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
>   create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
>   create mode 100644 target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
> 
> diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79
> index d5b94823fd..cc9741cedf 100644
> --- a/package/boot/uboot-envtools/files/ath79
> +++ b/package/boot/uboot-envtools/files/ath79
> @@ -22,6 +22,8 @@ glinet,gl-ar300m-nor|\
>   librerouter,librerouter-v1|\
>   netgear,ex6400|\
>   netgear,ex7300|\
> +netgear,wnr2200-8m|\
> +netgear,wnr2200-16m|\
>   ocedo,koala|\
>   ocedo,raccoon|\
>   openmesh,om5p-ac-v2|\
> diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
> new file mode 100644
> index 0000000000..d182b58c05
> --- /dev/null
> +++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
> @@ -0,0 +1,34 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/dts-v1/;
> +
> +#include "ar7241_netgear_wnr2200.dtsi"
> +
> +/ {
> +	compatible = "netgear,wnr2200-16m", "qca,ar7241";
> +	model = "Netgear WNR2200 (16M)";
> +};
> +
> +&partitions {
> +	partition@0 {
> +		label = "u-boot";
> +		reg = <0x0 0x40000>;
> +		read-only;
> +	};
> +
> +	partition@40000 {
> +		label = "u-boot-env";
> +		reg = <0x40000 0x10000>;
> +	};
> +
> +	partition@50000 {
> +		label = "firmware";
> +		reg = <0x50000 0xfa0000>;
> +		compatible = "netgear,uimage";
> +	};
> +
> +	art: partition@ff0000 {
> +		label = "art";
> +		reg = <0xff0000 0x10000>;
> +		read-only;
> +	};
> +};
> diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
> new file mode 100644
> index 0000000000..e926c17893
> --- /dev/null
> +++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
> @@ -0,0 +1,34 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/dts-v1/;
> +
> +#include "ar7241_netgear_wnr2200.dtsi"
> +
> +/ {
> +	compatible = "netgear,wnr2200-8m", "qca,ar7241";
> +	model = "Netgear WNR2200 (8M)";
> +};
> +
> +&partitions {
> +	partition@0 {
> +		label = "u-boot";
> +		reg = <0x0 0x40000>;
> +		read-only;
> +	};
> +
> +	partition@40000 {
> +		label = "u-boot-env";
> +		reg = <0x40000 0x10000>;
> +	};
> +
> +	partition@50000 {
> +		label = "firmware";
> +		reg = <0x50000 0x7a0000>;
> +		compatible = "netgear,uimage";
> +	};
> +
> +	art: partition@7f0000 {
> +		label = "art";
> +		reg = <0x7f0000 0x10000>;
> +		read-only;
> +	};
> +};
> diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
> new file mode 100644
> index 0000000000..1ce4d11835
> --- /dev/null
> +++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
> @@ -0,0 +1,207 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +#include "ar7241.dtsi"
> +
> +/ {
> +	chosen {
> +		bootargs = "console=ttyS0,115200n8";
> +	};
> +
> +	aliases {
> +		led-boot = &power_amber;
> +		led-failsafe = &power_amber;
> +		led-running = &power_green;
> +		led-upgrade = &power_amber;
> +		label-mac-device = &eth1;
> +	};
> +
> +	ath9k-keys {
> +		compatible = "gpio-keys-polled";
> +		poll-interval = <20>;
> +
> +		wps {
> +			label = "wps";
> +			linux,code = <KEY_WPS_BUTTON>;
> +			gpios = <&ath9k 5 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <60>;
> +		};
> +
> +		reset {
> +			label = "reset";
> +			linux,code = <KEY_RESTART>;
> +			gpios = <&ath9k 6 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <60>;
> +		};
> +
> +		rfkill {
> +			label = "rfkill";
> +			linux,code = <KEY_RFKILL>;
> +			gpios = <&ath9k 3 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <60>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&jtag_disable_pins &switch_led_disable_pins &clks_disable_pins>;
> +
> +		wan_green {
> +			label = "netgear:green:wan";
> +			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wan_amber {
> +			label = "netgear:amber:wan";
> +			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan1_green {
> +			label = "netgear:green:lan1";
> +			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan1_amber {
> +			label = "netgear:amber:lan1";
> +			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan2_green {
> +			label = "netgear:green:lan2";
> +			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan2_amber {
> +			label = "netgear:amber:lan2";
> +			gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan3_green {
> +			label = "netgear:green:lan3";
> +			gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan3_amber {
> +			label = "netgear:amber:lan3";
> +			gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan4_green {
> +			label = "netgear:green:lan4";
> +			gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan4_amber {
> +			label = "netgear:amber:lan4";
> +			gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wps_green {
> +			label = "netgear:green:wps";
> +			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		usb_green {
> +			label = "netgear:green:usb";
> +			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
> +			trigger-sources = <&hub_port>;
> +			linux,default-trigger = "usbport";
> +		};
> +	};
> +
> +	ath9k-leds {
> +		compatible = "gpio-leds";
> +
> +		power_green: power_green {
> +			label = "netgear:green:power";
> +			gpios = <&ath9k 2 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		power_amber: power_amber {
> +			label = "netgear:amber:power";
> +			gpios = <&ath9k 1 GPIO_ACTIVE_LOW>;
> +			default-state = "keep";
> +		};
> +
> +		wlan_blue {
> +			label = "netgear:blue:wlan";
> +			gpios = <&ath9k 0 GPIO_ACTIVE_LOW>;
> +			linux,default-trigger = "phy0tpt";
> +		};
> +	};
> +};
> +
> +&spi {
> +	status = "okay";
> +	num-cs = <1>;
> +
> +	flash@0 {
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <25000000>;
> +
> +		partitions: partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +		};
> +	};
> +};
> +
> +&eth0 {
> +	status = "okay";
> +
> +	mtd-mac-address = <&art 0x0>;
> +};
> +
> +&eth1 {
> +	status = "okay";
> +
> +	compatible = "qca,ar7241-eth", "syscon", "simple-mfd";
> +	mtd-mac-address = <&art 0x6>;
> +};
> +
> +&pcie {
> +	status = "okay";
> +
> +	ath9k: wifi@0,0 {
> +		compatible = "pci168c,002e";
> +		reg = <0x0000 0 0 0 0>;
> +		mtd-mac-address = <&art 0x0>;
> +		mtd-mac-address-increment = <1>;
> +		qca,no-eeprom;
> +		#gpio-cells = <2>;
> +		gpio-controller;
> +
> +		usb_power {
> +			gpio-hog;
> +			line-name = "netgear:power:usb";
> +			gpios = <4 GPIO_ACTIVE_HIGH>;
> +			output-high;
> +		};
> +	};
> +};
> +
> +&uart {
> +	status = "okay";
> +};
> +
> +&usb_phy {
> +	status = "okay";
> +};
> +
> +&usb {
> +	#address-cells = <1>;
> +	#size-cells = <0>;
> +	status = "okay";
> +
> +	hub_port: port@1 {
> +		reg = <1>;
> +		#trigger-source-cells = <0>;
> +	};
> +};
> diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> index e3575ff041..441091de32 100755
> --- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> +++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> @@ -103,6 +103,18 @@ glinet,gl-ar300m-lite)
>   glinet,gl-x750)
>   	ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
>   	;;
> +netgear,wnr2200-8m|\
> +netgear,wnr2200-16m)
> +	ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0"
> +	ucidef_set_led_switch "lan1green" "LAN1 (green)" "netgear:green:lan1" "switch0" "0x02" "0x04"
> +	ucidef_set_led_switch "lan2green" "LAN2 (green)" "netgear:green:lan2" "switch0" "0x04" "0x04"
> +	ucidef_set_led_switch "lan3green" "LAN3 (green)" "netgear:green:lan3" "switch0" "0x08" "0x04"
> +	ucidef_set_led_switch "lan4green" "LAN4 (green)" "netgear:green:lan4" "switch0" "0x10" "0x04"
> +	ucidef_set_led_switch "lan1amber" "LAN1 (amber)" "netgear:amber:lan1" "switch0" "0x02" "0x02"
> +	ucidef_set_led_switch "lan2amber" "LAN2 (amber)" "netgear:amber:lan2" "switch0" "0x04" "0x02"
> +	ucidef_set_led_switch "lan3amber" "LAN3 (amber)" "netgear:amber:lan3" "switch0" "0x08" "0x02"
> +	ucidef_set_led_switch "lan4amber" "LAN4 (amber)" "netgear:amber:lan4" "switch0" "0x10" "0x02"
> +	;;
>   pcs,cap324)
>   	ucidef_set_led_netdev "lan" "LAN" "pcs:lan:green" "eth0"
>   	;;
> diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
> index 90f622b262..0cf411041d 100755
> --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
> +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
> @@ -184,6 +184,12 @@ ath79_setup_interfaces()
>   		ucidef_add_switch_port_attr "switch0" 2 led 9
>   		ucidef_add_switch_port_attr "switch0" 5 led 2
>   		;;
> +	netgear,wnr2200-8m|\
> +	netgear,wnr2200-16m)
> +		ucidef_set_interface_wan "eth0"
> +		ucidef_add_switch "switch0" \
> +			"0@eth1" "1:lan" "2:lan" "3:lan" "4:lan"
> +		;;
>   	phicomm,k2t)
>   		ucidef_add_switch "switch0" \
>   			"0@eth0" "3:lan:1" "5:lan:2" "4:wan"
> diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> index 4b07660f02..6a6484879a 100644
> --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> @@ -76,6 +76,8 @@ case "$FIRMWARE" in
>   	winchannel,wb2000)
>   		caldata_extract "art" 0x5000 0x440
>   		;;
> +	netgear,wnr2200-8m|\
> +	netgear,wnr2200-16m|\
>   	pcs,cap324|\
>   	tplink,tl-wr2543-v1|\
>   	tplink,tl-wr842n-v1|\
> diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
> index cea903f253..70631c20d0 100644
> --- a/target/linux/ath79/image/generic.mk
> +++ b/target/linux/ath79/image/generic.mk
> @@ -794,6 +794,40 @@ define Device/netgear_wndr3800ch
>   endef
>   TARGET_DEVICES += netgear_wndr3800ch
>   
> +define Device/netgear_wnr2200_common
> +  ATH_SOC := ar7241
> +  DEVICE_MODEL := WNR2200
> +  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport
> +  NETGEAR_KERNEL_MAGIC := 0x32323030
> +  NETGEAR_BOARD_ID := wnr2200
> +  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | netgear-squashfs | \
> +	append-rootfs | pad-rootfs
> +  $(Device/netgear_ath79)
> +endef
> +
> +define Device/netgear_wnr2200-8m
> +  $(Device/netgear_wnr2200_common)
> +  DEVICE_VARIANT := 8M
> +  NETGEAR_HW_ID := 29763600+08+64
> +  IMAGE_SIZE := 7808k
> +  IMAGES += factory-NA.img
> +  IMAGE/factory-NA.img := $$(IMAGE/default) | netgear-dni NA | \
> +	check-size $$$$(IMAGE_SIZE)
> +  SUPPORTED_DEVICES += wnr2200
> +endef
> +TARGET_DEVICES += netgear_wnr2200-8m
> +
> +define Device/netgear_wnr2200-16m
> +  $(Device/netgear_wnr2200_common)
> +  DEVICE_VARIANT := 16M
> +  DEVICE_ALT0_VENDOR := NETGEAR
> +  DEVICE_ALT0_MODEL := WNR2200
> +  DEVICE_ALT0_VARIANT := CN/RU
> +  NETGEAR_HW_ID :=
> +  IMAGE_SIZE := 16000k
> +endef
> +TARGET_DEVICES += netgear_wnr2200-16m
> +
>   define Device/ocedo_koala
>     ATH_SOC := qca9558
>     DEVICE_VENDOR := Ocedo
>
Michal Cieslakiewicz Oct. 31, 2019, 2:06 p.m. UTC | #2
> 
> Hi,
> sorry for the foo, patch fails to apply, kindly rebase/resend it
> 	John
> 

Hello John,

That's strange... Anyway, I rebased it again for master (fresh commit
df60a0852caf21de6684d38107f32a4eebc4579b) but it produces exactly the
same patch as v2. Tested and applied without problems on clean clone as
well...

Regards
Michal
diff mbox series

Patch

diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79
index d5b94823fd..cc9741cedf 100644
--- a/package/boot/uboot-envtools/files/ath79
+++ b/package/boot/uboot-envtools/files/ath79
@@ -22,6 +22,8 @@  glinet,gl-ar300m-nor|\
 librerouter,librerouter-v1|\
 netgear,ex6400|\
 netgear,ex7300|\
+netgear,wnr2200-8m|\
+netgear,wnr2200-16m|\
 ocedo,koala|\
 ocedo,raccoon|\
 openmesh,om5p-ac-v2|\
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
new file mode 100644
index 0000000000..d182b58c05
--- /dev/null
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
@@ -0,0 +1,34 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "ar7241_netgear_wnr2200.dtsi"
+
+/ {
+	compatible = "netgear,wnr2200-16m", "qca,ar7241";
+	model = "Netgear WNR2200 (16M)";
+};
+
+&partitions {
+	partition@0 {
+		label = "u-boot";
+		reg = <0x0 0x40000>;
+		read-only;
+	};
+
+	partition@40000 {
+		label = "u-boot-env";
+		reg = <0x40000 0x10000>;
+	};
+
+	partition@50000 {
+		label = "firmware";
+		reg = <0x50000 0xfa0000>;
+		compatible = "netgear,uimage";
+	};
+
+	art: partition@ff0000 {
+		label = "art";
+		reg = <0xff0000 0x10000>;
+		read-only;
+	};
+};
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
new file mode 100644
index 0000000000..e926c17893
--- /dev/null
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
@@ -0,0 +1,34 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "ar7241_netgear_wnr2200.dtsi"
+
+/ {
+	compatible = "netgear,wnr2200-8m", "qca,ar7241";
+	model = "Netgear WNR2200 (8M)";
+};
+
+&partitions {
+	partition@0 {
+		label = "u-boot";
+		reg = <0x0 0x40000>;
+		read-only;
+	};
+
+	partition@40000 {
+		label = "u-boot-env";
+		reg = <0x40000 0x10000>;
+	};
+
+	partition@50000 {
+		label = "firmware";
+		reg = <0x50000 0x7a0000>;
+		compatible = "netgear,uimage";
+	};
+
+	art: partition@7f0000 {
+		label = "art";
+		reg = <0x7f0000 0x10000>;
+		read-only;
+	};
+};
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
new file mode 100644
index 0000000000..1ce4d11835
--- /dev/null
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
@@ -0,0 +1,207 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "ar7241.dtsi"
+
+/ {
+	chosen {
+		bootargs = "console=ttyS0,115200n8";
+	};
+
+	aliases {
+		led-boot = &power_amber;
+		led-failsafe = &power_amber;
+		led-running = &power_green;
+		led-upgrade = &power_amber;
+		label-mac-device = &eth1;
+	};
+
+	ath9k-keys {
+		compatible = "gpio-keys-polled";
+		poll-interval = <20>;
+
+		wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&ath9k 5 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&ath9k 6 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+
+		rfkill {
+			label = "rfkill";
+			linux,code = <KEY_RFKILL>;
+			gpios = <&ath9k 3 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&jtag_disable_pins &switch_led_disable_pins &clks_disable_pins>;
+
+		wan_green {
+			label = "netgear:green:wan";
+			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+		};
+
+		wan_amber {
+			label = "netgear:amber:wan";
+			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+		};
+
+		lan1_green {
+			label = "netgear:green:lan1";
+			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+		};
+
+		lan1_amber {
+			label = "netgear:amber:lan1";
+			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+		};
+
+		lan2_green {
+			label = "netgear:green:lan2";
+			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+		};
+
+		lan2_amber {
+			label = "netgear:amber:lan2";
+			gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+		};
+
+		lan3_green {
+			label = "netgear:green:lan3";
+			gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+		};
+
+		lan3_amber {
+			label = "netgear:amber:lan3";
+			gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+		};
+
+		lan4_green {
+			label = "netgear:green:lan4";
+			gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+		};
+
+		lan4_amber {
+			label = "netgear:amber:lan4";
+			gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+		};
+
+		wps_green {
+			label = "netgear:green:wps";
+			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+		};
+
+		usb_green {
+			label = "netgear:green:usb";
+			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+			trigger-sources = <&hub_port>;
+			linux,default-trigger = "usbport";
+		};
+	};
+
+	ath9k-leds {
+		compatible = "gpio-leds";
+
+		power_green: power_green {
+			label = "netgear:green:power";
+			gpios = <&ath9k 2 GPIO_ACTIVE_LOW>;
+		};
+
+		power_amber: power_amber {
+			label = "netgear:amber:power";
+			gpios = <&ath9k 1 GPIO_ACTIVE_LOW>;
+			default-state = "keep";
+		};
+
+		wlan_blue {
+			label = "netgear:blue:wlan";
+			gpios = <&ath9k 0 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "phy0tpt";
+		};
+	};
+};
+
+&spi {
+	status = "okay";
+	num-cs = <1>;
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <25000000>;
+
+		partitions: partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+		};
+	};
+};
+
+&eth0 {
+	status = "okay";
+
+	mtd-mac-address = <&art 0x0>;
+};
+
+&eth1 {
+	status = "okay";
+
+	compatible = "qca,ar7241-eth", "syscon", "simple-mfd";
+	mtd-mac-address = <&art 0x6>;
+};
+
+&pcie {
+	status = "okay";
+
+	ath9k: wifi@0,0 {
+		compatible = "pci168c,002e";
+		reg = <0x0000 0 0 0 0>;
+		mtd-mac-address = <&art 0x0>;
+		mtd-mac-address-increment = <1>;
+		qca,no-eeprom;
+		#gpio-cells = <2>;
+		gpio-controller;
+
+		usb_power {
+			gpio-hog;
+			line-name = "netgear:power:usb";
+			gpios = <4 GPIO_ACTIVE_HIGH>;
+			output-high;
+		};
+	};
+};
+
+&uart {
+	status = "okay";
+};
+
+&usb_phy {
+	status = "okay";
+};
+
+&usb {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+
+	hub_port: port@1 {
+		reg = <1>;
+		#trigger-source-cells = <0>;
+	};
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
index e3575ff041..441091de32 100755
--- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
+++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
@@ -103,6 +103,18 @@  glinet,gl-ar300m-lite)
 glinet,gl-x750)
 	ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
 	;;
+netgear,wnr2200-8m|\
+netgear,wnr2200-16m)
+	ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0"
+	ucidef_set_led_switch "lan1green" "LAN1 (green)" "netgear:green:lan1" "switch0" "0x02" "0x04"
+	ucidef_set_led_switch "lan2green" "LAN2 (green)" "netgear:green:lan2" "switch0" "0x04" "0x04"
+	ucidef_set_led_switch "lan3green" "LAN3 (green)" "netgear:green:lan3" "switch0" "0x08" "0x04"
+	ucidef_set_led_switch "lan4green" "LAN4 (green)" "netgear:green:lan4" "switch0" "0x10" "0x04"
+	ucidef_set_led_switch "lan1amber" "LAN1 (amber)" "netgear:amber:lan1" "switch0" "0x02" "0x02"
+	ucidef_set_led_switch "lan2amber" "LAN2 (amber)" "netgear:amber:lan2" "switch0" "0x04" "0x02"
+	ucidef_set_led_switch "lan3amber" "LAN3 (amber)" "netgear:amber:lan3" "switch0" "0x08" "0x02"
+	ucidef_set_led_switch "lan4amber" "LAN4 (amber)" "netgear:amber:lan4" "switch0" "0x10" "0x02"
+	;;
 pcs,cap324)
 	ucidef_set_led_netdev "lan" "LAN" "pcs:lan:green" "eth0"
 	;;
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
index 90f622b262..0cf411041d 100755
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -184,6 +184,12 @@  ath79_setup_interfaces()
 		ucidef_add_switch_port_attr "switch0" 2 led 9
 		ucidef_add_switch_port_attr "switch0" 5 led 2
 		;;
+	netgear,wnr2200-8m|\
+	netgear,wnr2200-16m)
+		ucidef_set_interface_wan "eth0"
+		ucidef_add_switch "switch0" \
+			"0@eth1" "1:lan" "2:lan" "3:lan" "4:lan"
+		;;
 	phicomm,k2t)
 		ucidef_add_switch "switch0" \
 			"0@eth0" "3:lan:1" "5:lan:2" "4:wan"
diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
index 4b07660f02..6a6484879a 100644
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -76,6 +76,8 @@  case "$FIRMWARE" in
 	winchannel,wb2000)
 		caldata_extract "art" 0x5000 0x440
 		;;
+	netgear,wnr2200-8m|\
+	netgear,wnr2200-16m|\
 	pcs,cap324|\
 	tplink,tl-wr2543-v1|\
 	tplink,tl-wr842n-v1|\
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index cea903f253..70631c20d0 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -794,6 +794,40 @@  define Device/netgear_wndr3800ch
 endef
 TARGET_DEVICES += netgear_wndr3800ch
 
+define Device/netgear_wnr2200_common
+  ATH_SOC := ar7241
+  DEVICE_MODEL := WNR2200
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport
+  NETGEAR_KERNEL_MAGIC := 0x32323030
+  NETGEAR_BOARD_ID := wnr2200
+  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | netgear-squashfs | \
+	append-rootfs | pad-rootfs
+  $(Device/netgear_ath79)
+endef
+
+define Device/netgear_wnr2200-8m
+  $(Device/netgear_wnr2200_common)
+  DEVICE_VARIANT := 8M
+  NETGEAR_HW_ID := 29763600+08+64
+  IMAGE_SIZE := 7808k
+  IMAGES += factory-NA.img
+  IMAGE/factory-NA.img := $$(IMAGE/default) | netgear-dni NA | \
+	check-size $$$$(IMAGE_SIZE)
+  SUPPORTED_DEVICES += wnr2200
+endef
+TARGET_DEVICES += netgear_wnr2200-8m
+
+define Device/netgear_wnr2200-16m
+  $(Device/netgear_wnr2200_common)
+  DEVICE_VARIANT := 16M
+  DEVICE_ALT0_VENDOR := NETGEAR
+  DEVICE_ALT0_MODEL := WNR2200
+  DEVICE_ALT0_VARIANT := CN/RU
+  NETGEAR_HW_ID :=
+  IMAGE_SIZE := 16000k
+endef
+TARGET_DEVICES += netgear_wnr2200-16m
+
 define Device/ocedo_koala
   ATH_SOC := qca9558
   DEVICE_VENDOR := Ocedo