Hi,

> -----Original Message-----
> From: openwrt-devel [mailto:[email protected]]
> On Behalf Of Sander Vanheule
> Sent: Sonntag, 14. Februar 2021 11:03
> To: [email protected]
> Cc: Sander Vanheule <[email protected]>; Stijn Segers
> <[email protected]>
> 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 <[email protected]>
> Signed-off-by: Sander Vanheule <[email protected]>
> ---
> 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-
> [email protected]/
> - 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@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 = <0x00000 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 = "tplink,firmware";
> +                             label = "firmware";
> +                             reg = <0x0a0000 0xd20000>;
> +                     };
> +
> +                     partition@dc0000 {
> +                             label = "user-config";
> +                             reg = <0xdc0000 0x030000>;
> +                             read-only;
> +                     };
> +
> +                     /* 0xdf0000 - 0xf30000 unused  */
> +
> +                     partition@f30000 {
> +                             label = "mutil-log";
> +                             reg = <0xf30000 0x080000>;
> +                             read-only;
> +                     };
> +
> +                     partition@fb0000 {
> +                             label = "oops";
> +                             reg = <0xfb0000 0x040000>;
> +                             read-only;
> +                     };
> +
> +                     radio: partition@ff0000 {
> +                             label = "radio";
> +                             reg = <0xff0000 0x010000>;
> +                             read-only;
> +                     };
> +             };
> +     };
> +};
> +
> +&pcie {
> +     status = "okay";
> +};
> +
> +&pcie0 {
> +     mt76@0,0 {

wifi@0,0

> +             reg = <0x0000 0 0 0 0>;
> +             mediatek,mtd-eeprom = <&radio 0x0>;
> +             mtd-mac-address = <&info 0x8>;
> +     };
> +};
> +
> +&pcie1 {
> +     mt76@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@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@1 {
> +                     status = "okay";
> +                     label = "lan3";
> +             };
> +
> +             port@2 {
> +                     status = "okay";
> +                     label = "lan2";
> +             };
> +
> +             port@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
> [email protected]
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Attachment: openpgp-digital-signature.asc
Description: PGP signature

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to