Getting WiFi to work on a Razer Blade 14 (2022)

I just spent way too much time trying to get Linux to work with the wireless card of the newest Razer Blade 14, so thought that I would briefly document the process.

The issue was that the card, a Qualcomm Qtheros QCNFA765, was found using lspci but was clearly not detected by the kernel, i.e. not showing as a network interface in ip a etc. I did try a few kernel versions between 5.10 and 5.18 but none of them worked. I then went back to the 5.17 version of the kernel.

A look at journalctl gave these suspicious few lines:

ath11k_pci 0000:02:00.0: failed to fetch board data for
    bus=pci,vendor=17cb,device=1103,subsystem-vendor=11ad,subsystem-device=a82d,qmi-chip-id=18,qmi-board-id=255
    from ath11k/WCN6855/hw2.1/board-2.bin
ath11k_pci 0000:02:00.0: failed to fetch board-2.bin or board.bin from WCN6855/hw2.1

This brought me to the following two bugs from Linux kernel’s Bugzilla:

  • https://bugzilla.kernel.org/show_bug.cgi?id=215625
  • https://bugzilla.kernel.org/show_bug.cgi?id=215946

which seemed to indicate that for some cases, simply adding the unsupported device to the relevant file, board-2.bin, might be enough.

The firmware for Qualcomm Atheros card can be found on GitHub and there is also a repository with some tools to manipulate the binary files in this firmware.

Here were the steps to generate the new version of board-2.bin:

git clone https://github.com/kvalo/ath11k-firmware.git
git clone https://github.com/qca/qca-swiss-army-knife.git
./qca-swiss-army-knife/tools/scripts/ath11k/ath11k-bdencoder -e ath11k-firmware/WCN6855/hw2.0/board-2.bin -o board.json

Then, I edited the JSON file to add the device a device for the given card, shown in the error above. I added the following object to the board array:

{
    "names": [
        "bus=pci,vendor=17cb,device=1103,subsystem-vendor=11ad,subsystem-device=a82d,qmi-chip-id=18,qmi-board-id=255"
    ],
    "data": "bus=pci,vendor=17cb,device=1103,subsystem-vendor=11ad,subsystem-device=a82d,qmi-chip-id=18,qmi-board-id=255.bin"
}

and then copied one of the existing binary files to match the name under the data key, in my case:

cp bus=pci,vendor=17cb,device=1103,subsystem-vendor=105b,subsystem-device=e0c4,qmi-chip-id=18,qmi-board-id=255.bin \
   bus=pci,vendor=17cb,device=1103,subsystem-vendor=11ad,subsystem-device=a82d,qmi-chip-id=18,qmi-board-id=255.bin

I picked slightly randomly one of the existing binaries that had a similar qmi-chip-id and qmi-board-id, which is obviously not ideal but worked for this particular case.

Finally, using the ath11k-bdencoder tool, I generated the new board-2.bin file, copied it to the desired location, and reloaded the driver:

./qca-swiss-army-knife/tools/scripts/ath11k/ath11k-bdencoder -c board.json -o board-2.bin
sudo cp board-2.bin /lib/firmware/ath11k/WCN6855/hw2.0/board-2.bin
sudo modprobe -r ath11k_pci
sudo modprobe ath11k_pci

After this, ip a would show the card as a network interface properly.

This is clearly all a bit flaky and hopefully, the support should out of the box come soon but at least for now, it is better than no wifi.

comments powered by Disqus
© 2023 Daniel Perez   Creative Commons License