<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kornelius Schneider</title>
    <description>The latest articles on DEV Community by Kornelius Schneider (@d_de_vliegh).</description>
    <link>https://dev.to/d_de_vliegh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4173869%2F2e819c19-4c4f-407a-8d8e-244f5301098e.jpg</url>
      <title>DEV Community: Kornelius Schneider</title>
      <link>https://dev.to/d_de_vliegh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/d_de_vliegh"/>
    <language>en</language>
    <item>
      <title>A ¥112 Qualcomm QCNCM865 Running Wi-Fi 7 at 1.7 Gbps on Debian 13</title>
      <dc:creator>Kornelius Schneider</dc:creator>
      <pubDate>Fri, 09 Oct 2026 17:21:08 +0000</pubDate>
      <link>https://dev.to/d_de_vliegh/a-y112-qualcomm-qcncm865-running-wi-fi-7-at-17-gbps-on-debian-13-1ga9</link>
      <guid>https://dev.to/d_de_vliegh/a-y112-qualcomm-qcncm865-running-wi-fi-7-at-17-gbps-on-debian-13-1ga9</guid>
      <description>&lt;p&gt;&lt;strong&gt;From missing firmware and regulatory-domain problems to a fully operational 6 GHz / 160 MHz 802.11be access point&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hardware installation and performance report — October 9, 2026&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;I recently replaced the original Realtek RTL8852BE Wi-Fi 6 adapter in my ASUS TUF A15 laptop with a Qualcomm QCNCM865 Wi-Fi 7 card.&lt;/p&gt;

&lt;p&gt;The price? &lt;strong&gt;112 Chinese yuan (CNY).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The seller explicitly described the product as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;拆机单卡（非测试版卡）&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In English: a pulled card sold individually, rather than a test-version card.&lt;/p&gt;

&lt;p&gt;In other words, this was not a new retail-packaged Wi-Fi adapter. It was a second-hand OEM module, supposedly removed from another machine.&lt;/p&gt;

&lt;p&gt;For 112 yuan, I considered it worth experimenting with.&lt;/p&gt;

&lt;p&gt;The result was better than expected. After resolving several Linux driver and firmware issues, the card successfully operated as a Wi-Fi 7 access point on Debian 13, establishing a 6 GHz, 160 MHz, 802.11be connection with an iPhone 16 Pro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final iperf3 results: approximately 1,600 Mbps average TCP throughput, with observed peaks of 1,700 Mbps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This report documents the physical hardware, operating environment, initial problems, software upgrades, configuration, and performance measurements.&lt;/p&gt;

&lt;p&gt;It is intended as a reproducible compatibility record rather than a formal laboratory benchmark.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Physical Hardware Identification
&lt;/h2&gt;

&lt;p&gt;The card was sold under the model name &lt;strong&gt;Qualcomm QCNCM865&lt;/strong&gt;, based on the WCN7850 / FastConnect 7800 family.&lt;/p&gt;

&lt;p&gt;Since OEM cards can have different labels, revisions, and subsystem identifiers, I recorded the physical markings before installation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Front-side label
&lt;/h3&gt;

&lt;p&gt;The following is my original transcription:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model: QCNCM865
WF MAC
BT MAC
S/N: KF54L006I5
NCM865
T99H432.03
2189081320-08L4
Made in China
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There was also a separate PCB marking near the edge connector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V015 T99H432.03 GP/HF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repeated &lt;code&gt;T99H432.03&lt;/code&gt; identifier is particularly useful when comparing cards from different suppliers.&lt;/p&gt;

&lt;p&gt;The exact interpretation of every production and PCB marking has not been independently verified.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Reverse-side markings
&lt;/h3&gt;

&lt;p&gt;The reverse-side label was transcribed as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model Name : QCNCM865
Manufacturer: Qualcomm Technologies lnc.
FCC ID:...
ANATEL:...
R-C-QTI-Q...
IC:2723A-QCNCM865
CCAI23Y10030T2
R:C-29215
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A regulatory notice was also printed on the card. The readable portion included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5GHz band(W52, W53) and 6GH...
band (LPI): Indoor use only
(except communicate to high power radio)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Transcription note:&lt;/strong&gt; Some regulatory identifiers were obscured by a seller's warranty/return sticker. The ellipses indicate information that was not visible in the original inspection. The regulatory notice is likewise incomplete and should not be treated as an authoritative full transcription.&lt;/p&gt;

&lt;p&gt;The original MAC addresses were not transcribed as text.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Identification reported by Linux
&lt;/h3&gt;

&lt;p&gt;Once installed, &lt;code&gt;lspci&lt;/code&gt; identified the device as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;04:00.0 Network controller [0280]:
Qualcomm Technologies, Inc
WCN785x Wi-Fi 7(802.11be) 320MHz 2x2
[FastConnect 7800] [17cb:1107] (rev 01)

Subsystem:
Foxconn International, Inc.
High Band Simultaneous Wireless Network Adapter
[105b:e0f7]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The kernel additionally reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hardware name: wcn7850 hw2.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Identification&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Marketed model&lt;/td&gt;
&lt;td&gt;QCNCM865&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chipset family&lt;/td&gt;
&lt;td&gt;WCN7850 / FastConnect 7800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware revision&lt;/td&gt;
&lt;td&gt;hw2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCI Vendor ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;17cb&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCI Device ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1107&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subsystem Vendor ID&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;105b&lt;/code&gt; (Foxconn)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subsystem Device ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;e0f7&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCB marking&lt;/td&gt;
&lt;td&gt;&lt;code&gt;V015 T99H432.03 GP/HF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireless capabilities&lt;/td&gt;
&lt;td&gt;2.4 / 5 / 6 GHz, 802.11be&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advertised maximum channel width&lt;/td&gt;
&lt;td&gt;320 MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MIMO configuration&lt;/td&gt;
&lt;td&gt;2×2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These identifiers should make it easier for other Linux users to determine whether their QCNCM865 is the same variant.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Test System
&lt;/h2&gt;

&lt;p&gt;All tests were performed on the following machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Hardware
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Laptop&lt;/td&gt;
&lt;td&gt;ASUS TUF Gaming A15 FA507XV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;AMD Ryzen 9 7940H&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrated GPU&lt;/td&gt;
&lt;td&gt;AMD Radeon 780M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated GPU&lt;/td&gt;
&lt;td&gt;NVIDIA GeForce RTX 4060 Laptop GPU, 8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Original Wi-Fi card&lt;/td&gt;
&lt;td&gt;Realtek RTL8852BE, Wi-Fi 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replacement Wi-Fi card&lt;/td&gt;
&lt;td&gt;Qualcomm QCNCM865, Wi-Fi 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform&lt;/td&gt;
&lt;td&gt;AMD Phoenix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireless interface&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wlp4s0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test client&lt;/td&gt;
&lt;td&gt;Apple iPhone 16 Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test location&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.2 Software environment
&lt;/h3&gt;

&lt;p&gt;The system remained on &lt;strong&gt;Debian GNU/Linux 13.7 (Trixie)&lt;/strong&gt; throughout the experiment.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Initial&lt;/th&gt;
&lt;th&gt;Final&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux kernel&lt;/td&gt;
&lt;td&gt;&lt;code&gt;6.12.111+deb13-amd64&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;7.2.6+deb13-amd64&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desktop&lt;/td&gt;
&lt;td&gt;GNOME 48 / Wayland&lt;/td&gt;
&lt;td&gt;Unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA driver&lt;/td&gt;
&lt;td&gt;595.91.07&lt;/td&gt;
&lt;td&gt;595.91.07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA module&lt;/td&gt;
&lt;td&gt;Open Kernel Modules / DKMS&lt;/td&gt;
&lt;td&gt;Unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CUDA version reported by nvidia-smi&lt;/td&gt;
&lt;td&gt;13.2&lt;/td&gt;
&lt;td&gt;13.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wi-Fi kernel driver&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ath12k_pci&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ath12k_wifi7_pci&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firmware-atheros&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;20250410-2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;20260810-1~bpo13+1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP software&lt;/td&gt;
&lt;td&gt;NetworkManager / distribution hostapd&lt;/td&gt;
&lt;td&gt;NetworkManager / hostapd 2.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireless regulatory domain&lt;/td&gt;
&lt;td&gt;Initially unresolved&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DE: DFS-ETSI&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The NVIDIA driver was installed from NVIDIA's official Debian 13 repository, with version 595 pinned through its APT driver-pinning package.&lt;/p&gt;

&lt;p&gt;The Debian kernel and wireless firmware upgrades were supplied by the official &lt;code&gt;trixie-backports&lt;/code&gt; repository.&lt;/p&gt;

&lt;p&gt;No distribution change or custom kernel compilation was necessary.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Initial Installation: Recognized Immediately, but Unusable
&lt;/h2&gt;

&lt;p&gt;The physical installation was straightforward.&lt;/p&gt;

&lt;p&gt;On the first boot, Linux successfully enumerated the new PCIe device. The card appeared in &lt;code&gt;lspci&lt;/code&gt; without requiring BIOS modifications or unusual boot parameters.&lt;/p&gt;

&lt;p&gt;However, no wireless network interface was available.&lt;/p&gt;

&lt;p&gt;The first useful diagnostic commands were:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lspci &lt;span class="nt"&gt;-nnk&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 6 &lt;span class="nt"&gt;-Ei&lt;/span&gt; &lt;span class="s1"&gt;'network|wireless|qualcomm'&lt;/span&gt;

nmcli device status

&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;--no-pager&lt;/span&gt; |
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-Ei&lt;/span&gt; &lt;span class="s1"&gt;'ath12k|wcn7850|firmware|qmi|mhi'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The kernel log showed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ath12k_pci 0000:04:00.0:
Hardware name: wcn7850 hw2.0

ath12k_pci 0000:04:00.0:
firmware: failed to load
ath12k/WCN7850/hw2.0/firmware-2.bin (-2)

mhi mhi0:
firmware: failed to load
ath12k/WCN7850/hw2.0/amss.bin (-2)

mhi mhi0:
Error loading firmware: -2

ath12k_pci 0000:04:00.0:
failed to start mhi: -110

ath12k_pci 0000:04:00.0:
probe with driver ath12k_pci failed with error -110
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important distinction is that PCIe detection and driver initialization are separate operations.&lt;/p&gt;

&lt;p&gt;The kernel could identify the WCN7850 and attempt to initialize it, but the required firmware was missing.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-2&lt;/code&gt; corresponds to &lt;code&gt;ENOENT&lt;/code&gt;, indicating that a requested file could not be found. The subsequent &lt;code&gt;-110&lt;/code&gt; is a timeout during initialization.&lt;/p&gt;

