aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0503-drm-amd-display-Call-program_gamut-explicitly-instea.patch
diff options
context:
space:
mode:
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.patch122
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
+