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

Arınç ÜNAL arinc.unal at arinc9.com
Sat Jan 29 12:00:51 PST 2022


On 29/01/2022 16: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
> 
>> * 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.
> 
>> +       };
>> +
>> +};
>> +
>> +&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.
> 
>> +
>> +               };
>> +       };
>> +};
>> +
>> +&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 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.
> 
>> +
>> +&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.

gmac1 shouldn't even work right now. I recently had my patch applied 
upstream to fix it:
https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git/commit/?h=staging-next&id=0a93c0d75809582893e82039143591b9265b520e

port at 5 is connected to gmac1 (and might share the rgmii bus with an 
external phy, refer to 
Documentation/devicetree/bindings/net/dsa/mt7530.txt) but mt7530 DSA 
driver doesn't support it as a CPU port at the moment, causes kernel 
panic. port at 5 and gmac1 nodes can be dropped altogether.

Arınç



More information about the openwrt-devel mailing list