diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c index 40aab9eee4c4..ce8a234e16f5 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c @@ -4032,12 +4032,17 @@ void ipa3_q6_pre_shutdown_cleanup(void) ipa3_q6_pipe_delay(true); ipa3_q6_avoid_holb(); + + if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_11) + ipa3_set_reset_client_cons_pipe_sus_holb(true, 0, + IPA_CLIENT_USB_CONS); + if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_0) { prod = true; ipa3_halt_q6_gsi_channels(prod); } if (ipa3_ctx->ipa_config_is_mhi) - ipa3_set_reset_client_cons_pipe_sus_holb(true, + ipa3_set_reset_client_cons_pipe_sus_holb(true, 0, IPA_CLIENT_MHI_CONS); if (ipa3_q6_clean_q6_tables()) { IPAERR("Failed to clean Q6 tables\n"); @@ -4095,6 +4100,9 @@ void ipa3_q6_post_shutdown_cleanup(void) /* Handle the issue where SUSPEND was removed for some reason */ ipa3_q6_avoid_holb(); + if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_11) + ipa3_set_reset_client_cons_pipe_sus_holb(true, + IPA_HOLB_TMR_VAL_4_5, IPA_CLIENT_USB_CONS); /* halt both prod and cons channels starting at IPAv4 */ if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_0) { IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c index 1c147721f67e..9c92fd487e6e 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c @@ -1449,7 +1449,7 @@ int ipa3_start_stop_client_prod_gsi_chnl(enum ipa_client_type client, client_lock_unlock_cb(client, false); return result; } -int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, +int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, u32 tmr_val, enum ipa_client_type client) { int pipe_idx; @@ -1461,7 +1461,7 @@ int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, memset(&ep_holb, 0, sizeof(ep_holb)); ep_suspend.ipa_ep_suspend = set_reset; - ep_holb.tmr_val = 0; + ep_holb.tmr_val = tmr_val; ep_holb.en = set_reset; if (IPA_CLIENT_IS_PROD(client)) { diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index a8b1094a8a1f..4e18b621333d 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -2492,7 +2492,7 @@ int ipa3_start_stop_client_prod_gsi_chnl(enum ipa_client_type client, void ipa3_client_prod_post_shutdown_cleanup(void); -int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, +int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, u32 tmr_val, enum ipa_client_type client); int ipa3_xdci_suspend(u32 ul_clnt_hdl, u32 dl_clnt_hdl,