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

Adrian Schmutzler mail at adrianschmutzler.de
Tue Feb 16 19:47:48 EST 2021


Hi,

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces at lists.openwrt.org]
> On Behalf Of Sander Vanheule
> Sent: Sonntag, 14. Februar 2021 11:03
> To: openwrt-devel at lists.openwrt.org
> Cc: Sander Vanheule <sander at svanheule.net>; Stijn Segers
> <foss at volatilesystems.org>
> Subject: [PATCH] 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
> 
> 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>
> ---
> Known issues with this device:
> The MT7613BE radio is currently not well supported by the mt7615 driver:
> - The EEPROM blob is not recognized, so (Tx) power levels aren't useful.
>   Patch sent to linux-wireless:
>   https://lore.kernel.org/linux-wireless/20210202085953.9564-1-
> sander at svanheule.net/
> - DFS support is incomplete (known issue for MT7613)
> - Radio stops responding after a while when idling, reboot required to
>   bring it to life. Reported by Stijn, appears to be introduced by
>   2021-01-27 bump of mt76.

Please add the known issues to the preserved part of the commit message, I think it's valuable information also for others.

> 
>   kern.err kernel: [ 7099.554067] mt7615e 0000:02:00.0: Message 73 (seq 1)
> timeout
> 
>  .../dts/mt7621_tplink_eap235-wall-v1.dts      | 172 ++++++++++++++++++
>  target/linux/ramips/image/mt7621.mk           |  12 ++
>  .../mt7621/base-files/etc/board.d/02_network  |   3 +
>  tools/firmware-utils/src/tplink-safeloader.c  |  29 +++
>  4 files changed, 216 insertions(+)
>  create mode 100644 target/linux/ramips/dts/mt7621_tplink_eap235-wall-
> v1.dts
> 
> 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..d63623dcbd
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_tplink_eap235-wall-v1.dts
> @@ -0,0 +1,172 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later #include "mt7621.dtsi"

I'd put an empty line between SPDX and first include.

> +
> +#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";

"TP-Link" for consistency.

> +
> +	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;

Note that color/function do not work right now, so label is actually required.
I'm fine with keeping both color/function and label, though.

> +			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 = "tp-link:poe-
> passthrough:enable";

I'd consider to drop the prefix, although we have no policy on this, so it's pure matter of taste.
Actually, I'd drop this led-label-mimic entirely, and just call it "poe-passthrough".

> +			gpio-export,output = <0>;
> +			gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
> +		};
> +	};
> +};

state_default is missing?

> +
> +&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;
> +			};
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> +
> +&pcie0 {
> +	mt76 at 0,0 {

wifi at 0,0

> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&radio 0x0>;
> +		mtd-mac-address = <&info 0x8>;
> +	};
> +};
> +
> +&pcie1 {
> +	mt76 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";

Is the zero-based indexing founded on some labels? If not, one-based would be the common way to do it.

> +		};
> +
> +		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..6efda9eb90 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -1114,6 +1114,18 @@ define Device/totolink_x5000r  endef
> TARGET_DEVICES += totolink_x5000r
> 
> +define Device/tplink_eap235-wall-v1

dsa-migration needs to be added for new devices as well, so all mt7621 start with compat version 1.1.

> +  $(Device/tplink-safeloader)
> +  DEVICE_MODEL := EAP235-WALL

In DTS model it's EAP235-Wall ...

Best

Adrian

> +  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",
> --
> 2.29.2
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: openpgp-digital-signature.asc
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.openwrt.org/pipermail/openwrt-devel/attachments/20210217/d5b1010a/attachment.sig>


More information about the openwrt-devel mailing list