On Wed, Jun 10, 2026 at 7:49 PM Ivan Lee <[email protected]> wrote: > > From ec4f26478cb171b6f5d503551261a50048867faa Mon Sep 17 00:00:00 2001 > From: Ivan Lee <[email protected]> > Date: Tue, 9 Jun 2026 15:13:31 +0800 > Subject: [PATCH] ramips: add support for Dragonglass DGX25 (AX1800) > > The Dragonglass DGX25 is an AX1800 Wi-Fi 6 dual-band wireless router. > > Specifications: > - SoC: MediaTek MT7621AT (MIPS 1004Kc, dual-core @880MHz) > - RAM: 256MB DDR3 (W632GG6MB-09 / NT5CC128M16JR-EK) > - Flash: GigaDevice GD25Q127C 16MB (SPI NOR), or > Winbond W25N01GV 128MB (parallel NAND) > - WiFi: MediaTek MT7915D (AX1800) 2.4GHz + 5GHz via dual PCIe > - Ethernet: 1x WAN + 4x LAN (MT7530 DSA) > - USB: 1x USB 3.0 > - LEDs: Power/Status, WAN, LAN, WLAN, Mesh > - Buttons: Reset, WPS > - Serial: 3.3V TTL, 115200n8 > > Both NOR and NAND flash variants are supported. > > NOR: Standard SPI NOR layout with 192KB u-boot, factory at 0x40000, > kernel + rootfs as a single firmware partition (IMAGE_SIZE=15808k > matching the 0xF70000 firmware partition). Sysupgrade extracts > kernel+root from tar and writes directly to the firmware MTD. > > NAND: Parallel NAND controller with nmbm/bmt bad block management. > Uses separate kernel (4MB FIT) and UBI (~115MB) partitions for > rootfs and overlay. EEPROM calibration data is accessed via nvmem > cells from the read-only factory partition. > WiFi: Uses mt7915e driver with mt7915-firmware. > > Signed-off-by: Ivan Lee <[email protected]> > --- > .../uboot-tools/uboot-envtools/files/ramips | 8 + > .../dts/mt7621_dragonglass_dgx25-nand.dts | 145 +++++++++++++++ > .../ramips/dts/mt7621_dragonglass_dgx25.dts | 92 ++++++++++ > .../ramips/dts/mt7621_dragonglass_dgx25.dtsi | 165 ++++++++++++++++++ > target/linux/ramips/image/mt7621.mk | 32 ++++ > .../mt7621/base-files/etc/board.d/02_network | 10 ++ > .../mt7621/base-files/lib/upgrade/platform.sh | 12 ++ > 7 files changed, 464 insertions(+) > create mode 100644 target/linux/ramips/dts/mt7621_dragonglass_dgx25-nand.dts > create mode 100644 target/linux/ramips/dts/mt7621_dragonglass_dgx25.dts > create mode 100644 target/linux/ramips/dts/mt7621_dragonglass_dgx25.dtsi > > diff --git a/package/boot/uboot-tools/uboot-envtools/files/ramips > b/package/boot/uboot-tools/uboot-envtools/files/ramips > index b4b1ad4..7fade5a 100644 > --- a/package/boot/uboot-tools/uboot-envtools/files/ramips > +++ b/package/boot/uboot-tools/uboot-envtools/files/ramips > @@ -36,6 +36,14 @@ plasmacloud,pax1800-lite|\ > yuncore,ax820) > ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000" > ;; > +dragonglass,dgx25) > + ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000" > + ;; > +dragonglass,dgx25-nand) > + ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x80000" "0x20000" > + ;; > + > + > ampedwireless,ally-00x19k|\ > ampedwireless,ally-r1900k) > ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x20000" "4" > diff --git a/target/linux/ramips/dts/mt7621_dragonglass_dgx25-nand.dts > b/target/linux/ramips/dts/mt7621_dragonglass_dgx25-nand.dts > new file mode 100644 > index 0000000..fcc712a > --- /dev/null > +++ b/target/linux/ramips/dts/mt7621_dragonglass_dgx25-nand.dts > @@ -0,0 +1,145 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > + > +/* > + * Dragonglass DGX25 (NAND variant) - AX1800 Dual-band Wireless Router > + * > + * Specs: > + * - SoC: MediaTek MT7621AT (MIPS 1004Kc, dual-core @ 880 MHz) > + * - RAM: 256 MB DDR3 (W632GG6MB-09 / NT5CC128M16JR-EK) > + * - Flash: Winbond W25N01GV 128 MB (MT7621 parallel NAND) > + * - WiFi: MediaTek MT7915D (AX1800) - 2.4G + 5G via dual PCIe > + * - Ports: 1x WAN + 4x LAN (DSA, MT7530 switch) > + * - USB: 1x USB 3.0 > + * > + * NOTE: The factory-installed U-Boot runs a "dual image check" that > + * requires a squashfs rootfs sub-image inside the kernel FIT. This > + * OpenWrt build creates a kernel-only FIT (no embedded rootfs). To > + * enable auto-boot, the U-Boot bootcmd must be changed to skip the > + * dual image check: > + * setenv bootcmd nand read 0x82000000 0x180000 0x400000\; bootm 0x82000000 > + * setenv bootdelay 2 > + * saveenv > + * Alternatively, include rootfs in the FIT via external-static-with-rootfs > + * (requires enlarging the kernel partition and adjusting the UBI offset). > + */ > + > +#include "mt7621_dragonglass_dgx25.dtsi" > + > +/ { > + compatible = "dragonglass,dgx25-nand", "dragonglass,dgx25", > "mediatek,mt7621-soc"; > + model = "Dragonglass DGX25 NAND (AX1800)"; > +}; > + > +/* > + * Parallel NAND flash (128 MB via MT7621 NAND controller): > + * u-boot: 0x000000-0x080000 (512 KB) > + * config: 0x080000-0x100000 (512 KB) > + * factory: 0x100000-0x180000 (512 KB) > + * firmware: 0x180000-0x7800000 (~119 MB, kernel+UBI) > + */ > +&nand { > + status = "okay"; > + > + 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 { > + label = "u-boot"; > + reg = <0x0 0x80000>; > + read-only; > + }; > + > + partition@80000 { > + label = "config"; > + reg = <0x80000 0x80000>; > + }; > + > + partition@100000 { > + label = "factory"; > + reg = <0x100000 0x80000>; > + read-only; > + > + nvmem-layout { > + compatible = "fixed-layout"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + eeprom_factory_0: eeprom@0 { > + reg = <0x0 0x1000>; > + }; > + > + macaddr_factory_4: macaddr@4 { > + compatible = "mac-base"; > + reg = <0x4 0x6>; > + #nvmem-cell-cells = <1>; > + }; > + > + macaddr_factory_3fff4: macaddr@3fff4 { > + reg = <0x3fff4 0x6>; > + }; > + > + macaddr_factory_3fffa: macaddr@3fffa { > + reg = <0x3fffa 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>; > + }; > + }; > + }; > +}; > + > +&pcie0 { > + wifi@0,0 { > + nvmem-cells = <&eeprom_factory_0>; > + nvmem-cell-names = "eeprom"; > + }; > +}; > + > +&pcie1 { > + wifi@0,0 { > + nvmem-cells = <&eeprom_factory_0>; > + nvmem-cell-names = "eeprom"; > + }; > +}; > + > +&gmac0 { > + nvmem-cells = <&macaddr_factory_4>; > + nvmem-cell-names = "mac-address"; > +}; > + > +&gmac1 { > + nvmem-cells = <&macaddr_factory_3fff4>; > + nvmem-cell-names = "mac-address"; > +}; > + > +&switch0 { > + ports { > + port@4 { > + nvmem-cells = <&macaddr_factory_3fffa>; > + nvmem-cell-names = "mac-address"; > + }; > + }; > +}; > diff --git a/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dts > b/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dts > new file mode 100644 > index 0000000..2982086 > --- /dev/null > +++ b/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dts > @@ -0,0 +1,92 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > + > +/* > + * Dragonglass DGX25 (NOR variant) - AX1800 Dual-band Wireless Router > + * > + * Specs: > + * - SoC: MediaTek MT7621AT (MIPS 1004Kc, dual-core @ 880 MHz) > + * - RAM: 256 MB DDR3 (W632GG6MB-09 / NT5CC128M16JR-EK) > + * - Flash: Macronix MX25L12835F 16 MB SPI NOR > + * - WiFi: MediaTek MT7915D (AX1800) - 2.4G + 5G via dual PCIe > + * - Ports: 1x WAN + 4x LAN (DSA, MT7530 switch) > + * - USB: 1x USB 3.0 > + */ > + > +#include "mt7621_dragonglass_dgx25.dtsi" > + > +/ { > + compatible = "dragonglass,dgx25", "mediatek,mt7621-soc"; > + model = "Dragonglass DGX25 (AX1800)"; > +}; > + > +/* > + * SPI-NOR flash layout (16 MB MX25L12835F) > + * u-boot: 0x000000-0x030000 (192 KB, read-only) > + * config: 0x030000-0x040000 ( 64 KB, read-only) > + * factory: 0x040000-0x080000 (256 KB, read-only) > + * config2: 0x080000-0x090000 ( 64 KB, read-only) > + * firmware: 0x090000-0x1000000 (15.4 MB) > + */ > +&spi0 { > + status = "okay"; > + > + flash@0 { > + compatible = "jedec,spi-nor"; > + reg = <0>; > + spi-max-frequency = <50000000>; > + > + partitions { > + compatible = "fixed-partitions"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@0 { > + label = "u-boot"; > + reg = <0x00000 0x30000>; > + read-only; > + }; > + > + partition@30000 { > + label = "config"; > + reg = <0x30000 0x10000>; > + read-only; > + }; > + > + factory: partition@40000 { > + label = "factory"; > + reg = <0x40000 0x40000>; > + read-only; > + > + nvmem-layout { > + compatible = "fixed-layout"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + eeprom_factory_10000: eeprom@10000 { > + reg = <0x10000 0x1000>; > + }; > + > + macaddr_factory_1002a: macaddr@1002a { > + reg = <0x1002a 0x6>; > + }; > + > + macaddr_factory_10024: macaddr@10024 { > + reg = <0x10024 0x6>; > + }; > + }; > + }; > + > + partition@80000 { > + label = "config2"; > + reg = <0x80000 0x10000>; > + read-only; > + }; > + > + partition@90000 { > + label = "firmware"; > + reg = <0x90000 0xf70000>; > + compatible = "denx,uimage"; > + }; > + }; > + }; > +}; > diff --git a/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dtsi > b/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dtsi > new file mode 100644 > index 0000000..544f090 > --- /dev/null > +++ b/target/linux/ramips/dts/mt7621_dragonglass_dgx25.dtsi > @@ -0,0 +1,165 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > + > +/* > + * Dragonglass DGX25 - common Device Tree Include > + * > + * Shared between NOR (mt7621_dragonglass_dgx25.dts) > + * and NAND (mt7621_dragonglass_dgx25-nand.dts) variants. > + */ > + > +#include "mt7621.dtsi" > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/leds/common.h> > + > +/ { > + aliases { > + led-boot = &led_sys; > + led-failsafe = &led_sys; > + led-running = &led_sys; > + led-upgrade = &led_sys; > + label-mac-device = &gmac0; > + }; > + > + chosen { > + bootargs = "console=ttyS0,115200"; > + }; > + > + leds { > + compatible = "gpio-leds"; > + > + led_sys: led-0 { > + color = <LED_COLOR_ID_GREEN>; > + function = LED_FUNCTION_STATUS; > + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; > + }; > + > + led_wan: led-1 { > + color = <LED_COLOR_ID_GREEN>; > + function = LED_FUNCTION_WAN; > + gpios = <&gpio 4 GPIO_ACTIVE_LOW>; > + }; > + > + led_lan: led-2 { > + color = <LED_COLOR_ID_GREEN>; > + function = LED_FUNCTION_LAN; > + gpios = <&gpio 6 GPIO_ACTIVE_LOW>; > + }; > + > + led_wlan: led-3 { > + color = <LED_COLOR_ID_GREEN>; > + function = LED_FUNCTION_WLAN; > + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; > + }; > + > + led_mesh: led-4 { > + color = <LED_COLOR_ID_GREEN>; > + function = LED_FUNCTION_INDICATOR; > + function-enumerator = <1>; > + gpios = <&gpio 3 GPIO_ACTIVE_LOW>; > + }; > + }; > + > + keys { > + compatible = "gpio-keys"; > + > + reset { > + label = "reset"; > + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_RESTART>; > + }; > + > + wps { > + label = "wps"; > + gpios = <&gpio 18 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_WPS_BUTTON>; > + }; > + }; > +}; > + > +/* Flash node defined per-variant (NOR or NAND) — DO NOT add here */ > + > +&pcie { > + status = "okay"; > +}; > + > +/* > + * MT7915D DBDC WiFi 6 (AX1800): dual PCIe endpoints > + * pcie0: 14c3:7916 (2.4 GHz) > + * pcie1: 14c3:7915 (5 GHz) > + */ Actual DBDC uses pcie1 only. At least in dts. > +&pcie0 { > + wifi@0,0 { > + compatible = "mediatek,mt76"; > + reg = <0x0000 0 0 0 0>; > + nvmem-cells = <&eeprom_factory_10000>; > + nvmem-cell-names = "eeprom"; > + }; > +}; > + > +&pcie1 { > + wifi@0,0 { > + compatible = "mediatek,mt76"; > + reg = <0x0000 0 0 0 0>; > + nvmem-cells = <&eeprom_factory_10000>; > + nvmem-cell-names = "eeprom"; > + }; > +}; > + > +&gmac0 { > + nvmem-cells = <&macaddr_factory_1002a>; > + nvmem-cell-names = "mac-address"; > +}; > + > +&gmac1 { > + status = "okay"; > + > + nvmem-cells = <&macaddr_factory_10024>; > + nvmem-cell-names = "mac-address"; > +}; > + > +&switch0 { > + ports { > + port@0 { > + status = "okay"; > + label = "lan1"; > + }; > + port@1 { > + status = "okay"; > + label = "lan2"; > + }; > + port@2 { > + status = "okay"; > + label = "lan3"; > + }; > + port@3 { > + status = "okay"; > + label = "lan4"; > + }; > + port@4 { > + status = "okay"; > + label = "wan"; > + nvmem-cells = <&macaddr_factory_10024>; > + nvmem-cell-names = "mac-address"; > + }; > + }; > +}; > + > +&state_default { > + gpio { > + groups = "i2c", "uart2", "uart3"; > + function = "gpio"; > + }; > +}; > + > +&uartlite2 { > + status = "okay"; > +}; > + > +&uartlite3 { > + status = "okay"; > +}; > + > +&xhci { > + status = "okay"; > +}; > diff --git a/target/linux/ramips/image/mt7621.mk > b/target/linux/ramips/image/mt7621.mk > index 347ab0e..6331ad9 100644 > --- a/target/linux/ramips/image/mt7621.mk > +++ b/target/linux/ramips/image/mt7621.mk > @@ -1157,6 +1157,38 @@ define Device/dlink_dra-1360-a1 > endef > TARGET_DEVICES += dlink_dra-1360-a1 > > +define Device/dragonglass_dgx25 > + $(Device/dsa-migration) > + DEVICE_VENDOR := Dragonglass > + DEVICE_MODEL := DGX25 > + DEVICE_PACKAGES := kmod-mt7915e kmod-mt7915-firmware kmod-mt7916-firmware > kmod-usb3 > + KERNEL := kernel-bin | append-dtb | lzma | uImage lzma > + KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | uImage lzma | pad-to > 64k > + IMAGE_SIZE := 15808k > + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata > + SUPPORTED_DEVICES += dragonglass,dgx25 > +endef > +TARGET_DEVICES += dragonglass_dgx25 > + > +define Device/dragonglass_dgx25-nand > + $(Device/nand) > + DEVICE_VENDOR := Dragonglass > + DEVICE_MODEL := DGX25 NAND > + PAGESIZE := 2048 > + BLOCKSIZE := 128k > + MKUBIFS_OPTS := --min-io-size=$$(PAGESIZE) --leb-size=124KiB > --max-leb-cnt=96 --space-fixup --squash-uids > + UBIFS_OPTS := --min-io-size=2048 --leb-size=124KiB --max-leb-cnt=96 > + UBINIZE_OPTS := -E 5 > + DEVICE_DTS := mt7621_dragonglass_dgx25-nand > + DEVICE_PACKAGES := kmod-mt7915e kmod-mt7915-firmware kmod-mt7916-firmware > kmod-usb3 > + KERNEL_SIZE := 4096k > + 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 > + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata > + SUPPORTED_DEVICES += dragonglass,dgx25-nand > +endef > +TARGET_DEVICES += dragonglass_dgx25-nand > + > define Device/dual-q_h721 > $(Device/dsa-migration) > $(Device/uimage-lzma-loader) > 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 9dd1ac1..30827c9 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 > @@ -196,6 +196,10 @@ ramips_setup_interfaces() > ruijie,rg-ew1300g-v1) > ucidef_set_interfaces_lan_wan "lan3 lan2 lan1" "wan" > ;; > + dragonglass,dgx25|\ > + dragonglass,dgx25-nand) > + ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" > + ;; > *) > ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" > ;; > @@ -322,6 +326,12 @@ ramips_setup_macs() > yuncore,ax820) > label_mac=$(mtd_get_mac_binary Factory 0x4) > ;; > + dragonglass,dgx25|\ > + dragonglass,dgx25-nand) > + label_mac=$(mtd_get_mac_binary factory 0x2a) > + wan_mac=$(mtd_get_mac_binary factory 0x24) > + ;; > + > esac > > [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac > diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh > b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh > index 52617bc..6086037 100644 > --- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh > +++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh > @@ -162,6 +162,18 @@ platform_do_upgrade() { > zyxel,nwa55axe) > nand_do_upgrade "$1" > ;; > + dragonglass,dgx25-nand) > + nand_do_upgrade "$1" > + ;; > + dragonglass,dgx25) > + # NOR SPI flash: extract kernel+root from sysupgrade tar > + # and pipe to mtd (default_do_upgrade not available in > initramfs) > + local board_dir=$(tar tf "$1" | grep -m 1 '^sysupgrade-.*/$') > + board_dir="${board_dir%/}" > + (tar xOf "$1" "$board_dir/kernel"; tar xOf "$1" > "$board_dir/root") | \ > + mtd write - firmware > + ;; > + > buffalo,wsr-2533dhpl2|\ > buffalo,wsr-2533dhpls) > buffalo_do_upgrade "$1" > -- > 2.25.1 > > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
_______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
