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?
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
@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).