Let us share our experience with Qualcomm Atheros WCN6856 based Wi-Fi 6 Triband modules from Sparklan. These WiFi6 modules are very popular. Many professional customers are requesting testing samples and want to use them for their projects.
Open Source Linux ath11k driver is available, works but has limitations.
If the customer needs DBS, they will need to apply the ath11k patch. However, after applying the patch, DFS will not be available, and many functions will not work with ath11k. In many cases, we have already suggested using the official QCA driver. Unfortunately original QCA driver is for older Linux kernel only – WNFQ-269AX(BT) Qualcomm official driver supports Linux Kernel version 5.4 & 5.10 & 5.15.
“For DFS and support for more client connections (+60) , they will need to use the official QCA driver.”
Sparklan can provide the original driver but every customer has to sign the NDA . If you are interested in , then please contact us and provide your project description and company details. We will send the NDA for you.
Here is a success story from our customer, maybe thsi can help to many other to develop relaibel working x86 Linux based device with WCN6856 based Wi-Fi 6 Triband modules :
I think we will have to stick with the open source ath11k driver for now since we already are committed to 6.1.x.
I have since migrated this project to Debian 12, also on 6.1.x. I can confirm the exact kernel version. However I was able to install ath11k on Debian 12 core (no X since this will run headless) along with the open source firmware and I do have hostapd working now. I am yet to activate dnsmasq, a bridge that includes the lan interface, etc. So far it seems that what I am stuck on is 2.4GHz + 5GHz DBDC. I’ve experimented with hostapd.conf quite a bit and I cannot seem to figure out how to do this. Typically with DBDC I have seen two wifi interfaces enumerate in linux. I only see one (named wlp1s0) in my case. Performing sudo iw list does show all of the correct frequencies in the supported list (including 6GHz which is not necessary for my application).
Strangely, after a reboot, the only way that I can correctly set the regulatory region (sudo iw reg set US in my case here) is after I perform a manual sudo iwlist scan. This could be an issue because I will want the appliance to reboot with hostapd activated automatically (presumably by systemd?)
I would be happy to share my hostapd.conf and anything else from my configurations to get this working. I feel that I am quite close to success and with just a few more configuration file adjustments plus the correct systemd service definition this project will be complete.
The hostapd.conf and dnsmasq.conf are attached. These are working well except:
No SDBC. I don’t seem to see in a scan anything except the 5GHz radio.
Trying after boot:
armbian@nanopi-r5c:/$ sudo hostapd /etc/hostapd.conf
wlp1s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Frequency 5180 (primary) not allowed for AP mode, flags: 0x100853 NO-IR
Primary frequency not allowed
wlp1s0: IEEE 802.11 Configured channel (36) or frequency (5180) (secondary_channel=1) not found from the channel list of the current mode (2) IEEE 802.11a
wlp1s0: IEEE 802.11 Hardware does not support configured channel
Could not select hw_mode and channel. (-3)
wlp1s0: interface state COUNTRY_UPDATE->DISABLED
wlp1s0: AP-DISABLED
wlp1s0: interface state DISABLED->DISABLED
wlp1s0: AP-DISABLED
wlp1s0: CTRL-EVENT-TERMINATING
hostapd_free_hapd_data: Interface wlp1s0 wasn’t started
nl80211: deinit ifname=wlp1s0 disabled_11b_rates=0
Produces hostapd failure every time. However if I instead first:
armbian@nanopi-r5c:/$ sudo ip link set wlp1s0 up
armbian@nanopi-r5c:/$ sudo iwlist scan
armbian@nanopi-r5c:/$ sudo iw reg set US
armbian@nanopi-r5c:/$ sudo hostapd /etc/hostapd.conf
wlp1s0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlp1s0: interface state COUNTRY_UPDATE->HT_SCAN
wlp1s0: interface state HT_SCAN->ENABLED
wlp1s0: AP-ENABLED
Doing these steps produces a perfectly running ap bridged with one of the two ethernet NICs and with a working DHCP server. It seems stuck in 5GHz and at lower speed classes. But otherwise it’s working. These extra steps are quite tricky to run without a bunch of shell scripts called by systemd which is not as reliable as I would prefer.
sudo iw reg set US
Does nothing unless I first: sudo iwlist scan
NetworkManager (NM) is disabled and I am using systemd-networkd. This is a headless micro-server and NM just got in the way of everything.
I feel like I am very close to having this working perfectly!
More system information follows. Thanks.
armbian@nanopi-r5c:/$ uname -a
Linux nanopi-r5c 6.6.31-current-rockchip64 #1 SMP PREEMPT Fri May 17 10:02:40 UTC 2024 aarch64 GNU/Linux
armbian@nanopi-r5c:/$ inxi -b
System:
Host: nanopi-r5c Kernel: 6.6.31-current-rockchip64 arch: aarch64 bits: 64 Console: pty pts/0
Distro: Armbian GNU/Linux 12 (bookworm)
Machine:
Type: ARM System: FriendlyElec NanoPi R5C details: N/A serial: 43d60e96d20b8351
CPU:
Info: quad core Model N/A [MCP] speed (MHz): avg: 1800 min/max: 408/1992
Graphics:
Device-1: display-subsystem driver: rockchip_drm v: N/A
Device-2: rk3568-mali driver: panfrost v: kernel
Device-3: rk3568-dw-hdmi driver: dwhdmi_rockchip v: N/A
Display: server: No display server data found. Headless machine? tty: 167×44
resolution: 3840×2160
API: N/A Message: No display API data available in console. Headless machine?
Network:
Device-1: Qualcomm QCNFA765 Wireless Network Adapter driver: ath11k_pci
Device-2: Realtek RTL8125 2.5GbE driver: r8169
Device-3: Realtek RTL8125 2.5GbE driver: r8169
Drives:
Local Storage: total: 58.63 GiB used: 7.9 GiB (13.5%)
Info:
Processes: 206 Uptime: 14m Memory: 3.65 GiB used: 416 MiB (11.1%) Init: systemd
target: graphical (5) Shell: Bash inxi: 3.3.26
Here is the solution for this customer.
1. Kernel config —> enable “CONFIG_ATH_REG_DYNAMIC_USER_REG_HINTS”
2. iw reg get —> phy#0 (self-managed) country ?
3. iw reg set US
4. iw list —> Check 5G Frequencies “NO-IR” disappears
However, I must remind you again that they will need to apply the ath11k patch for DBS.
Result – Super helpful and I can report I have success, I have an AP, I have rather good performance for a software AP, and I’m going to send this to testing.
In case anyone else was wondering: on current Debian the wifi needed a new file /usr/lib/firmware/ath11k/WCN6855/hw2.0/board-2.bin which was extracted from either Debian unstable or https://git.kernel .org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/