[GUIDE] Successful Wi-Fi 7 (802.11be) on Framework 13 AMD with Qualcomm QCNCM865 and Arch Linux

can you send your “sudo dmesg | grep ath12k” ? It really should work so it’s very curious, latest driver and latest firmware works really good

It was working, before I install updates on Arch yesterday. Same symptoms as described above - only 2.4 works, no 5/6. Also if I keep it re-trying to connect, I am getting kernel panic in 5-10 minutes. I just gave up and swapped it with AX210 - it just works! I will retry after kernel 7.0 is out and available - I really wanted for it to work, but these works/breaks/works cycles are very annoying to debug.

Thanks, at least a dmesg ath12k would be good.

Please note that i’m on Arch Linux too (and using iwd without any config, no /etc/iwd/ files), and I don’t had any issues since 6.16. now it’s just getting better and better with faster and fasted speed (as you can see on my screenshot) that’s why i’m surpsied. I’m willing to help when you

Update to this. Looks like the latest Debian stable kernel just wasn’t new enough (6.12.74-2), even with the latest firmware:

fw_version 0x1103006c fw_build_timestamp 2026-03-06 09:10 fw_build_id QC_IMAGE_VERSION_STRING=WLAN.HMT.1.1.c7-00108-QCAHMTSWPL_V1.0_V2.0_SILICONZ_UPSTREAM-3

After backporting the latest 6.19.10 trixie-backports kernel the card is behaving on 6GHz with zero issues.

1 Like

That is an ancient kernel :rofl: We about to get 7.0!

Yeah, as @jared_kidd says, this is not at all a new kernel, so do not expect new hardware to work well.

That’s Debian stable for you: it works great when you want to just set something up, enable automatic updates, then forget about it for a few years; the tradeoff is that for all of that time you will be stuck with the initial versions of everything feature-wise, and those versions are often not even the latest available at release. Just do not install it on anything less than a few years old, that’s not what it’s for.

(Though I hear Debian unstable aka sid is much less prone to breakage these days than it used to be, so people use it as a rolling-release-ish style distro when they want that and have their hearts set on Debian. Haven’t tried that myself for a long time.)

That’s quite an old kernel, version 6.12 was released on November 17, 2024. You’re likely missing out on a number of important improvements and optimizations. I’d strongly recommend upgrading to a more recent kernel. With modern hardware, especially on a Framework laptop, you’ll benefit significantly from newer kernel support in terms of performance, efficiency, compatibility, and overall stability.

Just as a quick PSA for anyone interested, it seems like Bluetooth LE is quite borky on this card and LE audio is flat out broken on Linux.

LE audio will pair and connect, will show to the system as connected and working, however audio will never transmit and is always hit with timeout errors (maybe a driver bug or a firmware bug, unsure which).

Which kernel version are you on? I have been gaming with Bluetooth controllers and headsets on this for at least 6 months without issue.

If you are on an ancient kernel (like the 6.12 mentioned above, which came out in November 2024), then yes, Bluetooth had issues with it back then.

1 Like

Kernel version is current.
6.19.13-200.fc43.x86_64

Bluetooth LE Audio on Linux requires some manual configuration of Bluez in order to enable the propper extension that allow LE Audio to work. Here is the official pipewire wiki and an article on it

1 Like

can you try on 7.0.2 ? and also with this ? Guide for LE Audio + LC3 support

also did you open a issue ticket on pipewire gitlab bugtracker ? and or on bluetooth mailing list ? also what is your LE device ? brand/model ?

I’m running Fedora Silverblue on this machine so… not sure? To be honest Fedora’s tracking of Kernel versions is usually pretty good so I’ll get it soon, but I’ve never had to install “bleeding-edge” versions.

I have already followed the Pipewire wiki on this unfortunately.

My logs are just clogged with these errors when using LE audio:
Apr 28 11:19:28 trudeautop pipewire[3457]: pw.node: (bluez_output.XX_XX_XX_XX_XX_XX.1-67) running → error (Received error event)
Apr 28 11:19:28 trudeautop pipewire[3457]: pw.node: (bluez_input.XX_XX_XX_XX_XX_XX.0-66) suspended → error (Received error event)
Apr 28 11:19:28 trudeautop wireplumber[3458]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/pac_sink0/fd0
Apr 28 11:19:28 trudeautop wireplumber[3458]: pw.node: (bluez_output.XX_XX_XX_XX_XX_XX.1-67) running → error (Received error event)
Apr 28 11:19:28 trudeautop wireplumber[3458]: spa.bluez5: Failure in Bluetooth audio transport /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/pac_source0/fd1
Apr 28 11:19:28 trudeautop wireplumber[3458]: pw.node: (bluez_input.XX_XX_XX_XX_XX_XX.0-66) suspended → error (Received error event)
Apr 28 11:19:28 trudeautop wireplumber[3458]: spa.bluez5: Acquire /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/pac_source0/fd1 returned error: org.freedesktop.DBus.Error.NoReply

My devices are a set of Google Pixel Buds Pro 2 and Sony Inzone H9 II.

For reference, both devices work fine when paired to an Intel AX210 and Mediatek RZ616 with only the config tweaks stated in the wiki article.

I have 2 versions of this adapter. The USB ID of my adapter is: 0489:e11c (OEM version) and for another seemingly non-OEM version 2c7c:0130. Both exhibit the exact same behaviour.

Worth also noting that Wireplumber itself identifies this adapter as being buggy:

Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?
Apr 29 14:12:09 trudeautop wireplumber[3041]: spa.bluez5.iso: Missing completion reports for packet (0 suppressed): Bluetooth adapter firmware bug?

I just got my paws on a QCNCM865 and tested it out.

Compared to the previous Mediatek card, this thing sucks.

With this one, i can’t even connect to 6GHz networks anymore, and speeds on other bands are atrocious (~20-30mbit/s max)

[   19.344850] ath12k_wifi7_pci 0000:01:00.0: BAR 0 [mem 0x90600000-0x907fffff 64bit]: assigned
[   19.344872] ath12k_wifi7_pci 0000:01:00.0: enabling device (0000 -> 0002)
[   19.344909] ath12k_wifi7_pci 0000:01:00.0: Wi-Fi 7 Hardware name: wcn7850 hw2.0
[   19.346726] ath12k_wifi7_pci 0000:01:00.0: MSI vectors: 16
[   19.907250] ath12k_wifi7_pci 0000:01:00.0: chip_id 0x2 chip_family 0x4 board_id 0xff soc_id 0x40170200
[   19.907260] ath12k_wifi7_pci 0000:01:00.0: fw_version 0x1103006c fw_build_timestamp 2026-03-06 09:10 fw_build_id QC_IMAGE_VERSION_STRING=WLAN.HMT.1.1.c7-00108-QCAHMTSWPL_V1.0_V2.0_SILICONZ_UPSTREAM-3
[   19.907675] ath12k_wifi7_pci 0000:01:00.0: failed to get ACPI BDF EXT: 0
[   20.112996] ath12k_wifi7_pci 0000:01:00.0 wlp1s0: renamed from wlan0

When connecting to wifi networks, i get a bunch of

[  940.330958] ath12k_wifi7_pci 0000:01:00.0: no transmit power envelope match client power type 0

and failed attempts to authenticate & associate with my APs.
The AP BSSID for 6GHz doesn’t even appear once in the kernel logs, nmcli dev wifi connect <BSSID> claims it doesn’t exist after hanging for a while, though it does show in nmcli dev wifi list…

running kernel 7.0.3-zen1-2-zen (Arch Linux), Ryzen 5 7640U

Bluetooth (including audio) seems to work fine though.

when attempting to connect to 6GHz networks (i think?), the driver will start spamming dmesg with this:

