diff --git a/msm/msm_drv.c b/msm/msm_drv.c index d73c84cf75..5cb20c03a3 100644 --- a/msm/msm_drv.c +++ b/msm/msm_drv.c @@ -699,6 +699,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv) struct msm_kms *kms = NULL; int ret; struct sched_param param = { 0 }; + struct drm_crtc *crtc; ddev = drm_dev_alloc(drv, dev); if (!ddev) { @@ -770,6 +771,9 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv) goto fail; } + drm_for_each_crtc(crtc, ddev) + drm_crtc_vblank_reset(crtc); + if (kms) { pm_runtime_get_sync(dev); ret = drm_irq_install(ddev, platform_get_irq(pdev, 0)); diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index df40f2e738..04c9408186 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -3978,6 +3978,8 @@ static void sde_crtc_disable(struct drm_crtc *crtc) SDE_DEBUG("crtc%d\n", crtc->base.id); + drm_crtc_vblank_off(crtc); + if (sde_kms_is_suspend_state(crtc->dev)) _sde_crtc_set_suspend(crtc, true); @@ -4116,6 +4118,8 @@ static void sde_crtc_enable(struct drm_crtc *crtc, SDE_EVT32_VERBOSE(DRMID(crtc)); sde_crtc = to_sde_crtc(crtc); + drm_crtc_vblank_on(crtc); + mutex_lock(&sde_crtc->crtc_lock); SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend, sde_crtc->vblank_requested);