mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
wifi: ath12k: Set congestion control max MSDU count
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> Reviewed-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com> Link: https://patch.msgid.link/20260622062614.760166-1-thiraviyam.mariyappan@oss.qualcomm.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
committed by
Jeff Johnson
parent
f57314aade
commit
e23d90cfcb
@@ -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;
|
||||
|
||||
@@ -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? */
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user