&lt;p&gt;The Bluetooth side also reported a missing Qualcomm firmware file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qca/rampatch_usb_00190200.bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.1 Installing firmware
&lt;/h3&gt;

&lt;p&gt;The initial solution was simply to install Debian's official firmware package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;firmware-atheros
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing the firmware and rebooting, the card became available in NetworkManager.&lt;/p&gt;

&lt;p&gt;The wireless interface was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wlp4s0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The initial driver was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ath12k_pci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wi-Fi client functionality worked, and the laptop could connect to my existing Wi-Fi 6 router.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No third-party kernel module or proprietary driver installer was needed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One small detail: the kernel could still report that &lt;code&gt;firmware-2.bin&lt;/code&gt; was unavailable while successfully loading firmware through another supported path. That message alone was therefore not evidence of a continuing failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 The original firmware
&lt;/h3&gt;

&lt;p&gt;Once the card initialized, the kernel reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fw_version 0x100301e1
fw_build_timestamp 2023-12-06 04:05
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full firmware build identifier was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thus, although the installed Debian package was dated 2025, the particular WCN7850 firmware image was built in December 2023.&lt;/p&gt;

&lt;p&gt;This distinction later became important.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The Regulatory-Domain Problem
&lt;/h2&gt;

&lt;p&gt;After obtaining a working Wi-Fi connection, I attempted to use the card as a wireless access point.&lt;/p&gt;

&lt;p&gt;The initial 5 GHz hotspot command was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli device wifi hotspot &lt;span class="se"&gt;\&lt;/span&gt;
  ifname wlp4s0 &lt;span class="se"&gt;\&lt;/span&gt;
  con-name QCNCM865-Test &lt;span class="se"&gt;\&lt;/span&gt;
  ssid QCNCM865-Test &lt;span class="se"&gt;\&lt;/span&gt;
  band a &lt;span class="se"&gt;\&lt;/span&gt;
  channel 36 &lt;span class="se"&gt;\&lt;/span&gt;
  password &lt;span class="s1"&gt;'Wifi7Test2026'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NetworkManager failed to activate it.&lt;/p&gt;

&lt;p&gt;The error was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connection activation failed:
802.1X supplicant took too long to authenticate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repeated attempts did not solve the problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Investigating the regulatory domain
&lt;/h3&gt;

&lt;p&gt;The crucial information came from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;iw reg get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output contained two independent regulatory-domain sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global
country 00: DFS-UNSET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phy#0 (self-managed)
country na: DFS-UNSET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wireless card's 5 GHz and 6 GHz bands were marked with &lt;code&gt;PASSIVE-SCAN&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(5170 - 5330 @ 160),
(N/A, 20), (N/A),
AUTO-BW, PASSIVE-SCAN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was important because operating as a wireless client and operating as an AP do not have identical regulatory requirements.&lt;/p&gt;

&lt;p&gt;A client can often connect to an existing access point on a channel where it is not permitted to initiate transmissions independently.&lt;/p&gt;

&lt;p&gt;An AP must initiate transmissions such as beacon frames.&lt;/p&gt;

&lt;p&gt;Consequently, the card could connect to my Wi-Fi 6 router while failing to start a 5 GHz hotspot.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Manually setting Germany did not solve it
&lt;/h3&gt;

&lt;p&gt;I tried:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;iw reg &lt;span class="nb"&gt;set &lt;/span&gt;DE
&lt;span class="nb"&gt;sudo &lt;/span&gt;iw reg get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Linux global regulatory domain changed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global
country DE: DFS-ETSI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the wireless device remained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phy#0 (self-managed)
country na: DFS-UNSET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In other words, the Qualcomm firmware was managing its own regulatory domain, and setting the global domain did not resolve the device-level restrictions.&lt;/p&gt;

&lt;p&gt;Similar &lt;code&gt;country na&lt;/code&gt; behavior and incorrect wireless statistics had already been reported by other WCN7850 users on the Linux &lt;code&gt;ath12k&lt;/code&gt; mailing list in 2024.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 A control experiment: 2.4 GHz AP
&lt;/h3&gt;

&lt;p&gt;To distinguish a general AP driver failure from a regulatory restriction, I tried a 2.4 GHz hotspot on channel 6.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;The configuration reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type AP
channel 6 (2437 MHz)
width: 20 MHz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using an iPhone 16 Pro as the client, iperf3 produced approximately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;80 Mbps TCP throughput.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This confirmed that the card could function as an AP under at least some conditions.&lt;/p&gt;

&lt;p&gt;The remaining 5 GHz problem was therefore consistent with the observed regulatory restrictions, although the exact cause had not yet been isolated.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Upgrading the Kernel and Firmware
&lt;/h2&gt;

&lt;p&gt;At this point, I decided against continuing to troubleshoot an older wireless-driver implementation.&lt;/p&gt;

&lt;p&gt;Debian 13 Stable was retained, but newer kernel and firmware packages were installed through Debian Backports.&lt;/p&gt;

&lt;p&gt;The APT source was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Types: deb
URIs: https://deb.debian.org/debian
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After updating the APT package lists, the relevant upgrade command was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  linux-image-amd64/trixie-backports &lt;span class="se"&gt;\&lt;/span&gt;
  linux-headers-amd64/trixie-backports &lt;span class="se"&gt;\&lt;/span&gt;
  firmware-atheros/trixie-backports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For another machine, reviewing the result of &lt;code&gt;apt -s install&lt;/code&gt; before performing the upgrade would be advisable.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 The NVIDIA surprise
