Qualcomm WCN785x adapter broken on kernel 6.14.3-300.fc42.x86_64 (Workaround included)

After updating to this kernel, this adapter:

$ lspci | grep Net
02:00.0 Network controller: Qualcomm Technologies, Inc WCN785x Wi-Fi 7(802.11be) 320MHz 2x2 [FastConnect 7800] (rev 01)

stopped working. By “stopped working,” I mean that the adapter itself was not recognized by the kernel anymore and therefore there was no wireless connectivity. I unfortunately didn’t save the dmesg output showing the details, but the gist of the problem is that the ath12k kernel module was not loading properly.

This definitely needs to be handled upstream; my workaround is the exact opposite of best practices, but going without a working wireless adapter is not an option. Read on for the horrifying workaround.

Complications

I’m running a custom build of Bluefin and couldn’t seem to find a way to switch back to a known-good kernel using rpm-ostree.

Workaround

In the end, I was able to get the adapter working again by creating an rpm package from the upstream ath12k-firmware. The steps were as follows:

  1. Clone the upstream firmware repository
mkdir -p ~/build/system && cd ~/build/system
git clone https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware
  1. Create the necessary directory structure for the package
mkdir -p ~/build/system/wifi-patch/ath12k/WCN7850/hw2.0
  1. Copy the firmware files into the package directory
cp ~/build/system/ath12k-firmware/WCN7850/hw2.0/board-2.bin ~/build/system/wifi-patch/ath12k/WCN7850/hw2.0
cp ~/build/system/ath12k-firmware/WCN7850/hw2.0/1.0/**/{amss.bin,m3.bin} ~/build/system/wifi-patch/ath12k/WCN7850/hw2.0
  1. Confirm that the structure is correct
tree ~/build/system/wifi-patch
.
└── ath12k
    └── WCN7850
        └── hw2.0
            ├── amss.bin
            ├── board-2.bin
            └── m3.bin
  1. Set up a distrobox container to build the package
distrobox create -i fedora:42 -n wifi-patch && distrobox enter wifi-patch
  1. Install the necessary build tools (run in box from step 5.)
sudo dnf install -y ruby rpm-build
gem install fpm
  1. Find out where ruby installed fpm (run in box from step 5.)
gem environment
... output elided

For me the path was ~/.local/share/gem/ruby/gems/fpm-1.16.0/bin/fpm

  1. Build the rpm package (run in box from step 5.)
cd ~/build/system/wifi-patch
~/.local/share/gem/ruby/gems/fpm-1.16.0/bin/fpm -s dir -t rpm -n wifi7_patch -v 1.0 ath12k=/lib/firmware/

If this succeeds you should have a file called wifi7_patch-1.0-1.x86_64.rpm in the current directory after running the command.

  1. Install the package (run in your host terminal, not the distrobox)
rpm-ostree install --force-replacefiles ./wifi7_patch-1.0-1.x86_64.rpm

Be aware that this is now a layered package, which means you will probably have issues when updating the next time. I don’t know enough about the consequences of that to give good advice, but I need wireless, so I have to do this for now.

  1. Reboot your system
2 Likes

Looks like kernel 6.14.5-300 has fixed this problem and the hacky package is no longer needed. I sincerely hope that I’ll never need to come back to this post again… :laughing:

1 Like