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! :)