Getting Quectel RM520N-GLAP (PCI) to show on BPI-R64

So next step of my whole mobile router work is working to get this Quectel RM520N-GLAP card functional. The AP model specifically is PCI only with no USB operation but it often appears about as cheap as the FM350-GL cards which I've already had some rocky experience with.

Now I have successfully gotten this card working on my old spare Intel Haswell x86 box. As noted in some other threads here, it uses the generic MHI packages available in the latest OWRT builds. However it is not 100% working in this state and requires a small patch for tools like MBIM, QMI, and ModemManager to see it and use it. That patch has been documented over here and the OP looks like they're working to get it submitted to mainline: https://forum.gl-inet.com/t/how-to-installing-vanilla-openwrt-on-gl-x3000/45404/15?u=cr08

Now just as a note that all the devices I'm attempting to use these with have mPCIe slots (The x86 board I'm using the onboard mPCIe Wifi slot and both slots on the BPI-R64 have PCI lanes passed to them) and the FM350 and RM520 cards are both M.2. I'm using mPCIe>M.2 adapters which have PCI passed through.

That all out of the way, the card works perfectly on the x86 box.

[    5.186421] mhi-pci-generic 0000:03:00.0: MHI PCI device found: quectel-rm5xx
[    5.186962] mhi-pci-generic 0000:03:00.0: BAR 0: assigned [mem 0xf7c01000-0xf7c01fff 64bit]
[    5.187569] mhi-pci-generic 0000:03:00.0: using shared MSI
[    5.188306] mhi mhi0: Requested to power ON
[    5.189132] mhi mhi0: Power on setup success
[    5.212763] urngd: v1.0.2 started.
[    5.315610] NET: Registered PF_QIPCRTR protocol family
[    5.318519] usbcore: registered new interface driver asix
[    6.080503] ax88179_178a 3-6:1.0 eth1: register 'ax88179_178a' at usb-0000:00:14.0-6, ASIX AX88179 USB 3.0 Gigabit Ethernet, 00:0e:c6:77:76:7e
[    6.081740] usbcore: registered new interface driver ax88179_178a
[    6.082729] usbcore: registered new interface driver cdc_ether
[    6.083589] usbcore: registered new interface driver cdc_ncm
[    6.084299] wwan wwan0: port wwan0qcdm0 attached
[    6.085074] wwan wwan0: port wwan0mbim0 attached
[    6.085909] wwan wwan0: port wwan0at0 attached
root@OpenWrt:~# lspci
03:00.0 Unassigned class [ff00]: Qualcomm Technologies, Inc Device 0308
mhi                    69632  5 mhi_wwan_mbim,mhi_wwan_ctrl,qrtr_mhi,mhi_pci_generic,mhi_net
mhi_net                12288  0
mhi_pci_generic        20480  0
mhi_wwan_ctrl          12288  0
mhi_wwan_mbim          12288  0
qrtr                   20480  3 qrtr_mhi
qrtr_mhi               12288  0
wwan                   16384  6 mhi_wwan_mbim,mhi_wwan_ctrl

However on the BPI-R64 nothing shows up. Even under U-Boot doing a pci enum and pci it shows both links as down. Inside OpenWRT:

root@OpenWrt:~# lspci -v
root@OpenWrt:~# dmesg | grep pci
[    1.607066] mtk-pcie 1a143000.pcie: host bridge /pcie@1a143000 ranges:
[    1.613691] mtk-pcie 1a143000.pcie: Parsing ranges property...
[    1.619540] mtk-pcie 1a143000.pcie:      MEM 0x0020000000..0x0027ffffff -> 0x0020000000
[    1.962976] mtk-pcie 1a143000.pcie: Port0 link down
[    1.968288] mtk-pcie 1a143000.pcie: PCI host bridge to bus 0000:00
[    1.974504] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.979995] pci_bus 0000:00: root bus resource [mem 0x20000000-0x27ffffff]
[    1.986873] pci_bus 0000:00: scanning bus
[    1.992606] pci_bus 0000:00: fixups for bus
[    1.996795] pci_bus 0000:00: bus scan returning with max=00
[    2.003168] mtk-pcie 1a145000.pcie: host bridge /pcie@1a145000 ranges:
[    2.009725] mtk-pcie 1a145000.pcie: Parsing ranges property...
[    2.015571] mtk-pcie 1a145000.pcie:      MEM 0x0028000000..0x002fffffff -> 0x0028000000
[    2.362954] mtk-pcie 1a145000.pcie: Port1 link down
[    2.368066] mtk-pcie 1a145000.pcie: PCI host bridge to bus 0001:00
[    2.374273] pci_bus 0001:00: root bus resource [bus 00-ff]
[    2.379764] pci_bus 0001:00: root bus resource [mem 0x28000000-0x2fffffff]
[    2.386642] pci_bus 0001:00: scanning bus
[    2.392396] pci_bus 0001:00: fixups for bus
[    2.396590] pci_bus 0001:00: bus scan returning with max=00
[    2.446142] FIT:          flat_dt sub-image 0x00591000..0x0059111a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64 OpenWrt bananapi_bpi-r64 device tree overlay mt7622-bananapi-bpi-r64-pcie1)

