[PATCH] ramips: support TP-Link EAP615-Wall

Stijn Tintel stijn at linux-ipv6.be
Thu Jan 27 14:00:28 PST 2022


Add support for the TP-Link EAP615-Wall, an AX1800 Wall Plate WiFi 6 AP.
The device is very similar to the TP-Link EAP235-Wall.

Hardware:
* SoC: MediaTek MT7621AT
* RAM: 128MiB
* Flash: 16MiB SPI-NOR
* Ethernet: 4x GbE
  * Back: ETH0 (PoE-PD)
  * Bottom: ETH1, ETH2, ETH3 (PoE-PT)
* WiFi: MT7915E 2.4/5 GHz 2T2R
* LEDS: 1x white
* Buttons: 1x LED, 1x reset

Stock firmware uses a random MAC address for ethernet. OpenWrt uses the
MAC address that is on the device label for ethernet and the wireless
interfaces. MAC address must not be incremented, as this will cause MAC
address conflicts in case you have two devices with consecutive MAC
addresses. Instead, different locally administered addresses will be
generated automatically, based on the MAC on the label.

Installation via stock firmware:
* Enable SSH in the TP-Link web interface
* SSH to the device
* Run `cliclientd stopcs`
* Upload the OpenWrt factory image via the TP-Link webinterface

Installation via bootloader:
* Solder TTL header. Pinout: 1: TX, 2: RX, 3: GND, 4: VCC, with pin 1
  closest to ETH1. Baud rate 115200
* Interrupt boot process by holding a key during boot
* Boot the OpenWrt initramfs:
  # tftpboot 0x84000000 openwrt-ramips-mt7621-tplink_eap615-wall-v1-initramfs-kernel.bin
  # bootm
* Copy openwrt-ramips-mt7621-tplink_eap615-wall-v1-squashfs-sysupgrade.bin
  to /tmp and use sysupgrade to install it

Thanks to Sander Vanheule for his work on the EAP235-Wall, which made
adding support for the EAP615-Wall very easy.

Signed-off-by: Stijn Tintel <stijn at linux-ipv6.be>
---
 .../dts/mt7621_tplink_eap615-wall-v1.dts      | 250 ++++++++++++++++++
 target/linux/ramips/image/mt7621.mk           |  12 +
 .../mt7621/base-files/etc/board.d/02_network  |   3 +-
 tools/firmware-utils/patches/999-eap615.patch |  55 ++++
 4 files changed, 319 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/ramips/dts/mt7621_tplink_eap615-wall-v1.dts
 create mode 100644 tools/firmware-utils/patches/999-eap615.patch

diff --git a/target/linux/ramips/dts/mt7621_tplink_eap615-wall-v1.dts b/target/linux/ramips/dts/mt7621_tplink_eap615-wall-v1.dts
new file mode 100644
index 0000000000..fd5a68973b
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_tplink_eap615-wall-v1.dts
@@ -0,0 +1,250 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+	compatible = "tplink,eap615-wall-v1", "mediatek,mt7621-soc";
+	model = "TP-Link EAP615-Wall v1";
+
+	aliases {
+		label-mac-device = &gmac0;
+		led-boot = &led_status;
+		led-failsafe = &led_status;
+		led-running = &led_status;
+		led-upgrade = &led_status;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_status: status {
+			label = "white:status";
+			color = <LED_COLOR_ID_WHITE>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		led {
+			label = "led";
+			gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_LIGHTS_TOGGLE>;
+		};
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+
+		poe_passthrough {
+			gpio-export,name = "poe-passthrough";
+			gpio-export,output = <0>;
+			gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	ethernet at 1e100000 {
+		reg = <0x1e100000 0xe000>;
+
+		mac at 0 {
+			phy-mode = "rgmii";
+
+			fixed-link {
+				pause;
+				speed = <1000>;
+			};
+		};
+
+		mac at 1 {
+			status = "okay";
+
+			phy-mode = "rgmii";
+
+			fixed-link {
+				full-duplex;
+				pause;
+				speed = <1000>;
+			};
+		};
+	};
+
+};
+
+&spi0 {
+	status = "okay";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <20000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "u-boot";
+				reg = <0x0 0x80000>;
+				read-only;
+			};
+
+			partition at 80000 {
+				label = "partition-table";
+				reg = <0x80000 0x10000>;
+				read-only;
+			};
+
+			info: partition at 90000 {
+				label = "product-info";
+				reg = <0x90000 0x10000>;
+				read-only;
+			};
+
+			partition at a0000 {
+				compatible = "denx,fit";
+				label = "firmware";
+				reg = <0x0a0000 0xcf0000>;
+			};
+
+			partition at d90000 {
+				label = "user-config";
+				reg = <0xd90000 0x60000>;
+				read-only;
+			};
+
+			partition at f30000 {
+				label = "mutil-log";
+				reg = <0xf30000 0x80000>;
+				read-only;
+			};
+
+			partition at fb0000 {
+				label = "oops";
+				reg = <0xfb0000 0x040000>;
+				read-only;
+			};
+
+			radio: partition at ff0000 {
+				label = "radio";
+				reg = <0xff0000 0x010000>;
+				read-only;
+			};
+
+			partition at 1000000 {
+				status = "disabled";
+
+				label = "full";
+				reg = <0x0 0x1000000>;
+				read-only;
+			};
+
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "uart2", "uart3";
+		function = "gpio";
+	};
+};
+
+&pcie {
+	status = "okay";
+
+	bus-range = <0x00 0xff>;
+};
+
+&pcie1 {
+	wifi at 0,0 {
+		compatible = "mediatek,mt76";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&radio 0x0>;
+		nvmem-cells = <&macaddr_info_8>;
+		nvmem-cell-names = "mac-address";
+	};
+};
+
+&pcie2 {
+	status = "disabled";
+};
+
+&gmac0 {
+	nvmem-cells = <&macaddr_info_8>;
+	nvmem-cell-names = "mac-address";
+};
+
+&switch0 {
+	compatible = "mediatek,mt7530";
+	ports {
+		port at 0 {
+			status = "okay";
+			label = "lan0";
+		};
+
+		port at 1 {
+			status = "okay";
+			label = "lan3";
+		};
+
+		port at 2 {
+			status = "okay";
+			label = "lan2";
+		};
+
+		port at 3 {
+			status = "okay";
+			label = "lan1";
+		};
+
+		port at 5 {
+			phy-mode = "rgmii";
+			reg = <5>;
+
+			/*
+			fixed-link {
+				full-duplex;
+				speed = <1000>;
+			};
+			*/
+		};
+
+		port at 6 {
+			phy-mode = "rgmii";
+			ethernet = <&gmac0>;
+
+			fixed-link {
+				pause;
+				speed = <1000>;
+			};
+		};
+
+	};
+};
+
+&info {
+	compatible = "nvmem-cells";
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	macaddr_info_8: macaddr at 8 {
+		reg = <0x8 0x6>;
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index a461c57f15..617c8adc37 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -1461,6 +1461,18 @@ define Device/tplink_eap235-wall-v1
 endef
 TARGET_DEVICES += tplink_eap235-wall-v1
 
+define Device/tplink_eap615-wall-v1
+  $(Device/tplink-safeloader)
+  DEVICE_MODEL := EAP615-Wall
+  DEVICE_VARIANT := v1
+  DEVICE_PACKAGES := kmod-mt7915e
+  TPLINK_BOARD_ID := EAP615-WALL-V1
+  KERNEL := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | pad-to 64k
+  KERNEL_INITRAMFS := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k
+  IMAGE_SIZE := 13248k
+endef
+TARGET_DEVICES += tplink_eap615-wall-v1
+
 define Device/tplink_re350-v1
   $(Device/dsa-migration)
   $(Device/tplink-safeloader)
diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
index 52e0b6b572..3e34ede3be 100644
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
@@ -59,7 +59,8 @@ ramips_setup_interfaces()
 	mikrotik,routerboard-760igs)
 		ucidef_set_interfaces_lan_wan "lan2 lan3 lan4 lan5" "wan sfp"
 		;;
-	tplink,eap235-wall-v1)
+	tplink,eap235-wall-v1|\
+	tplink,eap615-wall-v1)
 		ucidef_set_interface_lan "lan0 lan1 lan2 lan3"
 		;;
 	ubnt,edgerouter-x)
