aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch
new file mode 100644
index 00000000..5338f742
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1300-drm-amd-display-Reset-planes-that-were-disabled-in-i.patch
@@ -0,0 +1,69 @@
+From 83413cc05dda5575cf78de13584c4f23a0b900a5 Mon Sep 17 00:00:00 2001
+From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Date: Wed, 6 Feb 2019 10:18:17 -0500
+Subject: [PATCH 1300/2940] drm/amd/display: Reset planes that were disabled in
+ init_pipes
+
+[Why]
+Seamless boot tries to reuse planes that were enabled for the first
+commit applied.
+
+In the case where Raven is booting with two monitors connected and the
+first commit contains two streams the screen corruption would occur
+because the second stream was trying to re-use a tg and plane that
+weren't previously enabled.
+
+The state on the first commit looks something like the following:
+
+TG0: enabled=1
+TG1: enabled=0
+TG2: enabled=0
+TG3: enabled=0
+
+New state: pipe=0, stream=0, plane=0, new_tg=0
+New state: pipe=1, stream=1, plane=1, new_tg=1
+New state: pipe=2, stream=NULL, plane=NULL, new_tg=NULL
+New state: pipe=3, stream=NULL, plane=NULL, new_tg=NULL
+
+Only one plane/tg is setup before we enter accelerated mode so
+we really want to disabling everything but that first plane.
+
+[How]
+
+Check if the stream is not NULL and if the tg is enabled before
+deciding whether to skip the plane disable.
+
+Also ensure we're also disabling on the current state's pipe_ctx so
+we don't overwrite the fields in the new pending state.
+
+Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+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 5b8d44b8bb7d..f8d0583d376b 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
+@@ -1026,9 +1026,14 @@ static void dcn10_init_pipes(struct dc *dc, struct dc_state *context)
+ * to non-preferred front end. If pipe_ctx->stream is not NULL,
+ * we will use the pipe, so don't disable
+ */
+- if (pipe_ctx->stream != NULL)
++ if (pipe_ctx->stream != NULL &&
++ pipe_ctx->stream_res.tg->funcs->is_tg_enabled(
++ pipe_ctx->stream_res.tg))
+ continue;
+
++ /* Disable on the current state so the new one isn't cleared. */
++ pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
++
+ dpp->funcs->dpp_reset(dpp);
+
+ pipe_ctx->stream_res.tg = tg;
+--
+2.17.1
+