commit 11de56d57c22e818bdbf030b0fb78654e265b4a7
Author: Johnn <pljohnny1991@users.sourceforge.net>
Date:   Tue Oct 13 06:16:35 2020 +0000

    TD-W8970 16M mod

diff --git a/target/linux/lantiq/dts/TDW8970-16M.dts b/target/linux/lantiq/dts/TDW8970-16M.dts
new file mode 100644
index 0000000000..9c5114efdb
--- /dev/null
+++ b/target/linux/lantiq/dts/TDW8970-16M.dts
@@ -0,0 +1,276 @@
+/dts-v1/;
+
+#include "vr9.dtsi"
+
+#include <dt-bindings/input/input.h>
+
+/ {
+	model = "TDW8970 - TP-LINK TD-W8970";
+
+	chosen {
+		bootargs = "console=ttyLTQ0,115200";
+	};
+
+	aliases {
+		/* the power led can't be controlled, use the wps led instead */
+		led-boot = &wps;
+		led-failsafe = &wps;
+
+		led-dsl = &dsl;
+		led-internet = &internet;
+		led-wifi = &wifi;
+		led-usb = &usb0;
+		led-usb2 = &usb2;
+	};
+
+	memory@0 {
+		reg = <0x0 0x4000000>;
+	};
+
+	fpi@10000000 {
+		gpio: pinmux@E100B10 {
+			pinctrl-names = "default";
+			pinctrl-0 = <&state_default>;
+
+			state_default: pinmux {
+				mdio {
+					lantiq,groups = "mdio";
+					lantiq,function = "mdio";
+				};
+				gphy-leds {
+					lantiq,groups = "gphy0 led1", "gphy1 led1";
+					lantiq,function = "gphy";
+					lantiq,pull = <2>;
+					lantiq,open-drain = <0>;
+					lantiq,output = <1>;
+				};
+				phy-rst {
+					lantiq,pins = "io42";
+					lantiq,pull = <0>;
+					lantiq,open-drain = <0>;
+					lantiq,output = <1>;
+				};
+				pcie-rst {
+					lantiq,pins = "io38";
+					lantiq,pull = <0>;
+					lantiq,output = <1>;
+				};
+			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
+					lantiq,function = "spi";
+				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs4";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
+			};
+		};
+
+		ifxhcd@E101000 {
+			status = "okay";
+			gpios = <&gpio 33 GPIO_ACTIVE_HIGH>;
+			lantiq,portmask = <0x3>;
+		};
+
+		ifxhcd@E106000 {
+			status = "okay";
+			gpios = <&gpio 33 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	gphy-xrx200 {
+		compatible = "lantiq,phy-xrx200";
+		firmware = "lantiq/vr9_phy11g_a2x.bin";
+		phys = [ 00 01 ];
+	};
+
+	gpio-keys-polled {
+		compatible = "gpio-keys-polled";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		poll-interval = <100>;
+		reset {
+			label = "reset";
+			gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		wifi {
+			label = "wifi";
+			gpios = <&gpio 9 GPIO_ACTIVE_HIGH>;
+			linux,code = <KEY_RFKILL>;
+			linux,input-type = <EV_SW>;
+		};
+
+		wps {
+			label = "wps";
+			gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+		/*
+			power is not controllable via gpio
+		*/
+		dsl: dsl {
+			label = "tdw89x0:green:dsl";
+			gpios = <&gpio 4 GPIO_ACTIVE_HIGH>;
+		};
+		internet: internet {
+			label = "tdw89x0:green:internet";
+			gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
+		};
+		usb0: usb0 {
+			label = "tdw89x0:green:usb";
+			gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
+		};
+		usb2: usb2 {
+			label = "tdw89x0:green:usb2";
+			gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
+		};
+		wps: wps {
+			label = "tdw89x0:green:wps";
+			gpios = <&gpio 37 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	wifi-leds {
+		compatible = "gpio-leds";
+
+		wifi: wifi {
+			label = "tdw89x0:green:wifi";
+			gpios = <&ath9k 0 GPIO_ACTIVE_HIGH>;
+		};
+	};
+};
+
+&spi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pins_spi_default>;
+
+	status = "ok";
+
+	m25p80@4 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "jedec,spi-nor";
+		reg = <4 0>;
+		spi-max-frequency = <33250000>;
+		m25p,fast-read;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				reg = <0x0 0x20000>;
+				label = "u-boot";
+				read-only;
+			};
+
+			partition@20000 {
+				reg = <0x20000 0xfae000>;
+				label = "firmware";
+			};
+
+			partition@0xfce000 {
+				reg = <0xfce000 0x2000>;
+				label = "uboot-env";
+				read-only;
+			};
+
+			ath9k_cal: partition@0xfd0000 {
+				reg = <0xfd0000 0x30000>;
+				label = "boardconfig";
+				read-only;
+			};
+		};
+	};
+};
+
+&eth0 {
+	lan: interface@0 {
+		compatible = "lantiq,xrx200-pdi";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		reg = <0>;
+		mtd-mac-address = <&ath9k_cal 0xf100>;
+		lantiq,switch;
+
+		ethernet@0 {
+			compatible = "lantiq,xrx200-pdi-port";
+			reg = <0>;
+			phy-mode = "rgmii";
+			phy-handle = <&phy0>;
+			// gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
+		};
+		ethernet@5 {
+			compatible = "lantiq,xrx200-pdi-port";
+			reg = <5>;
+			phy-mode = "rgmii";
+			phy-handle = <&phy5>;
+		};
+		ethernet@2 {
+			compatible = "lantiq,xrx200-pdi-port";
+			reg = <2>;
+			phy-mode = "gmii";
+			phy-handle = <&phy11>;
+		};
+		ethernet@3 {
+			compatible = "lantiq,xrx200-pdi-port";
+			reg = <4>;
+			phy-mode = "gmii";
+			phy-handle = <&phy13>;
+		};
+	};
+
+	mdio@0 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "lantiq,xrx200-mdio";
+		phy0: ethernet-phy@0 {
+			reg = <0x0>;
+			compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22";
+		};
+		phy5: ethernet-phy@5 {
+			reg = <0x5>;
+			compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22";
+		};
+		phy11: ethernet-phy@11 {
+			reg = <0x11>;
+			compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22";
+		};
+		phy13: ethernet-phy@13 {
+			reg = <0x13>;
+			compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22";
+		};
+	};
+};
+
+&pcie0 {
+	pcie@0 {
+		reg = <0 0 0 0 0>;
+		#interrupt-cells = <1>;
+		#size-cells = <2>;
+		#address-cells = <3>;
+		device_type = "pci";
+
+		ath9k: wifi@168c,002e {
+			compatible = "pci168c,002e";
+			reg = <0 0 0 0 0>;
+			#gpio-cells = <2>;
+			gpio-controller;
+			qca,no-eeprom;
+			qca,disable-5ghz;
+			mtd-mac-address = <&ath9k_cal 0xf100>;
+			mtd-mac-address-increment = <2>;
+		};
+	};
+};
diff --git a/target/linux/lantiq/image/tp-link.mk b/target/linux/lantiq/image/tp-link.mk
index 49c4bc10e1..78270c609a 100644
--- a/target/linux/lantiq/image/tp-link.mk
+++ b/target/linux/lantiq/image/tp-link.mk
@@ -36,6 +36,15 @@ define Device/TDW8980
   DEVICE_PACKAGES:= kmod-ath9k kmod-owl-loader wpad-mini kmod-usb-dwc2 kmod-usb-ledtrig-usbport
 endef
 
+define Device/TDW8970-16M
+  $(Device/lantiqTpLink)
+  DEVICE_PROFILE := TDW8970-16M
+  BOARD_ID := TD-W8970v1-16m
+  IMAGE_SIZE := 15808k
+  DEVICE_TITLE := TP-LINK TD-W8970-16M
+  DEVICE_PACKAGES:= kmod-ath9k kmod-owl-loader wpad-mini kmod-usb-dwc2 kmod-usb-ledtrig-usbport
+endef
+
 define Device/VR200v
   $(Device/lantiqTpLink)
   DEVICE_PROFILE := VR200v
@@ -44,5 +53,5 @@ define Device/VR200v
   DEVICE_TITLE := TP-LINK Archer VR200v
   DEVICE_PACKAGES:= kmod-usb-dwc2 kmod-usb-ledtrig-usbport
 endef
-TARGET_DEVICES += TDW8970 TDW8980 VR200v
+TARGET_DEVICES += TDW8970 TDW8980 TDW8970-16M VR200v
 
diff --git a/tools/firmware-utils/src/mktplinkfw2.c b/tools/firmware-utils/src/mktplinkfw2.c
index 3ab5c52ec2..1bbe4d4061 100644
--- a/tools/firmware-utils/src/mktplinkfw2.c
+++ b/tools/firmware-utils/src/mktplinkfw2.c
@@ -143,6 +143,12 @@ static struct flash_layout layouts[] = {
 		.kernel_la	= 0x80002000,
 		.kernel_ep	= 0x80002000,
 		.rootfs_ofs	= 0x140000,
+    }, {
+	.id		= "16Mltq-8Mflsh",
+	.fw_max_len	= 0xfae000,
+	.kernel_la	= 0x80002000,
+	.kernel_ep	= 0x80002000,
+	.rootfs_ofs	= 0x140000,
 	}, {
 		.id		= "16Mltq",
 		.fw_max_len	= 0xf90000,
@@ -177,6 +183,11 @@ static struct board_info boards[] = {
 		.hw_id		= 0x89800001,
 		.hw_rev		= 14,
 		.layout_id	= "8Mltq",
+    },{
+	.id		= "TD-W8970v1-16m",
+	.hw_id		= 0x89700001,
+	.hw_rev		= 16,
+	.layout_id	= "16Mltq-8Mflsh",
 	}, {
 		.id		= "ArcherC20i",
 		.hw_id		= 0xc2000001,
