From ad284c7b5f4f7b8c11c4a606db671eeb717711d3 Mon Sep 17 00:00:00 2001 From: Ashok Vuyyuru Date: Mon, 5 Apr 2021 19:38:58 +0530 Subject: [PATCH] msm: ipa3: configure the HOLB timer value to zero in SSR scenario configure the HOLB timer value to zero in SSR scenario to avoid USB stall issue. Change-Id: I23f91c4a2bff2cb3b330d4354e81acc9460d1936 Signed-off-by: Ashok Vuyyuru --- drivers/platform/msm/ipa/ipa_v3/ipa.c | 10 +++++++++- drivers/platform/msm/ipa/ipa_v3/ipa_client.c | 4 ++-- drivers/platform/msm/ipa/ipa_v3/ipa_i.h | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) 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,