&lt;/h3&gt;

&lt;p&gt;There was one additional concern.&lt;/p&gt;

&lt;p&gt;The laptop uses an NVIDIA RTX 4060 with the &lt;strong&gt;595.91.07 Open Kernel Modules&lt;/strong&gt;, managed by DKMS.&lt;/p&gt;

&lt;p&gt;A major kernel upgrade can sometimes break out-of-tree GPU modules.&lt;/p&gt;

&lt;p&gt;Here, however, the entire NVIDIA build completed successfully:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Autoinstall of module nvidia/595.91.07
for kernel 7.2.6+deb13-amd64 (x86_64)

Building module(s)................... done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer built and installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvidia.ko
nvidia-modeset.ko
nvidia-drm.ko
nvidia-peermem.ko
nvidia-uvm.ko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final DKMS status was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvidia/595.91.07, 6.12.107+deb13-amd64: installed
nvidia/595.91.07, 6.12.111+deb13-amd64: installed
nvidia/595.91.07, 7.2.6+deb13-amd64: installed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After rebooting, &lt;code&gt;nvidia-smi&lt;/code&gt; worked normally. GNOME Shell, Xwayland, and Firefox were also running with NVIDIA acceleration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Against the usual expectations of NVIDIA-related Linux adventures, absolutely nothing broke.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The existing 6.12 kernels were retained as fallback boot options.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 The new Qualcomm driver and firmware
&lt;/h3&gt;

&lt;p&gt;The upgraded environment reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux kernel:
7.2.6+deb13-amd64

Driver:
ath12k_wifi7_pci

firmware-atheros:
20260810-1~bpo13+1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The new WCN7850 firmware reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fw_version 0x1103006c
fw_build_timestamp 2026-03-06 09:10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With build identifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WLAN.HMT.1.1.c7-00108-QCAHMTSWPL_V1.0_V2.0_SILICONZ_UPSTREAM-3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The firmware had advanced from a December 2023 build to a March 2026 build.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 The regulatory domain finally worked
&lt;/h3&gt;

&lt;p&gt;After rebooting, I checked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;iw reg get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time the result was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global
country 00: DFS-UNSET

phy#0 (self-managed)
country DE: DFS-ETSI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wireless device itself now recognized Germany.&lt;/p&gt;

&lt;p&gt;The 5 GHz channel range used for the original hotspot was no longer restricted to passive operation.&lt;/p&gt;

&lt;p&gt;The 6 GHz band also exposed the appropriate German regulatory limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(5945 - 6425 @ 320),
(N/A, 23), (N/A),
NO-OUTDOOR, AUTO-BW
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Importantly, this describes the permitted frequency range and operating constraints, not a guarantee that every 320 MHz AP configuration will work.&lt;/p&gt;

&lt;p&gt;The upgrade had changed both the kernel driver and firmware simultaneously, so this experiment cannot identify which individual change fixed the regulatory issue.&lt;/p&gt;

&lt;p&gt;What can be established is that &lt;strong&gt;the new kernel/firmware combination resolved the previous 5 GHz AP failure&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. PCIe: Does the M.2 Slot Limit Performance?
&lt;/h2&gt;

&lt;p&gt;While investigating the hardware, I noticed an interesting result in &lt;code&gt;lspci -vv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The card reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LnkCap: Speed 8GT/s, Width x2
LnkSta: Speed 8GT/s, Width x1 (downgraded)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initially, this looked like an unexpected reduction in PCIe width.&lt;/p&gt;

&lt;p&gt;However, the upstream AMD Phoenix Root Port revealed the explanation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00:02.2 AMD Phoenix Root Port

LnkCap: Speed 16GT/s, Width x1
LnkSta: Speed 8GT/s, Width x1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The host port supports PCIe Gen4 ×1, while the Wi-Fi card supports PCIe Gen3 ×2.&lt;/p&gt;

&lt;p&gt;Their negotiated connection is therefore:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PCIe Gen3 ×1.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;PCIe capability&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AMD Phoenix Root Port&lt;/td&gt;
&lt;td&gt;Gen4 ×1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QCNCM865&lt;/td&gt;
&lt;td&gt;Gen3 ×2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Negotiated connection&lt;/td&gt;
&lt;td&gt;Gen3 ×1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;PCIe Gen3 ×1 provides approximately 7.88 Gbit/s of theoretical data capacity per direction after line encoding, before higher-level PCIe transaction overhead.&lt;/p&gt;

&lt;p&gt;That is already greater than the approximately 5.8 Gbit/s advertised maximum wireless PHY rate of the FastConnect 7800.&lt;/p&gt;

&lt;p&gt;Consequently, there is no compelling bandwidth-related reason to move this Wi-Fi card to an SSD M.2 slot using an adapter.&lt;/p&gt;

&lt;p&gt;Such a modification would also complicate the Bluetooth USB connection and antenna arrangement.&lt;/p&gt;

&lt;p&gt;The original laptop Wi-Fi slot is the sensible choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Performance Testing with iPhone 16 Pro and iperf3
&lt;/h2&gt;

&lt;p&gt;All recorded throughput measurements were performed locally, using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access point:&lt;/strong&gt; ASUS TUF A15 with Qualcomm QCNCM865.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client:&lt;/strong&gt; Apple iPhone 16 Pro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark:&lt;/strong&gt; iperf3 over TCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network:&lt;/strong&gt; Direct Wi-Fi connection between laptop AP and iPhone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internet connection:&lt;/strong&gt; Not part of the measured data path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This configuration eliminates an external wireless router as a forwarding bottleneck.&lt;/p&gt;

