ramips: add support for ALFA Network AX1800RM

ALFA Network AX1800RM (FCC ID: 2AB877621) is a dual-band Wi-Fi 6
(AX1800) router, based on MediaTek MT7621A + MT79x5D platform.

Specifications:

- SOC:      MT7621A (880 MHz)
- DRAM:     DDR3 256 MiB (Nanya NT5CC128M16JR-EK)
- Flash:    16 MiB SPI NOR (EN25QH128A-104HIP)
- Ethernet: 4x 10/100/1000 Mbps (SOC's built-in switch)
- Wi-Fi:    2x2:2 2.4/5 GHz (MT7905DAN + MT7975DN)
            (MT7905DAN doesn't support background DFS scan/BT)
- LED:      6x green, 1x green/red
- Buttons:  2x (reset, WPS)
- Antenna:  4x external, non-detachable omnidirectional
- UART:     1x 4-pin (2.54 mm pitch, J4, not populated)
- Power:    12 V DC/1 A (DC jack)

MAC addresses:

LAN:     00:c0:ca:xx:xx:4e (factory 0x4, +2)
WAN:     00:c0:ca:xx:xx:4f (factory 0x4, +3)
2.4 GHz: 00:c0:ca:xx:xx:4c (factory 0x4, device's label)
5 GHz:   00:c0:ca:xx:xx:4c (factory 0xa)

Flash instructions for web-based U-Boot recovery:

1. Power the device with WPS button pressed and wait around 10 seconds.
2. Setup static IP 192.168.1.2/24 on your PC.
3. Go to 192.168.1.1 in browser and upload 'recovery' image.

The device runs LEDE 17.01 (kernel 4.4.x) based firmware with 'failsafe'
mode available which allows alternative upgrade method:

1. Run device in 'failsafe' mode and change password for default user.
2. SSH to the device, transfer 'sysupgrade' image and perform upgrade
   in forced mode, without preserving settings: 'sysupgrade -n -F ...'.

Other notes:

If you own early version of this device, the vendor firmware might
refuse OpenWrt image because of missing custom header. In that case,
ask vendor's customer support for stock firmware without custom header
support/requirement.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
This commit is contained in:
Piotr Dymacz 2023-07-28 11:41:14 +02:00
parent 948ad2ec7a
commit f1aaa267f0
4 changed files with 264 additions and 28 deletions

View File

@ -0,0 +1,216 @@
// 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>
#include <dt-bindings/leds/common.h>
/ {
compatible = "alfa-network,ax1800rm", "mediatek,mt7621-soc";
model = "ALFA Network AX1800RM";
aliases {
label-mac-device = &wifi0;
led-boot = &led_power;
led-failsafe = &led_wan_red;
led-running = &led_power;
led-upgrade = &led_power;
};
chosen {
bootargs = "console=ttyS0,115200";
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
};
leds {
compatible = "gpio-leds";
lan1 {
label = "green:lan1";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
gpios = <&gpio 3 GPIO_ACTIVE_HIGH>;
};
lan2 {
label = "green:lan2";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
};
lan3 {
label = "green:lan3";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
};
led_power: power {
label = "green:power";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
};
wan_green {
label = "green:wan";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
led_wan_red: wan_red {
label = "red:wan";
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_WAN;
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
};
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
m25p,fast-read;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x0 0x30000>;
read-only;
};
partition@30000 {
label = "u-boot-env";
reg = <0x30000 0x10000>;
};
partition@40000 {
label = "boot-config";
reg = <0x40000 0x10000>;
read-only;
};
partition@50000 {
compatible = "nvmem-cells";
label = "factory";
reg = <0x50000 0x10000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
eeprom: eeprom@0 {
reg = <0x0 0xe00>;
};
macaddr: macaddr@4 {
compatible = "mac-base";
reg = <0x4 0x6>;
#nvmem-cell-cells = <1>;
};
};
};
partition@60000 {
label = "permanent_config";
reg = <0x60000 0x80000>;
read-only;
};
partition@e0000 {
compatible = "denx,fit";
label = "firmware";
reg = <0xe0000 0xf20000>;
};
};
};
};
&pcie {
status = "okay";
};
&pcie1 {
wifi0: wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
nvmem-cells = <&eeprom>;
nvmem-cell-names = "eeprom";
mediatek,disable-radar-background;
};
};
&gmac0 {
nvmem-cells = <&macaddr 2>;
nvmem-cell-names = "mac-address";
};
&gmac1 {
status = "okay";
label = "wan";
phy-handle = <&ethphy4>;
nvmem-cells = <&macaddr 3>;
nvmem-cell-names = "mac-address";
};
&mdio {
ethphy4: ethernet-phy@4 {
reg = <4>;
};
};
&switch0 {
ports {
port@0 {
status = "okay";
label = "lan1";
};
port@1 {
status = "okay";
label = "lan2";
};
port@2 {
status = "okay";
label = "lan3";
};
};
};
&state_default {
gpio {
groups = "i2c", "jtag", "uart3", "wdt";
function = "gpio";
};
};

View File

@ -209,6 +209,18 @@ define Device/afoundry_ew1200
endef
TARGET_DEVICES += afoundry_ew1200
define Device/alfa-network_ax1800rm
$(Device/dsa-migration)
IMAGE_SIZE := 15488k
DEVICE_VENDOR := ALFA Network
DEVICE_MODEL := AX1800RM
DEVICE_PACKAGES := kmod-mt7915-firmware
KERNEL := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
IMAGES += recovery.bin
IMAGE/recovery.bin := append-kernel | append-rootfs | pad-rootfs | check-size
endef
TARGET_DEVICES += alfa-network_ax1800rm
define Device/alfa-network_quad-e4g
$(Device/dsa-migration)
IMAGE_SIZE := 16064k

View File

@ -7,6 +7,12 @@ board=$(board_name)
board_config_update
case $board in
alfa-network,ax1800rm)
ucidef_set_led_netdev "lan1" "lan1" "green:lan1" "lan1"
ucidef_set_led_netdev "lan2" "lan2" "green:lan2" "lan2"
ucidef_set_led_netdev "lan3" "lan3" "green:lan3" "lan3"
ucidef_set_led_netdev "wan" "wan" "green:wan" "wan"
;;
asus,rp-ac87)
ucidef_set_rssimon "wlan0" "200000" "1"
ucidef_set_rssimon "wlan1" "200000" "1"

View File

@ -8,6 +8,26 @@ ramips_setup_interfaces()
local board="$1"
case $board in
alfa-network,ax1800rm|\
ampedwireless,ally-r1900k|\
asus,rt-ax53u|\
gehua,ghl-r-001|\
h3c,tx1800-plus|\
h3c,tx1801-plus|\
h3c,tx1806|\
haier,har-20s2u1|\
hiwifi,hc5962|\
netgear,wax202|\
sim,simax1800t|\
xiaomi,mi-router-3-pro|\
xiaomi,mi-router-ac2100|\
xiaomi,mi-router-cr6606|\
xiaomi,mi-router-cr6608|\
xiaomi,mi-router-cr6609|\
xiaomi,redmi-router-ac2100|\
zyxel,wsm20)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
;;
arcadyan,we420223-99)
ucidef_set_interface_lan "swp0 swp1"
;;
@ -39,25 +59,6 @@ ramips_setup_interfaces()
zyxel,nwa55axe)
ucidef_set_interface_lan "lan"
;;
ampedwireless,ally-r1900k|\
asus,rt-ax53u|\
gehua,ghl-r-001|\
h3c,tx1800-plus|\
h3c,tx1801-plus|\
h3c,tx1806|\
haier,har-20s2u1|\
hiwifi,hc5962|\
netgear,wax202|\
sim,simax1800t|\
xiaomi,mi-router-3-pro|\
xiaomi,mi-router-ac2100|\
xiaomi,mi-router-cr6606|\
xiaomi,mi-router-cr6608|\
xiaomi,mi-router-cr6609|\
xiaomi,redmi-router-ac2100|\
zyxel,wsm20)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
;;
asiarf,ap7621-001|\
humax,e10|\
wavlink,ws-wn572hp3-4g|\
@ -166,6 +167,16 @@ ramips_setup_macs()
local label_mac=""
case $board in
alfa-network,ax1800rm|\
jcg,y2|\
wavlink,wl-wn531a6|\
wavlink,wl-wn533a8|\
winstars,ws-wn583a6|\
zbtlink,zbt-we1326|\
zbtlink,zbt-wg3526-16m|\
zbtlink,zbt-wg3526-32m)
label_mac=$(mtd_get_mac_binary factory 0x4)
;;
ampedwireless,ally-00x19k)
lan_mac=$(mtd_get_mac_ascii hwconfig HW.LAN.MAC.Address)
label_mac=$lan_mac
@ -236,15 +247,6 @@ ramips_setup_macs()
lan_mac=$(mtd_get_mac_ascii config ethaddr)
wan_mac=$(macaddr_add "$lan_mac" 1)
;;
jcg,y2|\
wavlink,wl-wn531a6|\
wavlink,wl-wn533a8|\
winstars,ws-wn583a6|\
zbtlink,zbt-we1326|\
zbtlink,zbt-wg3526-16m|\
zbtlink,zbt-wg3526-32m)
label_mac=$(mtd_get_mac_binary factory 0x4)
;;
linksys,e5600|\
linksys,ea6350-v4|\
linksys,ea7300-v1|\