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) \