&lt;p&gt;The Debian laptop ran an iperf3 server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;iperf3 &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the manually configured hostapd tests, the laptop used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.77.1/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The iPhone connected to that address using an iperf3-compatible iOS client.&lt;/p&gt;

&lt;p&gt;These figures are the approximate average throughput values recorded during the experiments. They are not statistically derived confidence intervals from repeated benchmark batches.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Results
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AP mode&lt;/th&gt;
&lt;th&gt;Frequency&lt;/th&gt;
&lt;th&gt;Channel width&lt;/th&gt;
&lt;th&gt;Average TCP throughput&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;802.11n-compatible AP&lt;/td&gt;
&lt;td&gt;2.4 GHz&lt;/td&gt;
&lt;td&gt;20 MHz&lt;/td&gt;
&lt;td&gt;~80 Mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;802.11ac (Wi-Fi 5)&lt;/td&gt;
&lt;td&gt;5 GHz&lt;/td&gt;
&lt;td&gt;20 MHz&lt;/td&gt;
&lt;td&gt;~130 Mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;802.11ac (Wi-Fi 5)&lt;/td&gt;
&lt;td&gt;5 GHz&lt;/td&gt;
&lt;td&gt;80 MHz&lt;/td&gt;
&lt;td&gt;~635 Mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;802.11ax (Wi-Fi 6)&lt;/td&gt;
&lt;td&gt;5 GHz&lt;/td&gt;
&lt;td&gt;80 MHz&lt;/td&gt;
&lt;td&gt;~820 Mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;802.11ax (Wi-Fi 6)&lt;/td&gt;
&lt;td&gt;5 GHz&lt;/td&gt;
&lt;td&gt;160 MHz&lt;/td&gt;
&lt;td&gt;~1,500 Mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;802.11be (Wi-Fi 7)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6 GHz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;160 MHz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1,600 Mbps&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The highest observed throughput during the final Wi-Fi 7 test was approximately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1,700 Mbps (1.7 Gbit/s).&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 NetworkManager: 20 MHz to 80 MHz
&lt;/h3&gt;

&lt;p&gt;The first successful 5 GHz hotspot used NetworkManager.&lt;/p&gt;

&lt;p&gt;By default, it selected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;channel 36 (5180 MHz)
width: 20 MHz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Throughput was approximately 130 Mbps.&lt;/p&gt;

&lt;p&gt;Changing the channel-width setting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection modify QCNCM865-5G &lt;span class="se"&gt;\&lt;/span&gt;
  802-11-wireless.channel-width 80mhz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restarting the connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection down QCNCM865-5G
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection up QCNCM865-5G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;channel 36 (5180 MHz)
width: 80 MHz
center1: 5210 MHz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Throughput increased immediately to approximately &lt;strong&gt;635 Mbps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This demonstrated that the original hotspot's narrow channel width, rather than the PCIe interface, was the primary bottleneck.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Wi-Fi 6: 80 MHz and 160 MHz
&lt;/h3&gt;

&lt;p&gt;For greater control over wireless operation, I switched from NetworkManager's hotspot function to &lt;code&gt;hostapd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The 5 GHz AP was configured with 802.11ax enabled.&lt;/p&gt;

&lt;p&gt;At 80 MHz, the iPhone negotiated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tx bitrate: 1200.9 MBit/s
80MHz HE-MCS 11 HE-NSS 2 HE-GI 0

rx bitrate: 1200.9 MBit/s
80MHz HE-MCS 11 HE-NSS 2 HE-GI 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting TCP throughput was approximately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;820 Mbps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a substantial improvement over the previous 635 Mbps Wi-Fi 5 test at the same channel width, although the two configurations were not controlled laboratory comparisons.&lt;/p&gt;

&lt;h4&gt;
  
  
  Moving to 160 MHz
&lt;/h4&gt;

&lt;p&gt;The 5 GHz hostapd configuration used channel 36 and a 160 MHz operating width, with center channel 50.&lt;/p&gt;

&lt;p&gt;The relevant parameters included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;hw_mode&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;
&lt;span class="py"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;36&lt;/span&gt;

&lt;span class="py"&gt;ieee80211n&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;ht_capab&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[HT40+]&lt;/span&gt;

&lt;span class="py"&gt;ieee80211ac&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;vht_oper_chwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;vht_oper_centr_freq_seg0_idx&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;50&lt;/span&gt;

&lt;span class="py"&gt;ieee80211ax&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;he_oper_chwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;he_oper_centr_freq_seg0_idx&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;50&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting channel required DFS radar detection.&lt;/p&gt;

&lt;p&gt;The hostapd log reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DFS-CAC-START
freq=5180
chan=36
width=2
seg0=50
cac_time=60s

DFS-CAC-COMPLETED success=1

AP-ENABLED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system then reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;channel 36 (5180 MHz)
width: 160 MHz
center1: 5250 MHz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The iPhone connected successfully.&lt;/p&gt;

&lt;p&gt;The average measured throughput reached:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1,500 Mbps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the first result above 1 Gbit/s.&lt;/p&gt;

&lt;p&gt;The complete 160 MHz configuration spans channels subject to German DFS rules. The one-minute channel availability check was therefore expected. It should not be disabled or bypassed.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Wi-Fi 7: 6 GHz, 160 MHz, and EHT
&lt;/h2&gt;

