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