* [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count
@ 2026-06-22 6:26 Thiraviyam Mariyappan
2026-07-14 16:54 ` Rameshkumar Sundaram
2026-07-15 1:54 ` Baochen Qiang
0 siblings, 2 replies; 3+ messages in thread
From: Thiraviyam Mariyappan @ 2026-06-22 6:26 UTC (permalink / raw)
To: ath12k; +Cc: linux-wireless, Thiraviyam Mariyappan
Currently when running 128 clients UDP DL test in 5 GHz HE80 (NSS 2x2),
firmware uses the default max MSDU count (16K MSDUs). This lower limit
causes the firmware to compute a smaller TQM drop threshold, aggregate
packets at a reduced rate, and results in increased packet drops with
TQM drop threshold as the completion reason.
To fix this issue, set WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS to the TX
descriptor count using ath12k_wmi_pdev_set_param(). This increases the
TQM drop threshold, reduces drop events, and improves throughput from
~722 Mbps to ~1060 Mbps with 1200 Mbps ingress.
Add a new HW capability flag (supports_cong_ctrl_max_msdus) and enable
the WMI parameter only on supported platforms.
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01181-QCAHKSWPL_SILICONZ-1
Signed-off-by: Thiraviyam Mariyappan <thiraviyam.mariyappan@oss.qualcomm.com>
---
drivers/net/wireless/ath/ath12k/hw.h | 1 +
drivers/net/wireless/ath/ath12k/mac.c | 13 +++++++++++++
drivers/net/wireless/ath/ath12k/wifi7/hw.c | 6 ++++++
drivers/net/wireless/ath/ath12k/wmi.h | 1 +
4 files changed, 21 insertions(+)
diff --git a/drivers/net/wireless/ath/ath12k/hw.h b/drivers/net/wireless/ath/ath12k/hw.h
index d135b2936378..ad62f93441b3 100644
--- a/drivers/net/wireless/ath/ath12k/hw.h
+++ b/drivers/net/wireless/ath/ath12k/hw.h
@@ -192,6 +192,7 @@ struct ath12k_hw_params {
bool supports_shadow_regs:1;
bool supports_aspm:1;
bool current_cc_support:1;
+ bool supports_cong_ctrl_max_msdus:1;
u32 num_tcl_banks;
u32 max_tx_ring;
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index af354bef5c0d..403f00ab2e3e 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -9722,6 +9722,19 @@ static int ath12k_mac_start(struct ath12k *ar)
goto err;
}
+ if (ab->hw_params->supports_cong_ctrl_max_msdus) {
+ ret = ath12k_wmi_pdev_set_param(ar,
+ WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS,
+ ATH12K_NUM_POOL_TX_DESC(ab),
+ pdev->pdev_id);
+ if (ret) {
+ ath12k_err(ab,
+ "failed to set congestion control MAX MSDUS: %d\n",
+ ret);
+ goto err;
+ }
+ }
+
__ath12k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask);
/* TODO: Do we need to enable ANI? */
diff --git a/drivers/net/wireless/ath/ath12k/wifi7/hw.c b/drivers/net/wireless/ath/ath12k/wifi7/hw.c
index 3d59fa452ec0..8c99c50a4ba9 100644
--- a/drivers/net/wireless/ath/ath12k/wifi7/hw.c
+++ b/drivers/net/wireless/ath/ath12k/wifi7/hw.c
@@ -390,6 +390,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_MESH_POINT) |
BIT(NL80211_IFTYPE_AP_VLAN),
.supports_monitor = false,
+ .supports_cong_ctrl_max_msdus = true,
.idle_ps = false,
.download_calib = true,
@@ -480,6 +481,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_P2P_CLIENT) |
BIT(NL80211_IFTYPE_P2P_GO),
.supports_monitor = true,
+ .supports_cong_ctrl_max_msdus = false,
.idle_ps = true,
.download_calib = false,
@@ -568,6 +570,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_MESH_POINT) |
BIT(NL80211_IFTYPE_AP_VLAN),
.supports_monitor = true,
+ .supports_cong_ctrl_max_msdus = true,
.idle_ps = false,
.download_calib = true,
@@ -654,6 +657,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_AP) |
BIT(NL80211_IFTYPE_MESH_POINT),
.supports_monitor = true,
+ .supports_cong_ctrl_max_msdus = true,
.idle_ps = false,
.download_calib = true,
@@ -738,6 +742,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_P2P_CLIENT) |
BIT(NL80211_IFTYPE_P2P_GO),
.supports_monitor = true,
+ .supports_cong_ctrl_max_msdus = false,
.idle_ps = true,
.download_calib = false,
@@ -826,6 +831,7 @@ static const struct ath12k_hw_params ath12k_wifi7_hw_params[] = {
BIT(NL80211_IFTYPE_AP) |
BIT(NL80211_IFTYPE_MESH_POINT),
.supports_monitor = true,
+ .supports_cong_ctrl_max_msdus = true,
.idle_ps = false,
.download_calib = true,
diff --git a/drivers/net/wireless/ath/ath12k/wmi.h b/drivers/net/wireless/ath/ath12k/wmi.h
index c452e3d57a29..4937c547562e 100644
--- a/drivers/net/wireless/ath/ath12k/wmi.h
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
@@ -1083,6 +1083,7 @@ enum wmi_tlv_pdev_param {
WMI_PDEV_PARAM_RADIO_CHAN_STATS_ENABLE,
WMI_PDEV_PARAM_RADIO_DIAGNOSIS_ENABLE,
WMI_PDEV_PARAM_MESH_MCAST_ENABLE,
+ WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS = 0xa6,
WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD = 0xbc,
WMI_PDEV_PARAM_SET_CMD_OBSS_PD_PER_AC = 0xbe,
WMI_PDEV_PARAM_ENABLE_SR_PROHIBIT = 0xc6,
base-commit: 972c4dd19cb92e03d75b66c426cfade07582a1ba
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count
2026-06-22 6:26 [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count Thiraviyam Mariyappan
@ 2026-07-14 16:54 ` Rameshkumar Sundaram
2026-07-15 1:54 ` Baochen Qiang
1 sibling, 0 replies; 3+ messages in thread
From: Rameshkumar Sundaram @ 2026-07-14 16:54 UTC (permalink / raw)
To: Thiraviyam Mariyappan, ath12k; +Cc: linux-wireless
On 6/22/2026 11:56 AM, Thiraviyam Mariyappan wrote:
> Currently when running 128 clients UDP DL test in 5 GHz HE80 (NSS 2x2),
> firmware uses the default max MSDU count (16K MSDUs). This lower limit
> causes the firmware to compute a smaller TQM drop threshold, aggregate
> packets at a reduced rate, and results in increased packet drops with
> TQM drop threshold as the completion reason.
>
> To fix this issue, set WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS to the TX
> descriptor count using ath12k_wmi_pdev_set_param(). This increases the
> TQM drop threshold, reduces drop events, and improves throughput from
> ~722 Mbps to ~1060 Mbps with 1200 Mbps ingress.
>
> Add a new HW capability flag (supports_cong_ctrl_max_msdus) and enable
> the WMI parameter only on supported platforms.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01181-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Thiraviyam Mariyappan <thiraviyam.mariyappan@oss.qualcomm.com>
Reviewed-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count
2026-06-22 6:26 [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count Thiraviyam Mariyappan
2026-07-14 16:54 ` Rameshkumar Sundaram
@ 2026-07-15 1:54 ` Baochen Qiang
1 sibling, 0 replies; 3+ messages in thread
From: Baochen Qiang @ 2026-07-15 1:54 UTC (permalink / raw)
To: Thiraviyam Mariyappan, ath12k; +Cc: linux-wireless
On 6/22/2026 2:26 PM, Thiraviyam Mariyappan wrote:
> Currently when running 128 clients UDP DL test in 5 GHz HE80 (NSS 2x2),
> firmware uses the default max MSDU count (16K MSDUs). This lower limit
> causes the firmware to compute a smaller TQM drop threshold, aggregate
> packets at a reduced rate, and results in increased packet drops with
> TQM drop threshold as the completion reason.
>
> To fix this issue, set WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS to the TX
> descriptor count using ath12k_wmi_pdev_set_param(). This increases the
> TQM drop threshold, reduces drop events, and improves throughput from
> ~722 Mbps to ~1060 Mbps with 1200 Mbps ingress.
>
> Add a new HW capability flag (supports_cong_ctrl_max_msdus) and enable
> the WMI parameter only on supported platforms.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01181-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Thiraviyam Mariyappan <thiraviyam.mariyappan@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-15 1:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-22 6:26 [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count Thiraviyam Mariyappan
2026-07-14 16:54 ` Rameshkumar Sundaram
2026-07-15 1:54 ` Baochen Qiang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox