From: Joshua Aberback <joshua.aberb...@amd.com>

[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.aberb...@amd.com>
Reviewed-by: Anthony Koo <anthony....@amd.com>
Acked-by: Jun Lei <jun....@amd.com>
Acked-by: Leo Li <sunpeng...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c           |  2 +-
 .../amd/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 af907d5..c94bc40 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 8e961e6..602a41d 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.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to