Updated: September 24, 2021
Not that long ago, I took AlmaLinux for a second spin, this time for a more detail review of the distro on my brand-newish IdeaPad 3 machine. Things went reasonably well, except one big glaring problem. I didn't have Wireless connectivity, right after the installation. This is major, because you can't really use a modern system without (some) network, especially this early on.
Soon, I spent a couple of hours trying to fix this. The problem turned out to be rather quirky. Supposedly, I did have all the right drivers and whatnot, but the system couldn't really utilize the hardware. A combination of two factors contributed to the issue, which we will solve in this tutorial. Follow me.
Problem in more detail
So the issue that occurs is as follows. The system applet says Wireless not connected. When you try to connect, it tells you to turn Wi-Fi on. When you go into the System menu, it tells you that no adapter can be found. However, on the command line, you can see Atheros modules loaded into memory (ath10k). This means that there's something wrong with the initiation of the Wireless card, although, supposedly, the functionality is there.
lsmod |grep ath
ath10k_pci 49152 0
ath10k_core 471040 1 ath10k_pci
ath 36864 1 ath10k_core
mac80211 929792 1 ath10k_core
cfg80211 835584 3 ath,mac80211,ath10k_core
Solution 1: Blacklist laptop-specific radio control module
The problem manifestation indicates that something is blocking and/or preventing the Wireless device from starting correctly. If you hit the Web, you will find a million reasons and bug reports for this, specific to Atheros cards, but not just. However, the issue still boils down to two possibilities: radio antennas being disabled on your laptop (via hardware or software switch) or incompatible firmware.
On my IdeaPad 3 (and many other Lenovo laptops, especially the IdeaPad family), in Linux, the control of radio, hotkeys, fans, and backlight is governed by the ideapad kernel module. It is referenced as ideapad or ideapad-laptop or similar. It is possible that this module is configured in a way that conflicts with the functionality of the Wireless device, i.e., the Wireless antenna is switched off by default.
The first thing to try is to run the rfkill command to try to unblock this:
sudo rkfill unblock wifi
If this does not work, you can blacklist the ideapad module - this will prevent its loading at system startup, and hopefully allow the correct initialization of the Wireless device. This is done by creating a text file under:
Name the file something like:
Inside this file, add the following line:
If you have other laptop models, please check your vendor specification for the name of the module.
Reboot your machine, and ideally, your issue will be fixed.
Solution 2: Different firmware for your Wireless card
It may be possible that the firmware you get with the distro image is not modern enough for your particular Wireless card. In that case, you can manually replace the firmware images, and reload the kernel modules, which should give you the right functionality.
The firmware for Atheros cards is available on Kalle Valo's GitHub page. To the best of my knowledge, Kalle is an Atheros engineer, and he maintains the repository with the official firmware for a variety of devices. First, you need to check what device you have. You can do that with the lscpi -v command:
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
Subsystem: Lenovo Device 0827
Flags: bus master, fast devsel, latency 0, IRQ 64, IOMMU group 8
Memory at d0200000 (64-bit, non-prefetchable) [size=2M]
Capabilities:  Power Management version 3
Capabilities:  MSI: Enable+ Count=1/8 Maskable+ 64bit-
Capabilities:  Express Endpoint, MSI 00
Capabilities:  Advanced Error Reporting
Capabilities:  Virtual Channel
Capabilities:  Device Serial Number 00-00-00-00-00-00-00-00
Capabilities:  Latency Tolerance Reporting
Capabilities:  L1 PM Substates
Kernel driver in use: ath10k_pci
Kernel modules: ath10k_pci
On my laptop, it's QCA6174. In the GitHub repo, you can then retrieve the necessary files. There are five files in total, including:
The repository has multiple revisions of these images available, so you may need to do more than one download to get the right firmware image for your card. The easiest way is to grab a zip of the entire repo, or clone it, and then selectively choose the necessary files. Of course, you need to do this on a system that HAS network connectivity, and then copy the files over to your affected laptop.
The files will have different names - you will need to rename them to the above format, e.g.:
mv firmware-4.bin_WLAN.RM.2.0-00180-QCARMSWPZ-1 firmware-4.bin
The firmware is stored under:
Copy the files from inside this directory somewhere safe. This will be the backup of your original distro firmware, in case you need to restore it. Then, replace the existing files with the new downloads from the GitHub repository.
You can replace the files one by one, or in bulk. For troubleshooting, it is best to proceed one by one, and see if any particular revision helps. The simplest way to achieve this, without rebooting is to first unload the existing ath10k modules from memory, copy the files, then reload the modules.
sudo modprobe -r ath10k_pci
sudo modprobe -r ath10k_core
sudo modprobe -r ath
sudo cp "firmware file in the right name format" /lib/firmware/ath10k/QCA6174/hw3.0/
sudo modprobe ath10k_pci
sudo modprobe ath10k_core
sudo modprobe ath
If you load the wrong image for your device, you will see the "invalid board magic" error in the kernel log. You can check this with the dmesg command:
[ 269.339694] ath10k_pci 0000:02:00.0: firmware ver WLAN.RM.4.4.1-00157-QCARMSWPZ-1 api 6 features wowlan,ignore-otp,mfp crc32 90eebefb
[ 269.404243] ath10k_pci 0000:02:00.0: found invalid board magic
[ 269.411730] ath10k_pci 0000:02:00.0: board_file api 1 bmi_id N/A crc32 ed5f849a
[ 272.543623] ath10k_pci 0000:02:00.0: htt version request timed out
[ 272.543629] ath10k_pci 0000:02:00.0: failed to setup htt: -110
[ 272.601433] ath10k_pci 0000:02:00.0: could not init core (-110)
[ 272.601505] ath10k_pci 0000:02:00.0: could not probe fw (-110)
Should the blacklisting of the module not work, this ought to do it.
I am always dismayed by hardware problems in Linux, mostly because they heighten my perception of the fragility of the whole ecosystem, and also because they remind me of (my) painful dependence on proprietary systems, both as a consequence of this, and also as the simple, cruel reality of the desktop space. But then, finding solutions to big, complex problems is always fun.
I did not encounter this issue with Ubuntu, Manjaro or Fedora, for that matter, on the IdeaPad 3. I presume the issue is unique to the server crop, mostly because they aren't really intended to be used as desktop systems. However, if you do fancy running one of the RHEL8 community distros on your machine, and you happen to have an Atheros Wireless card, all talks about ideology and proprietary systems aside, this guide should help you get underway. And we're done.