Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +21 −7 Original line number Diff line number Diff line Loading @@ -4394,8 +4394,12 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, /* Prevent consequent calls from trying to load the FW again. */ if (ipa3_ctx->ipa_initialization_complete) return 0; IPADBG("active clients = %d\n", atomic_read(&ipa3_ctx->ipa3_active_clients.cnt)); /* move proxy vote for modem on ipa3_post_init */ IPA_ACTIVE_CLIENTS_INC_SPECIAL("PROXY_CLK_VOTE"); if (ipa3_ctx->ipa_hw_type != IPA_HW_v4_0) ipa3_proxy_clk_vote(); /* * indication whether working in MHI config or non MHI config is given Loading Loading @@ -4532,9 +4536,6 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, ipa3_register_panic_hdlr(); ipa3_ctx->q6_proxy_clk_vote_valid = true; ipa3_ctx->q6_proxy_clk_vote_cnt++; mutex_lock(&ipa3_ctx->lock); ipa3_ctx->ipa_initialization_complete = true; mutex_unlock(&ipa3_ctx->lock); Loading @@ -4551,6 +4552,7 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, gsi_deregister_device(ipa3_ctx->gsi_dev_hdl, false); fail_register_device: ipa3_destroy_flt_tbl_idrs(); ipa3_proxy_clk_unvote(); return result; } Loading Loading @@ -4860,6 +4862,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, int result = 0; int i; struct ipa3_rt_tbl_set *rset; struct ipa_active_client_logging_info log_info; IPADBG("IPA Driver initialization started\n"); Loading Loading @@ -5050,7 +5053,13 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, } mutex_init(&ipa3_ctx->ipa3_active_clients.mutex); /* move proxy vote for modem to ipa3_post_init() */ IPA_ACTIVE_CLIENTS_PREP_SPECIAL(log_info, "PROXY_CLK_VOTE"); ipa3_active_clients_log_inc(&log_info, false); ipa3_ctx->q6_proxy_clk_vote_valid = true; ipa3_ctx->q6_proxy_clk_vote_cnt = 1; /*Updating the proxy vote cnt 1 */ atomic_set(&ipa3_ctx->ipa3_active_clients.cnt, 1); /* Create workqueues for power management */ Loading Loading @@ -5181,7 +5190,6 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, mutex_init(&ipa3_ctx->lock); mutex_init(&ipa3_ctx->q6_proxy_clk_vote_mutex); mutex_init(&ipa3_ctx->ipa_cne_evt_lock); ipa3_ctx->q6_proxy_clk_vote_cnt = 0; idr_init(&ipa3_ctx->ipa_idr); spin_lock_init(&ipa3_ctx->idr_lock); Loading Loading @@ -5296,8 +5304,14 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, IPADBG("ipa cdev added successful. major:%d minor:%d\n", MAJOR(ipa3_ctx->dev_num), MINOR(ipa3_ctx->dev_num)); /* * for IPA 4.0 offline charge is not needed and we need to prevent * power collapse until IPA uC is loaded. */ /* proxy vote for modem is added in ipa3_post_init() phase */ IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); if (ipa3_ctx->ipa_hw_type != IPA_HW_v4_0) ipa3_proxy_clk_unvote(); return 0; fail_cdev_add: Loading drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +2 −4 Original line number Diff line number Diff line Loading @@ -4168,9 +4168,8 @@ bool ipa3_is_client_handle_valid(u32 clnt_hdl) */ void ipa3_proxy_clk_unvote(void) { if (!ipa3_is_ready()) if (ipa3_ctx == NULL) 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"); Loading @@ -4188,9 +4187,8 @@ void ipa3_proxy_clk_unvote(void) */ void ipa3_proxy_clk_vote(void) { if (!ipa3_is_ready()) if (ipa3_ctx == NULL) return; mutex_lock(&ipa3_ctx->q6_proxy_clk_vote_mutex); if (!ipa3_ctx->q6_proxy_clk_vote_valid || (ipa3_ctx->q6_proxy_clk_vote_cnt > 0)) { Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +21 −7 Original line number Diff line number Diff line Loading @@ -4394,8 +4394,12 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, /* Prevent consequent calls from trying to load the FW again. */ if (ipa3_ctx->ipa_initialization_complete) return 0; IPADBG("active clients = %d\n", atomic_read(&ipa3_ctx->ipa3_active_clients.cnt)); /* move proxy vote for modem on ipa3_post_init */ IPA_ACTIVE_CLIENTS_INC_SPECIAL("PROXY_CLK_VOTE"); if (ipa3_ctx->ipa_hw_type != IPA_HW_v4_0) ipa3_proxy_clk_vote(); /* * indication whether working in MHI config or non MHI config is given Loading Loading @@ -4532,9 +4536,6 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, ipa3_register_panic_hdlr(); ipa3_ctx->q6_proxy_clk_vote_valid = true; ipa3_ctx->q6_proxy_clk_vote_cnt++; mutex_lock(&ipa3_ctx->lock); ipa3_ctx->ipa_initialization_complete = true; mutex_unlock(&ipa3_ctx->lock); Loading @@ -4551,6 +4552,7 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p, gsi_deregister_device(ipa3_ctx->gsi_dev_hdl, false); fail_register_device: ipa3_destroy_flt_tbl_idrs(); ipa3_proxy_clk_unvote(); return result; } Loading Loading @@ -4860,6 +4862,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, int result = 0; int i; struct ipa3_rt_tbl_set *rset; struct ipa_active_client_logging_info log_info; IPADBG("IPA Driver initialization started\n"); Loading Loading @@ -5050,7 +5053,13 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, } mutex_init(&ipa3_ctx->ipa3_active_clients.mutex); /* move proxy vote for modem to ipa3_post_init() */ IPA_ACTIVE_CLIENTS_PREP_SPECIAL(log_info, "PROXY_CLK_VOTE"); ipa3_active_clients_log_inc(&log_info, false); ipa3_ctx->q6_proxy_clk_vote_valid = true; ipa3_ctx->q6_proxy_clk_vote_cnt = 1; /*Updating the proxy vote cnt 1 */ atomic_set(&ipa3_ctx->ipa3_active_clients.cnt, 1); /* Create workqueues for power management */ Loading Loading @@ -5181,7 +5190,6 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, mutex_init(&ipa3_ctx->lock); mutex_init(&ipa3_ctx->q6_proxy_clk_vote_mutex); mutex_init(&ipa3_ctx->ipa_cne_evt_lock); ipa3_ctx->q6_proxy_clk_vote_cnt = 0; idr_init(&ipa3_ctx->ipa_idr); spin_lock_init(&ipa3_ctx->idr_lock); Loading Loading @@ -5296,8 +5304,14 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, IPADBG("ipa cdev added successful. major:%d minor:%d\n", MAJOR(ipa3_ctx->dev_num), MINOR(ipa3_ctx->dev_num)); /* * for IPA 4.0 offline charge is not needed and we need to prevent * power collapse until IPA uC is loaded. */ /* proxy vote for modem is added in ipa3_post_init() phase */ IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); if (ipa3_ctx->ipa_hw_type != IPA_HW_v4_0) ipa3_proxy_clk_unvote(); return 0; fail_cdev_add: Loading
drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +2 −4 Original line number Diff line number Diff line Loading @@ -4168,9 +4168,8 @@ bool ipa3_is_client_handle_valid(u32 clnt_hdl) */ void ipa3_proxy_clk_unvote(void) { if (!ipa3_is_ready()) if (ipa3_ctx == NULL) 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"); Loading @@ -4188,9 +4187,8 @@ void ipa3_proxy_clk_unvote(void) */ void ipa3_proxy_clk_vote(void) { if (!ipa3_is_ready()) if (ipa3_ctx == NULL) return; mutex_lock(&ipa3_ctx->q6_proxy_clk_vote_mutex); if (!ipa3_ctx->q6_proxy_clk_vote_valid || (ipa3_ctx->q6_proxy_clk_vote_cnt > 0)) { Loading