Issue activating mobile internet modem on a Lenovo ThinkPad X1 Yoga (Gen 8)

Hey lovely people of Fedora!

I’m a Linux n00b and trying to find my bearing again after not having used any distro productively in over 15 years. It’s day four and I already need your help.

I successfully installed Fedora 42 (and yesterday the update to 43) on a Lenovo ThinkPad X1 Yoga (8th gen, type 21HRS2MW00). Most things run quite smoothly but I can’t get the mobile internet modem to work: the APN settings can’t be saved.

When activated the modem is recognised like this:

  • Manufacturer: mtk
  • Model: MBIM [14C3:4D75]
  • Firmware: 81600.0000.00.29.22.19_GCE24

When I try to enable mobile data, it keeps asking me for access point data. I diligently enter the access point data (which in my case are these) and hit save.

The result is that the list meant to show that data stays empty and clicking close on that window will also disable mobile broadband again.

[See update in post below]

From what I can tell the firmware is the one provided by Lenovo, which I seemingly managed to install the n00b way by double-clicking the .rpm files in the order outlined in the instructions and applying one command found in the “read me”.

Side note: I had actually tried installing the rpm packages the way Lenovo outlines it in the instructions but constantly ran into errors that the transaction lock couldn’t be set or that /usr/var was read-only.

I did some more digging and ended up with information that doesn’t make sense to me.

(1)

I may have stumbled across a UI bug in the Network Manager, where I can save connections using that interface but I cannot activate any of them. Reason being: while doing some digging, I stumbled across this topic and a command to open a “network connections” window using the nm-connection-editor command. IT showed more than ten copies of the same connection.

(2)

Looking at the connections in the Network Manager CLI, I got this output:

NAME         UUID                                  TYPE      DEVICE    
Amon Amarth  34c8d9d5-a24b-4bb9-b701-213192501d02  wifi      wlp0s20f3 
lo           069a0b95-ab73-45a0-8b7b-79c654e372c1  loopback  lo        
Telekom      454cd84c-ee8f-45f3-a206-5df3eb51dc75  gsm       --     

The curious bit here is that the mobile broadband connection “Telekom” doesn’t have a device associated with it.

(3)

This sent me down a rabbit hole of trying to figure out if my modem was even properly recognized.

The mmcli -L command yielded the following output:

    /org/freedesktop/ModemManager1/Modem/0 [mtk] MBIM [14C3:4D75]

And trying to get more information about the modem using mmcli -m 0 gave me this:

 -----------------------------
  General  |              path: /org/freedesktop/ModemManager1/Modem/0
           |         device id: 2fac1ffe153b6f47e9e9a162e6be3c83104ff40d
  -----------------------------
  Hardware |      manufacturer: mtk
           |             model: MBIM [14C3:4D75]
           | firmware revision: 81600.0000.00.29.22.19_GC
           |                    E24
           |      h/w revision: V1.0.6
           |         supported: gsm-umts, lte, 5gnr
           |           current: gsm-umts, lte, 5gnr
           |      equipment id: [REDACTED]
  -----------------------------
  System   |            device: /sys/devices/pci0000:00/0000:00:1c.0/0000:08:00.0
           |           physdev: /sys/devices/pci0000:00/0000:00:1c.0/0000:08:00.0
           |           drivers: mtk_t7xx
           |            plugin: mtk
           |      primary port: wwan0mbim0
           |             ports: wwan0 (net), wwan0at0 (at), wwan0mbim0 (mbim)
  -----------------------------
  Status   |             state: failed
           |     failed reason: esim-without-profiles
           |       power state: low
  -----------------------------
  Modes    |         supported: allowed: 3g; preferred: none
           |                    allowed: 4g; preferred: none
           |                    allowed: 3g, 4g; preferred: none
           |                    allowed: 5g; preferred: none
           |                    allowed: 3g, 5g; preferred: none
           |                    allowed: 4g, 5g; preferred: none
           |                    allowed: 3g, 4g, 5g; preferred: none
           |           current: allowed: 3g, 4g, 5g; preferred: none
  -----------------------------
  IP       |         supported: ipv4, ipv6, ipv4v6
  -----------------------------
  3GPP     |              imei: [REDACTED]
  -----------------------------
  SIM      |  primary sim path: /org/freedesktop/ModemManager1/SIM/1
           |    sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0
           |                    slot 2: /org/freedesktop/ModemManager1/SIM/1 (active)

