diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/1093-drm-amd-dal-S3-Move-vblank_off-to-before-CRTCs-are-d.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/1093-drm-amd-dal-S3-Move-vblank_off-to-before-CRTCs-are-d.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/1093-drm-amd-dal-S3-Move-vblank_off-to-before-CRTCs-are-d.patch b/common/recipes-kernel/linux/files/1093-drm-amd-dal-S3-Move-vblank_off-to-before-CRTCs-are-d.patch new file mode 100644 index 00000000..bea8b8df --- /dev/null +++ b/common/recipes-kernel/linux/files/1093-drm-amd-dal-S3-Move-vblank_off-to-before-CRTCs-are-d.patch @@ -0,0 +1,103 @@ +From d4c8e1052e2944e63bb3855165fbbc1645a2433a Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Date: Wed, 11 May 2016 16:13:06 -0400 +Subject: [PATCH 1093/1110] drm/amd/dal: S3 Move vblank_off to before CRTCs are + disabled. + +Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Acked-by: Jordan Lazare <Jordan.Lazare@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 20 ++++++++++++++++++-- + drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_irq.c | 15 --------------- + 2 files changed, 18 insertions(+), 17 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +index 839ec13..6a002df 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +@@ -461,16 +461,32 @@ static int dm_suspend(void *handle) + struct amdgpu_device *adev = handle; + struct amdgpu_display_manager *dm = &adev->dm; + int ret = 0; ++ struct drm_crtc *crtc; + + s3_handle_mst(adev->ddev, true); + ++ /* flash all pending vblank events and turn interrupt off ++ * before disabling CRTCs. They will be enabled back in ++ * dm_display_resume ++ */ ++ drm_modeset_lock_all(adev->ddev); ++ drm_for_each_crtc(crtc, adev->ddev) { ++ struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); ++ if (acrtc->target) { ++ drm_crtc_vblank_off(crtc); ++ dc_target_release(acrtc->target); ++ acrtc->target = NULL; ++ } ++ } ++ drm_modeset_unlock_all(adev->ddev); ++ ++ amdgpu_dm_irq_suspend(adev); ++ + dc_set_power_state( + dm->dc, + DC_ACPI_CM_POWER_STATE_D3, + DC_VIDEO_POWER_SUSPEND); + +- amdgpu_dm_irq_suspend(adev); +- + return ret; + } + +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 b0ad20e..78ffe88 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,7 +499,6 @@ 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,13 +518,6 @@ 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; + } + +@@ -557,7 +549,6 @@ 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); + +@@ -572,12 +563,6 @@ 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 + |