Skip to content

wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing#837

Open
wenst-quic wants to merge 1 commit into
qualcomm-linux:qcom-6.18.yfrom
wenst-quic:qcom-6.18.y
Open

wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing#837
wenst-quic wants to merge 1 commit into
qualcomm-linux:qcom-6.18.yfrom
wenst-quic:qcom-6.18.y

Conversation

@wenst-quic

Copy link
Copy Markdown

When connecting to an AP configured for EHT 20 MHz with a full EHT MCS/NSS map (supporting MCS 0-13)

Supported EHT-MCS and NSS Set
EHT-MCS Map (BW <= 80MHz): 0x444444
.... .... .... .... .... 0100 = Rx Max Nss That Supports EHT-MCS 0-9: 4
.... .... .... .... 0100 .... = Tx Max Nss That Supports EHT-MCS 0-9: 4
.... .... .... 0100 .... .... = Rx Max Nss That Supports EHT-MCS 10-11: 4
.... .... 0100 .... .... .... = Tx Max Nss That Supports EHT-MCS 10-11: 4
.... 0100 .... .... .... .... = Rx Max Nss That Supports EHT-MCS 12-13: 4
0100 .... .... .... .... .... = Tx Max Nss That Supports EHT-MCS 12-13: 4

TX throughput is observed to be significantly lower than expected. Investigation shows that TX rates are limited to EHT MCS 11, even though the AP advertises support for EHT MCS 12/13.

The root cause is an incorrect parsing of the Supported EHT-MCS and NSS Set element in ath12k_peer_assoc_h_eht().

IEEE Std 802.11be-2024 Figure 9-1074as describes the format for 20 MHz-Only Non-AP STAs.

IEEE Std 802.11be-2024 Figure 9-1074at describes the format for all other AP and non-AP STAs.

Currently the first format is parsed when the peer advertises no wider HE channel width support, without considering whether it is an AP or a non-AP STA. This is incorrect: the peer AP's capabilities must be parsed using Figure 9-1074at even when it operates on 20 MHz only. Parsing it as Figure 9-1074as causes rx_tx_mcs13_max_nss to be interpreted as zero, which is then passed to firmware, leading firmware to assume the peer does not support MCS 13 and to limit TX rates at MCS 11.

Fix this by parsing the Figure 9-1074as format only when the peer is a 20 MHz-Only non-AP STA, i.e. when the local interface operates as AP or mesh point.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3

Fixes: 6c95151 ("wifi: ath12k: Add EHT MCS/NSS rates to Peer Assoc")

Reviewed-by: Rameshkumar Sundaram rameshkumar.sundaram@oss.qualcomm.com
Link: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com

(cherry picked from commit 60fb2cf)

@qlijarvis

Copy link
Copy Markdown

PR #837 — validate-patch

PR: #837

Verdict Issues Detailed Report
⚠️ 1 Full report

Final Summary

  1. Lore link present: Yes — Link: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com (redirects to lore.kernel.org)
  2. Lore link matches PR commits: Yes — diff content is identical to upstream commit 60fb2cf51e77; 3-line context offset is due to different tree state and is acceptable
  3. Upstream patch status: Upstreamed — merged as commit 60fb2cf51e77bb1c0261160b4be44209d68956b1 in qcom-next (verified via integration_presence_report.md and git log)
  4. PR present in qcom-next/topics: Yes - all 1 commit(s) are present in qcom-next or topics
Verdict: ⚠️ — click to expand

🔍 Patch Validation

PR: #837 - wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing
Upstream commit: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com
Verdict: ⚠️ PARTIAL

Commit Message

Check Status Note
Subject matches upstream Identical to upstream commit 60fb2cf
Body preserves rationale Complete problem description, root cause analysis, and fix rationale preserved
Fixes tag present/correct Fixes: 6c95151e2e77 present and correct
Authorship preserved Author Baochen Qiang <baochen.qiang@oss.qualcomm.com> matches upstream
Backport note (if applicable) Cherry-pick note present: (cherry picked from commit 60fb2cf51e77bb1c0261160b4be44209d68956b1)

Diff

File Status Notes
drivers/net/wireless/ath/ath12k/mac.c Code changes identical; 3-line context offset due to different tree state (acceptable)

Issues

  • Missing vendor prefix: Subject line lacks UPSTREAM: or BACKPORT: prefix. The commit message contains a cherry-pick note indicating this is a backport from upstream commit 60fb2cf51e77, but the subject line does not follow the expected prefix convention (UPSTREAM: for clean cherry-picks or BACKPORT: for adapted backports). Per the validate-patch skill reference, commits with UPSTREAM:/BACKPORT: prefixes should have a lore.kernel.org link; this commit has a patch.msgid.link URL (which redirects to lore) and a cherry-pick note, suggesting it should use the UPSTREAM: prefix.

Verdict

The patch is a faithful cherry-pick of upstream commit 60fb2cf51e77bb1c0261160b4be44209d68956b1. The commit message, authorship, Fixes tag, and diff content are all correct. However, the subject line should be prefixed with UPSTREAM: to follow the tree's commit prefix conventions for upstream cherry-picks.

Recommendation: Add UPSTREAM: prefix to the subject line to align with tree conventions, or document why the prefix is omitted if this is intentional policy.

Final Summary

  1. Lore link present: Yes — Link: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com (redirects to lore.kernel.org)
  2. Lore link matches PR commits: Yes — diff content is identical to upstream commit 60fb2cf51e77; 3-line context offset is due to different tree state and is acceptable
  3. Upstream patch status: Upstreamed — merged as commit 60fb2cf51e77bb1c0261160b4be44209d68956b1 in qcom-next (verified via integration_presence_report.md and git log)
  4. PR present in qcom-next/topics: Yes — commit 60fb2cf51e77bb1c0261160b4be44209d68956b1 is present in qcom-next with exact patch-id match (per integration_presence_report.md)

Deterministic Integration Presence

Integration Presence Report

This report is generated by Jarvis before validate-patch runs.
It is the authoritative source for whether PR changes are already present
in qcom-next or in the kernel topic branches.

Kernel repo: /local/mnt/workspace/sgaud/Qgenie/image_pipeline/kernel
qcom-next ref: a5cf3debd8c3c660711ad586ad4bb84e9ca42635
topics remote: topics -> https://github.com/qualcomm-linux/kernel-topics
topics fetch: fetched

Commit Subject qcom-next topics Final
1/1 [PATCH] wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 present - exact patch-id match at 60fb2cf skipped - not checked because qcom-next already contains the change present

Final Status

overall_status: PASS
present_commits: 1/1
partial_commits: 0/1
missing_commits: 0/1
topics_checked_for_commits: 0/1
final_summary: PR present in qcom-next/topics: Yes - all 1 commit(s) are present in qcom-next or topics

@qlijarvis

Copy link
Copy Markdown

PR #837 — checker-log-analyzer

PR: #837
Checker run: https://github.com/qualcomm-linux/kernel-config/actions/runs/29563681709

Checker Result Summary
Checker Result Summary
checkpatch 2 warnings: long commit line, unknown commit ID
dt-binding-check ⏭️ No DT binding changes
dtb-check ⏭️ No DTS changes
sparse-check Passed
check-uapi-headers No UAPI changes
check-patch-compliance Missing required prefix
tag-check Subject missing required prefix (mandatory for qcom-6.18.y)

Detailed report: Full report

Checker analysis — click to expand

🤖 CI Checker Analysis (checker-log-analyzer)

PR: #837 - wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing
Source: https://github.com/qualcomm-linux/kernel-config/actions/runs/29563681709
Target Branch: qcom-6.18.y

Checker Result Summary
checkpatch 2 warnings: long commit line, unknown commit ID
dt-binding-check ⏭️ No DT binding changes
dtb-check ⏭️ No DTS changes
sparse-check Passed
check-uapi-headers No UAPI changes
check-patch-compliance Missing required prefix
tag-check Subject missing required prefix (mandatory for qcom-6.18.y)

❌ checkpatch

Root cause: Commit message formatting issues — long line in commit body and reference to unknown commit ID.

Failure details:

WARNING: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#12: 
        .... .... .... .... .... 0100 = Rx Max Nss That Supports EHT-MCS 0-9: 4

WARNING: Unknown commit id '6c95151e2e77', maybe rebased or not pulled?
#46: 
Fixes: 6c95151e2e77 ("wifi: ath12k: Add EHT MCS/NSS rates to Peer Assoc")

Analysis:

  1. Long line warning: Line 12 of the commit message contains a technical detail line (80+ chars) showing EHT-MCS map bit fields. This is acceptable as it's a verbatim copy of protocol field output for documentation purposes.
  2. Unknown commit ID: The Fixes: tag references commit 6c95151e2e77 which is not reachable from the base branch qcom-6.18.y. This is expected when the original commit exists in a different topic branch or upstream tree.

