diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c index 74075038f708..d831379ea229 100644 --- a/drivers/platform/msm/gsi/gsi.c +++ b/drivers/platform/msm/gsi/gsi.c @@ -595,6 +595,11 @@ static void gsi_process_evt_re(struct gsi_evt_ctx *ctx, struct gsi_xfer_compl_evt *evt; struct gsi_chan_ctx *ch_ctx; + /* RMB before reading event ring shared b/w IPA h/w & driver + * ordering between IPA h/w store and CPU load + */ + if (callback) + dma_rmb(); evt = (struct gsi_xfer_compl_evt *)(ctx->ring.base_va + ctx->ring.rp_local - ctx->ring.base); gsi_process_chan(evt, notify, callback); diff --git a/drivers/platform/msm/ipa/ipa_common_i.h b/drivers/platform/msm/ipa/ipa_common_i.h index 24b5260b4efc..ea75edf28dd8 100644 --- a/drivers/platform/msm/ipa/ipa_common_i.h +++ b/drivers/platform/msm/ipa/ipa_common_i.h @@ -145,8 +145,8 @@ do {\ #define IPA_CLIENT_IS_CONS(x) \ (x < IPA_CLIENT_MAX && (x & 0x1) == 1) -#define IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC (1000) -#define IPA_GSI_CHANNEL_STOP_SLEEP_MAX_USEC (2000) +#define IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC (3000) +#define IPA_GSI_CHANNEL_STOP_SLEEP_MAX_USEC (5000) enum ipa_active_client_log_type { EP, diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c index 4d86f9795948..86864c2647f3 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c @@ -1248,7 +1248,7 @@ static int ipa3_stop_ul_chan_with_data_drain(u32 qmi_req_id, goto exit; } /* if still stop_in_proc or not empty, activate force clear */ - if (should_force_clear) { + if (should_force_clear && IPA_CLIENT_IS_PROD(ep->client)) { result = ipa3_enable_force_clear(qmi_req_id, false, source_pipe_bitmask); if (result) {