MHI on 5G modems

Koen Vandeputte koen.vandeputte at citymesh.com
Fri Aug 12 13:25:58 UTC 2022


On 12.08.22 10:55, Daniele Palmas wrote:
> Hi Koen,
>
> Il giorno gio 11 ago 2022 alle ore 15:24 Koen Vandeputte
> <koen.vandeputte at citymesh.com> ha scritto:
>> Hi All,
>>
>> I'm currently working on adding MHI support within OpenWRT. (kernel 5.15.59)
>>
>> I have a few modems laying around here:
>>
>> - Sierra Wireless EM9191
>> - Telit FN980
>> - Fibocom FM150-AE
>>
>> On all 3 of them, MHI seems to enumerate correctly:
>>
>> [    8.258921] mhi-pci-generic 0000:01:00.0: BAR 0: assigned [mem
>> 0x01100000-0x01100fff 64bit]
>> [    8.267488] mhi-pci-generic 0000:01:00.0: enabling device (0140 -> 0142)
>> [    8.276817] mhi mhi0: Requested to power ON
>> [    8.288905] mhi mhi0: Power on setup success
>> [    8.341370] mhi mhi0: Wait for device to enter SBL or Mission mode
>>
>> Exposed devices:
>>
>> /dev/wwan0mbim0
>> /dev/wwan0qcdm0
>> /dev/wwan0qmi0
>>
>> And a network device:
>>
>> mhi_hwip0
>>
>>
>> Following kernel SYMS are enabled:
>>
>> CONFIG_MHI_BUS=m
>> CONFIG_MHI_BUS_DEBUG=y
>> CONFIG_MHI_BUS_PCI_GENERIC=m
>> CONFIG_MHI_NET=m
>> CONFIG_MHI_WWAN_CTRL=m
>> CONFIG_MHI_WWAN_MBIM=m
>> CONFIG_WWAN=m
>>
>>
>> Now the problem is, when sending QMI traffic towards wwan0qmi0, I never
>> get a reply back on any of them.
>> When using cdc-wdm  or when wwan0qmi0 is exposed over usb, it works,
>> but as soon as wwan0qmi0 is exposed over pcie, it fails.
>>
>> Does anyone have any clue what is missing here?
>>
> I suggest you enable dynamic debugging on mhi and wwan to get more
> information about what's going on.
>
> My experience is that some hosts have issues with runtime power
> management (e.g. the modem is not able to exit M3) and the symptoms
> seem to be the same as the ones you describe.
>
> Regards,
> Daniele

Hi Daniele,

Thanks for the reply.
Well .. this is interesting.  Looks like my EM919x is always detected as 
a generic "qcom sdx55"

All looks well-defined within mhi/pci-generic.c and lspci -v reports the 
proper ID's:


static const struct pci_device_id mhi_pci_id_table[] = {
         /* EM919x (sdx55), use the same vid:pid as qcom-sdx55m */
         { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0306, 0x18d7, 0x0200),
                 .driver_data = (kernel_ulong_t) &mhi_sierra_em919x_info },
         /* Telit FN980 hardware revision v1 */
         { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0306, 0x1C5D, 0x2000),
                 .driver_data = (kernel_ulong_t) 
&mhi_telit_fn980_hw_v1_info },
         { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x0306),
                 .driver_data = (kernel_ulong_t) &mhi_qcom_sdx55_info },
         { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x0304),
                 .driver_data = (kernel_ulong_t) &mhi_qcom_sdx24_info },


01:00.0 Unassigned class [ff00]: Qualcomm Device 0306
     Subsystem: Device 18d7:0200


hmz ..



Here are the logs:


