mediatek: filogic: add support for ipTIME AX3000M

ipTIME AX3000M is an 802.11ax (Wi-Fi 6) router, based on MediaTek
MT7981B. (Filogic 820)

Specifications:
* SoC: MetiaTek MT7981B
* RAM: 256MiB
* Flash: ESMT SPI-NAND F50L1G41LB 128MiB
* Wi-Fi:
  * MediaTek MT7915E: 2.4GHz and 5GHz
* Ethernet: 5x 1GbE
  * Switch: MediaTek MT7531
* USB: 1x 3.0
* UART: J4 (115200 baud)
* LED:
  * PWR: VCC
  * CPU, 2.4G, 5G: GPIO
  * LAN 1-4, WAN: Controlled by Switch

MAC Addresses:
* 2.4G, 5G: B0:XX:XX:04:2A:60 (factory 0x4)
* WAN: B0:XX:XX:04:2A:61 (factory 0x4, +1)
* LAN: B0:XX:XX:04:2A:63 (factory 0x4, +3)

MTD Partitions:
* 0x000000000000-0x000000100000 : "BL2"
* 0x000000100000-0x000000180000 : "u-boot-env"
* 0x000000180000-0x000000380000 : "Factory"
* 0x000000380000-0x000000580000 : "FIP"
* 0x000000580000-0x000007380000 : "ubi"

UBI Partitions (Dynamic):
* id: 0, kernel2
* id: 1, kernel
* id: 2, rootfs
* id: 3, rootfs_data
* id: 4, rootfs2

Installation:
* Upload factory image through the tftp recovery mode.

Notes:
* This device has a dual-boot partition scheme, if installing with the
stock web interface method will flash only on the inactive ubi partitions
which are kernel and rootfs, newly flashed kernel didn't know the proper
rootfs partition so the booted kernel will panic.

Tested-by: Rhnn Hur <hurrhnn@icmp.kr>
Signed-off-by: Rhnn Hur <hurrhnn@icmp.kr>
Link: https://github.com/openwrt/openwrt/pull/16643
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Rhnn Hur 2024-10-20 20:14:28 +09:00 committed by Hauke Mehrtens
parent ea002c077d
commit cefb814fca
4 changed files with 287 additions and 1 deletions

View file

@ -81,7 +81,8 @@ jdcloud,re-cp-03)
;;
esac
;;
comfast,cf-e393ax)
comfast,cf-e393ax|\
iptime,ax3000m)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x80000"
;;
cetron,ct3003|\

View file

