|
@@ -4595,11 +4595,18 @@ static void sde_crtc_enable(struct drm_crtc *crtc,
|
|
int ret, i;
|
|
int ret, i;
|
|
struct sde_crtc_state *cstate;
|
|
struct sde_crtc_state *cstate;
|
|
struct msm_display_mode *msm_mode;
|
|
struct msm_display_mode *msm_mode;
|
|
|
|
+ struct sde_kms *kms;
|
|
|
|
|
|
if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
|
|
if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
|
|
SDE_ERROR("invalid crtc\n");
|
|
SDE_ERROR("invalid crtc\n");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ kms = _sde_crtc_get_kms(crtc);
|
|
|
|
+ if (!kms || !kms->catalog) {
|
|
|
|
+ SDE_ERROR("invalid kms handle\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
priv = crtc->dev->dev_private;
|
|
priv = crtc->dev->dev_private;
|
|
cstate = to_sde_crtc_state(crtc->state);
|
|
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 */
|
|
/* cache the encoder mask now for vblank work */
|
|
sde_crtc->cached_encoder_mask = crtc->state->encoder_mask;
|
|
sde_crtc->cached_encoder_mask = crtc->state->encoder_mask;
|
|
/* max possible vsync_cnt(atomic_t) soft counter */
|
|
/* 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);
|
|
drm_crtc_vblank_on(crtc);
|
|
}
|
|
}
|
|
|
|
|