From 3cc223243b848b87a4c82b219f24cdb17ee9a771 Mon Sep 17 00:00:00 2001 From: Piotr Dymacz Date: Fri, 28 Jul 2023 11:41:14 +0200 Subject: [PATCH 1/3] 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 (backported from commit f1aaa267f0ea18ffe5840f3ce46a48be123d2f62) --- .../dts/mt7621_alfa-network_ax1800rm.dts | 208 ++++++++++++++++++ target/linux/ramips/image/mt7621.mk | 12 + .../mt7621/base-files/etc/board.d/01_leds | 6 + .../mt7621/base-files/etc/board.d/02_network | 58 ++--- 4 files changed, 256 insertions(+), 28 deletions(-) create mode 100644 target/linux/ramips/dts/mt7621_alfa-network_ax1800rm.dts diff --git a/target/linux/ramips/dts/mt7621_alfa-network_ax1800rm.dts b/target/linux/ramips/dts/mt7621_alfa-network_ax1800rm.dts new file mode 100644 index 0000000000..ecf8fe34ef --- /dev/null +++ b/target/linux/ramips/dts/mt7621_alfa-network_ax1800rm.dts @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "mt7621.dtsi" + +#include +#include +#include + +/ { + 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 = ; + }; + + wps { + label = "wps"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + lan1 { + label = "green:lan1"; + color = ; + function = LED_FUNCTION_LAN; + gpios = <&gpio 3 GPIO_ACTIVE_HIGH>; + }; + + lan2 { + label = "green:lan2"; + color = ; + function = LED_FUNCTION_LAN; + gpios = <&gpio 4 GPIO_ACTIVE_LOW>; + }; + + lan3 { + label = "green:lan3"; + color = ; + function = LED_FUNCTION_LAN; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + }; + + led_power: power { + label = "green:power"; + color = ; + function = LED_FUNCTION_POWER; + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; + }; + + wan_green { + label = "green:wan"; + color = ; + function = LED_FUNCTION_WAN; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + }; + + led_wan_red: wan_red { + label = "red:wan"; + color = ; + 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; + }; + + factory: partition@50000 { + label = "factory"; + reg = <0x50000 0x10000>; + read-only; + + compatible = "nvmem-cells"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr: macaddr@4 { + reg = <0x4 0x6>; + }; + }; + + 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>; + + mediatek,mtd-eeprom = <&factory 0x0>; + mediatek,disable-radar-background; + }; +}; + +&gmac0 { + nvmem-cells = <&macaddr>; + nvmem-cell-names = "mac-address"; + mac-address-increment = <2>; +}; + +&gmac1 { + status = "okay"; + label = "wan"; + phy-handle = <ðphy4>; + + nvmem-cells = <&macaddr>; + nvmem-cell-names = "mac-address"; + mac-address-increment = <3>; +}; + +&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"; + }; +}; diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index fa4c83dbe1..2675c7d08b 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -178,6 +178,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 diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds index 1f91905bd8..3ceac60434 100644 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds @@ -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" 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 6057c17192..11a7c9465a 100644 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network @@ -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" ;; @@ -37,25 +57,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|\ @@ -157,6 +158,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 @@ -222,15 +233,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|\ From 0165daf569f166501b53e0b34ca64d1ad817252a Mon Sep 17 00:00:00 2001 From: Piotr Dymacz Date: Fri, 28 Jul 2023 12:21:49 +0200 Subject: [PATCH 2/3] uboot-envtools: ramips: add support for ALFA Network AX1800RM Signed-off-by: Piotr Dymacz (backported from commit 69f12c2f23c6d32a5fdda2385b4156c9b8bfae22) --- package/boot/uboot-envtools/files/ramips | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package/boot/uboot-envtools/files/ramips b/package/boot/uboot-envtools/files/ramips index 0abb5f6549..8c7ce71c49 100644 --- a/package/boot/uboot-envtools/files/ramips +++ b/package/boot/uboot-envtools/files/ramips @@ -24,15 +24,16 @@ sitecom,wlr-4100-v1-002|\ zyxel,keenetic-lite-iii-a) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x1000" ;; -arcadyan,we420223-99) - ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x1000" "0x1000" - ;; +alfa-network,ax1800rm|\ allnet,all0256n-4m|\ allnet,all0256n-8m|\ allnet,all5002|\ yuncore,ax820) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000" ;; +arcadyan,we420223-99) + ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x1000" "0x1000" + ;; ampedwireless,ally-00x19k|\ ampedwireless,ally-r1900k) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x20000" "4" From 6577b550df89766d10375aacc87c56a4658c3776 Mon Sep 17 00:00:00 2001 From: Hannu Nyman Date: Fri, 8 Sep 2023 19:47:01 +0300 Subject: [PATCH 3/3] base-files: sysupgrade: Add 2 sec sleep into process KILL loop Add 2 seconds sleep after each forcibly killed/tried-to-kill process in the final process termination loop in sysupgrade stage2. This is needed especially for qualcommax/ipq807x, where ath11k wireless driver may have a long 10-20 seconds delay after termination before actually getting killed. This often breaks sysupgrade. The current KILL loop in kill_remaining does all 10 kill attempts consecutively without any delay, as evidenced here in a failing sysupgrade. It does not allow any time for the process to finalize its internal termination. Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending TERM to remaining processes ... Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending signal TERM to hostapd (2122) Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending signal TERM to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending KILL to remaining processes ... Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2122) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Failed to kill all processes. sysupgrade aborted with return code: 256 The change in this commit adds a 2 seconds delay after each kill attempt in order to allow some processes to more gracefully handle their internal termination. The result is like this: Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending TERM to remaining processes ... Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending signal TERM to hostapd (2309) Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending signal TERM to hostapd (2324) Sun Sep 3 11:15:14 EEST 2023 upgrade: Sending KILL to remaining processes ... Sun Sep 3 11:15:14 EEST 2023 upgrade: Sending signal KILL to hostapd (2309) [ 699.827521] br-lan: port 7(hn5wpa2r) entered disabled state [ 699.908673] device hn5wpa2r left promiscuous mode [ 699.908721] br-lan: port 7(hn5wpa2r) entered disabled state [ 701.038029] br-lan: port 6(hn5wpa3) entered disabled state Sun Sep 3 11:15:16 EEST 2023 upgrade: Sending signal KILL to hostapd (2324) [ 702.058256] br-lan: port 5(hn2wlan) entered disabled state [ 709.250063] stage2 (8237): drop_caches: 3 Sun Sep 3 11:15:25 EEST 2023 upgrade: Switching to ramdisk... The delay introduced here only kicks in if there is some process that does not get terminated by the first TERM call. Then there is at least one 2 sec wait after the first KILL loop round. This commit is related to discussion in PRs #12235 and #12632 Signed-off-by: Hannu Nyman Reviewed-by: Robert Marko (cherry picked from commit 47d56ae5463f1965750d3f75390c96d69f969145) --- package/base-files/files/lib/upgrade/stage2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index f4db88d31e..5ce0b3549c 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -121,7 +121,7 @@ kill_remaining() { # [ [ ] ] v "Sending signal $sig to $name ($pid)" kill -$sig $pid 2>/dev/null - [ $loop -eq 1 ] && run=true + [ $loop -eq 1 ] && sleep 2 && run=true done let loop_limit--