qcacld-3.0: Update SNOC freq to 200 MHz for SAP, P2P HE case

Previously, IPA had its default vote which will bump up the SNOC
frequency to 200 MHz. Now IPA has removed its vote which is
causing throughput drop in HE cases for SAP and P2P GO mode.
To fix this, add new throughput level TPUT_LEVEL_HIGH_HE_CASE and
provide ini to set its threshold to increase SNOC frequency to
200 MHz. To enable, set ini BandwidthMidHighThreshold to 7000.

Change-Id: Ica8c640597c37602aea2f5e4ff6b0646c49ff548
CRs-Fixed: 3297833
This commit is contained in:
Ananya Gupta
2023-01-20 12:25:46 +05:30
committed by Madan Koyyalamudi
parent cc4c2be493
commit b576218751
7 changed files with 126 additions and 42 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -89,6 +89,7 @@ struct dp_rtpm_tput_policy_context {
* @bus_bw_super_high_threshold: bus bandwidth super high threshold
* @bus_bw_ultra_high_threshold: bus bandwidth ultra high threshold
* @bus_bw_very_high_threshold: bus bandwidth very high threshold
* @bus_bw_mid_high_threshold: bus bandwidth mid high threshold
* @bus_bw_dbs_threshold: bus bandwidth for DBS mode threshold
* @bus_bw_high_threshold: bus bandwidth high threshold
* @bus_bw_medium_threshold: bandwidth threshold for medium bandwidth
@@ -151,6 +152,7 @@ struct wlan_dp_psoc_cfg {
uint32_t bus_bw_ultra_high_threshold;
uint32_t bus_bw_very_high_threshold;
uint32_t bus_bw_dbs_threshold;
uint32_t bus_bw_mid_high_threshold;
uint32_t bus_bw_high_threshold;
uint32_t bus_bw_medium_threshold;
uint32_t bus_bw_low_threshold;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -52,31 +52,38 @@ static bus_bw_table_type bus_bw_table_default = {
[QCA_WLAN_802_11_MODE_11B] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_1,
BUS_BW_LEVEL_2, BUS_BW_LEVEL_3,
BUS_BW_LEVEL_4, BUS_BW_LEVEL_6,
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8},
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11G] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5},
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5},
[QCA_WLAN_802_11_MODE_11A] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5},
BUS_BW_LEVEL_5, BUS_BW_LEVEL_5,
BUS_BW_LEVEL_5},
[QCA_WLAN_802_11_MODE_11N] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_1,
BUS_BW_LEVEL_2, BUS_BW_LEVEL_3,
BUS_BW_LEVEL_4, BUS_BW_LEVEL_6,
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8},
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11AC] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_1,
BUS_BW_LEVEL_2, BUS_BW_LEVEL_3,
BUS_BW_LEVEL_4, BUS_BW_LEVEL_6,
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8},
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11AX] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_1,
BUS_BW_LEVEL_2, BUS_BW_LEVEL_3,
BUS_BW_LEVEL_4, BUS_BW_LEVEL_6,
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8},
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11BE] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_1,
BUS_BW_LEVEL_2, BUS_BW_LEVEL_3,
BUS_BW_LEVEL_4, BUS_BW_LEVEL_6,
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8},
BUS_BW_LEVEL_7, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_9},
};
/*
@@ -85,34 +92,41 @@ static bus_bw_table_type bus_bw_table_default = {
* level in low latency setting.
*/
static bus_bw_table_type bus_bw_table_low_latency = {
[QCA_WLAN_802_11_MODE_11B] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11G] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11A] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11N] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11AC] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11AX] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11BE] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8,
BUS_BW_LEVEL_8, BUS_BW_LEVEL_8},
[QCA_WLAN_802_11_MODE_11B] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11G] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11A] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11N] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11AC] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11AX] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
[QCA_WLAN_802_11_MODE_11BE] = {BUS_BW_LEVEL_NONE, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9, BUS_BW_LEVEL_9,
BUS_BW_LEVEL_9},
};
/**
@@ -137,10 +151,12 @@ bbm_convert_to_pld_bus_lvl(enum bus_bw_level vote_lvl)
case BUS_BW_LEVEL_5:
return PLD_BUS_WIDTH_LOW_LATENCY;
case BUS_BW_LEVEL_6:
return PLD_BUS_WIDTH_VERY_HIGH;
return PLD_BUS_WIDTH_MID_HIGH;
case BUS_BW_LEVEL_7:
return PLD_BUS_WIDTH_ULTRA_HIGH;
return PLD_BUS_WIDTH_VERY_HIGH;
case BUS_BW_LEVEL_8:
return PLD_BUS_WIDTH_ULTRA_HIGH;
case BUS_BW_LEVEL_9:
return PLD_BUS_WIDTH_MAX;
case BUS_BW_LEVEL_NONE:
default:
@@ -295,7 +311,7 @@ bbm_apply_driver_mode_policy(struct bbm_context *bbm_ctx,
case QDF_GLOBAL_MONITOR_MODE:
case QDF_GLOBAL_FTM_MODE:
bbm_ctx->per_policy_vote[BBM_DRIVER_MODE_POLICY] =
BUS_BW_LEVEL_6;
BUS_BW_LEVEL_7;
return;
default:
bbm_ctx->per_policy_vote[BBM_DRIVER_MODE_POLICY] =
@@ -959,8 +975,9 @@ void wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc)
dp_nofl_info("BW compute Interval: %d ms",
dp_ctx->dp_cfg.bus_bw_compute_interval);
dp_nofl_info("BW TH - Very High: %d High: %d Med: %d Low: %d DBS: %d",
dp_nofl_info("BW TH - Very High: %d Mid High: %d High: %d Med: %d Low: %d DBS: %d",
dp_ctx->dp_cfg.bus_bw_very_high_threshold,
dp_ctx->dp_cfg.bus_bw_mid_high_threshold,
dp_ctx->dp_cfg.bus_bw_high_threshold,
dp_ctx->dp_cfg.bus_bw_medium_threshold,
dp_ctx->dp_cfg.bus_bw_low_threshold,
@@ -1417,6 +1434,32 @@ bool dp_bus_bandwidth_work_tune_tx(struct wlan_dp_psoc_context *dp_ctx,
return tx_level_change;
}
/**
* dp_sap_p2p_update_mid_high_tput() - Update mid high BW for SAP and P2P mode
* @dp_ctx: DP context
* @total_pkts: Total Tx and Rx packets
*
* Return: True if mid high threshold is set and opmode is SAP or P2P GO
*/
static inline
bool dp_sap_p2p_update_mid_high_tput(struct wlan_dp_psoc_context *dp_ctx,
uint64_t total_pkts)
{
struct wlan_dp_intf *dp_intf = NULL;
struct wlan_dp_intf *dp_intf_next = NULL;
if (dp_ctx->dp_cfg.bus_bw_mid_high_threshold &&
total_pkts > dp_ctx->dp_cfg.bus_bw_mid_high_threshold) {
dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
if (dp_intf->device_mode == QDF_SAP_MODE ||
dp_intf->device_mode == QDF_P2P_GO_MODE)
return true;
}
}
return false;
}
/**
* dp_pld_request_bus_bandwidth() - Function to control bus bandwidth
* @dp_ctx: handle to DP context
@@ -1475,6 +1518,10 @@ static void dp_pld_request_bus_bandwidth(struct wlan_dp_psoc_context *dp_ctx,
} else if (total_pkts > dp_ctx->dp_cfg.bus_bw_high_threshold) {
next_vote_level = PLD_BUS_WIDTH_HIGH;
tput_level = TPUT_LEVEL_HIGH;
if (dp_sap_p2p_update_mid_high_tput(dp_ctx, total_pkts)) {
next_vote_level = PLD_BUS_WIDTH_MID_HIGH;
tput_level = TPUT_LEVEL_MID_HIGH;
}
} else if (total_pkts > dp_ctx->dp_cfg.bus_bw_medium_threshold) {
next_vote_level = PLD_BUS_WIDTH_MEDIUM;
tput_level = TPUT_LEVEL_MEDIUM;

View File

@@ -400,6 +400,8 @@ static void dp_ini_bus_bandwidth(struct wlan_dp_psoc_cfg *config,
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_VERY_HIGH_THRESHOLD);
config->bus_bw_dbs_threshold =
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_DBS_THRESHOLD);
config->bus_bw_mid_high_threshold =
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_MID_HIGH_THRESHOLD);
config->bus_bw_high_threshold =
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_HIGH_THRESHOLD);
config->bus_bw_medium_threshold =