Make the EM7455 work in GNU/Linux 2024 edition: Permanently resolve the FCC lock issue

# How to make the EM7455 work in GNU/Linux 2024 edition, aka resolves the FCC lock issue permanently so it works every time out of the box on any system no hacks required. If you've received a modem from us after November of 2024 this documentation doesn't apply. However it may be useful to some who've received earlier modems with the EM7455 chip before the bug was introduced in GNU/Linux and may wish to make some slight changes to the firmware to work around it. It's primarily intended for in-house use however. If you have an older EM7455-chip based modem from ThinkPenguin, Inc that you are having trouble with we recommend contacting support instead and going through the appreciate support channels to resolve the issue instead.

# The below has been vetted on a Linux Mint 21.3 Edge system in a live environment only
# It is highly recommended to utilize that, else these directions probably won't work

# First update the firmware for the modem

# Suggestion: Use the AT&T firmware...

# Follow the directions from here, but download the files under the "Firmware Files" column rather than the "Linux Binaries" as the later doesn't exist any more

https://www.thinkpenguin.com/gnu-linux/update-firmware-em7455-chip-and-s...

# Install EDL diagnostic tools with the below commands:

sudo apt update
sudo apt install adb fastboot python3-dev python3-pip liblzma-dev git

sudo systemctl stop ModemManager
sudo systemctl disable ModemManager

git clone https://github.com/bkerler/edl.git
cd edl
git submodule update --init --recursive
chmod +x ./install-linux-edl-drivers.sh
bash ./install-linux-edl-drivers.sh
python3 setup.py build
sudo python3 setup.py install

# Set composition mode to 6 so we can use minicom

wget https://www.thinkpenguin.com/files/em7455-modem-software/swi_setusbcomp.pl
sudo add-apt-repository universe minicom
sudo apt install libuuid-tiny-perl libipc-shareable-perl

sudo perl swi_setusbcomp.pl --usbcomp=6

# Unplug the modem and plug it back in, then open minicom

sudo minicom -D /dev/ttyUSB2

# Find out the code needed to unlock the modem

AT!OPENLOCK?

# Use the output code from AT!OPENLOCK? with the EDL diagnostic tool called sierrakeygen, run it, but replace 39D0447ED86B4619 with the output from the AT!OPENLOCK? command

./sierrakeygen -l 39D0447ED86B4619 -d MDM9x30

# Copy and paste the sierrakeygen command output in minicom, aka the thing from the sierrakeygen tool that looks like this (yours will have a different #):

AT!OPENLOCK="994673746F1FDCA6"

# Then in minicom run:

AT!PCFCCAUTH?

# You'll probably get something like this:

NV Setting: 0
FCC Auth Enabled: 1
FCC Lock State: 1

# In minicom run

AT!PCFCCAUTH=0
AT!RESET

#Unplug modem and reconnect, then reconnect to minicom and run:

at!entercnd="A710"

#Then check to see it is FCC Auth Enabled: 0, as this is mandatory for the modem to work out of the box every time without hacks

AT!PCFCCAUTH?

Example:

NV Setting: 0
FCC Auth Enabled: 0
FCC Lock State: 0

# Unplug the modem and reconnect
# You should probably also set it to MBIM mode while you are at it

sudo qmicli -d /dev/cdc-wdm0 --dms-swi-set-usb-composition=9

# Disconnect and reconnect the modem one last time and everything should now work in GNU/Linux out of the box every time you use it on any system
# Just don't forget to re-enable ModemManager if testing on the same system running these directions on

sudo apt install modemmanager
sudo systemctl enable ModemManager
sudo systemctl start ModemManager

Source docs:

Several years later this undocumented anti-feature is now fixed:

https://forum.sierrawireless.com/t/em7455-deactivate-low-power-mode/8620/21

https://x86sec.com/posts/2023/02/27/Sierra-Wireless-em7455-4G-Modem-Hack...