Atheros Wireless in Alma, CentOS and Rocky Linux

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.

Wi-Fi not connected

No adapter found

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:

/etc/modprobe.conf/

Name the file something like:

ideapad.conf

Inside this file, add the following line:

blacklist ideapad

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: [40] Power Management version 3
    Capabilities: [50] MSI: Enable+ Count=1/8 Maskable+ 64bit-
    Capabilities: [70] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [148] Virtual Channel
    Capabilities: [168] Device Serial Number 00-00-00-00-00-00-00-00
    Capabilities: [178] Latency Tolerance Reporting
    Capabilities: [180] 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:

board.bin
board-2.bin
firmware-4.bin
firmware-6.bin
firmware-sdio-6.bin

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:

/lib/firmware/ath10k/QCA6174/hw3.0/

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.

Wi-Fi works

Conclusion

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.

Cheers.

You may also like: