diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch new file mode 100644 index 00000000..d909f686 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch @@ -0,0 +1,122 @@ +From abebb3dcac7d97b00635693378120ff70c44660e Mon Sep 17 00:00:00 2001 +From: Zeyu Fan <Zeyu.Fan@amd.com> +Date: Fri, 2 Jun 2017 17:25:49 -0400 +Subject: [PATCH 0503/4131] drm/amd/display: Call program_gamut explicitly + instead of entire set_plane + +This fixes on boot crush on Vega, Polaris with Dal3. + +Signed-off-by: Zeyu Fan <Zeyu.Fan@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 | 3 +- + .../amd/display/dc/dce110/dce110_hw_sequencer.c | 42 ++++++++++++++++++++++ + .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 1 + + drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h | 3 ++ + 4 files changed, 47 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index f5102b6..657e10b 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -213,8 +213,7 @@ static bool set_gamut_remap(struct dc *dc, const struct dc_stream *stream) + == core_stream) { + + pipes = &core_dc->current_context->res_ctx.pipe_ctx[i]; +- core_dc->hwss.set_plane_config(core_dc, pipes, +- &core_dc->current_context->res_ctx); ++ core_dc->hwss.program_gamut_remap(pipes); + ret = true; + } + } +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 7dd4b02..616533e 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 +@@ -1894,6 +1894,47 @@ static void program_surface_visibility(const struct core_dc *dc, + + } + ++static void program_gamut_remap(struct pipe_ctx *pipe_ctx) ++{ ++ struct xfm_grph_csc_adjustment adjust; ++ memset(&adjust, 0, sizeof(adjust)); ++ adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS; ++ ++ ++ if (pipe_ctx->stream->public.gamut_remap_matrix.enable_remap == true) { ++ adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW; ++ adjust.temperature_matrix[0] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[0]; ++ adjust.temperature_matrix[1] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[1]; ++ adjust.temperature_matrix[2] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[2]; ++ adjust.temperature_matrix[3] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[4]; ++ adjust.temperature_matrix[4] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[5]; ++ adjust.temperature_matrix[5] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[6]; ++ adjust.temperature_matrix[6] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[8]; ++ adjust.temperature_matrix[7] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[9]; ++ adjust.temperature_matrix[8] = ++ pipe_ctx->stream-> ++ public.gamut_remap_matrix.matrix[10]; ++ } ++ ++ pipe_ctx->xfm->funcs->transform_set_gamut_remap(pipe_ctx->xfm, &adjust); ++} ++ + /** + * TODO REMOVE, USE UPDATE INSTEAD + */ +@@ -2509,6 +2550,7 @@ static void dce110_power_down_fe(struct core_dc *dc, struct pipe_ctx *pipe) + } + + static const struct hw_sequencer_funcs dce110_funcs = { ++ .program_gamut_remap = program_gamut_remap, + .init_hw = init_hw, + .apply_ctx_to_hw = dce110_apply_ctx_to_hw, + .apply_ctx_for_surface = dce110_apply_ctx_for_surface, +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 447f6bf..107f82d 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 +@@ -1899,6 +1899,7 @@ static void set_plane_config( + } + + static const struct hw_sequencer_funcs dcn10_funcs = { ++ .program_gamut_remap = program_gamut_remap, + .init_hw = init_hw, + .apply_ctx_to_hw = dce110_apply_ctx_to_hw, + .apply_ctx_for_surface = dcn10_apply_ctx_for_surface, +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h +index b53e120..6f8733e 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h +@@ -67,6 +67,9 @@ struct hw_sequencer_funcs { + struct pipe_ctx *pipe_ctx, + struct resource_context *res_ctx); + ++ void (*program_gamut_remap)( ++ struct pipe_ctx *pipe_ctx); ++ + void (*update_plane_addr)( + const struct core_dc *dc, + struct pipe_ctx *pipe_ctx); +-- +2.7.4 + |