Skip to content

Commit

Permalink
ramips: add support for ipTIME AX2004M
Browse files Browse the repository at this point in the history
ipTIME AX2004M is an 802.11ax (Wi-Fi 6) router, based on MediaTek
MT7621A.

Specifications:
* SoC: MT7621A
* RAM: 256 MiB
* Flash: NAND 128 MiB
* Wi-Fi:
  * MT7915D: 2.4/5 GHz (DBDC)
* Ethernet: 5x 1GbE
  * Switch: SoC built-in
* USB: 1x 3.0
* UART: J4 (115200 baud)
  * Pinout: [3V3] (TXD) (RXD) (GND)

MAC addresses:

| interface |    MAC address    |     source     | comment
|-----------|-------------------|----------------|---------
|       LAN | 58:xx:xx:00:xx:9B |                | [1]
|       WAN | 58:xx:xx:00:xx:99 |                |
|   WLAN 2G | 58:xx:xx:00:xx:98 | factory 0x4    |
|   WLAN 5G | 5A:xx:xx:40:xx:98 |                |
|           | 58:xx:xx:00:xx:98 | config ethaddr |

[1] Used in this patch as WLAN 5G MAC address with the local bit set

Load addresses:
* stock
  * 0x80010000: FIT image
  * 0x81001000: kernel image -> entry
* OpenWrt
  * 0x80010000: FIT image
  * 0x82000000: uncompressed kernel+relocate image
  * 0x80001000: relocated kernel image -> entry

Notes:
* This device has a dual-boot partition scheme, but this firmware works
  only on boot partition 1. The stock web interface will flash only on the
  inactive boot partition, but the recovery web page will always flash on
  boot partition 1.

Installation via recovery mode:
1.  Press reset button, power up the device, wait >10s for CPU LED
    to stop blinking.
2.  Upload recovery image through the recovery web page at 192.168.0.1.

Revert to stock firmware:
1.  Install stock image via recovery mode.

Signed-off-by: Sungbo Eo <mans0n@gorani.run>
  • Loading branch information
mans0n committed Feb 11, 2022
1 parent bc05cfa commit 37753f3
Show file tree
Hide file tree
Showing 5 changed files with 197 additions and 0 deletions.
5 changes: 5 additions & 0 deletions include/image-commands.mk
Expand Up @@ -295,6 +295,11 @@ define Build/install-dtb
)
endef

define Build/iptime-crc32
$(STAGING_DIR_HOST)/bin/iptime-crc32 $(1) $@ $@.new
mv $@.new $@
endef

define Build/iptime-naspkg
$(STAGING_DIR_HOST)/bin/iptime-naspkg $(1) $@ $@.new
mv $@.new $@
Expand Down
165 changes: 165 additions & 0 deletions target/linux/ramips/dts/mt7621_iptime_ax2004m.dts
@@ -0,0 +1,165 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "mt7621.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
compatible = "iptime,ax2004m", "mediatek,mt7621-soc";
model = "ipTIME AX2004M";

aliases {
led-boot = &led_cpu;
led-failsafe = &led_cpu;
led-running = &led_cpu;
led-upgrade = &led_cpu;
};

chosen {
bootargs = "console=ttyS0,115200";
};

leds {
compatible = "gpio-leds";

led_cpu: cpu {
label = "amber:cpu";
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
};

wlan2g {
label = "amber:wlan2g";
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0radio";
};

wlan5g {
label = "amber:wlan5g";
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1radio";
};
};

keys {
compatible = "gpio-keys";

reset {
label = "reset";
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
};
};

&nand {
status = "okay";

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "u-boot";
reg = <0x0 0x80000>;
read-only;
};

partition@80000 {
label = "config";
reg = <0x80000 0x80000>;
read-only;
};

factory: partition@100000 {
label = "factory";
reg = <0x100000 0x80000>;
read-only;

compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

macaddr_factory_4: macaddr@4 {
reg = <0x4 0x6>;
};
};

partition@180000 {
label = "firmware";
reg = <0x180000 0x7680000>;

compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "kernel";
reg = <0x0 0x400000>;
};

partition@400000 {
label = "ubi";
reg = <0x400000 0x7280000>;
};
};
};
};

&state_default {
gpio {
groups = "i2c", "jtag", "wdt";
function = "gpio";
};
};

&gmac0 {
nvmem-cells = <&macaddr_factory_4>;
nvmem-cell-names = "mac-address";
mac-address-increment = <3>;
};

&switch0 {
ports {
port@0 {
status = "okay";
label = "wan";
nvmem-cells = <&macaddr_factory_4>;
nvmem-cell-names = "mac-address";
mac-address-increment = <1>;
};

port@1 {
status = "okay";
label = "lan4";
};

port@2 {
status = "okay";
label = "lan3";
};

port@3 {
status = "okay";
label = "lan2";
};

port@4 {
status = "okay";
label = "lan1";
};
};
};

&pcie {
status = "okay";
};

&pcie1 {
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x0>;
};
};
20 changes: 20 additions & 0 deletions target/linux/ramips/image/mt7621.mk
Expand Up @@ -817,6 +817,26 @@ define Device/iptime_a8004t
endef
TARGET_DEVICES += iptime_a8004t

define Device/iptime_ax2004m
$(Device/dsa-migration)
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
IMAGE_SIZE := 121344k
UBINIZE_OPTS := -E 5
KERNEL_LOADADDR := 0x82000000
KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
IMAGES += recovery.bin
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
IMAGE/recovery.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
check-size | iptime-crc32 ax2004m
DEVICE_VENDOR := ipTIME
DEVICE_MODEL := AX2004M
DEVICE_PACKAGES := kmod-mt7915e kmod-usb3
endef
TARGET_DEVICES += iptime_ax2004m

define Device/iptime_t5004
$(Device/dsa-migration)
BLOCKSIZE := 128k
Expand Down
Expand Up @@ -25,6 +25,12 @@ case "$board" in
[ "$PHYNBR" = "1" ] && \
macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress
;;
iptime,ax2004m)
if [ "$PHYNBR" = "1" ]; then
hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
macaddr_setbit_la "$(macaddr_add $hw_mac_addr 3)" > /sys${DEVPATH}/macaddress
fi
;;
jcg,q20)
[ "$PHYNBR" = "1" ] && \
macaddr_setbit_la "$(mtd_get_mac_binary Factory 0x4)" > /sys${DEVPATH}/macaddress
Expand Down
Expand Up @@ -59,6 +59,7 @@ platform_do_upgrade() {
dlink,dir-853-a3|\
hiwifi,hc5962|\
iptime,a3004t|\
iptime,ax2004m|\
iptime,t5004|\
jcg,q20|\
linksys,e5600|\
Expand Down

0 comments on commit 37753f3

Please sign in to comment.