aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch
new file mode 100644
index 00000000..7119f90d
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2568-drm-amd-display-add-hardware_planes_only-to-list-of-.patch
@@ -0,0 +1,96 @@
+From ec5414ee5b6780aea7ed9a0ebbb5a9e792767eed Mon Sep 17 00:00:00 2001
+From: Shirish S <shirish.s@amd.com>
+Date: Wed, 27 Sep 2017 15:15:38 +0530
+Subject: [PATCH 2568/4131] drm/amd/display: add hardware_planes_only to list
+ of affected planes
+
+For SoC's having software designed cursor plane,
+should be treated differently than hardware cursor planes.
+
+The DRM core initializes cursor plane by default with
+legacy_cursor_update set.
+
+Hence legacy_cursor_update can be use effectively
+to handle software cursor planes' update and atomicity
+functionalities.
+
+This patch uses this variable to decide in the atomic_check
+to whether add a requested plane to the list of affected planes or
+not, hence fixing the issue of co-existence of MPO, i.e,
+setting of available hardware planes like underlay and
+updation of cursor planes as well.
+
+Without this patch when underlay is set from user space,
+only blank screen with backlight is visible.
+
+Signed-off-by: Shirish S <shirish.s@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 30 ++++++++++++++++++-----
+ 1 file changed, 24 insertions(+), 6 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 534f6a7..1939bf10 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -4207,6 +4207,8 @@ static int amdgpu_dm_atomic_commit(struct drm_device *dev,
+ if (drm_atomic_crtc_needs_modeset(new_state) && old_acrtc_state->stream)
+ manage_dm_interrupts(adev, acrtc, false);
+ }
++ /* Add check here for SoC's that support hardware cursor plane, to
++ * unset legacy_cursor_update */
+
+ return drm_atomic_helper_commit(dev, state, nonblock);
+
+@@ -4901,7 +4903,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
+ struct drm_connector *connector;
+ struct drm_connector_state *conn_state;
+ struct drm_crtc *crtc;
+- struct drm_crtc_state *crtc_state;
++ struct drm_crtc_state *old_crtc_state, *crtc_state;
+
+ /*
+ * This bool will be set for true for any modeset/reset
+@@ -4910,18 +4912,34 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
+ bool lock_and_validation_needed = false;
+
+ ret = drm_atomic_helper_check_modeset(dev, state);
+-
+ if (ret) {
+ DRM_ERROR("Atomic state validation failed with error :%d !\n", ret);
+ return ret;
+ }
+
+ /*
+- * Hack: Commit needs planes right now, specifically for gamma
+- * TODO rework commit to check CRTC for gamma change
++ * legacy_cursor_update should be made false for SoC's having
++ * a dedicated hardware plane for cursor in amdgpu_dm_atomic_commit(),
++ * otherwise for software cursor plane,
++ * we should not add it to list of affected planes.
+ */
+- for_each_crtc_in_state(state, crtc, crtc_state, i) {
+- if (crtc_state->color_mgmt_changed) {
++ if (state->legacy_cursor_update) {
++ for_each_crtc_in_state(state, crtc, crtc_state, i) {
++ if (crtc_state->color_mgmt_changed) {
++ ret = drm_atomic_add_affected_planes(state, crtc);
++ if (ret)
++ goto fail;
++ }
++ }
++ } else {
++ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, crtc_state, i) {
++ if (!crtc_state->enable)
++ continue;
++
++ ret = drm_atomic_add_affected_connectors(state, crtc);
++ if (ret)
++ return ret;
++
+ ret = drm_atomic_add_affected_planes(state, crtc);
+ if (ret)
+ goto fail;
+--
+2.7.4
+