diff --git a/components/dp/core/inc/wlan_dp_priv.h b/components/dp/core/inc/wlan_dp_priv.h
index 7adc219778..423660c753 100644
--- a/components/dp/core/inc/wlan_dp_priv.h
+++ b/components/dp/core/inc/wlan_dp_priv.h
@@ -91,6 +91,8 @@ struct wlan_dp_psoc_cfg {
uint32_t periodic_stats_timer_duration;
#endif /* WLAN_FEATURE_PERIODIC_STA_STATS */
#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/components/dp/core/src/wlan_dp_bus_bandwidth.c b/components/dp/core/src/wlan_dp_bus_bandwidth.c
index 678b7cb08b..95d468d218 100644
--- a/components/dp/core/src/wlan_dp_bus_bandwidth.c
+++ b/components/dp/core/src/wlan_dp_bus_bandwidth.c
@@ -1449,6 +1449,9 @@ static void dp_pld_request_bus_bandwidth(struct wlan_dp_psoc_context *dp_ctx,
if (dp_ctx->high_bus_bw_request) {
next_vote_level = PLD_BUS_WIDTH_VERY_HIGH;
tput_level = TPUT_LEVEL_VERY_HIGH;
+ } else if (total_pkts > dp_ctx->dp_cfg.bus_bw_super_high_threshold) {
+ next_vote_level = PLD_BUS_WIDTH_MAX;
+ tput_level = TPUT_LEVEL_SUPER_HIGH;
} else if (total_pkts > dp_ctx->dp_cfg.bus_bw_ultra_high_threshold) {
next_vote_level = PLD_BUS_WIDTH_ULTRA_HIGH;
tput_level = TPUT_LEVEL_ULTRA_HIGH;
@@ -1476,7 +1479,8 @@ static void dp_pld_request_bus_bandwidth(struct wlan_dp_psoc_context *dp_ctx,
*/
if (!ucfg_ipa_is_fw_wdi_activated(dp_ctx->pdev) &&
policy_mgr_is_current_hwmode_dbs(dp_ctx->psoc) &&
- (total_pkts > dp_ctx->dp_cfg.bus_bw_dbs_threshold)) {
+ (total_pkts > dp_ctx->dp_cfg.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/components/dp/core/src/wlan_dp_main.c b/components/dp/core/src/wlan_dp_main.c
index 38a580dc33..433deb0eea 100644
--- a/components/dp/core/src/wlan_dp_main.c
+++ b/components/dp/core/src/wlan_dp_main.c
@@ -366,6 +366,8 @@ void dp_set_dump_dp_trace(uint16_t cmd_type, uint16_t count)
static void dp_ini_bus_bandwidth(struct wlan_dp_psoc_cfg *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/components/dp/dispatcher/inc/wlan_dp_cfg.h b/components/dp/dispatcher/inc/wlan_dp_cfg.h
index ad3d812cfd..83c720e426 100644
--- a/components/dp/dispatcher/inc/wlan_dp_cfg.h
+++ b/components/dp/dispatcher/inc/wlan_dp_cfg.h
@@ -108,6 +108,29 @@
#define CFG_DP_RX_SOFTIRQ_MAX_YIELD_TIME_NS_MAX (10 * 1000 * 1000)
#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
@@ -1155,6 +1178,7 @@
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
#define CFG_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) \