summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa.c1
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_i.h1
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_utils.c14
3 files changed, 14 insertions, 2 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c
index 3a54c97f5320..2615db4e9755 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c
@@ -4621,6 +4621,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
mutex_init(&ipa3_ctx->lock);
mutex_init(&ipa3_ctx->nat_mem.lock);
+ mutex_init(&ipa3_ctx->q6_proxy_clk_vote_mutex);
idr_init(&ipa3_ctx->ipa_idr);
spin_lock_init(&ipa3_ctx->idr_lock);
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
index 4278dc45aad2..f12eb6ded556 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h
@@ -1231,6 +1231,7 @@ struct ipa3_context {
u32 enable_clock_scaling;
u32 curr_ipa_clk_rate;
bool q6_proxy_clk_vote_valid;
+ struct mutex q6_proxy_clk_vote_mutex;
u32 ipa_num_pipes;
struct ipa3_wlan_comm_memb wc_memb;
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
index 545c2b599a6f..4979f62b928f 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c
@@ -2983,10 +2983,15 @@ bool ipa3_is_client_handle_valid(u32 clnt_hdl)
*/
void ipa3_proxy_clk_unvote(void)
{
- if (ipa3_is_ready() && ipa3_ctx->q6_proxy_clk_vote_valid) {
+ if (!ipa3_is_ready())
+ return;
+
+ mutex_lock(&ipa3_ctx->q6_proxy_clk_vote_mutex);
+ if (ipa3_ctx->q6_proxy_clk_vote_valid) {
IPA_ACTIVE_CLIENTS_DEC_SPECIAL("PROXY_CLK_VOTE");
ipa3_ctx->q6_proxy_clk_vote_valid = false;
}
+ mutex_unlock(&ipa3_ctx->q6_proxy_clk_vote_mutex);
}
/**
@@ -2996,10 +3001,15 @@ void ipa3_proxy_clk_unvote(void)
*/
void ipa3_proxy_clk_vote(void)
{
- if (ipa3_is_ready() && !ipa3_ctx->q6_proxy_clk_vote_valid) {
+ if (!ipa3_is_ready())
+ return;
+
+ mutex_lock(&ipa3_ctx->q6_proxy_clk_vote_mutex);
+ if (!ipa3_ctx->q6_proxy_clk_vote_valid) {
IPA_ACTIVE_CLIENTS_INC_SPECIAL("PROXY_CLK_VOTE");
ipa3_ctx->q6_proxy_clk_vote_valid = true;
}
+ mutex_unlock(&ipa3_ctx->q6_proxy_clk_vote_mutex);
}
/**