[openwrt/openwrt] ramips: mt7621: add TP-Link EAP235-Wall support

LEDE Commits lede-commits at lists.infradead.org
Fri Feb 19 14:09:43 EST 2021


adrian pushed a commit to openwrt/openwrt.git, branch openwrt-21.02:
https://git.openwrt.org/a7c0c9bb7ec3de79a11e7bf7facf8369235e74a5

commit a7c0c9bb7ec3de79a11e7bf7facf8369235e74a5
Author: Sander Vanheule <sander at svanheule.net>
AuthorDate: Thu Feb 18 20:52:53 2021 +0100

    ramips: mt7621: add TP-Link EAP235-Wall support
    
    The TP-Link EAP235-Wall is a wall-mounted, PoE-powered AC1200 access
    point with four gigabit ethernet ports.
    
    When connecting to the device's serial port, it is strongly advised to
    use an isolated UART adapter. This prevents linking different power
    domains created by the PoE power supply, which may damage your devices.
    
    The device's U-Boot supports saving modified environments with
    `saveenv`. However, there is no u-boot-env partition, and saving
    modifications will cause the partition table to be overwritten. This is
    not an issue for running OpenWrt, but will prevent the vendor FW from
    functioning properly.
    
    Device specifications:
    * SoC: MT7621DAT
    * RAM: 128MiB
    * Flash: 16MiB SPI-NOR
    * Wireless 2.4GHz (MT7603EN): b/g/n, 2x2
    * Wireless 5GHz (MT7613BEN): a/n/ac, 2x2
    * Ethernet: 4× GbE
      * Back side: ETH0, PoE PD port
      * Bottom side: ETH1, ETH2, ETH3
    * Single white device LED
    * LED button, reset button (available for failsafe)
    * PoE pass-through on port ETH3 (enabled with GPIO)
    
    Datasheet of the flash chip specifies a maximum frequency of 33MHz, but
    that didn't work. 20MHz gives no errors with reading (flash dump) or
    writing (sysupgrade).
    
    Device mac addresses:
    Stock firmware uses the same MAC address for ethernet (on device label)
    and 2.4GHz wireless. The 5GHz wireless address is incremented by one.
    This address is stored in the 'info' ('default-mac') partition at an
    offset of 8 bytes.
    From OEM ifconfig:
        eth     a4:2b:b0:...:88
        ra0     a4:2b:b0:...:88
        rai0    a4:2b:b0:...:89
    
    Flashing instructions:
    * Enable SSH in the web interface, and SSH into the target device
    * run `cliclientd stopcs`, this should return "success"
    * upload the factory image via the web interface
    
    Debricking:
    U-boot can be interrupted during boot, serial console is 57600 baud, 8n1
    This allows installing a sysupgrade image, or fixing the device in
    another way.
    * Access serial header from the side of the board, close to ETH3,
      pin-out is (1:TX, 2:RX, 3:GND, 4:3.3V), with pin 1 closest to ETH3.
    * Interrupt bootloader by holding '4' during boot, which drops the
      bootloader into its shell
    * Change default 'serverip' and 'ipaddr' variables (optional)
    * Download initramfs with `tftpboot`, and boot image with `bootm`
        # tftpboot 84000000 openwrt-initramfs.bin
        # bootm
    
    Revert to stock:
    Using the tplink-safeloader utility from the firmware-utils package,
    TP-Link's firmware image can be converted to an OpenWrt-compatible
    sysupgrade image:
      $ ./staging_dir/host/bin/tplink-safeloader -B EAP235-WALL-V1 \
          -z EAP235-WALLv1_XXX_up_signed.bin -o eap235-sysupgrade.bin
    
    This can then be flashed using the OpenWrt sysupgrade interface. The
    image will appear to be incompatible and must be force flashed, without
    keeping the current configuration.
    
    Known issues:
    - DFS support is incomplete (known issue with MT7613)
    - MT7613 radio may stop responding when idling, reboot required.
      This was an issue with the ddc75ff704 version of mt76, but appears to
      have improved/disappeared with bc3963764d.
      Error notice example:
      [ 7099.554067] mt7615e 0000:02:00.0: Message 73 (seq 1) timeout
    
    Hardware was kindly provided for porting by Stijn Segers.
    
    Tested-by: Stijn Segers <foss at volatilesystems.org>
    Signed-off-by: Sander Vanheule <sander at svanheule.net>
    (cherry picked from commit 1e75909a35a2b361cdfdfcf18a26ad61271b174e)