[  277.638717] ath12k_wifi7_pci 0000:01:00.0: no transmit power envelope match client power type 0
[  277.655264] ath12k_wifi7_pci 0000:01:00.0: failed to verify assoc link setting with link id 2
[  277.655417] wlan0: failed to insert STA entry for the AP (error -22)
[  277.655456] ------------[ cut here ]------------
[  277.655459] !arvif->is_started
[  277.655462] WARNING: drivers/net/wireless/ath/ath12k/mac.c:12161 at ath12k_mac_op_unassign_vif_chanctx+0x1d9/0x1e0 [ath12k], CPU#1: wpa_supplicant/5565
[  277.655530] Modules linked in: ath12k_wifi7 ath12k michael_mic snd_seq_dummy snd_hrtimer snd_seq snd_seq_device rfcomm nft_fib_ipv6 nft_ct nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ccm algif_aead des3_ede_x86_64 nft_fib_ipv4 nft_fib des_generic libdes nf_tables algif_skcipher cmac md4 algif_hash af_alg wireguard libcurve25519 ip6_udp_tunnel udp_tunnel bnep qrtr_mhi vfat fat cdc_mbim cdc_wdm cdc_ncm cdc_ether usbnet snd_sof_amd_acp70 snd_sof_amd_acp63 snd_sof_amd_vangogh snd_sof_amd_rembrandt snd_sof_amd_renoir snd_sof_amd_acp snd_sof_pci snd_sof_xtensa_dsp qrtr snd_sof snd_sof_utils snd_pci_ps snd_soc_acpi_amd_match snd_soc_acpi_amd_sdca_quirks snd_amd_sdw_acpi soundwire_amd soundwire_generic_allocation mdt_loader soundwire_bus qcom_scm snd_hda_codec_alc269 hid_sensor_als amd_atl intel_rapl_msr qcom_tzmem hid_sensor_trigger snd_hda_codec_realtek_lib snd_soc_sdca intel_rapl_common snd_hda_codec_atihdmi qmi_helpers kfifo_buf snd_soc_core hid_sensor_iio_common snd_hda_scodec_component leds_cros_ec snd_hda_codec_generic
[  277.655695]  snd_hda_codec_hdmi industrialio mousedev uvcvideo snd_compress r8152 led_class_multicolor ac97_bus videobuf2_vmalloc cros_ec_chardev cros_ec_hwmon cros_ec_sysfs cros_ec_debugfs cros_charge_control gpio_cros_ec cros_kbd_led_backlight snd_hda_intel snd_pcm_dmaengine uvc mii mac80211 videobuf2_memops kvm_amd snd_rpl_pci_acp6x snd_hda_codec libphy videobuf2_v4l2 ucsi_acpi snd_acp_pci btusb mdio_bus hid_multitouch joydev snd_hda_core hid_sensor_hub snd_amd_acpi_mach cros_ec_dev spd5118 btmtk videobuf2_common typec_ucsi snd_acp_legacy_common snd_intel_dspcfg kvm snd_pci_acp6x cfg80211 btrtl roles btbcm snd_intel_sdw_acpi snd_pci_acp5x videodev amd_pmf typec snd_hwdep irqbypass sp5100_tco btintel snd_rn_pci_acp3x bluetooth mc rapl pcspkr wmi_bmof cros_ec_lpcs amdtee amdxdna thunderbolt snd_pcm cros_ec rfkill snd_acp_config amd_sfh i2c_hid_acpi snd_timer snd_soc_acpi i2c_hid i2c_piix4 platform_profile cros_ec_proto snd amd_pmc mhi k10temp snd_pci_acp3x i2c_smbus libarc4 soundcore mac_hid uinput ntsync
[  277.655884]  pkcs8_key_parser uhid i2c_dev crypto_user nfnetlink dm_crypt encrypted_keys trusted asn1_encoder tee dm_mod nvme nvme_core nvme_keyring nvme_auth ghash_clmulni_intel aesni_intel hkdf ccp serio_raw amdgpu amdxcp i2c_algo_bit drm_ttm_helper ttm drm_exec drm_panel_backlight_quirks gpu_sched drm_suballoc_helper video wmi drm_buddy drm_display_helper cec [last unloaded: ath12k]
[  277.655960] CPU: 1 UID: 0 PID: 5565 Comm: wpa_supplicant Not tainted 7.0.3-zen1-2-zen #1 PREEMPT(full)  d6a1e9299c075974c62d956b6fb304c7af47147c
[  277.655970] Hardware name: Framework Laptop 13 (AMD Ryzen 7040Series)/FRANMDCP05, BIOS 03.18 01/08/2026
[  277.655976] RIP: 0010:ath12k_mac_op_unassign_vif_chanctx+0x1d9/0x1e0 [ath12k]
[  277.656003] Code: ff 41 83 ba a8 60 00 00 01 0f 84 b9 fe ff ff 41 c7 82 88 60 00 00 00 00 00 00 41 c7 82 a8 60 00 00 01 00 00 00 e9 9e fe ff ff <0f> 0b e9 62 fe ff ff 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
[  277.656007] RSP: 0018:ffffcf540a4eb3b8 EFLAGS: 00010246
[  277.656013] RAX: 0000000000000002 RBX: ffff8994c4cea800 RCX: ffff8995336e3290
[  277.656017] RDX: ffff899440a603d0 RSI: ffff899542f0a018 RDI: ffff899442e00960
[  277.656020] RBP: ffff899442e00960 R08: ffffffffa52cfb01 R09: ffff899542f0a018
[  277.656023] R10: ffff899442e220f0 R11: ffff899443330000 R12: ffff899440a603d0
[  277.656026] R13: ffff899440a60000 R14: ffff8995336e3200 R15: ffff899542f08ac0
[  277.656030] FS:  00007f4e93de3400(0000) GS:ffff899adbf68000(0000) knlGS:0000000000000000
[  277.656035] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  277.656039] CR2: 00007f62d314bd50 CR3: 0000000143377000 CR4: 0000000000f50ef0
[  277.656043] PKRU: 55555554
[  277.656047] Call Trace:
[  277.656053]  <TASK>
[  277.656057]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656067]  ? console_unlock+0x124/0x1a0
[  277.656080]  drv_unassign_vif_chanctx+0xe8/0x1e0 [mac80211 fe4f35975cb8702d6ef9e199f0530fb3fc554efb]
[  277.656161]  ieee80211_assign_link_chanctx+0x3da/0x870 [mac80211 fe4f35975cb8702d6ef9e199f0530fb3fc554efb]
[  277.656253]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656262]  ieee80211_link_release_channel+0x7c/0x140 [mac80211 fe4f35975cb8702d6ef9e199f0530fb3fc554efb]
[  277.656327]  ieee80211_prep_connection.cold+0x25/0x2a [mac80211 fe4f35975cb8702d6ef9e199f0530fb3fc554efb]
[  277.656420]  ieee80211_mgd_auth+0x3ec/0x5e0 [mac80211 fe4f35975cb8702d6ef9e199f0530fb3fc554efb]
[  277.656513]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656521]  ? cfg80211_ref_bss+0x70/0x70 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656604]  cfg80211_mlme_auth+0xb9/0x210 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656677]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656683]  ? nl80211_authenticate+0x42a/0x490 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656744]  nl80211_authenticate+0x446/0x490 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656807]  genl_rcv_msg+0x39b/0x570
[  277.656819]  ? __pfx_nl80211_pre_doit+0x10/0x10 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656871]  ? __pfx_nl80211_authenticate+0x10/0x10 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656923]  ? __pfx_nl80211_post_doit+0x10/0x10 [cfg80211 218973e712effc7ca0fa089721eee5fdd490857f]
[  277.656975]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656980]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.656986]  ? sock_def_readable+0x18/0xe0
[  277.657002]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657008]  ? netlink_unicast+0x453/0x4b0
[  277.657021]  ? __pfx_genl_rcv_msg+0x10/0x10
[  277.657030]  netlink_rcv_skb+0xcd/0x150
[  277.657045]  genl_rcv+0x28/0x40
[  277.657055]  netlink_unicast+0x306/0x4b0
[  277.657066]  netlink_sendmsg+0x219/0x480
[  277.657077]  ____sys_sendmsg+0x39c/0x3d0
[  277.657099]  __sys_sendmsg+0x27a/0x350
[  277.657125]  do_syscall_64+0x12b/0x1630
[  277.657148]  ? do_syscall_64+0x12b/0x1630
[  277.657158]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657165]  ? security_socket_getsockopt+0x52/0x160
[  277.657183]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657189]  ? do_sock_getsockopt+0x1bb/0x1f0
[  277.657199]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657205]  ? __x64_sys_getsockopt+0x99/0x110
[  277.657212]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657217]  ? unix_ioctl+0x224/0x300
[  277.657235]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657241]  ? sock_do_ioctl+0x7b/0x130
[  277.657250]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657256]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657262]  ? __x64_sys_ioctl+0xb9/0xf0
[  277.657277]  ? do_syscall_64+0x12b/0x1630
[  277.657285]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657290]  ? do_syscall_64+0x12b/0x1630
[  277.657297]  ? sock_do_ioctl+0x7b/0x130
[  277.657303]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657309]  ? netlink_setsockopt+0x34d/0x500
[  277.657316]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657321]  ? __x64_sys_setsockopt+0x159/0x280
[  277.657332]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657337]  ? do_syscall_64+0x12b/0x1630
[  277.657344]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657349]  ? do_syscall_64+0x12b/0x1630
[  277.657356]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657361]  ? do_syscall_64+0x12b/0x1630
[  277.657368]  ? srso_alias_return_thunk+0x5/0xfbef5
[  277.657374]  ? irq_exit_rcu+0x55/0x100
[  277.657402]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  277.657409] RIP: 0033:0x7f4e93494ade
[  277.657557] Code: 4d 89 d8 e8 64 bf 00 00 4c 8b 5d f8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 11 c9 c3 0f 1f 80 00 00 00 00 48 8b 45 10 0f 05 <c9> c3 83 e2 39 83 fa 08 75 e7 e8 03 ff ff ff 0f 1f 00 f3 0f 1e fa
[  277.657561] RSP: 002b:00007ffd61bcf500 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
[  277.657567] RAX: ffffffffffffffda RBX: 0000555759dbe260 RCX: 00007f4e93494ade
[  277.657571] RDX: 0000000000000000 RSI: 00007ffd61bcf5a0 RDI: 0000000000000006
[  277.657574] RBP: 00007ffd61bcf510 R08: 0000000000000000 R09: 0000000000000000
[  277.657577] R10: 0000000000000000 R11: 0000000000000202 R12: 0000555759eb0430
[  277.657581] R13: 00007ffd61bcf5a0 R14: 0000555759dc4740 R15: 0000555759dc4740
[  277.657591]  </TASK>
[  277.657595] ---[ end trace 0000000000000000 ]---

