diff --git a/target/linux/ramips/dts/mt7628an_netgear_r6020.dts b/target/linux/ramips/dts/mt7628an_netgear_r6020.dts
index 83a751c2f7..b0be381eca 100644
--- a/target/linux/ramips/dts/mt7628an_netgear_r6020.dts
+++ b/target/linux/ramips/dts/mt7628an_netgear_r6020.dts
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /dts-v1/;
 
-#include "mt7628an.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#include "mt7628an_netgear_r6xxx.dtsi"
 
 / {
 	compatible = "netgear,r6020", "mediatek,mt7628an-soc";
@@ -17,16 +14,6 @@
 		led-upgrade = &led_power;
 	};
 
-	keys {
-		compatible = "gpio-keys";
-
-		reset {
-			label = "reset";
-			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RESTART>;
-		};
-	};
-
 	leds {
 		compatible = "gpio-leds";
 
@@ -65,101 +52,47 @@
 
 &state_default {
 	gpio {
-		groups = "p0led_an", "p1led_an", "p2led_an",
-			       "p3led_an", "p4led_an", "wdt",
-			       "wled_an";
+		groups = "p0led_an", "p1led_an", "p2led_an", "p3led_an",
+		         "p4led_an", "wdt", "wled_an";
 		function = "gpio";
 	};
 };
 
-&spi0 {
-	status = "okay";
-
-	flash@0 {
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <86000000>;
-		m25p,fast-read;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				label = "u-boot";
-				reg = <0x0 0x40000>;
-				read-only;
-			};
-
-			factory: partition@40000 {
-				label = "factory";
-				reg = <0x40000 0x20000>;
-				read-only;
-			};
-
-			partition@60000 {
-				label = "nvram";
-				reg = <0x60000 0x30000>;
-				read-only;
-			};
-
-			partition@90000 {
-				compatible = "denx,uimage";
-				label = "firmware";
-				reg = <0x90000 0x6f0000>;
-			};
-
-			partition@780000 {
-				label = "ML";
-				reg = <0x780000 0x20000>;
-				read-only;
-			};
-
-			partition@7a0000 {
-				label = "ML1";
-				reg = <0x7a0000 0x20000>;
-				read-only;
-			};
-
-			partition@7c0000 {
-				label = "ML2";
-				reg = <0x7c0000 0x20000>;
-				read-only;
-			};
-
-			partition@7e0000 {
-				label = "POT";
-				reg = <0x7e0000 0x10000>;
-				read-only;
-			};
-
-			partition@7f0000 {
-				label = "reserved";
-				reg = <0x7f0000 0x10000>;
-				read-only;
-			};
-		};
+&partitions {
+	partition@90000 {
+		compatible = "denx,uimage";
+		label = "firmware";
+		reg = <0x90000 0x6f0000>;
 	};
-};
 
-&wmac {
-	status = "okay";
-};
+	partition@780000 {
+		label = "ML";
+		reg = <0x780000 0x20000>;
+		read-only;
+	};
 
-&ethernet {
-	mtd-mac-address = <&factory 0x4>;
-};
+	partition@7a0000 {
+		label = "ML1";
+		reg = <0x7a0000 0x20000>;
+		read-only;
+	};
 
-&pcie {
-	status = "okay";
-};
+	partition@7c0000 {
+		label = "ML2";
+		reg = <0x7c0000 0x20000>;
+		read-only;
+	};
+
+	partition@7e0000 {
+		label = "POT";
+		reg = <0x7e0000 0x10000>;
+		read-only;
+	};
 
-&pcie0 {
-	wifi@0,0 {
-		reg = <0x0000 0 0 0 0>;
-		mediatek,mtd-eeprom = <&factory 0x8000>;
-		ieee80211-freq-limit = <5000000 6000000>;
+	partition@7f0000 {
+		label = "reserved";
+		reg = <0x7f0000 0x10000>;
+		read-only;
 	};
 };
 
diff --git a/target/linux/ramips/dts/mt7628an_netgear_r6080.dts b/target/linux/ramips/dts/mt7628an_netgear_r6080.dts
index 5bca023c71..b56bab8b41 100644
--- a/target/linux/ramips/dts/mt7628an_netgear_r6080.dts
+++ b/target/linux/ramips/dts/mt7628an_netgear_r6080.dts
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /dts-v1/;
 
-#include "mt7628an.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#include "mt7628an_netgear_r6xxx.dtsi"
 
 / {
 	compatible = "netgear,r6080", "mediatek,mt7628an-soc";
@@ -18,16 +15,6 @@
 		label-mac-device = &ethernet;
 	};
 
-	keys {
-		compatible = "gpio-keys";
-
-		reset {
-			label = "reset";
-			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RESTART>;
-		};
-	};
-
 	leds {
 		compatible = "gpio-leds";
 
@@ -72,70 +59,17 @@
 	};
 };
 
-&spi0 {
-	status = "okay";
-
-	flash@0 {
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <86000000>;
-		m25p,fast-read;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				label = "u-boot";
-				reg = <0x0 0x40000>;
-				read-only;
-			};
-
-			factory: partition@40000 {
-				label = "factory";
-				reg = <0x40000 0x20000>;
-				read-only;
-			};
-
-			partition@60000 {
-				label = "nvram";
-				reg = <0x60000 0x30000>;
-				read-only;
-			};
-
-			partition@90000 {
-				compatible = "denx,uimage";
-				label = "firmware";
-				reg = <0x90000 0x760000>;
-			};
-
-			partition@7f0000 {
-				label = "reserved";
-				reg = <0x7f0000 0x10000>;
-				read-only;
-			};
-		};
+&partitions {
+	partition@90000 {
+		compatible = "denx,uimage";
+		label = "firmware";
+		reg = <0x90000 0x760000>;
 	};
-};
-
-&wmac {
-	status = "okay";
-};
-
-&ethernet {
-	mtd-mac-address = <&factory 0x4>;
-};
-
-&pcie {
-	status = "okay";
-};
 
-&pcie0 {
-	wifi@0,0 {
-		reg = <0x0000 0 0 0 0>;
-		mediatek,mtd-eeprom = <&factory 0x8000>;
-		ieee80211-freq-limit = <5000000 6000000>;
+	partition@7f0000 {
+		label = "reserved";
+		reg = <0x7f0000 0x10000>;
+		read-only;
 	};
 };
 
diff --git a/target/linux/ramips/dts/mt7628an_netgear_r6120.dts b/target/linux/ramips/dts/mt7628an_netgear_r6120.dts
index 191538100c..51e51db3ec 100644
--- a/target/linux/ramips/dts/mt7628an_netgear_r6120.dts
+++ b/target/linux/ramips/dts/mt7628an_netgear_r6120.dts
@@ -1,9 +1,6 @@
 /dts-v1/;
 
-#include "mt7628an.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#include "mt7628an_netgear_r6xxx.dtsi"
 
 / {
 	compatible = "netgear,r6120", "mediatek,mt7628an-soc";
@@ -17,16 +14,6 @@
 		label-mac-device = &ethernet;
 	};
 
-	keys {
-		compatible = "gpio-keys";
-
-		reset {
-			label = "reset";
-			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RESTART>;
-		};
-	};
-
 	leds {
 		compatible = "gpio-leds";
 
@@ -77,77 +64,27 @@
 
 &state_default {
 	gpio {
-		groups = "p0led_an", "p1led_an", "p2led_an",
-			       "p3led_an", "p4led_an", "wdt",
-			       "wled_an", "uart1";
+		groups = "p0led_an", "p1led_an", "p2led_an", "p3led_an",
+		         "p4led_an", "wdt", "wled_an", "uart1";
 		function = "gpio";
 	};
 };
 
-&spi0 {
-	status = "okay";
-
-	flash@0 {
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <10000000>;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				label = "u-boot";
-				reg = <0x0 0x40000>;
-				read-only;
-			};
-
-			factory: partition@40000 {
-				label = "factory";
-				reg = <0x40000 0x20000>;
-				read-only;
-			};
-
-			partition@60000 {
-				label = "nvram";
-				reg = <0x60000 0x30000>;
-				read-only;
-			};
-
-			partition@90000 {
-				compatible = "denx,uimage";
-				label = "firmware";
-				reg = <0x90000 0xf60000>;
-			};
-
-			partition@ff0000 {
-				label = "reserved";
-				reg = <0xff0000 0x10000>;
-				read-only;
-			};
-		};
+&partitions {
+	partition@90000 {
+		compatible = "denx,uimage";
+		label = "firmware";
+		reg = <0x90000 0xf60000>;
 	};
-};
 
-&wmac {
-	status = "okay";
+	partition@ff0000 {
+		label = "reserved";
+		reg = <0xff0000 0x10000>;
+		read-only;
+	};
 };
 
-&ethernet {
+&wifi5 {
 	mtd-mac-address = <&factory 0x4>;
-};
-
-&pcie {
-	status = "okay";
-};
-
-&pcie0 {
-	wifi@0,0 {
-		reg = <0x0000 0 0 0 0>;
-		mediatek,mtd-eeprom = <&factory 0x8000>;
-		ieee80211-freq-limit = <5000000 6000000>;
-		mtd-mac-address = <&factory 0x4>;
-		mtd-mac-address-increment = <(2)>;
-	};
+	mtd-mac-address-increment = <(2)>;
 };
diff --git a/target/linux/ramips/dts/mt7628an_netgear_r6xxx.dtsi b/target/linux/ramips/dts/mt7628an_netgear_r6xxx.dtsi
new file mode 100644
index 0000000000..640591c316
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_netgear_r6xxx.dtsi
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <86000000>;
+		m25p,fast-read;
+
+		partitions: partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x40000>;
+				read-only;
+			};
+
+			factory: partition@40000 {
+				label = "factory";
+				reg = <0x40000 0x20000>;
+				read-only;
+			};
+
+			partition@60000 {
+				label = "nvram";
+				reg = <0x60000 0x30000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&wmac {
+	status = "okay";
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x4>;
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi5: wifi@0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile
index 93ce59e262..a1d9cfbf8b 100644
--- a/target/linux/ramips/image/Makefile
+++ b/target/linux/ramips/image/Makefile
@@ -11,7 +11,7 @@ DEVICE_VARS += LOADER_TYPE
 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID
 DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR
 DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
-DEVICE_VARS += SERCOMM_HWID SERCOMM_HWVER SERCOMM_SWVER
+DEVICE_VARS += SERCOMM_HWNAME SERCOMM_HWID SERCOMM_HWVER SERCOMM_SWVER
 DEVICE_VARS += JCG_MAXSIZE
 
 loadaddr-y := 0x80000000
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 0215683671..d03bb3aace 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -7,7 +7,7 @@ include ./common-tp-link.mk
 DEFAULT_SOC := mt7621
 
 KERNEL_DTB += -d21
-DEVICE_VARS += UIMAGE_MAGIC SERCOMM_HWNAME
+DEVICE_VARS += UIMAGE_MAGIC
 
 # The OEM webinterface expects an kernel with initramfs which has the uImage
 # header field ih_name.
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index de92c982cc..4b2255bd6a 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -189,60 +189,51 @@ define Device/mercury_mac1200r-v2
 endef
 TARGET_DEVICES += mercury_mac1200r-v2
 
-define Device/netgear_r6020
+define Device/netgear_r6xxx
   BLOCKSIZE := 64k
-  IMAGE_SIZE := 7104k
   DEVICE_VENDOR := NETGEAR
-  DEVICE_MODEL := R6020
-  DEVICE_PACKAGES := kmod-mt76x2
-  SERCOMM_HWID := CFR
-  SERCOMM_HWVER := A001
-  SERCOMM_SWVER := 0x0040
   IMAGES += factory.img
   IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
 	pad-rootfs
   IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | check-size
   IMAGE/factory.img := pad-extra 576k | $$(IMAGE/default) | \
-	pad-to $$$$(BLOCKSIZE) | sercom-footer | pad-to 128 | zip R6020.bin | \
-	sercom-seal
+	pad-to $$$$(BLOCKSIZE) | sercom-footer | pad-to 128 | \
+	zip $$$$(SERCOMM_HWNAME).bin | sercom-seal
+endef
+
+define Device/netgear_r6020
+  $(Device/netgear_r6xxx)
+  IMAGE_SIZE := 7104k
+  DEVICE_MODEL := R6020
+  DEVICE_PACKAGES := kmod-mt76x2
+  SERCOMM_HWNAME := R6020
+  SERCOMM_HWID := CFR
+  SERCOMM_HWVER := A001
+  SERCOMM_SWVER := 0x0040
 endef
 TARGET_DEVICES += netgear_r6020
 
 define Device/netgear_r6080
-  BLOCKSIZE := 64k
+  $(Device/netgear_r6xxx)
   IMAGE_SIZE := 7552k
-  DEVICE_VENDOR := NETGEAR
   DEVICE_MODEL := R6080
   DEVICE_PACKAGES := kmod-mt76x2
+  SERCOMM_HWNAME := R6080
   SERCOMM_HWID := CFR
   SERCOMM_HWVER := A001
   SERCOMM_SWVER := 0x0040
-  IMAGES += factory.img
-  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
-	pad-rootfs
-  IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | check-size
-  IMAGE/factory.img := pad-extra 576k | $$(IMAGE/default) | \
-	pad-to $$$$(BLOCKSIZE) | sercom-footer | pad-to 128 | zip R6080.bin | \
-	sercom-seal
 endef
 TARGET_DEVICES += netgear_r6080
 
 define Device/netgear_r6120
-  BLOCKSIZE := 64k
+  $(Device/netgear_r6xxx)
   IMAGE_SIZE := 15744k
-  DEVICE_VENDOR := NETGEAR
   DEVICE_MODEL := R6120
   DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci
+  SERCOMM_HWNAME := R6120
   SERCOMM_HWID := CGQ
   SERCOMM_HWVER := A001
   SERCOMM_SWVER := 0x0040
-  IMAGES += factory.img
-  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
-	pad-rootfs
-  IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | check-size
-  IMAGE/factory.img := pad-extra 576k | $$(IMAGE/default) | \
-	pad-to $$$$(BLOCKSIZE) | sercom-footer | pad-to 128 | zip R6120.bin | \
-	sercom-seal
 endef
 TARGET_DEVICES += netgear_r6120
 
