mediatek: TP-Link EAP683-LR support
authorStijn Tintel <stijn@linux-ipv6.be>
Fri, 5 Apr 2024 22:45:25 +0000 (01:45 +0300)
committerStijn Tintel <stijn@linux-ipv6.be>
Mon, 6 Oct 2025 14:39:53 +0000 (17:39 +0300)
TODO:
* MAC address from ubi_factory_data on factory partition

Add support for the TP-Link EAP683-LR, an AX6000 Ceiling Mount WiFi 6
AP.

Hardware:
* SoC: MediaTek MT7896AV
* RAM: 1GiB DDR4 (Samsung K4A8G165WC-BCTD)
* Flash: 128MiB SPI-NAND (ESMT F50L1G41LB)
* Ethernet: 1x 10/100/1000/2500 Mbps PoE-PD (MaxLinear GPY211C)
* WiFi: MT7976AN/MT7976GN 2.4/5GHz 4T4R
* LEDS: 3x blue connected to a single GPIO line
* Buttons: 1x reset
* BLE/Thread/Zigbee: CC2652 (currently not supported)

Stock firmware uses a random MAC address for ethernet.

Installation via bootloader:
* Solder JST??? connector on J255, alternatively solder wires on the
  TP13-TP15 pads. Pinout: TP13: TX, TP14: RX, TP15: GND, TP16: VCC.
  The pins for J255 are in the same order.
* Interrupt boot process by repeatedly pressing Ctrl+b during boot
* In the boot menu, select U-Boot console
* Ensure the U-Boot environment variable "tp_boot_idx" is not set:
  # setenv tp_boot_idx
  # saveenv
* Boot the OpenWrt initramfs:
  # tftpboot openwrt-mediatek-filogic-tplink_eap683-lr-initramfs-kernel.bin
  # bootm
* copy openwrt-mediatek-filogic-tplink_eap683-lr-squashfs-sysupgrade.bin
  to /tmp and install it using sysupgrade

Flashing via OEM firmware is currently not supported. The
tplink-safeloader utility does not recognize the OEM firmware:

  DEBUG: can not find fwuphdr
  Firmware image partitions:
  base     size     name
  Segmentation fault (core dumped)

To revert to the OEM firmware, you can set the U-Boot environment
variable "tp_boot_idx" to 1 via bootloader, or using fw_setenv via
OpenWrt. This should result in booting from the ubi1 partition, which
OpenWrt should not touch. Then use the web interface to upgrade
firmware: System > Firmware Update.

The OEM firmware uses 0x800000 for the runtime_backup partition size.
This causes the following warning:

  mtd: partition "runtime_backup" extends beyond the end of device "nmbm_spim_nand" -- size truncated to 0x600000

This is due to the NMBM reserved blocks. Use 0x600000 in our DTS.

Thanks to init Lab's user890104, who soldered jumper wires on the TTL
pads for me so I could have serial console. My soldering skills just
aren't good enough to pull that off without risk damaging things.

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
package/boot/uboot-tools/uboot-envtools/files/mediatek_filogic
target/linux/mediatek/dts/mt7986a-tplink-eap683-lr.dts [new file with mode: 0644]
target/linux/mediatek/filogic/base-files/etc/board.d/02_network
target/linux/mediatek/filogic/base-files/etc/hotplug.d/firmware/11-mt76-caldata
target/linux/mediatek/image/filogic.mk

index 3e262044541f1cac49c6eef40496d003ae6ef3ac..0ba8e7f1e7986d4a87c2484c84f38cd63e99190b 100644 (file)
@@ -87,6 +87,7 @@ mercusys,mr90x-v1|\
 routerich,ax3000|\
 routerich,ax3000-v1|\
 tenbay,wr3000k|\
+tplink,eap683-lr|\
 tplink,re6000xd)
        ubootenv_add_mtd "u-boot-env" "0x0" "0x20000" "0x20000" "1"
        ;;
