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