Any advice on getting the wifi driver to behave?

Update to this:
I was able to connect to a 6GHz AP by changing the SSID of the 6GHz network to be separate from the 2.4 and 5 GHz ones. Speed is comparable to the previous Mediatek card in most cases, but the QCNCM can go up to ~2.5Gbit sometimes.

It unfortunately completely breaks hibernation for me (system won’t hibernate at all), which is a dealbreaker for me. Until that’s fixed, I’ll stick with the buggy Mediatek card.

Popped the card back into my laptop; it suddenly seems to work fine-ish now?
It does connect to 6GHz networks now, MLO seems to work too; but the connection speed is still much slower than before (~20-90Mbit/s, sometimes ~400Mbit/s, compared to 1.2Gbit/s on the Mediatek card) and sometimes randomly disconnects, with the original driver crash (RIP: 0010:ath12k_mac_op_unassign_vif_chanctx+0x1d9/0x1e0 [ath12k] + stacktrace) in the kernel logs.

Even suspend/hibernation works now… didn’t update the kernel.
Did seem to cause a pretty bad memory corruption on wakeup though, so I made it unload the driver on suspend and load it on resume, just in case.

Another update: I just reloaded the driver, and it memory corrupted and kernel panicked almost immedately…

That’s something you really want to report here https://bugzilla.kernel.org/ and/or here ath12k Info Page
Then ath12k devs can fix!

Thanks for the links!

I compiled linux-git with a proposed patch to the driver applied (though, just updating to -git seemed to do the trick already), and the crashing is gone now. At the very least, I haven’t been able to reproduce it, so I’ll hold off from reporting this for now ^^

Primary issue that’s left (frequent dropped packets and a bunch of peer id not found errors) is already known on the bug tracker.

The state of the driver is looking better each passing day, and to fix my speed issues i just temporarily set my AP to WiFi 6 instead of 7.
In other words, things are mostly fine now :3

1 Like

Thank you very much for participating, submiting issue and trying patch!

1 Like

I tested again, now with iperf3. results are excellent

freq: 6435 MHz, ctr1: 6585 MHz, channel: 97 (width: 320 MHz), bands: 2

2 Likes