&lt;p&gt;The final step was to test actual 802.11be operation.&lt;/p&gt;

&lt;p&gt;The iPhone 16 Pro supports Wi-Fi 7, including operation in the 6 GHz band.&lt;/p&gt;

&lt;p&gt;However, Apple's published specifications limit its single-band channel width to &lt;strong&gt;160 MHz&lt;/strong&gt;, with two spatial streams and a maximum EHT MCS index of 11.&lt;/p&gt;

&lt;p&gt;Therefore, the iPhone cannot test the QCNCM865's full advertised 320 MHz capability.&lt;/p&gt;

&lt;p&gt;It can nevertheless verify a real Wi-Fi 7 link.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 Building hostapd 2.12
&lt;/h3&gt;

&lt;p&gt;I used upstream hostapd 2.12 for the Wi-Fi 7 experiment.&lt;/p&gt;

&lt;p&gt;This version was officially released in August 2026 and includes additional EHT / IEEE 802.11be improvements.&lt;/p&gt;

&lt;p&gt;The required build dependencies can be installed with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  build-essential &lt;span class="se"&gt;\&lt;/span&gt;
  pkg-config &lt;span class="se"&gt;\&lt;/span&gt;
  libssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libnl-3-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libnl-genl-3-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/src
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/src

wget https://w1.fi/releases/hostapd-2.12.tar.gz
&lt;span class="nb"&gt;tar &lt;/span&gt;xf hostapd-2.12.tar.gz

&lt;span class="nb"&gt;cd &lt;/span&gt;hostapd-2.12/hostapd
&lt;span class="nb"&gt;cp &lt;/span&gt;defconfig .config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following capabilities were explicitly enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONFIG_DRIVER_NL80211=y
CONFIG_LIBNL32=y
CONFIG_IEEE80211N=y
CONFIG_IEEE80211AC=y
CONFIG_IEEE80211AX=y
CONFIG_IEEE80211BE=y
CONFIG_SAE=y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The program was then compiled using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make &lt;span class="nt"&gt;-j&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;nproc&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It was run directly from the build directory, without replacing Debian's packaged hostapd binary.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Preparing the wireless interface
&lt;/h3&gt;

&lt;p&gt;Before starting standalone hostapd, NetworkManager relinquished control of the Wi-Fi interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli device disconnect wlp4s0
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli device &lt;span class="nb"&gt;set &lt;/span&gt;wlp4s0 managed no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interface was configured for local testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ip addr flush dev wlp4s0
&lt;span class="nb"&gt;sudo &lt;/span&gt;ip addr add 192.168.77.1/24 dev wlp4s0
&lt;span class="nb"&gt;sudo &lt;/span&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;wlp4s0 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The iPhone used a manually configured address in the same subnet.&lt;/p&gt;

&lt;p&gt;No DHCP server or Internet connection-sharing service was necessary for iperf3.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.3 The Wi-Fi 7 hostapd configuration
&lt;/h3&gt;

&lt;p&gt;The following configuration corresponds to the successful 6 GHz / 160 MHz test, with the test password replaced by a reusable example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;wlp4s0&lt;/span&gt;
&lt;span class="py"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;nl80211&lt;/span&gt;
&lt;span class="py"&gt;ssid&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;QCNCM865-WiFi7&lt;/span&gt;

&lt;span class="py"&gt;country_code&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;DE&lt;/span&gt;
&lt;span class="py"&gt;country3&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;0x49&lt;/span&gt;
&lt;span class="py"&gt;ieee80211d&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;

&lt;span class="py"&gt;hw_mode&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;
&lt;span class="py"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;
&lt;span class="py"&gt;op_class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;134&lt;/span&gt;

&lt;span class="py"&gt;wmm_enabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;

&lt;span class="py"&gt;ieee80211ax&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;he_oper_centr_freq_seg0_idx&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;15&lt;/span&gt;
&lt;span class="py"&gt;he_6ghz_reg_pwr_type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;

&lt;span class="py"&gt;ieee80211be&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;eht_oper_chwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;eht_oper_centr_freq_seg0_idx&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;15&lt;/span&gt;

&lt;span class="py"&gt;wpa&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;wpa_key_mgmt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;SAE&lt;/span&gt;
&lt;span class="py"&gt;rsn_pairwise&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;CCMP&lt;/span&gt;
&lt;span class="py"&gt;ieee80211w&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;sae_pwe&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;wpa_passphrase&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;change-this-test-password&lt;/span&gt;

&lt;span class="py"&gt;unsol_bcast_probe_resp_interval&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Several parameters are important:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;channel=5&lt;/code&gt;: 6 GHz primary channel at 5975 MHz.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;op_class=134&lt;/code&gt;: 6 GHz, 160 MHz operation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ieee80211be=1&lt;/code&gt;: Enables EHT / Wi-Fi 7.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;he_6ghz_reg_pwr_type=0&lt;/code&gt;: Low Power Indoor AP mode.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wpa_key_mgmt=SAE&lt;/code&gt;: WPA3-Personal authentication.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ieee80211w=2&lt;/code&gt;: Required protected management frames.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sae_pwe=2&lt;/code&gt;: Supports SAE Hash-to-Element authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This configuration is intended for indoor use in Germany, consistent with the reported regulatory-domain restrictions.&lt;/p&gt;

