MC7455 - QMI problems when host resumes from sleep

Hello,

I’m currently facing issues with the QMI connection to an MC7455.

I’m using a SBC (SBC-IOT-iMX8 | NXP i.MX8M Mini | Internet of Things Gateway SBC | Compulab) with the MC7455 connected via Mini PCIe. The SBC runs yocto kirkstone with ModemManager 1.18.8, libqmi 1.30.4 and uses the open-source drivers (qcserial, qmi_wwan). I’ve already updated to the newest modem-firmware: SWI9X30C_02.39.00.00_GENERIC_002.085_000

When I put my host to sleep (suspend to RAM) and it wakes back up, the QMI interface does not work anymore (I simply get a timeout).

Steps to reproduce:

  • Stop ModemManager to make sure it does not interfere
  • qmicli -d /dev/cdc-wdm0 --dms-get-operating-mode -p → Response Mode: online, HW restricted: no → QMI works
  • systemctl suspend
  • Wake system up (button)
  • qmicli -d /dev/cdc-wdm0 --dms-get-operating-mode -perror: couldn't create client for the 'dms' service: CID allocation failed in the CTL client: Transaction timed out

→ QMI does not work anymore, but AT commands still work through the serial interface:

!GSTATUS: 
Current Time:  2845             Temperature: 35
Reset Counter: 1                Mode:        ONLINE         
System mode:   LTE              PS state:    Attached     
LTE band:      B1               LTE bw:      15 MHz  
LTE Rx chan:   525              LTE Tx chan: 18525
LTE CA state:  NOT ASSIGNED
EMM state:     Registered       Normal Service 
RRC state:     RRC Idle       
IMS reg state: No Srv  

PCC RxM RSSI:  -57              RSRP (dBm):  -83
PCC RxD RSSI:  -96              RSRP (dBm):  -136
Tx Power:      --               TAC:         279F (10143)
RSRQ (dB):     -7.6             Cell ID:     01B65D66 (28728678)
SINR (dB):     16.8
!GOBIIMPREF: 
 preferred fw version:    02.39.00.00
 preferred carrier name:  GENERIC
 preferred config name:   GENERIC_002.085_000
 preferred subpri index:  000
 current fw version:      02.39.00.00
 current carrier name:    GENERIC
 current config name:     GENERIC_002.085_000
 current subpri index:    000

I’ve already tried multiple things without success:

  • drivers from the MBPL
  • reload the qmi_wwan driver during the error state (rmmod, modprobe)
  • unload the qmi_wwan driver before suspending the system (rmmod qmi_wwan) and reloading it after the system resumes from sleep (modprobe qmi_wwan)
  • Disable the USB3-functionality (AT!USBSPEED=0)

I’ve also tried using MBIM instead of QMI (AT!USBCOMP=1,1,100D) → This works but MBIM seems to be slower than QMI.

Colud you please assist me in troublshooting this issue.

have you tried QMI over MBIM interface?
e.g.
sudo qmicli --device=/dev/cdc-wdm0 --device-open-proxy --device-open-mbim --nas-get-signal-strength

BTW, are you using this method to ask module to go to suspend mode?

I’dont explicitly ask the module to go to sleep. As power/control is set to on I would expect the module to not got to sleep at all. I only request the host/SBC to got to sleep (systemctl suspend).

Yes, works as well as without the --device-open-mbim flag. Now it was much faster than the last time I’ve tried (with and without the flag).

Which interface is usually recommended, QMI or MBIM? Are there any disadvantages of using QMI over MBIM?
It seems like swichting to MBIM could solve my problem, but do you have an idea why it does not work with the QMI interface?

your platform will send out selective suspend signal to module…

then maybe you should keep on using MBIM interface as it solves all your problem

“autosuspend” is deactivated for this USB device and I can’t see any hints in the kernel logs, that the USB-device is suspended.
I’ve also disabled the “power off enable feature” (AT!PCOFFEN=2) to make sure the modem is not put to sleep by the W_DISABLE pin.

The modem is actually connected via a USB-hub for which autosuspend was enabled.


I’ve tried to deactived autosuspend for the USB hub, but it also didn’t fix the problem.

maybe you should keep on using MBIM interface as it solves all your problem