aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1092-drm-amd-dal-Properly-handle-vblank-on-S3-suspend-and.patch
blob: 0fed1bb9f95e3006de2a4b2c3352de1817457796 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
From f78f572d16aa121f45fa73e87154d238b928a134 Mon Sep 17 00:00:00 2001
From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
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 <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_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