diff --git a/target/linux/mediatek/dts/mt7986a-tplink-eap683-lr.dts b/target/linux/mediatek/dts/mt7986a-tplink-eap683-lr.dts
new file mode 100644 (file)
index 0000000..90509c6
--- /dev/null
@@ -0,0 +1,300 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+
+/dts-v1/;
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/pinctrl/mt65xx.h>
+
+#include "mt7986a.dtsi"
+
+/ {
+       compatible = "tplink,eap683-lr", "mediatek,mt7986a";
+       model = "TP-Link EAP683-LR";
+
+       aliases {
+               serial0 = &uart0;
+               led-boot = &led_sys;
+               led-running = &led_sys;
+               led-upgrade = &led_sys;
+               led-failsafe = &led_sys;
+       };
+
+       /*
+        * OEM U-Boot overwrites bootargs set in u-boot-env when running the mtkboardboot command
+        *
+        * with tp_boot_idx unset or set != 1:
+        * console=ttyS0,115200n1 ubi.mtd=rootfs root=/dev/ubiblock0_0 rootfstype=squashfs rootwait loglevel=8 earlycon=uart8250,mmio32,0x11002000
+        *
+        * with tp_boot_idx set to 1:
+        * console=ttyS0,115200n1 ubi.mtd=rootfs_1 root=/dev/ubiblock0_0 rootfstype=squashfs rootwait loglevel=8 earlycon=uart8250,mmio32,0x11002000
+        */
+
+       chosen {
+               bootargs-append = " ubi.mtd=ubi root=/dev/ubiblock0_1";
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@40000000 {
+               reg = <0 0x40000000 0 0x20000000>;
+               device_type = "memory";
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               key-restart {
+                       label = "Reset";
+                       gpios = <&pio 9 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_sys: led-0 {
+                       function = LED_FUNCTION_STATUS;
+                       color = <LED_COLOR_ID_BLUE>;
+                       gpios = <&pio 11 GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
+
+&crypto {
+       status = "okay";
+};
+
+&eth {
+       status = "okay";
+
+       mac@1 {
+               compatible = "mediatek,eth-mac";
+               reg = <1>;
+               phy-handle = <&phy5>;
+               phy-mode = "2500base-x";
+
+       };
+
+
+       mdio-bus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reset-gpios = <&pio 10 GPIO_ACTIVE_LOW>;
+               reset-delay-us = <600>;
+               reset-post-delay-us = <20000>;
+
+               phy5: ethernet-phy@5 {
+                       compatible = "maxlinear,gpy211", "ethernet-phy-ieee802.3-c45";
+                       reg = <5>;
+                       phy-mode = "2500base-x";
+               };
+
+       };
+};
+
+&pcie {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_pins>;
+       status = "okay";
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pio {
+       pcie_pins: pcie-pins {
+               mux {
+                       function = "pcie";
+                       groups = "pcie_clk", "pcie_wake", "pcie_pereset";
+               };
+       };
+
+       spi_flash_pins: spi-flash-pins-33-to-38 {
+               mux {
+                       function = "spi";
+                       groups = "spi0", "spi0_wp_hold";
+               };
+               conf-pu {
+                       pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
+                       drive-strength = <MTK_DRIVE_8mA>;
+                       mediatek,pull-up-adv = <MTK_PUPD_SET_R1R0_11>;
+               };
+               conf-pd {
+                       pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
+                       drive-strength = <MTK_DRIVE_8mA>;
+                       mediatek,pull-down-adv = <MTK_PUPD_SET_R1R0_11>;
+               };
+       };
+
+        uart1_pins: uart1-pins {
+                mux {
+                        function = "uart";
+                        groups = "uart1_2_rx_tx", "uart1_2_cts_rts";
+                };
+        };
+
+       wf_2g_5g_pins: wf_2g_5g-pins {
+               mux {
+                       function = "wifi";
+                       groups = "wf_2g", "wf_5g";
+               };
+               conf {
+                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+                              "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+                              "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+                              "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+                              "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+                              "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+                              "WF1_TOP_CLK", "WF1_TOP_DATA";
+                       drive-strength = <MTK_DRIVE_4mA>;
+               };
+       };
+
+       wf_dbdc_pins: wf-dbdc-pins {
+               mux {
+                       function = "wifi";
+                       groups = "wf_dbdc";
+               };
+               conf {
+                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+                               "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+                               "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+                               "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+                               "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+                               "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+                               "WF1_TOP_CLK", "WF1_TOP_DATA";
+                       drive-strength = <4>;
+               };
+       };
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_flash_pins>;
+       status = "okay";
+
+       flash@0 {
+               compatible = "spi-nand";
+               reg = <0>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               spi-max-frequency = <52000000>;
+               spi-rx-bus-width = <4>;
+               spi-tx-bus-width = <4>;
+               mediatek,nmbm;
+               mediatek,bmt-max-ratio = <1>;
+               mediatek,bmt-max-reserved-blocks = <64>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               reg = <0x0 0x100000>;
+                               label = "BL2";
+                               read-only;
+                       };
+
+                       partition@100000 {
+                               reg = <0x100000 0x100000>;
+                               label = "boot-config";
+                               read-only;
+                       };
+
+                       partition@200000 {
+                               reg = <0x200000 0x100000>;
+                               label = "boot-config1";
+                               read-only;
+                       };
+
+                       partition@300000 {
+                               reg = <0x300000 0x100000>;
+                               label = "u-boot-env";
+                       };
+
+                       partition@400000 {
+                               reg = <0x400000 0x200000>;
+                               label = "FIP0";
+                               read-only;
+                       };
+
+                       partition@600000 {
+                               reg = <0x600000 0x200000>;
+                               label = "FIP1";
+                               read-only;
+                       };
+
+                       partition@800000 {
+                               reg = <0x800000 0x100000>;
+                               label = "oops";
+                       };
+
+                       partition@900000 {
+                               reg = <0x900000 0x2680000>;
+                               label = "ubi";
+                       };
+
+                       partition@2f80000 {
+                               reg = <0x2f80000 0x2680000>;
+                               label = "ubi1";
+                               read-only;
+                       };
+
+                       partition@5600000 {
+                               reg = <0x5600000 0x800000>;
+                               label = "factory";
+                               read-only;
+                       };
+
+                       partition@5e00000 {
+                               reg = <0x5e00000 0xc00000>;
+                               label = "runtime_data";
+                               read-only;
+                       };
+
+                       partition@6a00000 {
+                               reg = <0x6a00000 0x800000>;
+                               label = "backup_data";
+                               read-only;
+                       };
+
+                       partition@7200000 {
+                               reg = <0x7200000 0x600000>;
+                               label = "runtime_backup";
+                               read-only;
+                       };
+               };
+       };
+};
+
+&trng {
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "okay";
+};
+
+&uart2 {
+       status = "okay";
+};
+
+&watchdog {
+       status = "okay";
+};
+
+&wifi {
+       pinctrl-names = "default", "dbdc";
+       pinctrl-0 = <&wf_2g_5g_pins>;
+       pinctrl-1 = <&wf_dbdc_pins>;
+       status = "okay";
+};
index 95af3b04e39ecc59977d9c843b9e92a3cc91e410..d325f92a83520ee0385b20b1fe119c5160425bd8 100644 (file)
@@ -19,7 +19,8 @@ mediatek_setup_interfaces()
        zbtlink,zbt-z8103ax)
                ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1
                ;;
-       acelink,ew-7886cax)
+       acelink,ew-7886cax|
+       tplink,eap683-lr)
                ucidef_set_interface_lan "eth0" "dhcp"
                ;;
        acer,predator-w6|\
