diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst
index 8f58fc30e1bcae2dca7e07baa14c388036f4a7c4..8068c7396cf8c0e927667da3a34e6f227025b95d 100644
--- a/docs/user/supported_devices.rst
+++ b/docs/user/supported_devices.rst
@@ -84,7 +84,7 @@ ath79-generic
   - Archer C6 (v2)
   - Archer C7 (v2, v4, v5)
   - Archer C59 (v1)
-  - CPE210 (v1.0, v1.1, v2.0)
+  - CPE210 (v1.0, v1.1, v2.0, v3.0, v3.1, v3.20)
   - CPE220 (v3.0)
   - CPE510 (v1.0, v1.1)
   - CPE510 (v2.0)
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
index 6d5bd8a77d1904645e57986160c057f2910927d7..96b4eeee32df79e5eda05adc685c003e3f25b1ee 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
@@ -29,6 +29,7 @@ function M.is_outdoor_device()
 		'plasmacloud,pa300e',
 		'tplink,cpe210-v1',
 		'tplink,cpe210-v2',
+		'tplink,cpe210-v3',
 		'tplink,cpe220-v3',
 		'tplink,cpe510-v1',
 		'tplink,cpe510-v2',
diff --git a/targets/ath79-generic b/targets/ath79-generic
index 15ab14397c642e9b31c605413c4a2cea6e1b5646..5d53a3e77838ffad767eaa0202d230c71ce53435 100644
--- a/targets/ath79-generic
+++ b/targets/ath79-generic
@@ -353,6 +353,13 @@ device('tp-link-cpe210-v2', 'tplink_cpe210-v2', {
 		'tp-link-cpe210-v2.0', -- Upgrade from OpenWrt 19.07
 	},
 })
+device('tp-link-cpe210-v3', 'tplink_cpe210-v3', {
+	manifest_aliases = {
+		'tp-link-cpe210-v3.0', -- Upgrade from OpenWrt 19.07
+		'tp-link-cpe210-v3.1', -- Upgrade from OpenWrt 19.07
+		'tp-link-cpe210-v3.20', -- Upgrade from OpenWrt 19.07
+	},
+})
 device('tp-link-cpe220-v3', 'tplink_cpe220-v3')
 device('tp-link-cpe510-v1', 'tplink_cpe510-v1', {
 	manifest_aliases = {