EM7455 Linux Issues

Hi,

I have bought a Sierra Wireless EM7455 (DW5811e) recently for my Dell Latitude e5470.

My laptop have a Dualboot OS: Windows 10 - Debian Jessie with the latest kernel.

At first, I downloaded the driver from Dell Support website, and I modified the configuration.ini file to change the USBCOMP=6 for QMI and other GPS stuff.

[Default Values]
FWUPDATE=AUTO
FWUPDATEUI=1
AUTOFWSIMMATCH=3
MBBDRIVER=1
BUSDRIVER=1
LOCATIONDRIVER=1
WIN8LOCATION=1
WIN8BUSDRIVER=1
CHECKFORDEVICE=1
SS=1
GPS=1
GPSName="GPS"
GPS_Tracking=1
GPSAUTO=1
GPSRADIO=1
SILENT=0
LOG=1
USBCOMP=6
DriverHidePortMask=0x00
VerifyDellSystemID=skipcheck
DisableYellowBangRecovery=1
DisableUsbCompAutoUpdate=1

Everything worked fine under windows after restarting my PC. But then when I booted over debian, the wwan card was not present at all.

I tried “lsusb”, “lspci”, “lsmod”, and “dmesg |grep cdc-*” and “dmesg |grep tty” I had nothing at all. It’s like Debian didn’t like USBCOMP=6 that I set on windows installation.

So I removed the Driver, removed the card from its slot, and installed it back, I reinstalled the driver but with the USBCOMP=8 for MBIM.

I rebooted, and still worked fine under Windows, and worked partially over debian, the cdc-wdm0 is present, but no COM ports for NMEA, DM or AT.

Can you help me how to make it work on debian/ubuntu with QMI USBCOMP=6 and have the different com ports (dmesg |grep tty)

I am pretty sure it will show up in lsusb, but that doesn’t help you much. The problem is that the QMI and serial functions (AT, NMEA, QCDM) are vendor specific, so the drivers must know the device ID of every supported modem. And Dell use their own ID for their EM7455. This ID must be added to the qmi_wwan and qcserial drivers. AFAIK, only the Sierra Wireless and Lenovo EM7455 IDs have been added so far.

So if someone cares about the Dell DW5811e support in mainline Linux, then they need to cook up and submit patches for qcserial and qmi_wwan.

Yes, MBIM is a standardised USB class with a class driver in Linux (cdc_mbim). This driver will match any MBIM function regardless of device ID. But the serial functions are still vendor specific and need the above mentioned qcserial patch.

Well, I did something very risky that bricks my Sierra Wireless EM7455. I was hoping that it will make it work on Windows and Debian, but It broke it.

I used those commands from this website forum.pfsense.org/index.php?topic=123828.0
I didn’t copy the whole code, just took this one:

AT!ENTERCND="A710"
AT!USBPID=9071,9070
AT!RESET

After rebooted my PC on windows, the card was unknown to the system, I reinstalled the Sierra Wireless Driver, but it still the same unknown driver. I booted over linux this time, but detects nothing.

There is no Modem COM port in windows nor TTY ports on Linux, in order to restore back the modem to factory,

I searched a way to revert back the PID of the card, on linux using usb_modeswitch, but I couldn’t do it, because I don’t know how to use it. Also I don’t know how to revert it back on windows.

Can you help me to revert back the PID of the card please :cry:

Sure, no problems. But please take it calm and easy and don’t do anything more hasty :wink:

Your modem had a Dell specific ID. This is made up of both a vendor ID (which belongs to Dell) and a product ID, which was assigned by Dell. The WIndows drivers know this exact combination. You changed half of that device ID, by changing the product ID. So you now have a bastard modem with a Dell vendor ID and Sierra Wireless product IDs. This combination is not recognized by neither Windows nor Linux.

But you can realitively easily work around that temporarily in Linux, allowing you to fix the issue by changing the USBPID back to the original. Do something like this (as root):

modprobe option
echo 413c 9071 > /sys/bus/usb-serial/drivers/option1/new_id

You should get a number of /dev/ttyUSBx devices. One of them will be the AT command serial port. Use it to change the PID back to your original (verify that I got the correct device IDs here!!!):

AT!ENTERCND="A710"
AT!USBPID=81B6,81B5
AT!RESET

This should get you back to where you were.

Then go ahead and make changes to the Linux drivers instead. Changing the modem is not the correct way forward. You are extremely lucky that Dell didn’t implement a BIOS whitelist like Lenovo does. If they had, then the laptop would have refused to boot. And you would have had to remove the modem from the laptop to fix it.

Thanks so muuuuuuuch for the urgent help. It worked at last.
I appreciate so much. :smiley:

Can you tell me how do you know those PIDs, because when I did AT!USBPID=? and AT!USBINFO? I got a bunch of the Modem IDs and some Hexadecimal numbers indicating each AppID and BootID. and the same thing for VID.

And I’m also interested of your technique

What is the “option” module exactly ?

I’ll follow your instructions, firstly by not modifying anything on windows. But what should I do exactly on debian to get it worked on both OSes on QMI interface with the TTY ports ?

I found the IDs by googling for DW5811e, guessing that the bood PID is one less than the application PID. Usually is.

Most USB serial functions are very simple: One bulk in and one bulk out endpoint is all you need. There is some control signal logic as well, but that’s mostly optional. This makes the drivers simple and in practice interchangeable. The main difference is in the descriptor matching.

I often abuse the “option” driver for this kind of one-shot temporary thing because it does very little sanity checking. It will happily bind to almost any USB interface with two bulk endpoints. Some of the created ttyUSBx devices will be bogus - it will bind to QMI/RMNET functions too for example. But a few bogus ttyUSBx devices does not matter for such temporary recovery operations. What’s important is that it will create a ttyUSBx device for the AT port. We just ignore the rest.

This does of course mean that the option driver would work as a permanent solution as well. The only reason I recommend qcserial instead is that it already has the logic to match the correct USB interfaces for Sierra Wireless modems. That makes it a one-line (or two if we include the boot ID) patch. Most of the logic is shared between these two drivers anyway, using the shared usb_wwan module.

For the permanent, proper fix, that will be patches similar to these ones, adding the Dell IDs instead:

git.kernel.org/pub/scm/linux/ke … 6a0f541243
git.kernel.org/pub/scm/linux/ke … ae9cacd177

I’ll see if I can cook something up

EDIT: patches posted now:
marc.info/?l=linux-usb&m=148976857814189
marc.info/?l=linux-usb&m=148976857814190

Thanks for the patches.

The question is, which Git Kernel patch should I use: QMI or QCserial ?
Also for each patch, I have two git links, which link ?

And where should I put the file in my system ?

Sorry I’m still noob in linux ^^’

You only need the two last patches. The two first were just meant as examples of how to do this. They are already part of the kernel.

Since you are using Debian, you have the full docs on how to build your own kernels here: kernel-handbook.alioth.debian.org/

But htis page is probably a better starting point, since it explains the patching part etc: kernelnewbies.org/KernelBuild

As you can see, there is a lot to read and learn and it will probably take some time to get everything going. Personally I never bother to do a complete kernel build like that just to update a driver (or two). This shortcut is considerably less work and will do the job:
debian-administration.org/artic … nel_module

But the absolute easiest way is to just relax for a few weeks and wait for the patches to appear in the Debian kernels :slight_smile:

Note that the qmi_wwan patch won’t ever show up in a Jessie kernel. You need Linux v4.5 or later to get raw-ip support in qmi_wwan. But if all you want is MBIM with AT+NMEA, then the qcserial patch will do. And it should eventually end up in a Jessie kernel.