diff --git a/core/hdd/inc/hdd_dp_cfg.h b/core/hdd/inc/hdd_dp_cfg.h index 55fae58c2d..a6b486fa3a 100644 --- a/core/hdd/inc/hdd_dp_cfg.h +++ b/core/hdd/inc/hdd_dp_cfg.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2022 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 @@ -414,6 +414,29 @@ #endif #ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH +/* + * + * gBusBandwidthSuperHighThreshold - bus bandwidth super high threshold + * + * @Min: 0 + * @Max: 4294967295UL + * @Default: 22000 + * + * This ini specifies the bus bandwidth super high threshold + * + * Usage: Internal + * + * + */ +#define CFG_DP_BUS_BANDWIDTH_SUPER_HIGH_THRESHOLD \ + CFG_INI_UINT( \ + "gBusBandwidthSuperHighThreshold", \ + 0, \ + 4294967295UL, \ + 22000, \ + CFG_VALUE_OR_DEFAULT, \ + "Bus bandwidth super high threshold") + /* * * gBusBandwidthUltraHighThreshold - bus bandwidth ultra high threshold @@ -422,7 +445,7 @@ * @Max: 4294967295UL * @Default: 12000 * - * This ini specifies the bus bandwidth very high threshold + * This ini specifies the bus bandwidth ultra high threshold * * Usage: Internal * @@ -1525,6 +1548,7 @@ #ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH #define CFG_HDD_DP_BUS_BANDWIDTH \ + CFG(CFG_DP_BUS_BANDWIDTH_SUPER_HIGH_THRESHOLD) \ CFG(CFG_DP_BUS_BANDWIDTH_ULTRA_HIGH_THRESHOLD) \ CFG(CFG_DP_BUS_BANDWIDTH_VERY_HIGH_THRESHOLD) \ CFG(CFG_DP_BUS_BANDWIDTH_DBS_THRESHOLD) \ diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 03914ef858..ea24c3036c 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2022 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 @@ -155,6 +155,8 @@ struct hdd_config { uint32_t rx_hp_oos_update_limit; uint64_t rx_softirq_max_yield_duration_ns; #ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH + /* bandwidth threshold for super high bandwidth */ + uint32_t bus_bw_super_high_threshold; /* bandwidth threshold for ultra high bandwidth */ uint32_t bus_bw_ultra_high_threshold; /* bandwidth threshold for very high bandwidth */ diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index e539d6e90e..1e1f6e84b4 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -10864,6 +10864,9 @@ static void hdd_pld_request_bus_bandwidth(struct hdd_context *hdd_ctx, if (hdd_ctx->high_bus_bw_request) { next_vote_level = PLD_BUS_WIDTH_VERY_HIGH; tput_level = TPUT_LEVEL_VERY_HIGH; + } else if (total_pkts > hdd_ctx->config->bus_bw_super_high_threshold) { + next_vote_level = PLD_BUS_WIDTH_MAX; + tput_level = TPUT_LEVEL_SUPER_HIGH; } else if (total_pkts > hdd_ctx->config->bus_bw_ultra_high_threshold) { next_vote_level = PLD_BUS_WIDTH_ULTRA_HIGH; tput_level = TPUT_LEVEL_ULTRA_HIGH; @@ -10891,7 +10894,8 @@ static void hdd_pld_request_bus_bandwidth(struct hdd_context *hdd_ctx, */ if (!ucfg_ipa_is_fw_wdi_activated(hdd_ctx->pdev) && policy_mgr_is_current_hwmode_dbs(hdd_ctx->psoc) && - (total_pkts > hdd_ctx->config->bus_bw_dbs_threshold)) { + (total_pkts > hdd_ctx->config->bus_bw_dbs_threshold) && + (tput_level < TPUT_LEVEL_SUPER_HIGH)) { next_vote_level = PLD_BUS_WIDTH_ULTRA_HIGH; tput_level = TPUT_LEVEL_ULTRA_HIGH; } diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 2e91ee6388..28947253e7 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -3738,6 +3738,8 @@ static inline void hdd_ini_mscs_params(struct hdd_config *config, static void hdd_ini_bus_bandwidth(struct hdd_config *config, struct wlan_objmgr_psoc *psoc) { + config->bus_bw_super_high_threshold = + cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_SUPER_HIGH_THRESHOLD); config->bus_bw_ultra_high_threshold = cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_ULTRA_HIGH_THRESHOLD); config->bus_bw_very_high_threshold = diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index 91c4b6acf3..e90025437a 100644 --- a/core/pld/src/pld_common.c +++ b/core/pld/src/pld_common.c @@ -3307,7 +3307,7 @@ const char *pld_bus_width_type_to_str(enum pld_bus_width_type level) return "LOW_LAT"; default: if (level > PLD_BUS_WIDTH_ULTRA_HIGH) - return "ULTRA_HIGH+"; + return "SUPER_HIGH"; else return "INVAL"; }