GL.iNet GL-X3000/ Spitz AX support

Hey!

GL.iNet just released a new model, the "GL-X3000/ Spitz AX". Specs are as per the below:

* SoC – MediaTek MT7981A (Filogic 820) dual-core Arm Cortex-A53 processor @ 1.3 GHz
* System Memory – 512 MB DDR4
* Storage – 8GB eMMC flash, MicroSD card slot up 1+ TB
* Networking
  * 1x 2.5GbE WAN Ethernet port
  * 1x Gigabit Ethernet LAN port
  * Dual-band IEEE 802.11a/b/g/n/ac/ax WiFi 6 up to 574Mbps (2.4GHz), 2402Mbps (5GHz)
  * RM520N-GL 5G cellular modem and 2x Nano SIM card slots with support for failover & load balancing
    * 5G NR
      * NSA – n1/ 2/ 3/ 5/ 7/ 8/ 12/ 13/ 14/ 18/ 20/ 25/ 26/ 28/ 29/ 30/ 38/ 40/ 41/ 48/ 66/ 70/ 71/ 75/ 76/ 77/ 78/ 79
      * SA – n1/ 2/ 3/ 5/ 7/ 8/ 12/ 13/ 14/ 18/ 20/ 25/ 26/ 28/ 29/ 30/ 38/ 40/ 41/ 48/ 66/ 70/ 71/ 75/ 76/ 77/ 78/ 79
    * LTE
      * LTE-FDD – B1/ 2/ 3/ 4/ 5/ 7/ 8/ 12/ 13/ 14/ 17/ 18/ 19/ 20/ 25/ 26/ 28/ 29/ 30/ 32/ 66/ 71
      * LTE-TDD – B34/ 38/ 39/ 40/ 41/ 42/ 43/ 48
      * LAA – B46
    * UMTS – WCDMA: B1/ 2/ 3/ 5/ 8/ 19
    * GNSS – GPS, GLONASS, BDS, Galileo, QZSS
  * 6x antennas: 4x for 4G LTE/5G NR, 2x for Wi-Fi
* USB – 1x USB 2.0 host port
* Misc – 1x Reset button, LEDs for system status, 5GHz and 2.4GHz WiFi, Internet, and cellular signal strength
* Power Input – 12V DC (default adapter) / 24V
* Power Consumption – <= 14W
* Temperature Range – Operating: 0 to 40°C, storage: -20 ~ 70°C
* Dimensions – 155 x 95 x 36mm
* Weight – 520grams (with antennas)

Source: https://www.gl-inet.com/products/gl-x3000/ + https://www.cnx-software.com/2023/05/04/gl-inet-spitz-ax-gl-x3000nr-5g-nr-wifi-6-router-review-part-1-specs-unboxing-and-first-boot/

Review, incl. teardown and technical specs:
- GL.iNet Spitz AX (GL-X3000NR) 5G NR WiFi 6 router review – Part 1: Specs, unboxing, and first boot -> https://www.cnx-software.com/2023/05/04/gl-inet-spitz-ax-gl-x3000nr-5g-nr-wifi-6-router-review-part-1-specs-unboxing-and-first-boot/
- GL.iNet Spitz AX review – Part 2: a router with 5G NR, WiFi 6, 2.5GbE, failover and load balancing ->
https://www.cnx-software.com/2023/05/14/gl-inet-spitz-ax-review-a-router-with-5g-nr-wifi-6-2-5gbe-failover-and-load-balancing/

MediaTek MT7981 related commits:
- add support for MT7981 -> https://github.com/openwrt/mt76/pull/771
- wifi: mt76: mt7915: add support for MT7981 -> https://github.com/openwrt/mt76/commit/969b7b5ebd129068ca56e4b0d831593a2f92382f
- linux-firmware: add firmware for MT7981 -> https://github.com/openwrt/mt76/commit/cddbd796bbc649debe457f7b34b200bbda4fcc53
- mediatek: add support for Cudy WR3000 v1 -> https://git.openwrt.org/?p=openwrt/openwrt.git;a=commitdiff;h=c9cb6411c1a70516d5922e88c45b338de041baba
- mediatek: add support for the GL.iNet GL-MT3000 -> https://git.openwrt.org/?p=openwrt/openwrt.git;a=commitdiff;h=7cbe34170e3d8471c1ebacde33a2372c92433be4
- 7 code results in "gl-inet/gl-infra-builder" -> https://github.com/gl-inet/gl-infra-builder

