Quectel RM520N-GL PCIe with ModemManager

Hi,

i’m trying to use a Quectel RM520N-GL modem via PCIe on an Embedded Linux System (Kernel 6.1.70) in connection with ModemManager (1.22.0).
I tried the kernel drivers: mhi_pci_generic & mhi_wwan_ctrl which seems to create a correct data channel. However it wouldn’t create a suitable control channel (i can’t find a appropriate qmi device).

So my question is, does this setup even work with the standard kernel drivers, or do i have to use:
Quectel_Linux_PCIE_MHI_Driver.

If i have to use the Quectel driver:
What is the current version? And where do i get the source code?

Do you have some guidelines on:

  • What kernel config has to be used?
    I tried this:
    CONFIG_MHI_BUS=y
    CONFIG_MHI_BUS_PCI_GENERIC=y
    CONFIG_MHI_NET=y
    CONFIG_MHI_WWAN_CTRL=y

  • How is the ModemManager supposed to communicate with the modem?

  • qmi, qrtr?

Thanks for your help,
Johann

Dear @jha
I have sent PCIE driver to you via Message, please check.

For modem manager, you should check by yourself.

Thx,
i compiled and installed the driver.
But i’m missing a QMI device that the ModemManager can use.

The only log i get is:
dl-router-00002[TEST-CR-1]:~# dmesg | grep mhi
[ 3.983640] mhi-pci-generic 0000:cb:00.0: MHI PCI device found: qcom-sdx65m
[ 3.990653] mhi-pci-generic 0000:cb:00.0: BAR 0: assigned [mem 0x72800000-0x72800fff 64bit]
[ 3.999099] mhi-pci-generic 0000:cb:00.0: enabling device (0000 → 0002)
[ 4.007752] mhi mhi0: Requested to power ON
[ 4.012008] mhi mhi0: Power on setup success
[ 10.645055] mhi_init Quectel_Linux_PCIE_MHI_Driver_V1.3.8

What additional Kernel Configs are needed?
Currently i have enabled
CONFIG_MHI_BUS=y
CONFIG_MHI_BUS_PCI_GENERIC=y
CONFIG_MHI_NET=y
CONFIG_QRTR=y
CONFIG_QRTR_MHI=y

Im still not sure if the Quectel_Linux_PCIE_MHI_Driver_V1.3.8 driver is needed.
It seems to do nothing.

Via qrtr i get a QMI communication in the ModemManager:
Aug 01 20:24:06 dl-router-00002 ModemManager[10468]: [1754072646.499986] [qrtr3/probe] port type hints loaded: AT no, QMI yes, MBIM no, QCDM no, AUDIO no, GPS no

But the ModemManager fails to recognize the mhi_hwip0 interface as the related data channel.

Ok, i could get the driver to work by disabling all the Kernel configs (CONFIG_MHI_BUS, etc.).

It creates 2 network interfaces:
rmnet_mhi0 DOWN
rmnet_mhi0.1 DOWN

And these MHI devices in /dev:
/dev/mhi_BHI
/dev/mhi_DIAG
/dev/mhi_DUN
/dev/mhi_LOOPBACK
/dev/mhi_QMI0

But these don’t seem to work with libqmi (or ModemManager):
dl-router-00002[TEST-CR-1]:~# qmicli -p -d /dev/mhi_QMI0 --dms-get-manufacturer
[06 Aug 2025, 12:54:59] -Warning ** [/dev/mhi_QMI0] couldn’t detect transport type of port: unexpected port subsystem
error: couldn’t open the QmiDevice: Cannot automatically select QMI/MBIM mode

Dear @jha
For libqmi (or ModemManager), you need to check by yourself, we don’t have guide for this.

This problem was the modem manager itself couldn’t detect the module port. For alternative you can use Quectel-CM for dailing.

@jha on PCIE only MBIM available. U can use QMI for PCIE only for diagnostic purposes (set/query bands, sms, etc.) but U can’t use QMI to manage connection state (as far as I know). I use MBIM and ModemManager with kernel v6.6.100 on openwrt/riscv board with EM160R-GL with old firmware EM160RGLAPR02A04M4G (no one from quectel can provide fresh one).