aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch
new file mode 100644
index 00000000..d8538e71
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4342-drm-amd-display-Disallow-enabling-CRTC-without-prima.patch
@@ -0,0 +1,77 @@
+From eecb5859a6d33b1333b874f31c3f5f3792bac0a2 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Mon, 16 Apr 2018 17:28:11 -0400
+Subject: [PATCH 4342/5725] drm/amd/display: Disallow enabling CRTC without
+ primary plane with FB
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The below commit
+
+ "drm/atomic: Try to preserve the crtc enabled state in drm_atomic_remove_fb, v2"
+
+introduces a slight behavioral change to rmfb. Instead of disabling a crtc
+when the primary plane is disabled, it now preserves it.
+
+Since DC is currently not equipped to handle this we need to fail such
+a commit, otherwise we might see a corrupted screen.
+
+This is based on Shirish's previous approach but avoids adding all
+planes to the new atomic state which leads to a full update in DC for
+any commit, and is not what we intend.
+
+Theoretically DM should be able to deal with states with fully populated planes,
+even for simple updates, such as cursor updates. This should still be
+addressed in the future.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Tested-by: Michel Dänzer <michel.daenzer@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Cc: stable@vger.kernel.org
+
+Conflicts:
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+
+Change-Id: Ie77fd8f58b8058751278393e7849fc90f22209e0
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+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 f13b0c0..508424f 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -4795,6 +4795,7 @@ static int dm_update_crtcs_state(struct amdgpu_display_manager *dm,
+ struct amdgpu_dm_connector *aconnector = NULL;
+ struct drm_connector_state *new_con_state = NULL;
+ struct dm_connector_state *dm_conn_state = NULL;
++ struct drm_plane_state *new_plane_state = NULL;
+
+ new_stream = NULL;
+
+@@ -4802,6 +4803,12 @@ static int dm_update_crtcs_state(struct amdgpu_display_manager *dm,
+ dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
+ acrtc = to_amdgpu_crtc(crtc);
+
++ new_plane_state = drm_atomic_get_new_plane_state(state, new_crtc_state->crtc->primary);
++
++ if (new_crtc_state->enable && new_plane_state && !new_plane_state->fb) {
++ ret = -EINVAL;
++ goto fail;
++ }
+ aconnector = amdgpu_dm_find_first_crtc_matching_connector(
+ state, crtc);
+
+@@ -5006,7 +5013,7 @@ static int dm_update_planes_state(struct dc *dc,
+ if (!dm_old_crtc_state->stream)
+ continue;
+
+- DRM_DEBUG_DRIVER("Disabling DRM plane: %d on DRM crtc %d\n",
++ DRM_DEBUG_ATOMIC("Disabling DRM plane: %d on DRM crtc %d\n",
+ plane->base.id, old_plane_crtc->base.id);
+
+ if (!dc_remove_plane_from_context(
+--
+2.7.4
+