Fix:

  • Long line: This is a false positive — the line is a verbatim protocol field dump that should not be wrapped. No action needed.
  • Unknown commit ID: This is a false positive — the commit exists but is not in the current branch's history. Verify the commit exists in the integration tree or upstream. No action needed unless the commit ID is genuinely incorrect.

Reproduce locally:

./scripts/checkpatch.pl --strict --ignore FILE_PATH_CHANGES --git a19888edbd0a..7d5ea191884c

❌ check-patch-compliance

Root cause: Commit subject does not start with a required prefix (FROMLIST:, FROMGIT:, UPSTREAM:, or BACKPORT:).

Failure details:

Checking commit: wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing
Commit summary does not start with a required prefix

Analysis:
The commit subject is:

wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing

The commit includes a Link: tag pointing to lore.kernel.org:

Link: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com

This indicates the patch was posted to the mailing list. The correct prefix is FROMLIST:.

Fix:

git rebase -i a19888edbd0a   # mark commit 7d5ea191884c as 'edit'
git commit --amend -m "FROMLIST: wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing

[keep the rest of the commit body unchanged]"
git rebase --continue

Reproduce locally:

cd kernel
git log --oneline a19888edbd0a..7d5ea191884c
# Verify subject line starts with FROMLIST:, FROMGIT:, UPSTREAM:, or BACKPORT:

❌ tag-check

Root cause: Subject line does not start with a required prefix tag. This check is mandatory for all branches except qcom-next and qcom-next-staging. The target branch is qcom-6.18.y, so this check applies.

Failure details:

Commit 7d5ea191884c ("wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing")
Subject line: "wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing"

The subject does not start with any of the required prefixes:

  • FROMLIST: (posted to mailing list)
  • FROMGIT: (from maintainer tree)
  • UPSTREAM: (merged into mainline)
  • BACKPORT: (backported with modifications)
  • QCLINUX: (vendor-only)
  • PENDING: (work-in-progress)
  • WORKAROUND: (temporary fix)

Analysis:
The commit includes a Link: tag to lore.kernel.org, indicating it was posted to the mailing list. The correct prefix is FROMLIST:.

Fix:

git rebase -i a19888edbd0a   # mark commit 7d5ea191884c as 'edit'
git commit --amend -m "FROMLIST: wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing

[keep the rest of the commit body unchanged]"
git rebase --continue

Reproduce locally:

cd kernel
git log --format="%H %s" a19888edbd0a..7d5ea191884c | \
  grep -vE '^[0-9a-f]+ (FROMLIST|FROMGIT|UPSTREAM|BACKPORT|QCLINUX|PENDING|WORKAROUND):'
# Any output indicates commits missing the required prefix

Verdict

