diff --git a/msm/sde_rsc.c b/msm/sde_rsc.c index 7eeb36ecb4..ed380bcbf9 100644 --- a/msm/sde_rsc.c +++ b/msm/sde_rsc.c @@ -37,10 +37,11 @@ /** * rsc_min_threshold will be set to MIN_THRESHOLD_OVERHEAD_TIME which * takes into account back off time + overhead from RSC/RSC_WRAPPER. The - * overhead buffer time is required to be greater than 14. For measure, - * this value assumes 18. + * overhead buffer time is required to be greater than 14. Program it + * with a higher value (3.3 ms), so it has sufficient time to complete + * the sequence in rare cases. */ -#define MIN_THRESHOLD_OVERHEAD_TIME 18 +#define MIN_THRESHOLD_OVERHEAD_TIME 64 #define DEFAULT_PANEL_FPS 60 #define DEFAULT_PANEL_JITTER_NUMERATOR 2 diff --git a/msm/sde_rsc_hw.c b/msm/sde_rsc_hw.c index e2c3e9eef8..c624c868ee 100644 --- a/msm/sde_rsc_hw.c +++ b/msm/sde_rsc_hw.c @@ -872,14 +872,19 @@ int rsc_hw_tcs_wait(struct sde_rsc_priv *rsc) } /* check for sequence running status before exiting */ - for (count = MAX_CHECK_LOOPS; count > 0; count--) { + for (count = (MAX_CHECK_LOOPS / 4); count > 0; count--) { seq_status = dss_reg_r(&rsc->wrapper_io, SDE_RSCC_WRAPPER_CTRL, rsc->debug_mode) & BIT(1); if (!seq_status) { rc = 0; break; } - usleep_range(1, 2); + + dss_reg_w(&rsc->wrapper_io, SDE_RSCC_WRAPPER_CTRL, + 0x1, rsc->debug_mode); + usleep_range(3, 4); + dss_reg_w(&rsc->wrapper_io, SDE_RSCC_WRAPPER_CTRL, + 0x0, rsc->debug_mode); } return rc;