diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 149c93980b..64c143d181 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -4748,9 +4748,10 @@ static int _sde_encoder_prepare_for_kickoff_processing(struct drm_encoder *drm_e void _sde_encoder_delay_kickoff_processing(struct sde_encoder_virt *sde_enc) { ktime_t current_ts, ept_ts; - u32 avr_step_fps, min_fps = 0, qsync_mode; + u32 avr_step_fps, min_fps = 0, qsync_mode, fps; u64 timeout_us = 0, ept; bool is_cmd_mode; + char atrace_buf[64]; struct drm_connector *drm_conn; struct msm_mode_info *info = &sde_enc->mode_info; struct sde_kms *sde_kms = sde_encoder_get_kms(&sde_enc->base); @@ -4768,6 +4769,9 @@ void _sde_encoder_delay_kickoff_processing(struct sde_encoder_virt *sde_enc) _sde_encoder_get_qsync_fps_callback(&sde_enc->base, &min_fps, drm_conn->state); /* use min qsync fps, if feature is enabled; otherwise min default fps */ min_fps = min_fps ? min_fps : DEFAULT_MIN_FPS; + fps = sde_encoder_get_fps(&sde_enc->base); + min_fps = min(min_fps, fps); + is_cmd_mode = sde_encoder_check_curr_mode(&sde_enc->base, MSM_DISPLAY_CMD_MODE); /* for cmd mode with qsync - EPT_FPS will be used to delay the processing */ @@ -4782,7 +4786,7 @@ void _sde_encoder_delay_kickoff_processing(struct sde_encoder_virt *sde_enc) current_ts = ktime_get_ns(); /* ept is in ns and avr_step is mulitple of refresh rate */ ept_ts = avr_step_fps ? ept - DIV_ROUND_UP(NSEC_PER_SEC, avr_step_fps) + NSEC_PER_MSEC - : ept - NSEC_PER_MSEC; + : ept - (2 * NSEC_PER_MSEC); /* ept time already elapsed */ if (ept_ts <= current_ts) { @@ -4799,9 +4803,10 @@ void _sde_encoder_delay_kickoff_processing(struct sde_encoder_virt *sde_enc) return; } - SDE_ATRACE_BEGIN("schedule_timeout"); + snprintf(atrace_buf, sizeof(atrace_buf), "schedule_timeout_%llu", ept); + SDE_ATRACE_BEGIN(atrace_buf); usleep_range(timeout_us, timeout_us + 10); - SDE_ATRACE_END("schedule_timeout"); + SDE_ATRACE_END(atrace_buf); SDE_EVT32(DRMID(&sde_enc->base), qsync_mode, avr_step_fps, min_fps, ktime_to_us(current_ts), ktime_to_us(ept_ts), timeout_us);