Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +21 −9 Original line number Original line Diff line number Diff line Loading @@ -1774,9 +1774,6 @@ static int ipa3_q6_set_ex_path_dis_agg(void) */ */ int ipa3_q6_cleanup(void) int ipa3_q6_cleanup(void) { { int client_idx; int res; /* If uC has notified the APPS upon a ZIP engine error, /* If uC has notified the APPS upon a ZIP engine error, * APPS need to assert (This is a non recoverable error). * APPS need to assert (This is a non recoverable error). */ */ Loading @@ -1802,10 +1799,28 @@ int ipa3_q6_cleanup(void) BUG(); BUG(); } } ipa3_ctx->q6_proxy_clk_vote_valid = true; return 0; } /** * ipa3_q6_pipe_reset() - A cleanup for the Q6 pipes * in IPA HW. This is performed in case of SSR. * * Return codes: * 0: success * This is a mandatory procedure, in case one of the steps fails, the * AP needs to restart. */ int ipa3_q6_pipe_reset(void) { int client_idx; int res; /* /* * Q6 relies on the AP to reset all Q6 IPA pipes. * Q6 relies on the AP to reset all Q6 IPA pipes. * In case the uC is not loaded, or upon any failure in the pipe reset * In case the uC is not loaded, or upon any failure in the * sequence, we have to assert. * pipe reset sequence, we have to assert. */ */ if (!ipa3_ctx->uc_ctx.uc_loaded) { if (!ipa3_ctx->uc_ctx.uc_loaded) { IPAERR("uC is not loaded, can't reset Q6 pipes\n"); IPAERR("uC is not loaded, can't reset Q6 pipes\n"); Loading @@ -1819,9 +1834,6 @@ int ipa3_q6_cleanup(void) if (res) if (res) BUG(); BUG(); } } ipa3_ctx->q6_proxy_clk_vote_valid = true; return 0; return 0; } } Loading drivers/platform/msm/ipa/ipa_v3/ipa_i.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -2118,6 +2118,7 @@ int ipa3_tag_process(struct ipa3_desc *desc, int num_descs, unsigned long timeout); unsigned long timeout); int ipa3_q6_cleanup(void); int ipa3_q6_cleanup(void); int ipa3_q6_pipe_reset(void); int ipa3_init_q6_smem(void); int ipa3_init_q6_smem(void); int ipa3_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect, int ipa3_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect, Loading drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +7 −0 Original line number Original line Diff line number Diff line Loading @@ -2155,6 +2155,13 @@ static int ipa3_ssr_notifier_cb(struct notifier_block *this, pr_info("IPA BEFORE_SHUTDOWN handling is complete\n"); pr_info("IPA BEFORE_SHUTDOWN handling is complete\n"); return NOTIFY_DONE; return NOTIFY_DONE; } } if (SUBSYS_AFTER_SHUTDOWN == code) { pr_info("IPA received MPSS AFTER_SHUTDOWN\n"); if (atomic_read(&is_ssr)) ipa3_q6_pipe_reset(); pr_info("IPA AFTER_SHUTDOWN handling is complete\n"); return NOTIFY_DONE; } if (SUBSYS_AFTER_POWERUP == code) { if (SUBSYS_AFTER_POWERUP == code) { pr_info("IPA received MPSS AFTER_POWERUP\n"); pr_info("IPA received MPSS AFTER_POWERUP\n"); if (!atomic_read(&is_initialized) if (!atomic_read(&is_initialized) Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +21 −9 Original line number Original line Diff line number Diff line Loading @@ -1774,9 +1774,6 @@ static int ipa3_q6_set_ex_path_dis_agg(void) */ */ int ipa3_q6_cleanup(void) int ipa3_q6_cleanup(void) { { int client_idx; int res; /* If uC has notified the APPS upon a ZIP engine error, /* If uC has notified the APPS upon a ZIP engine error, * APPS need to assert (This is a non recoverable error). * APPS need to assert (This is a non recoverable error). */ */ Loading @@ -1802,10 +1799,28 @@ int ipa3_q6_cleanup(void) BUG(); BUG(); } } ipa3_ctx->q6_proxy_clk_vote_valid = true; return 0; } /** * ipa3_q6_pipe_reset() - A cleanup for the Q6 pipes * in IPA HW. This is performed in case of SSR. * * Return codes: * 0: success * This is a mandatory procedure, in case one of the steps fails, the * AP needs to restart. */ int ipa3_q6_pipe_reset(void) { int client_idx; int res; /* /* * Q6 relies on the AP to reset all Q6 IPA pipes. * Q6 relies on the AP to reset all Q6 IPA pipes. * In case the uC is not loaded, or upon any failure in the pipe reset * In case the uC is not loaded, or upon any failure in the * sequence, we have to assert. * pipe reset sequence, we have to assert. */ */ if (!ipa3_ctx->uc_ctx.uc_loaded) { if (!ipa3_ctx->uc_ctx.uc_loaded) { IPAERR("uC is not loaded, can't reset Q6 pipes\n"); IPAERR("uC is not loaded, can't reset Q6 pipes\n"); Loading @@ -1819,9 +1834,6 @@ int ipa3_q6_cleanup(void) if (res) if (res) BUG(); BUG(); } } ipa3_ctx->q6_proxy_clk_vote_valid = true; return 0; return 0; } } Loading
drivers/platform/msm/ipa/ipa_v3/ipa_i.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -2118,6 +2118,7 @@ int ipa3_tag_process(struct ipa3_desc *desc, int num_descs, unsigned long timeout); unsigned long timeout); int ipa3_q6_cleanup(void); int ipa3_q6_cleanup(void); int ipa3_q6_pipe_reset(void); int ipa3_init_q6_smem(void); int ipa3_init_q6_smem(void); int ipa3_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect, int ipa3_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect, Loading
drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +7 −0 Original line number Original line Diff line number Diff line Loading @@ -2155,6 +2155,13 @@ static int ipa3_ssr_notifier_cb(struct notifier_block *this, pr_info("IPA BEFORE_SHUTDOWN handling is complete\n"); pr_info("IPA BEFORE_SHUTDOWN handling is complete\n"); return NOTIFY_DONE; return NOTIFY_DONE; } } if (SUBSYS_AFTER_SHUTDOWN == code) { pr_info("IPA received MPSS AFTER_SHUTDOWN\n"); if (atomic_read(&is_ssr)) ipa3_q6_pipe_reset(); pr_info("IPA AFTER_SHUTDOWN handling is complete\n"); return NOTIFY_DONE; } if (SUBSYS_AFTER_POWERUP == code) { if (SUBSYS_AFTER_POWERUP == code) { pr_info("IPA received MPSS AFTER_POWERUP\n"); pr_info("IPA received MPSS AFTER_POWERUP\n"); if (!atomic_read(&is_initialized) if (!atomic_read(&is_initialized) Loading