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 > * 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 <st...@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@1e100000 { > + reg = <0x1e100000 0xe000>; > + > + mac@0 { > + phy-mode = "rgmii"; > + > + fixed-link { > + pause; > + speed = <1000>; > + }; > + }; > + > + mac@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@1e100000/mac@1 here to be able to modify the node. Use &gmac1 {...} like you do with spi0. You can also drop the references to ethernet@1e100000 and mac@0, since you don't modify any of their properties. > + }; > + > +}; > + > +&spi0 { > + status = "okay"; > + > + flash@0 { > + compatible = "jedec,spi-nor"; > + reg = <0>; > + spi-max-frequency = <20000000>; > + > + partitions { > + compatible = "fixed-partitions"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@0 { > + label = "u-boot"; > + reg = <0x0 0x80000>; > + read-only; > + }; > + > + partition@80000 { > + label = "partition-table"; > + reg = <0x80000 0x10000>; > + read-only; > + }; > + > + info: partition@90000 { > + label = "product-info"; > + reg = <0x90000 0x10000>; > + read-only; > + }; > + > + partition@a0000 { > + compatible = "denx,fit"; > + label = "firmware"; > + reg = <0x0a0000 0xcf0000>; > + }; > + > + partition@d90000 { > + label = "user-config"; > + reg = <0xd90000 0x60000>; > + read-only; > + }; > + > + partition@f30000 { > + label = "mutil-log"; > + reg = <0xf30000 0x80000>; > + read-only; > + }; > + > + partition@fb0000 { > + label = "oops"; > + reg = <0xfb0000 0x040000>; > + read-only; > + }; > + > + radio: partition@ff0000 { > + label = "radio"; > + reg = <0xff0000 0x010000>; > + read-only; > + }; > + > + partition@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. > + > + }; > + }; > +}; > + > +&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? > +}; > + > +&pcie1 { > + wifi@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. > + > +&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@0 { > + status = "okay"; > + label = "lan0"; > + }; > + > + port@1 { > + status = "okay"; > + label = "lan3"; > + }; > + > + port@2 { > + status = "okay"; > + label = "lan2"; > + }; > + > + port@3 { > + status = "okay"; > + label = "lan1"; > + }; > + > + port@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@5. You also enable gmac1, but AFAICT it doesn't seem to be connected to anything. > + }; > + > + port@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@8 { > + reg = <0x8 0x6>; > + }; > +}; This could also just go into the definition of partition@90000 itself, but either way is fine for me. > 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). > + 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. > + 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 <st...@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 <st...@linux-ipv6.be> This is a patch against firmware-utils, so it should be submitted separately for that repository. 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 > + _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel