Dell Wireless 5809e support in openSUSE 13.2

This post is about getting the LTE card to work that gets built into current Dell Notebooks such as the Latitude E5450/E7450:

Official Name: Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card
OEM Name: Sierra Wireless AirPrime EM7305
Chipset: Qualcomm MDM 9215
Max speed Download: 100 MBit
Upload: 50 MBit
Physical format: PCIe M.2
Frequency bands GPRS / EDGE: 850/900/1800/1900 MHz
WCDMA: 800/1700/2100 MHz
LTE: 1800/2100/2600 MHz
USB Manufacturer / Device ID 413c:81b1

Linux 3.16.7 has a cdc_mbim driver that detects the card:

Jun 20 21:28:21 e7450 kernel: usbcore: registered new interface driver cdc_ncm
Jun 20 21:28:21 e7450 kernel: usbcore: registered new interface driver cdc_wdm
Jun 20 21:28:21 e7450 kernel: cdc_mbim 2-8:2.12: cdc-wdm0: USB WDM device
Jun 20 21:28:21 e7450 kernel: cdc_mbim 2-8:2.12 wwan0: register 'cdc_mbim' at usb-0000:00:14.0-8, CDC MBIM, a2:86:61:8b:6c:34
Jun 20 21:28:21 e7450 kernel: usbcore: registered new interface driver cdc_mbim

The driver exposes both a /dev node and a network interface:

# ls -l /dev/cdc*
crw------- 1 root root 180, 176 Jun 20 21:28 /dev/cdc-wdm0
# ifconfig -a
[...]
wwp0s20u8 Link encap:Ethernet  HWaddr 92:A8:ED:A5:24:5A  
          BROADCAST NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

However the network interface can not be accessed directly until a connection is setup through the /dev node:

# ifconfig wwp0s20u8 up
wwp0s20u8: unknown interface: No such device

The /dev node is not the classic serial port exposing an AT commands interface you probably know from older modems and 3G cards. Instead, as the kernel module seen in the syslog output above suggests, this is a special interface called MBIM, the Mobile Broadband Interface Model, standardized by the USB Implementors Forum.

There is also an alternative interface by Qualcomm called QMI, the Qualcomm MSM interface. See these slides from Aleksander Morgado’s FOSDEM 2014 talk, his whitepaper “Qualcomm Gobi devices in Linux based systems” from December 10, 2013 and finally his Blog post “An introduction to libmbim”.

And because things are so funny, there also seems to be a qcserial driver (more on this later).

Luckily, we usually need not care about such details as we have NetworkManager and its companion, ModemManager. Unfortunately, however, the ModemManager version shipped with openSUSE 13.2 is 1.0.0, which does not know how to handle the 4G card:

# ModemManager --debug
e7450:/home/pief # ModemManager --debug
ModemManager[2953]: <info>  [1434835139.983557] [main.c:128] main(): ModemManager (version 1.0.0) starting...
ModemManager[2953]: <debug> [1434835139.985219] [main.c:61] bus_acquired_cb(): Bus acquired, creating manager...
ModemManager[2953]: <debug> [1434835139.986363] [mm-plugin-manager.c:788] load_plugins(): Looking for plugins in '/usr/lib64/ModemManager'
[...]
ModemManager[2953]: <debug> [1434835142.635548] [mm-plugin-manager.c:164] port_probe_context_finished(): (Plugin Manager) [cdc-wdm0] not supported by any plugin
ModemManager[2953]: <debug> [1434835142.635569] [mm-device.c:339] mm_device_ignore_port(): Fully ignoring port 'usbmisc/cdc-wdm0' from now on
ModemManager[2953]: <debug> [1434835142.635597] [mm-plugin-manager.c:274] port_probe_context_finished(): (Plugin Manager) 'cdc-wdm0' port probe finished, still 1 running probes in this device (wwp0s20u8c2i12)
ModemManager[2953]: <debug> [1434835142.635626] [mm-plugin-manager.c:164] port_probe_context_finished(): (Plugin Manager) [wwp0s20u8c2i12] not supported by any plugin
ModemManager[2953]: <debug> [1434835142.635644] [mm-device.c:339] mm_device_ignore_port(): Fully ignoring port 'net/wwp0s20u8c2i12' from now on
ModemManager[2953]: <debug> [1434835142.635660] [mm-plugin-manager.c:285] port_probe_context_finished(): (Plugin Manager) 'wwp0s20u8c2i12' port probe finished, last one in device

You could consider upgrading to a more recent ModemManager but then you will run into two issues:

  • ModemManager’s novatel plugin incorrectly grabs the device node, trying to speak AT commands with it. A new dell plugin with improved probing is currently in Git master and targeted for 1.6.0, but 1.6.0 will not be out any time soon.
  • Even if, as a workaround, you move away the Novatel plugin, you will hit the issue that the 4G card apparantly requires a special “FCC auth” command. A fix for this is currently available for 4G cards exposed via the QMI interface only. Quoting Aleksander:

    I’ll try to test that some day, but I’ll need to get another modem as my DW5570 only comes up with a QMI configuration. For now, if you’re stuck with this problem using MBIM, you can likely just select USB configuration #1 using usb_modeswitch and get the modem switched to QMI mode.

    I did not try with usb_modeswitch but using a udev rule which I believe should have the same effect:

    # force Dell WWAN 5809e to configuration #1
    SUBSYSTEM=="usb", \
            ATTR{idVendor}=="413c", ATTR{idProduct}=="81b1", \
            ATTR{bConfigurationValue}="1"
    

    After rebooting, I tried the qmi_wwan module, feeding it the USB vendor/product ID manually via

    echo "413c 81b1" >/sys/bus/usb/drivers/qmi_wwan/new_id
    

    but this got me only errors about bogus data elements.

Luckily, there is an easier workaround for now: the qcserial driver. daniviga@github provides a ready-to-use udev rules file, which does not only work for his E5450 but also the E7450, seeing that they’re the same family and use the same 4G card.

After installing this one and rebooting I could successfully connect to the 4G network :)

UPDATE: Checkout the followup to this post.

Leave a Reply