Is anyone up for developing a build for this device, given the available code that is utilized for various other devices with similar specs?

try booting the MT3000 initramfs, see what works, and what doesn't

https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/

1 Like

I do not yet have the device in my hands, otherwise would have otherwise tried already...

For the sake of know-how transfer, this was already tried, yet failed:
Details: https://forum.gl-inet.com/t/gl-x3000-stock-openwrt-om-microsd-card-as-an-emergency-boot-device/30015
In brief, according to Gl.Inet staff, the MT3000 device used a NAND image. The X3000 uses an EMMC image.

Not what you were told to do, but OK...

I very sadly cannot yet try your proposal, as the hardware was not yet shipped :frowning:
In case someone else has the device already on hand, could someone try the aforementioned? Or are there any Gl.inet-staff here available?

Trying to boot the initramfs GL-MT3000 image resulted in the following. I'm pretty sure I did something wrong, but I am new to this... :slight_smile:

U-Boot 2022.07-rc3 (Mar 09 2023 - 16:20:34 +0800)

CPU:   MediaTek MT7981
Model: mt7981-rfb
DRAM:  512 MiB
Core:  49 devices, 20 uclasses, devicetree: embed
MMC:   mmc@11230000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment

In:    serial@11002000
Out:   serial@11002000
Err:   serial@11002000
Net:   
Warning: ethernet@15100000 (eth0) using random MAC address - 3a:ec:37:3f:bc:79
eth0: ethernet@15100000
gpio: pin 10 (gpio 10) value is 0
gpio: pin 11 (gpio 11) value is 0
gpio: pin 9 (gpio 9) value is 1
gpio: pin 11 (gpio 11) value is 1
Enter "gl" to stop autoboot in 2 seconds
MT7981> 
MT7981> tftpboot openwrt-mediatek-filogic-glinet_gl-mt3000-initramfs-kernel.bin
Using ethernet@15100000 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.1
Filename 'openwrt-mediatek-filogic-glinet_gl-mt3000-initramfs-kernel.bin'.
Load address: 0x46000000
Loading: T #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 ######T ###########################################################
	 #######
	 6.5 MiB/s
done
Bytes transferred = 7730860 (75f6ac hex)
MT7981> bootm
## Loading kernel from FIT Image at 46000000 ...
   Using 'config-1' configuration
   Trying 'kernel-1' kernel subimage
     Description:  ARM64 OpenWrt Linux-5.15.119
     Type:         Kernel Image
     Compression:  lzma compressed
     Data Start:   0x460000ec
     Data Size:    3863832 Bytes = 3.7 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x48000000
     Entry Point:  0x48000000
     Hash algo:    crc32
     Hash value:   225e258c
     Hash algo:    sha1
     Hash value:   0b42f90009b14970f109320d7603a1624ec07ac6
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading ramdisk from FIT Image at 46000000 ...
   Using 'config-1' configuration
   Trying 'initrd-1' ramdisk subimage
     Description:  ARM64 OpenWrt glinet_gl-mt3000 initrd
     Type:         RAMDisk Image
     Compression:  Unknown Compression
     Data Start:   0x463af740
     Data Size:    3843504 Bytes = 3.7 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    crc32
     Hash value:   ad936ac9
     Hash algo:    sha1
     Hash value:   06e155f9e28693c4ec096b1de76efba825828216
   Verifying Hash Integrity ... crc32+ sha1+ OK
