diff --git a/ipa/core/src/wlan_ipa_core.c b/ipa/core/src/wlan_ipa_core.c
index 8ccdf50b30..79f49cc0b8 100644
--- a/ipa/core/src/wlan_ipa_core.c
+++ b/ipa/core/src/wlan_ipa_core.c
@@ -1160,6 +1160,12 @@ QDF_STATUS wlan_ipa_suspend(struct wlan_ipa_priv *ipa_ctx)
ipa_ctx->suspended = true;
qdf_spin_unlock_bh(&ipa_ctx->pm_lock);
+ if (ipa_ctx->config->ipa_force_voting &&
+ !ipa_ctx->ipa_pipes_down)
+ wlan_ipa_set_perf_level(ipa_ctx,
+ ipa_ctx->config->bus_bw_high,
+ ipa_ctx->config->bus_bw_high);
+
return QDF_STATUS_SUCCESS;
}
diff --git a/ipa/core/src/wlan_ipa_main.c b/ipa/core/src/wlan_ipa_main.c
index fadf08963d..e8f4a7a365 100644
--- a/ipa/core/src/wlan_ipa_main.c
+++ b/ipa/core/src/wlan_ipa_main.c
@@ -635,6 +635,8 @@ void ipa_component_config_update(struct wlan_objmgr_psoc *psoc)
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_MEDIUM_THRESHOLD);
g_ipa_config->bus_bw_low =
cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_LOW_THRESHOLD);
+ g_ipa_config->ipa_force_voting =
+ cfg_get(psoc, CFG_DP_IPA_ENABLE_FORCE_VOTING);
}
uint32_t ipa_get_tx_buf_count(void)
diff --git a/ipa/dispatcher/inc/cfg_ipa.h b/ipa/dispatcher/inc/cfg_ipa.h
index 085367967c..4fc90e0a3f 100644
--- a/ipa/dispatcher/inc/cfg_ipa.h
+++ b/ipa/dispatcher/inc/cfg_ipa.h
@@ -155,6 +155,25 @@
100, \
CFG_VALUE_OR_DEFAULT, "IPA low bw threshold")
+/*
+ *
+ * gIPAForceVotingEnable - IPA force voting enable
+ * @Default: false
+ *
+ * This ini specifies to enable IPA force voting
+ *
+ * Related: N/A
+ *
+ * Supported Feature: IPA
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_DP_IPA_ENABLE_FORCE_VOTING \
+ CFG_INI_BOOL("gIPAForceVotingEnable", \
+ false, "Ctrl to enable force voting")
+
/*
*
* IpaUcTxBufCount - IPA tx buffer count
@@ -185,6 +204,7 @@
CFG(CFG_DP_IPA_HIGH_BANDWIDTH_MBPS) \
CFG(CFG_DP_IPA_MEDIUM_BANDWIDTH_MBPS) \
CFG(CFG_DP_IPA_LOW_BANDWIDTH_MBPS) \
+ CFG(CFG_DP_IPA_ENABLE_FORCE_VOTING) \
CFG(CFG_DP_IPA_UC_TX_BUF_COUNT)
#endif /* _CFG_IPA_H_ */
diff --git a/ipa/dispatcher/inc/wlan_ipa_public_struct.h b/ipa/dispatcher/inc/wlan_ipa_public_struct.h
index ca3a01faf1..c86ee4b363 100644
--- a/ipa/dispatcher/inc/wlan_ipa_public_struct.h
+++ b/ipa/dispatcher/inc/wlan_ipa_public_struct.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018, 2019 The Linux Foundation. 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
@@ -38,6 +38,7 @@
* @ipa_bw_high: IPA bandwidth high threshold
* @ipa_bw_medium: IPA bandwidth medium threshold
* @ipa_bw_low: IPA bandwidth low threshold
+ * @ipa_force_voting: support force bw voting
*/
struct wlan_ipa_config {
uint32_t ipa_config;
@@ -49,6 +50,7 @@ struct wlan_ipa_config {
uint32_t ipa_bw_high;
uint32_t ipa_bw_medium;
uint32_t ipa_bw_low;
+ bool ipa_force_voting;
};
/**