aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch
new file mode 100644
index 00000000..962fdf1f
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1063-drm-amd-display-Fix-missing-hwss-function-for-dce.patch
@@ -0,0 +1,80 @@
+From cb07be33e2525cc8e5bc6f11a30b64d8f6798e2a Mon Sep 17 00:00:00 2001
+From: Joshua Aberback <joshua.aberback@amd.com>
+Date: Mon, 10 Dec 2018 13:46:34 -0500
+Subject: [PATCH 1063/2940] drm/amd/display: Fix missing hwss function for dce
+
+[Why]
+The driver will crash on dce hardware due to a null function pointer.
+
+[How]
+- bring back "program_csc_matrix" functionality as "program_output_csc" for
+dce110
+- dce110 doesn't use the "opp_id" parameter, so use 0 when there's no hubp
+
+Signed-off-by: Joshua Aberback <joshua.aberback@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Jun Lei <Jun.Lei@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 2 +-
+ .../display/dc/dce110/dce110_hw_sequencer.c | 23 +++++++++++++++++++
+ 2 files changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 99992c65fed6..dadbc18d7a90 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -451,7 +451,7 @@ bool dc_stream_program_csc_matrix(struct dc *dc, struct dc_stream_state *stream)
+ pipes,
+ stream->output_color_space,
+ stream->csc_color_matrix.matrix,
+- pipes->plane_res.hubp->opp_id);
++ pipes->plane_res.hubp ? pipes->plane_res.hubp->opp_id : 0);
+ 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 783d4b9c828f..c306db5f1d76 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
+@@ -2616,6 +2616,28 @@ static void dce110_wait_for_mpcc_disconnect(
+ /* do nothing*/
+ }
+
++static void program_output_csc(struct dc *dc,
++ struct pipe_ctx *pipe_ctx,
++ enum dc_color_space colorspace,
++ uint16_t *matrix,
++ int opp_id)
++{
++ int i;
++ struct out_csc_color_matrix tbl_entry;
++
++ if (pipe_ctx->stream->csc_color_matrix.enable_adjustment == true) {
++ enum dc_color_space color_space = pipe_ctx->stream->output_color_space;
++
++ for (i = 0; i < 12; i++)
++ tbl_entry.regval[i] = pipe_ctx->stream->csc_color_matrix.matrix[i];
++
++ tbl_entry.color_space = color_space;
++
++ pipe_ctx->plane_res.xfm->funcs->opp_set_csc_adjustment(
++ pipe_ctx->plane_res.xfm, &tbl_entry);
++ }
++}
++
+ void dce110_set_cursor_position(struct pipe_ctx *pipe_ctx)
+ {
+ struct dc_cursor_position pos_cpy = pipe_ctx->stream->cursor_position;
+@@ -2666,6 +2688,7 @@ void dce110_set_cursor_attribute(struct pipe_ctx *pipe_ctx)
+
+ static const struct hw_sequencer_funcs dce110_funcs = {
+ .program_gamut_remap = program_gamut_remap,
++ .program_output_csc = program_output_csc,
+ .init_hw = init_hw,
+ .apply_ctx_to_hw = dce110_apply_ctx_to_hw,
+ .apply_ctx_for_surface = dce110_apply_ctx_for_surface,
+--
+2.17.1
+