aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch
new file mode 100644
index 00000000..f91991a3
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4341-drm-amd-display-Unify-dm-resume-sequence-into-a-sing.patch
@@ -0,0 +1,113 @@
+From b5fe5a0f9c8b1dd862e97ca0ded232b2ecbbc5fa Mon Sep 17 00:00:00 2001
+From: Mikita Lipski <mikita.lipski@amd.com>
+Date: Sat, 3 Feb 2018 14:18:07 -0500
+Subject: [PATCH 4341/5725] drm/amd/display: Unify dm resume sequence into a
+ single call
+
+Merge amdgpu_dm_display_resume function into dm_resume,
+as it is not called anywhere else anymore.
+
+Initially the call was broken down into 2 functions for cursor corruption
+issue. Now the issue is not visible, hence the dm_resume will perform
+dm_display_resume in it.
+
+Signed-off-by: Mikita Lipski <mikita.lipski@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+
+Conflicts:
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+
+Change-Id: Ic1ab06cf9fda834095a8d6952c3c5801de8d67ee
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 31 ++++++++---------------
+ 1 file changed, 11 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index bd05986..f13b0c0 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -642,18 +642,6 @@ amdgpu_dm_find_first_crtc_matching_connector(struct drm_atomic_state *state,
+ static int dm_resume(void *handle)
+ {
+ struct amdgpu_device *adev = handle;
+- struct amdgpu_display_manager *dm = &adev->dm;
+- int ret = 0;
+-
+- /* power on hardware */
+- dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
+-
+- ret = amdgpu_dm_display_resume(adev);
+- return ret;
+-}
+-
+-int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+-{
+ struct drm_device *ddev = adev->ddev;
+ struct amdgpu_display_manager *dm = &adev->dm;
+ struct amdgpu_dm_connector *aconnector;
+@@ -664,10 +652,12 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ struct drm_plane *plane;
+ struct drm_plane_state *new_plane_state;
+ struct dm_plane_state *dm_new_plane_state;
+-
+- int ret = 0;
++ int ret;
+ int i;
+
++ /* power on hardware */
++ dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
++
+ /* program HPD filter */
+ dc_resume(dm->dc);
+
+@@ -681,8 +671,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ amdgpu_dm_irq_resume_early(adev);
+
+ /* Do detection*/
+- list_for_each_entry(connector,
+- &ddev->mode_config.connector_list, head) {
++ list_for_each_entry(connector, &ddev->mode_config.connector_list, head) {
+ aconnector = to_amdgpu_dm_connector(connector);
+
+ /*
+@@ -704,7 +693,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ }
+
+ /* Force mode set in atomic comit */
+- for_each_new_crtc_in_state(adev->dm.cached_state, crtc, new_crtc_state, i)
++ for_each_new_crtc_in_state(dm->cached_state, crtc, new_crtc_state, i)
+ new_crtc_state->active_changed = true;
+
+ /*
+@@ -712,7 +701,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ * them here, since they were duplicated as part of the suspend
+ * procedure.
+ */
+- for_each_new_crtc_in_state(adev->dm.cached_state, crtc, new_crtc_state, i) {
++ for_each_new_crtc_in_state(dm->cached_state, crtc, new_crtc_state, i) {
+ dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
+ if (dm_new_crtc_state->stream) {
+ WARN_ON(kref_read(&dm_new_crtc_state->stream->refcount) > 1);
+@@ -721,7 +710,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ }
+ }
+
+- for_each_new_plane_in_state(adev->dm.cached_state, plane, new_plane_state, i) {
++ for_each_new_plane_in_state(dm->cached_state, plane, new_plane_state, i) {
+ dm_new_plane_state = to_dm_plane_state(new_plane_state);
+ if (dm_new_plane_state->dc_state) {
+ WARN_ON(kref_read(&dm_new_plane_state->dc_state->refcount) > 1);
+@@ -730,7 +719,9 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)
+ }
+ }
+
+- ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state);
++ ret = drm_atomic_helper_resume(ddev, dm->cached_state);
++
++ dm->cached_state = NULL;
+
+ amdgpu_dm_irq_resume_late(adev);
+
+--
+2.7.4
+