diff --git a/patches/openwrt/0004-ath79-support-for-TP-Link-EAP225-Outdoor-v3.patch b/patches/openwrt/0004-ath79-support-for-TP-Link-EAP225-Outdoor-v3.patch
new file mode 100644
index 0000000000000000000000000000000000000000..44237ff5af6891d6b8c06079290527e074b7bf0d
--- /dev/null
+++ b/patches/openwrt/0004-ath79-support-for-TP-Link-EAP225-Outdoor-v3.patch
@@ -0,0 +1,178 @@
+From: Paul Maruhn <paulmaruhn@posteo.de>
+Date: Tue, 22 Mar 2022 21:06:42 +0100
+Subject: ath79: support for TP-Link EAP225-Outdoor v3
+
+This model is almost identical to the EAP225-Outdoor v1.
+Major difference is the RTL8211fs PHY Chipset.
+
+Signed-off-by: Philipp Rothmann <philipprothmann@posteo.de>
+
+diff --git a/target/linux/ath79/config-5.10 b/target/linux/ath79/config-5.10
+index 8c662173efb8e6873f9c1dfba9acabb029e43025..942d43096e5d3f74036d976e5ae151b3047331dc 100644
+--- a/target/linux/ath79/config-5.10
++++ b/target/linux/ath79/config-5.10
+@@ -202,3 +202,4 @@ CONFIG_TICK_CPU_ACCOUNTING=y
+ CONFIG_TINY_SRCU=y
+ CONFIG_USB_SUPPORT=y
+ CONFIG_USE_OF=y
++CONFIG_REALTEK_PHY=y
+diff --git a/target/linux/ath79/dts/qca9563_tplink_eap225-outdoor-v3.dts b/target/linux/ath79/dts/qca9563_tplink_eap225-outdoor-v3.dts
+new file mode 100644
+index 0000000000000000000000000000000000000000..94ea216922b3808b98ed841ceb0ac7c8fca9e0ef
+--- /dev/null
++++ b/target/linux/ath79/dts/qca9563_tplink_eap225-outdoor-v3.dts
+@@ -0,0 +1,92 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++
++#include "qca9563_tplink_eap2x5-1port.dtsi"
++
++/ {
++	compatible = "tplink,eap225-outdoor-v3", "qca,qca9563";
++	model = "TP-Link EAP225-Outdoor v3";
++
++	aliases {
++		led-boot = &led_status_green;
++		led-failsafe = &led_status_amber;
++		led-running = &led_status_green;
++		led-upgrade = &led_status_amber;
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		led_status_green: status_green {
++			label = "green:status";
++			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
++			default-state = "on";
++		};
++
++		led_status_amber: status_amber {
++			label = "amber:status";
++			gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
++		};
++	};
++};
++
++&eth0 {
++	phy-handle = <&phy6>;
++};
++
++&spi {
++	status = "okay";
++
++	flash@0 {
++		compatible = "jedec,spi-nor";
++		reg = <0>;
++		spi-max-frequency = <25000000>;
++
++		partitions {
++			compatible = "fixed-partitions";
++			#address-cells = <1>;
++			#size-cells = <1>;
++
++			partition@0 {
++				label = "u-boot";
++				reg = <0x000000 0x020000>;
++				read-only;
++			};
++
++			partition@20000 {
++				label = "partition-table";
++				reg = <0x020000 0x010000>;
++				read-only;
++			};
++
++			info: partition@30000 {
++				label = "info";
++				reg = <0x030000 0x010000>;
++				read-only;
++			};
++
++			partition@40000 {
++				compatible = "openwrt,elf";
++				label = "firmware";
++				reg = <0x040000 0xec0000>;
++			};
++
++			partition@f00000 {
++				label = "config";
++				reg = <0xf00000 0x030000>;
++				read-only;
++			};
++
++			partition@f30000 {
++				label = "log";
++				reg = <0xf30000 0x0c0000>;
++				read-only;
++			};
++
++			art: partition@ff0000 {
++				label = "art";
++				reg = <0xff0000 0x010000>;
++				read-only;
++			};
++		};
++	};
++};
+diff --git a/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi b/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi
+index e10c5dbb739373faffef4d64fa28964a3b780b75..0fb25f480c5b5477974f9008bf6afaf6fdb760f5 100644
+--- a/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi
++++ b/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi
+@@ -105,6 +105,11 @@
+ 		reg = <4>;
+ 		reset-gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ 	};
++
++	phy6: ethernet-phy@6 {
++		reg = <6>;
++		
++	};
+ };
+ 
+ &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 258b0814424da39e9083b529cb154c5340c5bc0b..59e60ca85e497492161d1b6727a3ebc203f94abb 100644
+--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
++++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
+@@ -76,6 +76,7 @@ ath79_setup_interfaces()
+ 	tplink,cpe610-v2|\
+ 	tplink,cpe710-v1|\
+ 	tplink,eap225-outdoor-v1|\
++	tplink,eap225-outdoor-v3|\
+ 	tplink,eap225-v1|\
+ 	tplink,eap225-v3|\
+ 	tplink,eap245-v1|\
+diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+index 668fd76af3a43afabd5c1eee0246a56009d426da..a1b2201fee553c646242e1dec369e410546d25df 100644
+--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
++++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+@@ -253,6 +253,7 @@ case "$FIRMWARE" in
+ 			/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
+ 		;;
+ 	tplink,eap225-outdoor-v1|\
++	tplink,eap225-outdoor-v3|\
+ 	tplink,eap225-v3|\
+ 	tplink,eap225-wall-v2)
+ 		caldata_extract "art" 0x5000 0x2f20
+diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk
+index fed572c884c75bd21081c7c22dd4652ecefdd993..3d3a45711302b7a73c914d80ec0d309878813149 100644
+--- a/target/linux/ath79/image/generic-tp-link.mk
++++ b/target/linux/ath79/image/generic-tp-link.mk
+@@ -401,6 +401,17 @@ define Device/tplink_eap225-outdoor-v1
+ endef
+ TARGET_DEVICES += tplink_eap225-outdoor-v1
+ 
++define Device/tplink_eap225-outdoor-v3
++  $(Device/tplink-eap2x5)
++  SOC := qca9563
++  IMAGE_SIZE := 13824k
++  DEVICE_MODEL := EAP225-Outdoor
++  DEVICE_VARIANT := v3
++  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9888-ct
++  TPLINK_BOARD_ID := EAP225-V3
++endef
++TARGET_DEVICES += tplink_eap225-outdoor-v3
++
+ define Device/tplink_eap225-v1
+   $(Device/tplink-eap2x5)
+   SOC := qca9563
diff --git a/patches/openwrt/0004-ramips-mt7621-make-DSA-images-swconfig-upgradable.patch b/patches/openwrt/0005-ramips-mt7621-make-DSA-images-swconfig-upgradable.patch
similarity index 100%
rename from patches/openwrt/0004-ramips-mt7621-make-DSA-images-swconfig-upgradable.patch
rename to patches/openwrt/0005-ramips-mt7621-make-DSA-images-swconfig-upgradable.patch
diff --git a/patches/openwrt/0005-ramips-add-MT7621-WiFi-devpath-migration.patch b/patches/openwrt/0006-ramips-add-MT7621-WiFi-devpath-migration.patch
similarity index 100%
rename from patches/openwrt/0005-ramips-add-MT7621-WiFi-devpath-migration.patch
rename to patches/openwrt/0006-ramips-add-MT7621-WiFi-devpath-migration.patch
diff --git a/patches/openwrt/0006-lantiq-xrx200-make-DSA-images-swconfig-upgradable.patch b/patches/openwrt/0007-lantiq-xrx200-make-DSA-images-swconfig-upgradable.patch
similarity index 100%
rename from patches/openwrt/0006-lantiq-xrx200-make-DSA-images-swconfig-upgradable.patch
rename to patches/openwrt/0007-lantiq-xrx200-make-DSA-images-swconfig-upgradable.patch
diff --git a/patches/openwrt/0008-firmware-utils-bump-to-git-HEAD.patch b/patches/openwrt/0008-firmware-utils-bump-to-git-HEAD.patch
new file mode 100644
index 0000000000000000000000000000000000000000..083a88457e8d71d4b7c7ba7c60a9a26b5bd5bd09
--- /dev/null
+++ b/patches/openwrt/0008-firmware-utils-bump-to-git-HEAD.patch
@@ -0,0 +1,30 @@
+From: Sander Vanheule <sander@svanheule.net>
+Date: Mon, 27 Jun 2022 21:24:24 +0200
+Subject: firmware-utils: bump to git HEAD
+
+The support-list partition for the EAP225-V3 board ID became larger than
+the allocated size, resulting in factory image generation for the
+EAP225-Outdoor v3 and EAP225 v3 to fail. The make directive
+Build/tplink-safeloader ignores this failure however, resulting in a
+seemingly successful build with empty factory images.
+
+Included changes:
+    e609c5d75186 tplink-safeloader: drop unqualified EAP225-V3 IDs
+
+Signed-off-by: Sander Vanheule <sander@svanheule.net>
+
+diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile
+index 2534cec54383b28c4c93d0f4f70263a9af0274cb..7dc406e755cd9c56e4ec6de42bcf9a93aabb2581 100644
+--- a/tools/firmware-utils/Makefile
++++ b/tools/firmware-utils/Makefile
+@@ -12,8 +12,8 @@ PKG_RELEASE:=1
+ PKG_SOURCE_PROTO:=git
+ PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git
+ PKG_SOURCE_DATE:=2022-04-25
+-PKG_SOURCE_VERSION:=ddc3e00e314d3fbc3f9faab2d07395722ce9b01a
+-PKG_MIRROR_HASH:=246fc1d72d3a8cdb4072d81e033c92abaf614acd6f35a10fffd029d5c7f9303b
++PKG_SOURCE_VERSION:=e609c5d751868ae823c236332c76ce3c50acdd2e
++PKG_MIRROR_HASH:=f1a5af565bff50ccc99471a2be71636ed685dd15bfb9b162be9acf8ee28033a6
+ 
+ include $(INCLUDE_DIR)/host-build.mk
+ include $(INCLUDE_DIR)/cmake.mk
diff --git a/targets/ath79-generic b/targets/ath79-generic
index 1e043940cf2303875c128d24364c5894ecdcb95f..24a883622cdca0eccbb010fe62c6efbd9cfe5914 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -450,6 +450,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', {
 	packages = ATH10K_PACKAGES_QCA9888,
 })
 
+device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', {
+	packages = ATH10K_PACKAGES_QCA9888,
+})
+
 device('tp-link-re355-v1', 'tplink_re355-v1', {
 	manifest_aliases = {
 		'tp-link-re355', -- upgrade from OpenWrt 19.07