---
 .../ramips/dts/mt7621_tplink_eap235-wall-v1.dts    | 180 +++++++++++++++++++++
 target/linux/ramips/image/mt7621.mk                |  13 ++
 .../mt7621/base-files/etc/board.d/02_network       |   3 +
 tools/firmware-utils/src/tplink-safeloader.c       |  29 ++++
 4 files changed, 225 insertions(+)

diff --git a/target/linux/ramips/dts/mt7621_tplink_eap235-wall-v1.dts b/target/linux/ramips/dts/mt7621_tplink_eap235-wall-v1.dts
new file mode 100644
index 0000000000..17308eb605
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_tplink_eap235-wall-v1.dts
@@ -0,0 +1,180 @@
+// 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,eap235-wall-v1", "mediatek,mt7621-soc";
+	model = "TP-Link EAP235-Wall v1";
+
+	aliases {
+		label-mac-device = &gmac0;
+		led-boot = &led_status;
+		led-failsafe = &led_status;
+		led-running = &led_status;
+		led-upgrade = &led_status;
+	};
+
+	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>;
+		};
+	};
+};
+
+&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 = <0x00000 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 = "tplink,firmware";
+				label = "firmware";
+				reg = <0x0a0000 0xd20000>;
+			};
+
+			partition at dc0000 {
+				label = "user-config";
+				reg = <0xdc0000 0x030000>;
+				read-only;
+			};
+
+			/* 0xdf0000 - 0xf30000 unused  */
+
+			partition at f30000 {
+				label = "mutil-log";
+				reg = <0xf30000 0x080000>;
+				read-only;
+			};
+
+			partition at fb0000 {
+				label = "oops";
+				reg = <0xfb0000 0x040000>;
+				read-only;
+			};
+
+			radio: partition at ff0000 {
+				label = "radio";
+				reg = <0xff0000 0x010000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "uart2", "uart3";
+		function = "gpio";
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi at 0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&radio 0x0>;
+		mtd-mac-address = <&info 0x8>;
+	};
+};
+
+&pcie1 {
+	wifi at 0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&radio 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+		mtd-mac-address = <&info 0x8>;
+		mtd-mac-address-increment = <1>;
+	};
+};
+
+&gmac0 {
+	mtd-mac-address = <&info 0x8>;
+};
+
+&switch0 {
+	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";
+		};
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 203ca1b908..a4edf0a6df 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -1114,6 +1114,19 @@ define Device/totolink_x5000r
 endef
 TARGET_DEVICES += totolink_x5000r
 
+define Device/tplink_eap235-wall-v1
+  $(Device/dsa-migration)
+  $(Device/tplink-safeloader)
+  DEVICE_MODEL := EAP235-Wall
+  DEVICE_VARIANT := v1
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615e kmod-mt7663-firmware-ap
+  TPLINK_BOARD_ID := EAP235-WALL-V1
+  IMAGE_SIZE := 13440k
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory | \
+	pad-extra 128
+endef
+TARGET_DEVICES += tplink_eap235-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 46cb65ffbe..89e679be7c 100755
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
@@ -55,6 +55,9 @@ ramips_setup_interfaces()
 	mikrotik,routerboard-760igs)
 		ucidef_set_interfaces_lan_wan "lan2 lan3 lan4 lan5" "wan sfp"
 		;;
+	tplink,eap235-wall-v1)
+		ucidef_set_interface_lan "lan0 lan1 lan2 lan3"
+		;;
 	ubnt,edgerouter-x)
 		ucidef_set_interfaces_lan_wan "eth1 eth2 eth3 eth4" "eth0"
 		;;
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
index b9dfad51a6..da73e1bf30 100644
--- a/tools/firmware-utils/src/tplink-safeloader.c
+++ b/tools/firmware-utils/src/tplink-safeloader.c
@@ -1447,6 +1447,35 @@ static struct device_info boards[] = {
 		.last_sysupgrade_partition = "file-system"
 	},
 
+	/** Firmware layout for the EAP235-Wall v1 */
+	{
+		.id     = "EAP235-WALL-V1",
+		.support_list =
+			"SupportList:\r\n"
+			"EAP235-Wall(TP-Link|UN|AC1200-D):1.0\r\n",
+		.part_trail = PART_TRAIL_NONE,
+		.soft_ver = NULL,
+		.soft_ver_compat_level = 1,
+
+		.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, 0xd20000},
+			{"user-config", 0xdc0000, 0x30000},
+			{"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 EAP245 v1 */
 	{
 		.id     = "EAP245-V1",



More information about the lede-commits mailing list