So the modem is recognized, the driver works, the hardware is active. The weird part is this:

  Status   |             state: failed
           |     failed reason: esim-without-profiles
           |       power state: low

I’m not using an eSIM but a physical SIM that’s in the slot, recognized by Modem Manager and deemed active.

Does anyone have an idea what is going on here?

I had a bit of success but honestly, don’t ask me why or how this worked.

Turns Out™ the FM350-GL 5G modem is capable of using physical SIM cards and eSIMs, which this part of the modem read-out indicated, too:

 -----------------------------------
  SIM       |       primary sim path: /org/freedesktop/ModemManager1/SIM/1
            |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/1
            |                         slot 2: /org/freedesktop/ModemManager1/SIM/2 (active)

I needed to find a way to switch the card the system uses but for some reason the default modem manager command mmcli -m 0 --set-primary-sim-slot=1 (with or without sudo) kept returning errors telling me that the SIM id was invalid, which made no sense.

Some more searching the web got me to this command:

mmcli -v -m any --set-primary-sim-slot=1

Which finally finally and successfully switched the SIM slot to the physical one. A small success.

I then enabled mobile data in the Network Manager GUI and got a prompt for the SIM PIN for the first time since I started working on this but the laptop still wasn’t able to actually establish a connection.

The modem read-out continued to look like this:

-----------------------------------
  Status    |                   lock: sim-pin2
            |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
            |                  state: enabling
            |            power state: low

Note the power state as “low” and the modem state as “enabling”. Any attempts to change the power state (using mmcli -m 0 --set-power-state-on or cycling related commands) were unsuccessful.

The attempt to force the modem to be enabled using sudo mmcli -m 0 -e was met with this message:

error: couldn't enable the modem: 'GDBus.Error:org.freedesktop.DBus.Error.NoReply: Remote peer disconnected'

I then ran a monitoring command (mmcli -m 0- w)based on a recommendation I found in this forum and the return was the following over and over again:

/org/freedesktop/ModemManager1/Modem/2: Initial state, 'enabling'
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'enabling' --> 'disabled' (Reason: None or unknown)
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'disabled' --> 'enabling' (Reason: User request)
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'enabling' --> 'disabled' (Reason: None or unknown)
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'disabled' --> 'enabling' (Reason: User request)
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'enabling' --> 'disabled' (Reason: None or unknown)
	/org/freedesktop/ModemManager1/Modem/2: State changed, 'disabled' --> 'enabling' (Reason: User request)

And this is where I’m stuck now. I have no idea what is disabling the modem constantly.

Hey Alex, I have the same modem (Fibocom FM350-GL, 14c3:4d75) on a ThinkPad X1 Carbon Gen 11 and had the exact same issues on Fedora 43 – modem stuck in enabling/disabled loop, low power state, the whole thing.

There are actually 4 separate problems stacking up:

  1. The mtk_t7xx kernel driver treats a PCIe power management timeout as fatal and aborts initialization
  2. A NULL pointer bug in the driver’s error recovery path causes a kernel crash
  3. The FCC unlock doesn’t work – Lenovo’s binary segfaults, and ModemManager’s built-in script silently fails because xxd isn’t installed
  4. Lenovo’s Fibocom services (fibo_helper, fibo_flash, fwswitch) force the modem into fastboot mode ~15 seconds after it connects

I put together a patched out-of-tree module + install script that fixes all of it: GitHub - someoneelse131/mtk-t7xx-fix: Fix Fibocom FM350 (mtk_t7xx) WWAN modem on Fedora 43+

To fix it:

sudo dnf install kernel-devel-$(uname -r) kernel-headers gcc make dkms vim-common
sudo grubby --update-kernel=ALL --args="iommu=pt"
git clone https://github.com/someoneelse131/mtk-t7xx-fix.git
cd mtk-t7xx-fix
bash reinstall.sh

It builds a patched module, installs it via DKMS (so it survives kernel updates), sets up the FCC unlock, disables the Lenovo services, and reboots. After reboot mmcli -m 0 should show the modem as registered and powered on.

Your ThinkPad X1 Yoga Gen 8 has the same modem so this should work for you too.

Kindly
Flo

That’s amazing! Thank you for your work on this. I’ll check everything out this week and will report back.