2 blockers must be fixed before merge:

  1. check-patch-compliance failure: Add FROMLIST: prefix to the commit subject.
  2. tag-check failure: Add FROMLIST: prefix to the commit subject (same fix as Create qualcomm-linux-organization-repolinter.yml #1).

Note: Both failures are resolved by the same fix — prepending FROMLIST: to the commit subject line.

Checkpatch warnings are false positives:

  • Long line warning is for a verbatim protocol field dump (acceptable).
  • Unknown commit ID warning is expected when the Fixes: tag references a commit not in the current branch history.

Action required: Amend the commit to add FROMLIST: prefix, then force-push the updated branch.

…-only parsing

When connecting to an AP configured for EHT 20 MHz with a full EHT
MCS/NSS map (supporting MCS 0-13)

Supported EHT-MCS and NSS Set
    EHT-MCS Map (BW <= 80MHz): 0x444444
        .... .... .... .... .... 0100 = Rx Max Nss That Supports EHT-MCS 0-9: 4
        .... .... .... .... 0100 .... = Tx Max Nss That Supports EHT-MCS 0-9: 4
        .... .... .... 0100 .... .... = Rx Max Nss That Supports EHT-MCS 10-11: 4
        .... .... 0100 .... .... .... = Tx Max Nss That Supports EHT-MCS 10-11: 4
        .... 0100 .... .... .... .... = Rx Max Nss That Supports EHT-MCS 12-13: 4
        0100 .... .... .... .... .... = Tx Max Nss That Supports EHT-MCS 12-13: 4

TX throughput is observed to be significantly lower than expected.
Investigation shows that TX rates are limited to EHT MCS 11, even though
the AP advertises support for EHT MCS 12/13.

The root cause is an incorrect parsing of the Supported EHT-MCS and NSS
Set element in ath12k_peer_assoc_h_eht().

IEEE Std 802.11be-2024 Figure 9-1074as describes the format for 20
MHz-Only Non-AP STAs.

IEEE Std 802.11be-2024 Figure 9-1074at describes the format for all
other AP and non-AP STAs.

Currently the first format is parsed when the peer advertises no wider
HE channel width support, without considering whether it is an AP or a
non-AP STA. This is incorrect: the peer AP's capabilities must be parsed
using Figure 9-1074at even when it operates on 20 MHz only. Parsing it
as Figure 9-1074as causes rx_tx_mcs13_max_nss to be interpreted as zero,
which is then passed to firmware, leading firmware to assume the peer
does not support MCS 13 and to limit TX rates at MCS 11.

Fix this by parsing the Figure 9-1074as format only when the peer is a
20 MHz-Only non-AP STA, i.e. when the local interface operates as AP or
mesh point.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3

Fixes: 6c95151 ("wifi: ath12k: Add EHT MCS/NSS rates to Peer Assoc")
Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Link: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
(cherry picked from commit 60fb2cf)
@qlijarvis

Copy link
Copy Markdown

PR #837 — validate-patch

PR: #837

Verdict Issues Detailed Report
0 Full report

Final Summary

  1. Lore link present: Yes — https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com
  2. Lore link matches PR commits: Cannot verify directly (lore fetch failed in pre-processing), but cherry-pick note and integration presence report confirm this is a faithful backport of upstream commit 60fb2cf51e77
  3. Upstream patch status: ✅ Upstreamed — merged as commit 60fb2cf51e77bb1c0261160b4be44209d68956b1 (confirmed by cherry-pick note and qcom-next presence)
  4. PR present in qcom-next/topics: Yes - all 1 commit(s) are present in qcom-next or topics
Verdict: ❌ — click to expand

🔍 Patch Validation

PR: #837 - FROMLIST: wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing
Upstream commit: https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com
Verdict: ❌ FAIL

Commit Message

Check Status Note
Subject matches upstream Subject preserved with FROMLIST: prefix
Body preserves rationale Full problem description, root cause analysis, and fix rationale present
Fixes tag present/correct Fixes: 6c95151e2e77 properly formatted
Authorship preserved Original author Baochen Qiang in From: and Signed-off-by:
Backport note (if applicable) Cherry-pick note present: (cherry picked from commit 60fb2cf51e77bb1c0261160b4be44209d68956b1)

Diff

File Status Notes
drivers/net/wireless/ath/ath12k/mac.c Clean backport: adds interface type checks (AP/MESH_POINT) before 20MHz-only parsing in two locations

Issues

  1. Incorrect commit prefix: Commit uses FROMLIST: prefix but includes a cherry-pick note showing it was merged upstream as 60fb2cf51e77bb1c0261160b4be44209d68956b1. The FROMLIST: prefix means "Posted to mailing list, not yet merged" — this commit should use UPSTREAM: or BACKPORT: prefix instead.

Verdict

Do not merge without correction. The commit message and diff are otherwise correct, but the prefix must be changed from FROMLIST: to UPSTREAM: (or BACKPORT: if modifications were needed) to accurately reflect that this patch has already been accepted and merged into the upstream kernel tree.

Final Summary

  1. Lore link present: Yes — https://patch.msgid.link/20260514-ath12k-fix-20mhz-only-mcs-map-v1-1-a38d4a9b21a2@oss.qualcomm.com
  2. Lore link matches PR commits: Cannot verify directly (lore fetch failed in pre-processing), but cherry-pick note and integration presence report confirm this is a faithful backport of upstream commit 60fb2cf51e77
  3. Upstream patch status: ✅ Upstreamed — merged as commit 60fb2cf51e77bb1c0261160b4be44209d68956b1 (confirmed by cherry-pick note and qcom-next presence)
  4. PR present in qcom-next/topics: Yes — exact patch-id match at 60fb2cf51e77bb1c0261160b4be44209d68956b1 in qcom-next (per integration_presence_report.md)

Deterministic Integration Presence

Integration Presence Report

This report is generated by Jarvis before validate-patch runs.
It is the authoritative source for whether PR changes are already present
in qcom-next or in the kernel topic branches.

Kernel repo: /local/mnt/workspace/sgaud/Qgenie/image_pipeline/kernel
qcom-next ref: a5cf3debd8c3c660711ad586ad4bb84e9ca42635
topics remote: topics -> https://github.com/qualcomm-linux/kernel-topics
topics fetch: fetched

Commit Subject qcom-next topics Final
1/1 [PATCH] FROMLIST: wifi: ath12k: fix EHT TX MCS limitation due to present - exact patch-id match at 60fb2cf skipped - not checked because qcom-next already contains the change present

Final Status

overall_status: PASS
present_commits: 1/1
partial_commits: 0/1
missing_commits: 0/1
topics_checked_for_commits: 0/1
final_summary: PR present in qcom-next/topics: Yes - all 1 commit(s) are present in qcom-next or topics

@qlijarvis

Copy link
Copy Markdown

PR #837 — checker-log-analyzer

PR: #837
Checker run: https://github.com/qualcomm-linux/kernel-config/actions/runs/29579893701

Checker Result Summary
Checker Result Summary
checkpatch 2 warnings: long commit line, unknown commit ID
dt-binding-check ⏭️ No DT binding changes
dtb-check ⏭️ No devicetree changes
sparse-check Passed
check-uapi-headers No UAPI changes
check-patch-compliance Passed
tag-check Subject has valid FROMLIST: prefix

Detailed report: Full report

Checker analysis — click to expand

🤖 CI Checker Analysis (checker-log-analyzer)

PR: #837 - FROMLIST: wifi: ath12k: fix EHT TX MCS limitation due to wrong 20 MHz-only parsing
Source: https://github.com/qualcomm-linux/kernel-config/actions/runs/29579893701
Target branch: qcom-6.18.y

Checker Result Summary
checkpatch 2 warnings: long commit line, unknown commit ID
dt-binding-check ⏭️ No DT binding changes
dtb-check ⏭️ No devicetree changes
sparse-check Passed
check-uapi-headers No UAPI changes
check-patch-compliance Passed
tag-check Subject has valid FROMLIST: prefix

❌ checkpatch

Root cause: Two non-blocking warnings in commit message formatting.

Failure details:

WARNING: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#12: 
        .... .... .... .... .... 0100 = Rx Max Nss That Supports EHT-MCS 0-9: 4

WARNING: Unknown commit id '6c95151e2e77', maybe rebased or not pulled?
#46: 
Fixes: 6c95151e2e77 ("wifi: ath12k: Add EHT MCS/NSS rates to Peer Assoc")

3f7987cec33eef4ac8ae53cf97f3079d9b899ef2 total: 0 errors, 2 warnings, 0 checks, 20 lines checked

Analysis:

  1. COMMIT_LOG_LONG_LINE warning (line Prepare qcom-next based on tag 'Linux 6.15-rc7' of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git #12):
    The commit message includes a verbatim IEEE 802.11be frame dump showing the EHT-MCS Map structure. This line exceeds 75 characters but is part of a technical specification excerpt that documents the exact bit field layout being parsed. Wrapping this line would break the visual alignment of the bit field representation and reduce readability.

    Verdict: Acceptable as-is. This is technical documentation that benefits from preserving the original format.

  2. Unknown commit id warning (Fixes: tag):
    The Fixes: tag references commit 6c95151e2e77 which is not present in the current branch (qcom-6.18.y). This is expected behavior when backporting a fix from a newer kernel version or from a topic branch that introduced the original bug. The commit ID is valid in the upstream context where this patch was originally posted (as indicated by the FROMLIST: prefix and lore.kernel.org link).

    Verdict: Acceptable. The Fixes: tag correctly identifies the upstream commit that introduced the bug, even though that commit may not exist in this stable branch.

Fix: No action required. Both warnings are false positives for this backport scenario.

Reproduce locally:

./scripts/checkpatch.pl --strict --ignore FILE_PATH_CHANGES --git a19888edbd0a4a46d624c9abe66d5f5ef4042abb..3f7987cec33eef4ac8ae53cf97f3079d9b899ef2

Verdict

Ready to merge. Both checkpatch warnings are acceptable in this context:

  • The long line preserves technical documentation formatting
  • The unknown commit ID in Fixes: tag is expected for backports

All other checkers passed cleanly. The patch has proper FROMLIST: prefix, valid lore.kernel.org link, correct authorship, and introduces no DT, UAPI, or sparse issues.

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.

2 participants