diff options
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.patch | 113 |
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 + |