diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch new file mode 100644 index 00000000..609cd5d4 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch @@ -0,0 +1,68 @@ +From 44207ff272452231897d128acc39e984af33185c Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Wed, 23 Jan 2019 13:50:17 -0500 +Subject: [PATCH 1215/2940] drm/amd/display: Disconnect mpcc when changing tg + +[Why] +This fixes an mpc programming error for the following sequence of +atomic commits when pipe split is enabled: + +Commit 1: CRTC0 (plane 4, plane 3) + +Pipe 0: old_plane_state = A0, new_plane_state = A1, new_tg = T0 +Pipe 1: old_plane_state = B0, new_plane_state = B1, new_tg = T0 +Pipe 2: old_plane_state = A0, new_plane_state = A1, new_tg = T0 +Pipe 3: old_plane_state = B0, new_plane_state = B1, new_tg = T0 + +Commit 2: CRTC0 (plane 3), CRTC1 (plane 2) + +Pipe 0: old_plane_state = A1, new_plane_state = A2, new_tg = T0 +Pipe 1: old_plane_state = B1, new_plane_state = B2, new_tg = T1 +Pipe 2: old_plane_state = A1, new_plane_state = NULL, new_tg = NULL +Pipe 3: old_plane_state = B1, new_plane_state = NULL, new_tg = NULL + +In the second commit the assertion for mpcc in use is hit because +mpcc disconnect never occurs for pipe 1. This is because the stream +changes for pipe 1 and the opp_list is empty. + +This sequence occurs when running the +"igt@kms_plane_multiple@atomic-pipe-A-tiling-none" test with two +displays connected. + +[How] +Expand the reset condition to include: + +"old_pipe_ctx->stream_res.tg != new_pipe_ctx->stream_res.tg" + +...but only when the plane state is non-NULL for both old and new. + +Change-Id: Ida230c0e5248e8d74aaa72561afa42f4206e5c55 +Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +--- + drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +index a4991be49722..2ec8badd86c1 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +@@ -2333,9 +2333,10 @@ static void dcn10_apply_ctx_for_surface( + } + } + +- if (!pipe_ctx->plane_state && +- old_pipe_ctx->plane_state && +- old_pipe_ctx->stream_res.tg == tg) { ++ if ((!pipe_ctx->plane_state || ++ pipe_ctx->stream_res.tg != old_pipe_ctx->stream_res.tg) && ++ old_pipe_ctx->plane_state && ++ old_pipe_ctx->stream_res.tg == tg) { + + dc->hwss.plane_atomic_disconnect(dc, old_pipe_ctx); + removed_pipe[i] = true; +-- +2.17.1 + |