Changing Dell Wireless 5809e / Sierra Wireless EM7305 USB composition (MBIM, QMI, AT interface, NMEA)

Here’s a small update to my post from last year on Dell Wireless 5809e support in Linux – a followup.

Over the past weeks my LTE modem, a Dell Wireless 5809e alias Sierra Wireless EM7305 card, suddenly stopped working. Working in the sense that it didn’t appear in NetworkManager’s menu any longer. Since I stay “bleeding edge” (ahem) all the time by running a rolling upgrade distro (openSUSE Tumbleweed), I suspected Linux kernel and ModemManager/NetworkManager updates at first. Instead, it turned out that the LTE modem had changed its appearance on the USB bus in terms of configuration descriptors and endpoints, the USB composition, as the following usb-devices output shows:

T:  Bus=02 Lev=01 Prnt=01 Port=07 Cnt=02 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=413c ProdID=81b1 Rev=00.06
S:  Manufacturer=Sierra Wireless, Incorporated
S:  Product=Dell Wireless 5809e Gobi™ 4G LTE Mobile Broadband Card
C:  #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
I:  If#=12 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
I:  If#=13 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim

Because of the #Cfgs=1, my udev rule to switch the device to USB configuration 1 wouldn’t have any effect any more — the LTE card now only offered a single USB configuration with a MBIM interface only. Since Linux does not use a Sierra Wireless-specific driver that could know enough about its internals to cause it to change its USB composition, I had the suspicion that it was rather installing Windows 10 and Windows 10-specific device drivers might have caused the change.

So I spent a number of hours trying to figure out how to revert that change but at first without success:

  • I (force) applied a firmware update (to the same version as already installed) but that didn’t help.
  • I extracted Dell’s current Windows 10 driver Communications_Driver_0GN3K_WN32_6.19.4382.502_A06.EXE. The enclosed DELL7305DriverSetup.exe is accompanied by a Configuration.ini file, which has these nice settings:
    [Default Values]
    [...]
    USBCOMP=0
    [...]
    

    Running DELL7305DriverSetup.exe -h will tell you that the USBCOMP=x settings can indeed be used to change the device’s USB composition — in theory, that is. No matter how often I tried it didn’t work for me, regardless whether I modified the Configuration.ini file or appended the parameters directly on the command line.

As is often the case, the hours you invest are actually hours spent in finding the right keywords to search the Net. This post in the Sierra Wireless forum led me to Bjørn Mork’s Perl script swi_setusbcomp.pl (alternatively use my Github mirror, may be outdated though!) that is able to do magic (after satisfying its Perl module requirements via cpan install):

# sudo perl swi_setusbcomp.pl
Running in MBIM mode (driver=cdc_mbim)
MBIM OPEN succeeded
QMI msg '0x0021' returned status = 1
MBIM QMI support verified
supports 26 QMI subsystems:
  0x00 (1.5)    'QMI_CTL'       - Control service
  0x01 (1.36)   'QMI_WDS'       - Wireless data service
  0x02 (1.14)   'QMI_DMS'       - Device management service
  0x03 (1.25)   'QMI_NAS'       - Network access service
  0x04 (1.3)    'QMI_QOS'       - Quality of service, err, service 
  0x05 (1.10)   'QMI_WMS'       - Wireless messaging service
  0x06 (1.0)    'QMI_PDS'       - Position determination service
  0x07 (1.2)    'QMI_AUTH'      - Authentication service
  0x08 (1.2)    'QMI_AT'        - AT command processor service
  0x09 (2.1)    'QMI_VOICE'     - Voice service
  0x0a (2.16)   'QMI_CAT2'      - Card application toolkit service (new)
  0x0b (1.25)   'QMI_UIM'       - UIM service
  0x0c (1.4)    'QMI_PBM'       - Phonebook service
  0x11 (1.0)    'QMI_SAR'       - Specific absorption rate service
  0x12 (1.0)    'QMI_IMSS'      - IMS settings service
  0x17 (1.0)    'QMI_TS'        - Thermal sensors service
  0x18 (1.0)    'QMI_TMD'       - Thermal mitigation device service
  0x1a (1.10)   'QMI_WDA'       - Wireless data administrative service
  0x1d (1.0)    'QMI_CSVT'      - Circuit switched videotelephony service
  0x1e (1.0)    'QMI_QCMAP'     - Qualcomm mobile access point service
  0x1f (1.0)    'QMI_IMSP'      - IMS presence service
  0x20 (1.0)    'QMI_IMSVT'     - IMS videotelephony service
  0x22 (1.0)    'QMI_COEX'      - Coexistence service
  0x29 (1.0)    'QMI_RFRPE'     - RF radiated performance enhancement service
  0xe1 (1.0)    'QMI_RMS'       - Remote management service
  0xf0 (1.0)    'unknown'       - 
QMI msg '0x0022' returned status = 1
Got QMI DMS client ID '4'
QMI msg '0x555b' returned status = 1
Current USB composition: 9
USB compositions:
   0 - HIP  DM    NMEA  AT    MDM1  MDM2  MDM3  MS      NOT SUPPORTED
   1 - HIP  DM    NMEA  AT    MDM1  MS                  SUPPORTED
   2 - HIP  DM    NMEA  AT    NIC1  MS                  NOT SUPPORTED
   3 - HIP  DM    NMEA  AT    MDM1  NIC1  MS            NOT SUPPORTED
   4 - HIP  DM    NMEA  AT    NIC1  NIC2  NIC3  MS      NOT SUPPORTED
   5 - HIP  DM    NMEA  AT    ECM1  MS                  NOT SUPPORTED
   6 - DM   NMEA  AT    QMI                             SUPPORTED
   7 - DM   NMEA  AT    RMNET1 RMNET2 RMNET3            SUPPORTED
   8 - DM   NMEA  AT    MBIM                            SUPPORTED
*  9 - MBIM                                             SUPPORTED
  10 - NMEA MBIM                                        SUPPORTED
  11 - DM   MBIM                                        SUPPORTED
  12 - DM   NMEA  MBIM                                  SUPPORTED
  13 - Config1: comp6    Config2: comp8                 NOT SUPPORTED
  14 - Config1: comp6    Config2: comp9                 SUPPORTED
  15 - Config1: comp6    Config2: comp10                NOT SUPPORTED
  16 - Config1: comp6    Config2: comp11                NOT SUPPORTED
  17 - Config1: comp6    Config2: comp12                NOT SUPPORTED
  18 - Config1: comp7    Config2: comp8                 NOT SUPPORTED
  19 - Config1: comp7    Config2: comp9                 SUPPORTED
  20 - Config1: comp7    Config2: comp10                NOT SUPPORTED
  21 - Config1: comp7    Config2: comp11                NOT SUPPORTED
  22 - Config1: comp7    Config2: comp12                NOT SUPPORTED
QMI msg '0x0023' returned status = 1

This shows very nicely the available USB compositions and especially the currently active one. Running sudo perl swi_setusbcomp.pl --usbcomp=14 and powering off the system (in order to make sure the LTE card got reset) brought my LTE card back to its former state, where USB configuration 2 (MBIM) was still the default (ok for me in order to maintain Windows 10 compatibility) and my previously posted udev rules allowed to switch to USB configuration 1 (QMI):

T:  Bus=01 Lev=01 Prnt=01 Port=07 Cnt=02 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  2
P:  Vendor=413c ProdID=81b1 Rev=00.06
S:  Manufacturer=Sierra Wireless, Incorporated
S:  Product=Dell Wireless 5809e Gobi™ 4G LTE Mobile Broadband Card
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=qcserial
I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=qcserial
I:  If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan

Thanks, Bjørn! :)