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";
}