@ -0,0 +1,264 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "mt7981b.dtsi"
/ {
model = "ipTIME AX3000M";
compatible = "iptime,ax3000m", "mediatek,mt7981";
aliases {
label-mac-device = &gmac0;
led-boot = &led_cpu;
led-failsafe = &led_cpu;
led-running = &led_cpu;
led-upgrade = &led_cpu;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
bootargs-append = " ubi.mtd=ubi rootfstype=squashfs";
};
memory@40000000 {
reg = <0 0x40000000 0 0x10000000>;
device_type = "memory";
};
leds {
compatible = "gpio-leds";
led_cpu: cpu {
function = LED_FUNCTION_CPU;
color = <LED_COLOR_ID_AMBER>;
gpios = <&pio 15 GPIO_ACTIVE_LOW>;
};
wlan2g {
function = "LED_FUNCTION_WLAN_2GHZ";
color = <LED_COLOR_ID_AMBER>;
gpios = <&pio 34 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};
wlan5g {
function = "LED_FUNCTION_WLAN_5GHZ";
color = <LED_COLOR_ID_AMBER>;
gpios = <&pio 35 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
linux,code = <KEY_WPS_BUTTON>;
};
};
};
&pio {
nand_pins: spi0-pins {
mux {
function = "spi";
groups = "spi0", "spi0_wp_hold";
};
conf-pu {
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
drive-strength = <MTK_DRIVE_4mA>;
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
};
conf-pd {
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
drive-strength = <MTK_DRIVE_4mA>;
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
};
};
};
&uart0 {
status = "okay";
};
&eth {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins &gbe_led0_pins>;
status = "okay";
gmac0: mac@0 {
compatible = "mediatek,eth-mac";
reg = <0>;
phy-mode = "2500base-x";
nvmem-cells = <&macaddr_factory_4 3>;
nvmem-cell-names = "mac-address";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
mac@1 {
compatible = "mediatek,eth-mac";
reg = <1>;
label = "wan";
phy-mode = "gmii";
phy-handle = <&int_gbe_phy>;
nvmem-cells = <&macaddr_factory_4 1>;
nvmem-cell-names = "mac-address";
};
};
&mdio_bus {
switch: switch@1f {
compatible = "mediatek,mt7531";
reg = <31>;
reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
label = "lan4";
};
port@1 {
reg = <1>;
label = "lan3";
};
port@2 {
reg = <2>;
label = "lan2";
};
port@3 {
reg = <3>;
label = "lan1";
};
port@6 {
reg = <6>;
ethernet = <&gmac0>;
phy-mode = "2500base-x";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
};
};
};
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&nand_pins>;
spi_nand@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "spi-nand";
reg = <0>;
spi-max-frequency = <52000000>;
spi-tx-bus-width = <4>;
spi-rx-bus-width = <4>;
mediatek,nmbm;
mediatek,bmt-max-ratio = <1>;
mediatek,bmt-max-reserved-blocks = <64>;
mediatek,bmt-remap-range = <0x000000 0x580000>;
partitions: partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "BL2";
reg = <0x00 0x100000>;
read-only;
};
partition@100000 {
label = "u-boot-env";
reg = <0x100000 0x80000>;
};
factory: partition@180000 {
label = "Factory";
reg = <0x180000 0x200000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_factory_4: macaddr@4 {
compatible = "mac-base";
reg = <0x4 0x6>;
#nvmem-cell-cells = <1>;
};
};
};
partition@380000 {
label = "FIP";
reg = <0x380000 0x200000>;
read-only;
};
partition@580000 {
label = "ubi";
reg = <0x580000 0x6e00000>;
};
};
};
};
&usb_phy {
status = "okay";
};
&xhci {
status = "okay";
};
&wifi {
status = "okay";
band@0 {
reg = <0>;
nvmem-cells = <&macaddr_factory_4 0>;
nvmem-cell-names = "mac-address";
};
band@1 {
reg = <1>;
nvmem-cells = <&macaddr_factory_4 0>;
nvmem-cell-names = "mac-address";
};
};

View file

@ -119,6 +119,7 @@ case "$board" in
addr=$(mtd_get_mac_binary "Factory" 0x4)
[ "$PHYNBR" = "1" ] && macaddr_setbit_la $addr > /sys${DEVPATH}/macaddress
;;
iptime,ax3000m|\
iptime,ax3000sm)
addr=$(mtd_get_mac_binary "Factory" 0x4)
[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(macaddr_unsetbit $(macaddr_unsetbit $(macaddr_unsetbit $(macaddr_setbit $addr 26) 25) 27) 28) > \

View file

@ -1273,6 +1273,26 @@ define Device/iptime_ax3000sm
endef
TARGET_DEVICES += iptime_ax3000sm
define Device/iptime_ax3000m
DEVICE_VENDOR := ipTIME
DEVICE_MODEL := AX3000M
DEVICE_DTS := mt7981b-iptime-ax3000m
DEVICE_DTS_DIR := ../dts
BLOCKSIZE := 128k
PAGESIZE := 2048
IMAGE_SIZE := 32768k
KERNEL := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
KERNEL_INITRAMFS := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k
IMAGES := factory.bin sysupgrade.bin
IMAGE/factory.bin := sysupgrade-tar | append-metadata | check-size | iptime-crc32 ax3000m
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
DEVICE_PACKAGES := kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware
SUPPORTED_DEVICES += mediatek,mt7981-spim-snand-rfb
endef
TARGET_DEVICES += iptime_ax3000m
define Device/jcg_q30-pro
DEVICE_VENDOR := JCG
DEVICE_MODEL := Q30 PRO