During this testing I also found the few Quectel EC25-AF's I have do the same and don't come up. This is with native mPCIe versions as well as the M.2 versions. The FM350 fares better and works as well as it can within its own reliability concerns.

Power supply issues should be good. This is a revision 1.2 board which is reported to have some of the lingering power issues fixed and should be able to supply at least 3A of 3.3V power to either slot. I'm also supplying the board itself from a 12V Meanwell power supply rated for 30A.

I do know there's also some other issues related to various pins on the mPCIe slots on this board that I haven't been able to make 100% sense of yet and adding in the M.2 adapter muddies things and I haven't been able to source a good doc detailing how the pins map between the interfaces. There is a light on the adapter board that lights up seemingly when the card is properly powered up. Rough timing is it seems to light when the PCI scan passes in the dmesg log and this is the same both on the x86 board and the BPI-R64.

Just curious if anyone else has had any experience with these or has any thoughts where to start troubleshooting? The BPI-R64 on paper seems like it is perfect for my needs with two PCI fed card slots alongside the onboard Wifi but I'm trying my best to move to the RM520N-GL if possible due to reliability issues with the FM350-GL.

Yu need to set m2 slot to correct mode. Like rc.local
https://wiki.banana-pi.org/Getting_Started_with_R64

If you're referring to the PCI/SATA switching on the one slot, it was my understanding that in later OWRT builds that this was configured by default for PCI mode: [OpenWrt Wiki] Sinovoip BananaPi BPi-R64 V1.1, V1.2

root@OpenWrt:~# fw_printenv bootconf
bootconf=config-1#mt7622-bananapi-bpi-r64-pcie1

Just for the hell of it I tried the procedure listed in the link you provided and there was no /sys/class/gpio/gpio499 even after running the echo 499 > /sys/class/gpio/export command so no go there.

Also this applies for just the one slot and I've tried both to no avail.

But please correct me if you're referring to something entirely different. I've been all over the available documentation for this board and the PCI/SATA sharing situation is the only obvious bit that I'm aware of.

Thanks. :slight_smile:

Try other m2 slot? If it is not listed it is not connectable from the CPU

Both slots have been tried already. And the card works fine on other devices while other mPCI/M.2 cards I've tried also work on the R64. It's just this particular card that is having these issues.

I'm really just looking to see if anyone else has ran into this or similar issues with this board and has pointers or ideas where to start looking. As I understand reading over various forum posts here and elsewhere, the R64 does potentially have some weird quirks and possibly some conflicts with how some pins on the mPCIe slots are wired. I'm happy to dabble in some hardware hacking or kernel patches to get it operational but have no idea where to begin or if I'm even on the right track.

First is lspci
If that shows the device you need driver patch

Apologies if I didn't make it completely clear in my original post. But this is my original check on that. Nothing shows in lspci. Zero output.

root@OpenWrt:~# lspci -v
root@OpenWrt:~# dmesg | grep pci
[    1.607066] mtk-pcie 1a143000.pcie: host bridge /pcie@1a143000 ranges:
[    1.613691] mtk-pcie 1a143000.pcie: Parsing ranges property...
[    1.619540] mtk-pcie 1a143000.pcie:      MEM 0x0020000000..0x0027ffffff -> 0x0020000000
[    1.962976] mtk-pcie 1a143000.pcie: Port0 link down
[    1.968288] mtk-pcie 1a143000.pcie: PCI host bridge to bus 0000:00
[    1.974504] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.979995] pci_bus 0000:00: root bus resource [mem 0x20000000-0x27ffffff]
[    1.986873] pci_bus 0000:00: scanning bus
[    1.992606] pci_bus 0000:00: fixups for bus
[    1.996795] pci_bus 0000:00: bus scan returning with max=00
[    2.003168] mtk-pcie 1a145000.pcie: host bridge /pcie@1a145000 ranges:
[    2.009725] mtk-pcie 1a145000.pcie: Parsing ranges property...
[    2.015571] mtk-pcie 1a145000.pcie:      MEM 0x0028000000..0x002fffffff -> 0x0028000000
[    2.362954] mtk-pcie 1a145000.pcie: Port1 link down
[    2.368066] mtk-pcie 1a145000.pcie: PCI host bridge to bus 0001:00
[    2.374273] pci_bus 0001:00: root bus resource [bus 00-ff]
[    2.379764] pci_bus 0001:00: root bus resource [mem 0x28000000-0x2fffffff]
[    2.386642] pci_bus 0001:00: scanning bus
[    2.392396] pci_bus 0001:00: fixups for bus
[    2.396590] pci_bus 0001:00: bus scan returning with max=00
[    2.446142] FIT:          flat_dt sub-image 0x00591000..0x0059111a "fdt-mt7622-bananapi-bpi-r64-pcie1" (ARM64 OpenWrt bananapi_bpi-r64 device tree overlay mt7622-bananapi-bpi-r64-pcie1)

As a side note on this board the host bridge devices only appear when a downstream card is attached and visible such as the FM350-GL I have on hand.

root@OpenWrt:~# lspci
00:00.0 PCI bridge: MEDIATEK Corp. Device 3258
01:00.0 Wireless controller [0d40]: MEDIATEK Corp. Device 4d75 (rev 01)