aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch114
1 files changed, 114 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch
new file mode 100644
index 00000000..31383364
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0131-drm-amd-display-blank-mechanism-for-supporting-MPO.patch
@@ -0,0 +1,114 @@
+From 3902b7354ad1dfec3daccc31a06ed5676123c7b7 Mon Sep 17 00:00:00 2001
+From: Leon Elazar <leon.elazar@amd.com>
+Date: Thu, 5 Jan 2017 17:47:43 -0500
+Subject: [PATCH 0131/4131] drm/amd/display: blank mechanism for supporting MPO
+
+blank/unblanck functionality apply_ctx_for_surface will update planes visibility
+by manipulating Blender and CRTC HW modules.
+
+Signed-off-by: Leon Elazar <leon.elazar@amd.com>
+Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 4 ---
+ .../amd/display/dc/dce110/dce110_hw_sequencer.c | 42 +++++++++++++++++++---
+ 2 files changed, 37 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 25e7d7b..2277f9b 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1246,10 +1246,6 @@ bool dc_pre_update_surfaces_to_target(
+ core_dc,
+ &context->res_ctx.pipe_ctx[j],
+ context);
+-
+- if (!new_surfaces[i]->visible)
+- context->res_ctx.pipe_ctx[j].tg->funcs->set_blank(
+- context->res_ctx.pipe_ctx[j].tg, true);
+ }
+
+ unexpected_fail:
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 2b61fdf..7c27a82 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -1409,20 +1409,52 @@ static void set_default_colors(struct pipe_ctx *pipe_ctx)
+ pipe_ctx->opp, &default_adjust);
+ }
+
+-static void program_blender(const struct core_dc *dc,
++
++/*******************************************************************************
++ * In order to turn on/off specific surface we will program
++ * Blender + CRTC
++ *
++ * In case that we have two surfaces and they have a different visibility
++ * we can't turn off the CRTC since it will turn off the entire display
++ *
++ * |----------------------------------------------- |
++ * |bottom pipe|curr pipe | | |
++ * |Surface |Surface | Blender | CRCT |
++ * |visibility |visibility | Configuration| |
++ * |------------------------------------------------|
++ * | off | off | CURRENT_PIPE | blank |
++ * | off | on | CURRENT_PIPE | unblank |
++ * | on | off | OTHER_PIPE | unblank |
++ * | on | on | BLENDING | unblank |
++ * -------------------------------------------------|
++ *
++ ******************************************************************************/
++static void program_surface_visibility(const struct core_dc *dc,
+ struct pipe_ctx *pipe_ctx)
+ {
+ enum blnd_mode blender_mode = BLND_MODE_CURRENT_PIPE;
++ bool blank_target = false;
+
+ if (pipe_ctx->bottom_pipe) {
++
++ /* For now we are supporting only two pipes */
++ ASSERT(pipe_ctx->bottom_pipe->bottom_pipe == NULL);
++
+ if (pipe_ctx->bottom_pipe->surface->public.visible) {
+ if (pipe_ctx->surface->public.visible)
+ blender_mode = BLND_MODE_BLENDING;
+ else
+ blender_mode = BLND_MODE_OTHER_PIPE;
+- }
+- }
++
++ } else if (!pipe_ctx->surface->public.visible)
++ blank_target = true;
++
++ } else if (!pipe_ctx->surface->public.visible)
++ blank_target = true;
++
+ dce_set_blender_mode(dc->hwseq, pipe_ctx->pipe_idx, blender_mode);
++ pipe_ctx->tg->funcs->set_blank(pipe_ctx->tg, blank_target);
++
+ }
+
+ /**
+@@ -1495,7 +1527,7 @@ static void set_plane_config(
+ pipe_ctx->scl_data.lb_params.alpha_en = pipe_ctx->bottom_pipe != 0;
+ program_scaler(dc, pipe_ctx);
+
+- program_blender(dc, pipe_ctx);
++ program_surface_visibility(dc, pipe_ctx);
+
+ mi->funcs->mem_input_program_surface_config(
+ mi,
+@@ -1920,7 +1952,7 @@ static void dce110_apply_ctx_for_surface(
+ continue;
+
+ dce110_program_front_end_for_pipe(dc, pipe_ctx);
+- program_blender(dc, pipe_ctx);
++ program_surface_visibility(dc, pipe_ctx);
+
+ }
+ }
+--
+2.7.4
+