[PATCH] ramips: support TP-Link EAP615-Wall
Stijn Tintel
stijn at linux-ipv6.be
Fri Feb 4 10:05:36 PST 2022
On 29/01/2022 15:03, Sander Vanheule wrote:
> Hi Stijn,
>
> Thanks for the patch, been looking forward to this!
>
> On Fri, 2022-01-28 at 00:00 +0200, Stijn Tintel wrote:
>> 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)
> PT > passthrough
Not sure what else PoE-PT can refer to. I like that it's the same style
as PoE-PD.
>
>> * 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>;
>> + };
>> + };
> This node is labeled as "gmac1" in mt7621.dtsi, so you don't need to redefine
> /ethernet at 1e100000/mac at 1 here to be able to modify the node. Use &gmac1 {...} like you do
> with spi0.
>
> You can also drop the references to ethernet at 1e100000 and mac at 0, since you don't modify
> any of their properties.
mt7621.dsti:
reg = <0x1e100000 0x10000>;
eap615:
reg = <0x1e100000 0xe000>;
Moved to ðernet and dropped the rest. Also dropped speed from mac at 0,
as the dtsi sets this to 1000 already.
>
>> + };
>> +
>> +};
>> +
>> +&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;
>> + };
> Is this the partition layout as defined in partition-table, or the runtime one from
> /proc/mtd? We've noticed they can be different, and the runtime one is actually the one
> that should be used in order to not erase the stock configuration.
I honestly don't recall, and I don't have an unmodified EAP615-Wall
anymore. Can anyone get me that runtime OEM partition layout?
>> +
>> + };
>> + };
>> +};
>> +
>> +&state_default {
>> + gpio {
>> + groups = "uart2", "uart3";
>> + function = "gpio";
>> + };
>> +};
>> +
>> +&pcie {
>> + status = "okay";
>> +
>> + bus-range = <0x00 0xff>;
> This is the default value according to Documentation/devicetree/bindings/pci/host-generic-
> pci.txt. Any particular reason you're specifying it here explicitly?
OEM DTS leftover; removed.
>
>> +};
>> +
>> +&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";
>> +};
> Is pcie0 used for anything? Otherwise it can probably also be disabled, or you can drop
> this block to make the device DTS smaller.
Disabling pcie0 breaks WiFi.
Disabling pcie2 avoids this message during boot:
[ 1.324025] mt7621-pci 1e140000.pcie: pcie2 no card, disable it (RST
& CLK)
>
>> +
>> +&gmac0 {
>> + nvmem-cells = <&macaddr_info_8>;
>> + nvmem-cell-names = "mac-address";
>> +};
> Ah, so you *are* modifying gmac0! Maybe put the &gmac1 section here too, then.
>
>> +
>> +&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>;
>> + };
>> + */
> Does the CPU connect to the switch by both gmac-s? If so, leave a comment so this can be
> enabled once support for this arrives. Otherwise I think you could drop port at 5. You also
> enable gmac1, but AFAICT it doesn't seem to be connected to anything.
OEM DTS leftover; removed.
>
>> + };
>> +
>> + 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>;
>> + };
>> +};
> This could also just go into the definition of partition at 90000 itself, but either way is
> fine for me.
Prefer to keep as-is, like in the DTS of its sibling.
>
>> 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)
> Missing $(Device/dsa-migration).
This is a new device, so there isn't anything to migrate. This sounds weird?
>
>> + 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
> Is the 'pad-to 64k' required? mtdsplit can split at arbitrary boundaries, so I think the
> padding here isn't very useful. The other device with FIT images on mt7621 also don't add
> padding to the kernel.
Removed.
>
>> + 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>
> This is a patch against firmware-utils, so it should be submitted separately for that
> repository.
Yes, just keeping all changes together for review purposes. Have you
reviewed this part? If so I'll push it to firmware-utils already.
>
>
> Best,
> Sander
>
>> +---
>> + 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
>> +
Thanks,
Stijn
More information about the openwrt-devel
mailing list