diff --git a/tools/firmware-utils/patches/999-eap615.patch b/tools/firmware-utils/patches/999-eap615.patch
new file mode 100644
index 0000000000..2348bbce24
--- /dev/null
+++ b/tools/firmware-utils/patches/999-eap615.patch
@@ -0,0 +1,55 @@
+From 41c9244ee6347f00f8c85117d17d9d2429a25999 Mon Sep 17 00:00:00 2001
+From: Stijn Tintel <stijn at linux-ipv6.be>
+Date: Thu, 27 Jan 2022 11:35:54 +0200
+Subject: [PATCH] tplink-safeloader: EAP615-Wall v1 support
+
+Signed-off-by: Stijn Tintel <stijn at linux-ipv6.be>
+---
+ src/tplink-safeloader.c | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+diff --git a/src/tplink-safeloader.c b/src/tplink-safeloader.c
+index 0565dcc..009b2c4 100644
+--- a/src/tplink-safeloader.c
++++ b/src/tplink-safeloader.c
+@@ -1703,6 +1703,37 @@ static struct device_info boards[] = {
+ 		.last_sysupgrade_partition = "file-system"
+ 	},
+ 
++	/** Firmware layout for the EAP615-Wall v1 */
++	{
++		.id = "EAP615-WALL-V1",
++		.soft_ver = SOFT_VER_DEFAULT,
++		.soft_ver_compat_level = 1,
++		.support_list =
++			"SupportList:\r\n"
++			"EAP615-Wall(TP-Link|UN|AX1800-D):1.0\r\n"
++			"EAP615-Wall(TP-Link|CA|AX1800-D):1.0\r\n"
++			"EAP615-Wall(TP-Link|JP|AX1800-D):1.0\r\n",
++		.part_trail = PART_TRAIL_NONE,
++
++		.partitions = {
++			{"fs-uboot", 0x00000, 0x80000},
++			{"partition-table", 0x80000, 0x02000},
++			{"default-mac", 0x90000, 0x01000},
++			{"support-list", 0x91000, 0x00100},
++			{"product-info", 0x91100, 0x00400},
++			{"soft-version", 0x92000, 0x00100},
++			{"firmware", 0xa0000, 0xcf0000},
++			{"user-config", 0xd90000, 0x60000},
++			{"mutil-log", 0xf30000, 0x80000},
++			{"oops", 0xfb0000, 0x40000},
++			{"radio", 0xff0000, 0x10000},
++			{NULL, 0, 0}
++		},
++
++		.first_sysupgrade_partition = "os-image",
++		.last_sysupgrade_partition = "file-system"
++	},
++
+ 	/** Firmware layout for the TL-WA1201 v2 */
+ 	{
+ 		.id     = "TL-WA1201-V2",
+-- 
+2.34.1
+
-- 
2.34.1




More information about the openwrt-devel mailing list