WARNING: 'compression' nodes for ramdisks are deprecated, please fix your .its file!
## Loading fdt from FIT Image at 46000000 ...
   Using 'config-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  ARM64 OpenWrt glinet_gl-mt3000 device tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x46759dfc
     Data Size:    21365 Bytes = 20.9 KiB
     Architecture: AArch64
     Hash algo:    crc32
     Hash value:   6105e8ce
     Hash algo:    sha1
     Hash value:   d8521e392d4e8e63c0cd40443caa8b0824752433
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Booting using the fdt blob at 0x46759dfc
   Uncompressing Kernel Image
   Loading Ramdisk to 5f451000, end 5f7fb5b0 ... OK
ERROR: Failed to allocate 0x8375 bytes below 0x60000000.
device tree - allocation error
FDT creation failed!
resetting ...

After some more tinkering with the image I managed to make it boot (by disabling the separate ramdisk image option for the ramdisk image).
Most things seem to work at fist glance except the WIFI:

[    8.096828] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20221208201745a
[    8.096828] 
[    8.112823] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20221208201806
[    8.152874] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20221208202048
[    8.245324] mt798x-wmac 18000000.wifi: eeprom load fail, use default bin
[    8.252083] mt798x-wmac 18000000.wifi: Direct firmware load for mediatek/mt7981_eeprom_mt7976_dbdc.bin failed with error -2
[    8.263215] mt798x-wmac 18000000.wifi: Falling back to sysfs fallback for: mediatek/mt7981_eeprom_mt7976_dbdc.bin
[    8.295557] mt798x-wmac: probe of 18000000.wifi failed with error -12
[    8.324701] PPP generic driver version 2.4.2
1 Like

so does 5G mobile work ?

drivers are needed, yes.

5g works fine after being switched to USB mode. I haven't tried it in PCIe mode, but my guess is it will work as well.

I'm unsure if it's a lack of drivers, since it apparently detects what the WIFI is, but can't load.
Here is the full boot log and hwinfo.

Your issue is that the kernel module doesn’t know where to find the firmware for the wifi device and probably the calibration data as well.

You need to set this up in your dts

I see.
Well, I guess I would say that the GL-MT3000 works as a whole on GL-X3000 excluding the issue with wifi firmware and of course not being able to flash it since the 2 routers use different flash (NAND in MT3000 and eMMC in X3000)
I would be happy to help with building an image for this, but unfortunately, I've never done this before, so would appreciate any help doing that.

And the storage:

root@OpenWrt:/# lsblk /dev/mmcblk0 /dev/mtdblock* -o SIZE,FSTYPE,NAME,PARTLABEL
 SIZE FSTYPE   NAME        PARTLABEL
   2M          mtdblock0   
   2M          mtdblock1   
 7.3G          mmcblk0     
   2M          ├─mmcblk0p1 log
 512K          ├─mmcblk0p2 u-boot-env
   2M          ├─mmcblk0p3 factory
   2M          ├─mmcblk0p4 fip
   2M          ├─mmcblk0p5 cfg
  32M          ├─mmcblk0p6 kernel
 7.2G squashfs ├─mmcblk0p7 rootfs
 7.2G f2fs     └─mmcblk0p8 

Hi @JayBG,
I'm also trying to check how OpenWrt could be ported to this device, and I noticed in your logs that you were able to access U-Boot: how did you do that?
I soldered cables on the UART pads on my device, but I'm not able to see any signal or logs, while my setup works correctly on other GL.iNet devices :confused:

Hello @dohseven ,
Unfortunately, I am not at home, so I could not supply photos, but there is nothing special I did about the serial connection. I soldered 4 pins to the pads and connected the RX, TX and ground to the pins.
That's it...

Thanks for your answer.
I had the same experience with the other GL.iNet products I used, where accessing UART was very straightforward, but no luck with this one. I'm wondering if GL.iNet didn't add some kind of protection to disable the UART port in a recent hardware version.

Any progress porting the GL-X3000 to native openWRT?

1 Like

+1

Also I will contribute a bounty reward/sum of money to whomever or the team of developers that bring 23.04+ support to this device! Remote serial console and power cycle access can be arranged... Get in touch if interested! ($xxx)

1 Like