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