From f78f572d16aa121f45fa73e87154d238b928a134 Mon Sep 17 00:00:00 2001 From: Andrey Grodzovsky Date: Fri, 6 May 2016 18:53:46 -0400 Subject: [PATCH 1092/1110] drm/amd/dal: Properly handle vblank on S3 suspend and resume. The vblank event list should be cleaned and all pending events sent when going to sleep so that on resume the vblank counter can be properly restored. Change-Id: I5592b47bbe6af778f961d8c03f5f2a6448644c93 Signed-off-by: Andrey Grodzovsky Acked-by: Jordan Lazare Signed-off-by: Kalyan Alle --- drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c index f6d7920..b0ad20e 100644 --- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c +++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c @@ -499,6 +499,7 @@ int amdgpu_dm_irq_suspend( struct list_head *hnd_list_h; struct list_head *hnd_list_l; unsigned long irq_table_flags; + struct drm_crtc *crtc; DM_IRQ_TABLE_LOCK(adev, irq_table_flags); @@ -519,6 +520,12 @@ int amdgpu_dm_irq_suspend( DM_IRQ_TABLE_UNLOCK(adev, irq_table_flags); + + drm_modeset_lock_all(adev->ddev); + drm_for_each_crtc(crtc, adev->ddev) + drm_crtc_vblank_off(crtc); + drm_modeset_unlock_all(adev->ddev); + return 0; } @@ -550,6 +557,7 @@ int amdgpu_dm_irq_resume(struct amdgpu_device *adev) int src; struct list_head *hnd_list_h, *hnd_list_l; unsigned long irq_table_flags; + struct drm_crtc *crtc; DM_IRQ_TABLE_LOCK(adev, irq_table_flags); @@ -565,6 +573,11 @@ int amdgpu_dm_irq_resume(struct amdgpu_device *adev) DM_IRQ_TABLE_UNLOCK(adev, irq_table_flags); + drm_modeset_lock_all(adev->ddev); + drm_for_each_crtc(crtc, adev->ddev) + drm_crtc_vblank_on(crtc); + drm_modeset_unlock_all(adev->ddev); + return 0; } -- 2.7.4