diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 3b73775238..e5097a1c73 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -4595,11 +4595,18 @@ static void sde_crtc_enable(struct drm_crtc *crtc, int ret, i; struct sde_crtc_state *cstate; struct msm_display_mode *msm_mode; + struct sde_kms *kms; if (!crtc || !crtc->dev || !crtc->dev->dev_private) { SDE_ERROR("invalid crtc\n"); return; } + kms = _sde_crtc_get_kms(crtc); + if (!kms || !kms->catalog) { + SDE_ERROR("invalid kms handle\n"); + return; + } + priv = crtc->dev->dev_private; cstate = to_sde_crtc_state(crtc->state); @@ -4620,7 +4627,8 @@ static void sde_crtc_enable(struct drm_crtc *crtc, /* cache the encoder mask now for vblank work */ sde_crtc->cached_encoder_mask = crtc->state->encoder_mask; /* max possible vsync_cnt(atomic_t) soft counter */ - drm_crtc_set_max_vblank_count(crtc, INT_MAX); + if (kms->catalog->has_precise_vsync_ts) + drm_crtc_set_max_vblank_count(crtc, INT_MAX); drm_crtc_vblank_on(crtc); }