index c92b2926fe1ae48a2db784697cb96dc987bf014a..d7a4bb21df8d7eacd2f4c8b510a16ffdd2e4dac0 100644 (file)
@@ -33,6 +33,9 @@ case "$FIRMWARE" in
                ln -sf /tmp/tp_data/MT7986_EEPROM.bin \
                        /lib/firmware/$FIRMWARE
                ;;
+       tplink,eap683-lr)
+               caldata_from_file_ubifs "factory" "ubi_factory_data" "radio" 0x0 0x1000
+               ;;
        esac
        ;;
 *)
index 908c63ef661eb591fd7f57ceccec1503e597767f..469603834babbac1a339ef55402c25b6927e060b 100644 (file)
@@ -2053,6 +2053,23 @@ define Device/tplink_archer-ax80-v1
 endef
 TARGET_DEVICES += tplink_archer-ax80-v1
 
+define Device/tplink_eap683-lr
+  DEVICE_VENDOR := TP-Link
+  DEVICE_MODEL := EAP683-LR
+  DEVICE_DTS := mt7986a-tplink-eap683-lr
+  DEVICE_DTS_DIR := ../dts
+  DEVICE_PACKAGES := kmod-mt7915e kmod-mt7986-firmware mt7986-wo-firmware
+  UBINIZE_OPTS := -E 5
+  BLOCKSIZE := 128k
+  PAGESIZE := 2048
+  IMAGE_SIZE := 39424k
+  KERNEL_IN_UBI := 1
+  IMAGES += factory.bin
+  IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+TARGET_DEVICES += tplink_eap683-lr
+
 define Device/tplink_re6000xd
   DEVICE_VENDOR := TP-Link
   DEVICE_MODEL := RE6000XD