&lt;p&gt;The AP was started with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; ~/src/hostapd-2.12/hostapd/hostapd &lt;span class="se"&gt;\&lt;/span&gt;
  /tmp/qcncm865-be.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact configuration path must match the file created on the local machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Successful Wi-Fi 7 association
&lt;/h3&gt;

&lt;p&gt;The iPhone 16 Pro connected immediately and identified the network as &lt;strong&gt;Wi-Fi 7&lt;/strong&gt; in iOS settings.&lt;/p&gt;

&lt;p&gt;Linux independently confirmed the operating channel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Interface wlp4s0
    type AP
    channel 5 (5975 MHz)
    width: 160 MHz
    center1: 6025 MHz
    txpower 14.00 dBm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The station information was even more conclusive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rx bitrate: 2268.5 MBit/s
160MHz EHT-MCS 11
EHT-NSS 2
EHT-GI 1

last ack signal: -46 dBm
avg ack signal: -51 dBm

authorized: yes
authenticated: yes
associated: yes
MFP: yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the decisive evidence that the connection was operating in 802.11be mode.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;EHT-MCS 11&lt;/code&gt; and &lt;code&gt;EHT-NSS 2&lt;/code&gt; show the actual Wi-Fi 7 modulation/coding and spatial-stream information reported by the driver.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;2268.5 Mbit/s value is a PHY-rate observation&lt;/strong&gt;, not an application-level throughput measurement.&lt;/p&gt;

&lt;p&gt;The separate iperf3 benchmark produced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Average TCP throughput: approximately 1,600 Mbps&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Highest observed throughput: approximately 1,700 Mbps&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final AP configuration, iPhone settings, and Linux station statistics were mutually consistent with a successful Wi-Fi 7 connection.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Interpreting the Results
&lt;/h2&gt;

&lt;p&gt;Several conclusions follow from these experiments.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 Wi-Fi 7 does not automatically double throughput
&lt;/h3&gt;

&lt;p&gt;At 160 MHz, the Wi-Fi 6 experiment already delivered approximately 1,500 Mbps.&lt;/p&gt;

&lt;p&gt;Switching to 6 GHz Wi-Fi 7 increased the measured average to approximately 1,600 Mbps.&lt;/p&gt;

&lt;p&gt;That is roughly a 6.7% improvement.&lt;/p&gt;

&lt;p&gt;However, this should &lt;strong&gt;not&lt;/strong&gt; be interpreted as a controlled measurement of the efficiency advantage of 802.11be over 802.11ax.&lt;/p&gt;

&lt;p&gt;The experiments also changed frequency bands, AP software/configuration, and operating conditions.&lt;/p&gt;

&lt;p&gt;More importantly, the iPhone 16 Pro is limited to 160 MHz and EHT MCS 11. It cannot use the QCNCM865's advertised 320 MHz channel width or EHT MCS 12–13 in this test.&lt;/p&gt;

&lt;p&gt;The achievement is therefore successful 802.11be operation, not proof of the absolute maximum performance of the Qualcomm chipset.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.2 The old driver reported suspicious statistics
&lt;/h3&gt;

&lt;p&gt;Under Linux 6.12, the WCN7850 occasionally reported:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signal: 0 dBm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And even:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HE-NSS 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The latter would imply three spatial streams, despite the QCNCM865 being a 2×2 device.&lt;/p&gt;

&lt;p&gt;The older firmware also produced implausible 802.11n rate reports.&lt;/p&gt;

&lt;p&gt;Similar problems were described on the upstream &lt;code&gt;ath12k&lt;/code&gt; mailing list.&lt;/p&gt;

&lt;p&gt;With the newer kernel, the reported number of HE/EHT spatial streams was consistent with the hardware.&lt;/p&gt;

&lt;p&gt;However, the &lt;code&gt;signal: 0 dBm&lt;/code&gt; field was still observed under the new driver.&lt;/p&gt;

&lt;p&gt;The ACK signal statistics, such as &lt;code&gt;-46 dBm&lt;/code&gt;, were more plausible.&lt;/p&gt;

&lt;p&gt;Therefore, the upgraded software improved the reported wireless information but did not eliminate every apparent statistics issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.3 PCIe Gen3 ×1 is sufficient
&lt;/h3&gt;

&lt;p&gt;The Wi-Fi card was operating through a PCIe Gen3 ×1 link throughout the tests.&lt;/p&gt;

&lt;p&gt;Nevertheless, it achieved 1.6 Gbit/s average TCP throughput and an observed peak of 1.7 Gbit/s.&lt;/p&gt;

&lt;p&gt;This strongly supports the conclusion that the existing PCIe connection is not limiting performance in the tested configurations.&lt;/p&gt;

&lt;p&gt;There is no reason to sacrifice an SSD slot merely to obtain an additional PCIe lane.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 A new kernel made a substantial difference
&lt;/h3&gt;

&lt;p&gt;On Debian 13 with Linux 6.12, the card could function as a Wi-Fi client after installing firmware, but its 5 GHz AP operation was blocked by unresolved regulatory/initialization behavior.&lt;/p&gt;