[   10.506776] mhi-pci-generic 0000:01:00.0: MHI PCI device found: 
qcom-sdx55m
[   10.513847] mhi-pci-generic 0000:01:00.0: BAR 0: assigned [mem 
0x01100000-0x01100fff 64bit]
[   10.522357] mhi-pci-generic 0000:01:00.0: enabling device (0140 -> 0142)
[   10.532198] mhi mhi0: Requested to power ON
[   10.536490] mhi mhi0: Attempting power on with EE: PASS THROUGH, 
state: RESET
[   10.547145] mhi mhi0: Power on setup success
[   10.547293] mhi mhi0: Handling state transition: PBL
[   10.556541] mhi mhi0: Device in READY State
[   10.560738] mhi mhi0: Initializing MHI registers
[   10.565457] mhi mhi0: Wait for device to enter SBL or Mission mode
[   10.633687] mhi mhi0: local ee: MISSION MODE state: READY device ee: 
MISSION MODE state: READY
[   10.657015] mhi mhi0: State change event to state: M0
[   10.662281] mhi mhi0: Received EE event: MISSION MODE
[   10.667577] mhi mhi0: Handling state transition: MISSION MODE
[   10.673524] mhi mhi0: Processing Mission Mode transition
[   10.684850] mhi_net mhi0_IP_HW0: 100: Updating channel state to: START
[   10.707859] mhi_net mhi0_IP_HW0: 100: Channel state change to START 
successful
[   10.715374] mhi_net mhi0_IP_HW0: 101: Updating channel state to: START
[   10.737501] mhi_net mhi0_IP_HW0: 101: Channel state change to START 
successful

// start talking QMI to wwan0qmi0

[  131.173212] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: START
[  131.187781] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to START 
successful
[  131.195303] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: START
[  131.207145] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to START 
successful
[  131.966531] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: RESET
[  131.980574] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to RESET 
successful
[  131.988018] mhi mhi0: Marking all events for chan: 15 as stale
[  131.993887] mhi mhi0: Finished marking events as stale events
[  131.999704] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  132.007123] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  132.014565] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  132.021911] mhi_wwan_ctrl mhi0_QMI: 15: successfully reset
[  132.027439] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: RESET
[  132.039934] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to RESET 
successful
[  132.047371] mhi mhi0: Marking all events for chan: 14 as stale
[  132.053236] mhi mhi0: Finished marking events as stale events
[  132.058992] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: -107 
xfer_len: 0
[  132.066075] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: -107 
xfer_len: 0
[  132.073167] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: -107 
xfer_len: 0
[  132.080268] mhi_wwan_ctrl mhi0_QMI: 14: successfully reset
[  135.132013] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: START
[  135.146232] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to START 
successful
[  135.154006] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: START
[  135.165448] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to START 
successful
[  135.924164] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: RESET
[  135.938200] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  135.945123] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  135.952012] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  135.959258] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to RESET 
successful
[  135.966710] mhi mhi0: Marking all events for chan: 15 as stale
[  135.972581] mhi mhi0: Finished marking events as stale events
[  135.978398] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  135.985828] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  135.993262] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  136.000638] mhi_wwan_ctrl mhi0_QMI: 15: successfully reset
[  136.006167] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: RESET
[  136.020214] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to RESET 
successful
[  136.027650] mhi mhi0: Marking all events for chan: 14 as stale
[  136.033515] mhi mhi0: Finished marking events as stale events
[  136.039286] mhi_wwan_ctrl mhi0_QMI: 14: successfully reset
[  139.091396] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: START
[  139.105574] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to START 
successful
[  139.113108] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: START
[  139.124721] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to START 
successful
[  139.883546] mhi_wwan_ctrl mhi0_QMI: 15: Updating channel state to: RESET
[  139.897577] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  139.904502] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  139.911391] mhi_wwan_ctrl mhi0_QMI: mhi_ul_xfer_cb: status: 0 
xfer_len: 12
[  139.918624] mhi_wwan_ctrl mhi0_QMI: 15: Channel state change to RESET 
successful
[  139.926074] mhi mhi0: Marking all events for chan: 15 as stale
[  139.931919] mhi mhi0: Finished marking events as stale events
[  139.937781] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  139.945189] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  139.952678] mhi_wwan_ctrl mhi0_QMI: mhi_dl_xfer_cb: status: -107 
receive_len: 0
[  139.960027] mhi_wwan_ctrl mhi0_QMI: 15: successfully reset
[  139.965554] mhi_wwan_ctrl mhi0_QMI: 14: Updating channel state to: RESET
[  139.979594] mhi_wwan_ctrl mhi0_QMI: 14: Channel state change to RESET 
successful
[  139.987031] mhi mhi0: Marking all events for chan: 14 as stale
[  139.992895] mhi mhi0: Finished marking events as stale events
[  139.998663] mhi_wwan_ctrl mhi0_QMI: 14: successfully reset

Koen



More information about the ModemManager-devel mailing list