Files
openwrt/package/firmware
Gilberto Conde 9e15f1f493 qualcommax: ipq50xx: add support for GL.iNet GL-X2000
GL.iNet GL-X2000 (Spitz Plus) is a dual-SIM 4G LTE Wi-Fi 6 router.

Specifications:
  SoC:      Qualcomm IPQ5018, dual-core Cortex-A53 @ 1.0 GHz
  RAM:      512 MiB DDR3
  Flash:    128 MiB SPI NAND (Winbond W25N01GWZEIG)
  WLAN:     IPQ5018 2x2 2.4 GHz, QCN6122 2x2 5 GHz (802.11ax)
  Ethernet: 1x GbE WAN (IPQ5018 internal GE PHY)
            1x GbE LAN (Atheros AR8031, SGMII)
  WWAN:     Quectel EG120K-EA, LTE Cat.12, USB 3.0 SuperSpeed
  USB:      1x USB 2.0 host behind an internal hub
  Buttons:  reset
  LEDs:     power, internet, 2.4G, 5G, 4x signal strength
  Serial:   3v3 TTL, 115200 8N1; 4-pin header labelled GND/RX/TX/3V3 on
            the mainboard, under the Quectel module in the top right
            corner. The case opens after pulling the four rubber feet
  Power:    DC 9-35 V, shipped with a 12 V 2.5 A supply
  Misc:     PWM fan, dual SIM slots (muxed inside the modem)

The base MAC address is stored at offset 0x6 of the 0:art partition; the
first six bytes are erased, which is why U-Boot reports the ART address as
invalid. WAN uses the base address (this is the one on the label), LAN
base+1, the 2.4 GHz radio base+2 and the 5 GHz radio base+3. The ethernet
addresses come from nvmem cells. The board deliberately has no ethernetN
aliases: GL.iNet's U-Boot uses them to write its own mac-address
properties into both GMAC nodes (a placeholder for WAN, the base address
for LAN), which of_get_mac_address() would prefer over the nvmem cells.

The modem enumerates at SuperSpeed and therefore requires the IPQ5018 USB3
UNIPHY, so both usbphy0 and usbphy1 are enabled. uqmi cannot communicate
with this modem, so modemmanager has to be installed separately to use it.

The QCN6122 is wired to the second radio instance, so wifi@b00b040 with
userpd3 is enabled rather than wifi@b00a040: the stock device tree enables
wifi2@/userpd3 and leaves wifi1@/userpd2 disabled. That instance places
its BDF and M3 dump above the default q6 region, so the reserved region
is grown accordingly.

Board data for the two radios is submitted separately to
firmware_qca-wireless. It is taken from the stock firmware's wifi_fw
partition, which is a squashfs image: bdwlan.b24 for the IPQ5018 2.4 GHz
radio and qcn6122/bdwlan.b60 for the QCN6122 5 GHz radio, matching the
qcom,board_id values of 0x24 and 0x60 that the stock device tree assigns
to the respective radios. The two radios require distinct board data;
sharing a single BDF leaves the front-end misconfigured and the affected
radio unable to transmit or receive at usable power.

The device tree started from the initial port by Hostle, was largely
rewritten by georgem83 and further reworked by Andreas Boeckler, published
in the OpenWrt forum thread linked below. It is carried here with fixes for
the WLAN board data, the QCN6122 radio instance, the U-Boot environment
partition and the fan cooling map.

Link: https://forum.openwrt.org/t/plain-openwrt-on-gl-x2000/231554

Installation:
  Interrupt the bootloader over serial (115200 8N1) by typing "gl", then
  TFTP the initramfs image and boot it:

    tftpboot 0x44000000 openwrt-qualcommax-ipq50xx-glinet_gl-x2000-initramfs-uImage.itb
    bootm 0x44000000

  Then flash the factory image with sysupgrade.

Signed-off-by: Gilberto Conde <gilbertorconde@gmail.com>
2026-09-28 14:21:38 +02:00
..
2026-01-02 18:07:02 +01:00