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

Stijn Tintel stijn at linux-ipv6.be
Sat Feb 5 04:25:53 PST 2022


On 5/02/2022 14:21, Sander Vanheule wrote:
> On Fri, 2022-02-04 at 20:05 +0200, Stijn Tintel wrote:
>> 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.
> AFAICT the PD (powered device) and PSE (power sourcing equipment) names are part of the
> PoE standard, while 'PT' isn't.
Ok.
>
>>>> * 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 &ethernet and dropped the rest. Also dropped speed from mac at 0,
>> as the dtsi sets this to 1000 already.
>>
> So it has the same offset, but a smaller region size. Why is it smaller, and which one is
> correct?
Why? Beats me. It was in the OEM DTS like this. With the value from
mt7621.dtsi, ethernet doesn't work.
>>>> +       };
>>>> +
>>>> +};
>>>> +
>>>> +&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)
> Thanks for checking.
>
>>>> +
>>>> +&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.
> The patch looks good to me, but you don't have a commit message yet.
>
>>>
>>> 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
>>
>>
>>
Stijn






More information about the openwrt-devel mailing list