Skip to content

kernel: fix Wi-Fi RX instability and bogus MAC address - #127

Merged
greatgitsby merged 1 commit into
commaai:masterfrom
greatgitsby:wifi-amsdu-mac-fixes
Jul 5, 2026
Merged

kernel: fix Wi-Fi RX instability and bogus MAC address#127
greatgitsby merged 1 commit into
commaai:masterfrom
greatgitsby:wifi-amsdu-mac-fixes

Conversation

@greatgitsby

@greatgitsby greatgitsby commented Jul 5, 2026

Copy link
Copy Markdown
Collaborator

Problem

On the mainline kernel (AGNOS userspace), Wi-Fi collapses under any sustained transfer — a 10 MB scp stalls out and drops the SSH session. Separately, the Wi-Fi MAC address is wrong.

Root causes

  1. RX instability: WCN3990 firmware splits A-MSDUs across multiple HTT "in-order" RX indications. Mainline ath10k assumes an A-MSDU never spans indications, so every split poisons the RX path (failed to extract amsdu: -11, rx_confused), dropping frames and collapsing TCP. Measured 49 kB/s at -36 dBm signal.
  2. MAC: the firmware reports a bogus 0e:00:00:00:00:00 which passes is_valid_ether_addr(), so patch 0011's socinfo-derived MAC never applied.

Changes

  • 0016 / 0017: RFC patches by Richard Acayan from the ath10k list (1/2, 2/2) — persist the in-order MSDU list in driver state; don't wait for a DELETE_KEY response the firmware never sends (fixes the -110 key-removal errors also seen in dmesg). Review so far: style nits only; 2/2 independently confirmed on QCA6174. Draft until the series lands upstream in final form.
  • 0011: also treat the 0e:00:00:00:00:00 firmware dummy as invalid so the socinfo MAC (00:0a:f5 + SoC serial) applies.

Verification (on mici)

  • permaddr now 00:0a:f5:6b:1c:e3
  • Throughput 49 kB/s → 16.8 MB/s, rx rate negotiating 433 Mbps (VHT80 MCS9)
  • 20 MB scp both directions, byte-identical, zero amsdu/deauth/key errors in dmesg

- Add RFC patches from Richard Acayan (ath10k list, Feb 2026):
  - 0016: WCN3990 splits A-MSDUs across multiple HTT in-order
    indications; mainline dropped them ("failed to extract amsdu: -11",
    rx_confused), collapsing TCP under load (49 kB/s). Persist the
    in-order MSDU list in driver state.
  - 0017: don't wait for a DELETE_KEY response the firmware never
    sends (fixes -ETIMEDOUT/-110 on key removal).
- 0011: the firmware reports a bogus 0e:00:00:00:00:00 MAC that passes
  is_valid_ether_addr(), so the socinfo fallback never ran. Also treat
  that dummy address as invalid.

Verified on mici: permaddr now 00:0a:f5:xx:xx:xx, throughput
49 kB/s -> 16.8 MB/s (433 Mbps VHT80 rx rate), 20 MB scp both
directions with no amsdu errors, deauths, or key timeouts.
@greatgitsby
greatgitsby marked this pull request as ready for review July 5, 2026 17:02
@greatgitsby
greatgitsby merged commit 12d80d0 into commaai:master Jul 5, 2026
3 checks passed
@greatgitsby
greatgitsby deleted the wifi-amsdu-mac-fixes branch July 5, 2026 17:07
@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown

vamOS System Profile

Changes vs master

Metric Change
Used space 3437.2MB → 3437.2MB (+0MB)
Sparse image 3391.2MB → 3392.0MB (+.8MB)
Package count 524 → 524
Directory size changes (>1MB)
Directory Change

Metric Value
Used space 3437.2MB / 5959.5MB
Files 56143
Directories 4762
Symlinks 3589
Packages 524

Top 10 Directories

Directory Size

Category Breakdown

Category Size %
xbps packages 2502.8MB 72.8%
Python venv 591.7MB 17.2%
Firmware 11.2MB .3%
Other 331.3MB 9.6%

Top 10 Packages by Size

Package Size
mit-krb5-libs-1.21.3_1 270.4MB
gawk-5.3.2_1 210.3MB
llvm-21_3 148.6MB
libldns-1.9.2_1 124.3MB
pd-mapper-1.0_1 73.9MB
libclang21-21.1.7_1 70.2MB
glib-2.88.0_1 67.4MB
gcc-14.2.1+20250405_4 66.6MB
libcap-progs-2.78_1 56MB
cmake-4.2.2_2 53.2MB

Top 30 Files by Size

File Size
/usr/lib/llvm/21/lib/libLLVM.so.21.1 124.3MB
/usr/lib/llvm/21/lib/libMLIR.so.21.1 89.7MB
/usr/lib/llvm/21/bin/mlir-transform-opt 82.9MB
/usr/lib/llvm/21/lib/libclang-cpp.so.21.1 56MB
/usr/lib/llvm/21/bin/mlir-translate 53.2MB
/usr/bin/uv 52.6MB
/usr/lib/llvm/21/bin/llvm-exegesis 52MB
/usr/lib/llvm/21/bin/llvm-bolt-binary-analysis 50.6MB
/usr/lib/gcc/aarch64-linux-gnu/14.2/gnat1 40.1MB
/usr/bin/gdb 39.1MB
/usr/lib/libgallium-26.1.3.so 37.7MB
/usr/lib/gcc/aarch64-linux-gnu/14.2/cc1plus 37.3MB
/usr/lib/libllvm-qcom.so 35.2MB
/usr/lib/gcc/aarch64-linux-gnu/14.2/cc1 35.2MB
/usr/lib/libRusticlOpenCL.so.1.0.0 34.3MB
/usr/lib/gcc/aarch64-linux-gnu/14.2/lto1 33.9MB
/usr/bin/lto-dump 33.9MB
/usr/local/venv/bin/ruff 31.8MB
/usr/share/icu/78.3/icudt78l.dat 31.5MB
/usr/lib/llvm/21/lib/libclang.so.21.1.7 30.2MB
/usr/lib/llvm/21/bin/c-index-test 28.6MB
/usr/local/venv/lib/python3.12/site-packages/gcc_arm_none_eabi/toolchain/libexec/gcc/arm-none-eabi/13.2.1/cc1 28.2MB
/usr/lib/libz3.so 27.9MB
/usr/bin/run 26.7MB
/usr/local/venv/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-71e1b124.so 23.6MB
/usr/comma/updater 23.5MB
/usr/comma/setup 23.5MB
/usr/comma/reset 23.5MB
/usr/local/uv/python/cpython-3.12.13-linux-aarch64-gnu/bin/python3.12 22.2MB
/usr/local/uv/python/cpython-3.12.13-linux-aarch64-gnu/lib/libpython3.12.so.1.0 22.1MB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant