aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1215-drm-amd-display-Disconnect-mpcc-when-changing-tg.patch
diff options
context:
space:
mode:
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.patch68
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
+