diff --git a/docs/index.rst b/docs/index.rst
index b4e977934c8741c88a1276dc70d84b58f3716935..cb952e14dfd78e93b3180d5f5b5e03525870cb20 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -285,6 +285,27 @@ brcm2708-bcm2709
 
 * RaspberryPi 2
 
+
+ipq40xx
+^^^^^^^
+
+* AVM
+
+  - FRITZ!Box 4040 [#80211s]_
+
+* GL.iNet
+
+  - GL-B1300 [#80211s]_
+
+* NETGEAR
+
+  - EX6100v2 [#80211s]_
+  - EX6150v2 [#80211s]_
+
+* ZyXEL
+
+  - WRE6606 [#80211s]_
+
 ipq806x
 ^^^^^^^
 
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
index e2f3494e7fee9ede0dd5945680e5240d419f9872..2a6a7f222e72f8a5b66ece732c52f3a7bbbedfc2 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
@@ -46,6 +46,8 @@ elseif platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c58-v1',
                                             'archer-c59-v1', 'archer-c60-v1',
                                             'archer-c7'}) then
   table.insert(try_files, 1, '/sys/class/net/eth1/address')
+elseif platform.match('ipq40xx', nil, {'avm,fritzbox-4040'}) then
+  table.insert(try_files, 1, '/sys/class/net/eth0/address')
 end
 
 
diff --git a/targets/ipq40xx b/targets/ipq40xx
new file mode 100644
index 0000000000000000000000000000000000000000..30d15b0b39900d94c5087d99e73692a78b44d3a4
--- /dev/null
+++ b/targets/ipq40xx
@@ -0,0 +1,26 @@
+# AVM
+
+device avm-fritz-box-4040 avm_fritzbox-4040
+factory
+extra_image -squashfs-eva -bootloader .bin
+
+
+# GL.iNet
+
+device gl.inet-gl-b1300 glinet_gl-b1300
+factory
+
+
+# NETGEAR
+
+device netgear-ex6100v2 netgear_ex6100v2
+factory .img
+
+device netgear-ex6150v2 netgear_ex6150v2
+factory .img
+
+
+# ZyXEL
+
+device zyxel-wre6606 zyxel_wre6606
+factory
diff --git a/targets/targets.mk b/targets/targets.mk
index 1546e391cdf8538d0f01d709360ebd9732a12235..bdbdd6f936d0e62ee76ae69b6b019c2094c117a2 100644
--- a/targets/targets.mk
+++ b/targets/targets.mk
@@ -13,6 +13,7 @@ $(eval $(call GluonTarget,x86,geode))
 $(eval $(call GluonTarget,x86,64))
 
 ifneq ($(GLUON_WLAN_MESH_11s)$(BROKEN),)
+$(eval $(call GluonTarget,ipq40xx))
 $(eval $(call GluonTarget,ipq806x))
 $(eval $(call GluonTarget,ramips,mt7620))
 $(eval $(call GluonTarget,ramips,mt76x8))