&lt;p&gt;After upgrading to Linux 7.2.6 and newer firmware:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;ath12k_wifi7_pci&lt;/code&gt; driver initialized successfully.&lt;/li&gt;
&lt;li&gt;The card reported &lt;code&gt;DE: DFS-ETSI&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;5 GHz AP mode operated correctly.&lt;/li&gt;
&lt;li&gt;160 MHz Wi-Fi 6 AP mode worked with DFS.&lt;/li&gt;
&lt;li&gt;6 GHz Wi-Fi 7 AP mode worked with WPA3-SAE.&lt;/li&gt;
&lt;li&gt;iperf3 reached 1.6 Gbit/s average throughput.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For users experiencing similar problems, checking the kernel and firmware versions should be a priority before attempting complicated manual driver modifications.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. What Was Not Tested
&lt;/h2&gt;

&lt;p&gt;To avoid overstating the findings, several features remain unverified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;320 MHz channels:&lt;/strong&gt; The Qualcomm card advertises support, and Linux exposes relevant EHT capabilities. However, the iPhone 16 Pro supports only 160 MHz per band. No 320 MHz client test was conducted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Link Operation (MLO):&lt;/strong&gt; The successful 6 GHz EHT association does not establish that multi-link operation works. No multi-link association or aggregate multi-band throughput test was performed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bluetooth:&lt;/strong&gt; The initial boot reported missing Qualcomm Bluetooth firmware. Bluetooth behavior after upgrading was not separately benchmarked or systematically verified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suspend/resume stability:&lt;/strong&gt; The regulatory domain and AP behavior were tested after a clean reboot. Repeated suspend/resume and long-term stability testing were not performed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power consumption:&lt;/strong&gt; No controlled measurements were made comparing QCNCM865 and the original RTL8852BE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-term AP reliability:&lt;/strong&gt; Successful short iperf3 sessions do not prove uninterrupted operation over days or weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benchmark repeatability:&lt;/strong&gt; The reported speeds are observational results from an exploratory series, not averages over a large number of standardized trials. Different TCP directions, stream counts, environmental conditions, and client configurations may produce different results.&lt;/p&gt;

&lt;p&gt;These limitations do not undermine the basic compatibility result: the hardware successfully operated as a Wi-Fi 7 AP under Linux.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Conclusion
&lt;/h2&gt;

&lt;p&gt;The Qualcomm QCNCM865 turned out to be a remarkably interesting upgrade.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;112 CNY&lt;/strong&gt;, I obtained a second-hand OEM Wi-Fi 7 module that Linux immediately recognized at the PCIe level.&lt;/p&gt;

&lt;p&gt;The initial experience was not entirely painless:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Missing firmware prevented driver initialization.&lt;/li&gt;
&lt;li&gt;Installing Debian's &lt;code&gt;firmware-atheros&lt;/code&gt; enabled Wi-Fi client operation.&lt;/li&gt;
&lt;li&gt;The original kernel/firmware combination left the card in an unresolved self-managed regulatory domain, preventing 5 GHz AP activation.&lt;/li&gt;
&lt;li&gt;Upgrading to Linux 7.2.6 and newer Qualcomm firmware corrected the observed regulatory behavior.&lt;/li&gt;
&lt;li&gt;NetworkManager successfully provided basic hotspot functionality.&lt;/li&gt;
&lt;li&gt;hostapd enabled 160 MHz Wi-Fi 6 and ultimately 6 GHz Wi-Fi 7 operation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And, unexpectedly, the NVIDIA 595 driver survived the kernel upgrade without requiring any intervention.&lt;/p&gt;

&lt;p&gt;The final configuration achieved:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qualcomm QCNCM865 + Debian 13 + Linux 7.2.6 + hostapd 2.12 + iPhone 16 Pro&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 GHz / 160 MHz / 802.11be / 2×2 MIMO / WPA3-SAE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.6 Gbit/s average TCP throughput, 1.7 Gbit/s observed peak.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result does not establish the absolute maximum throughput of the hardware, nor does it verify MLO or 320 MHz operation.&lt;/p&gt;

&lt;p&gt;But it demonstrates that, with sufficiently recent kernel and firmware support, a very inexpensive pulled QCNCM865 can deliver fully functional, high-throughput Wi-Fi 7 on Debian 13.&lt;/p&gt;

&lt;p&gt;For me, that is a successful hardware upgrade—and a good reminder that compatibility often depends as much on the software stack as on the physical device.&lt;/p&gt;




&lt;h2&gt;
  
  
  References and Further Reading
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://packages.debian.org/trixie-backports/linux-image-amd64" rel="noopener noreferrer"&gt;Debian Trixie Backports — Linux kernel packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://packages.debian.org/trixie-backports/firmware-atheros" rel="noopener noreferrer"&gt;Debian Trixie Backports — firmware-atheros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://w1.fi/releases/" rel="noopener noreferrer"&gt;hostapd official releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lists.infradead.org/pipermail/hostap/2026-August/045441.html" rel="noopener noreferrer"&gt;hostapd / wpa_supplicant 2.12 release announcement, August 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.apple.com/en-is/guide/deployment/-dep268652e6c/web" rel="noopener noreferrer"&gt;Apple — Wi-Fi and Ethernet specifications for Apple devices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lists.infradead.org/pipermail/ath12k/2024-August/003519.html" rel="noopener noreferrer"&gt;Linux ath12k mailing list — WCN7850 issues, August 2024&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All hardware identifiers, system logs, configuration outcomes, and benchmark results described in this report were taken from the actual installation and testing session, conducted on October 9, 2026.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Summarized by ChatGPT. Reviewed by the author.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>debian</category>
      <category>wifi7</category>
      <category>qualcomm</category>
    </item>
  </channel>
</rss>
