Target: mediatek/filogic, board glinet,gl-x3000. Kernel 6.12.79.
Sharing Pre-built sysupgrade image with the Quectel RM520N-GL 5G modem working end-to-end over MHI/MBIM + ModemManager, using the PCIe data path: https://github.com/vjt/openwrt-glinet-x3000/releases/tag/jeeves-r2
The wiki entry for this device covers the modem's USB path, which works out of the box but caps throughput below the radio. This build wires up PCIe. Three things were non-obvious if you're going down this road independently:
-
Kernel patch. The RM520N-GL GLAP variant's PCI sub-device
17cb:5201isn't in mainlinemhi_pci_generic. One-liner patch shipped undertarget/linux/generic/pending-6.12/. Same fix submitted to linux-arm-msm by Michael Fritscher, not yet merged - Quectel is using Qualcomm sub-vendor IDs and that is puzzling. -
PCIe runtime PM. With it enabled, the modem firmware crashes ~2 min after boot every time (AER + CmpltTO cascade) and drags the on-board ethernet down with it during the link resets. kernel cmdline workaround:
pcie_port_pm=off. Not a real fix; hopefully resolved in a future kernel. -
ModemManager + ttyUSB. Upstream hotplug rule grabs every
/dev/ttyUSB[0-3]. Patched to honour/etc/modemmanager/ignore-ttyso external AT helpers can still talk to the modem.
Custom packages baked in: quectel-5g-tools (signal monitor TUI, band/cell locking, AT wrapper, Prometheus collector, panel-LED daemon), qfirehose 1.4.17 as OpenWrt package, adb/fastboot for SDX62 access, my wifi-dethrash-collector, telegraf-full.
To build it yourself: clone the repo, run x3000/prepare.sh, make. The script pins OpenWrt 25.12, applies the patches and wires in the custom feeds.
Full devlog (with a bonus SINR mystery epilogue): https://sindro.me/posts/2026-04-30-glinet-gl-x3000-vanilla-openwrt-25-12/
Thank you and I hope this helps someone out there!