summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>2020-07-08 16:30:26 -0400
committerAlex Deucher <alexander.deucher@amd.com>2020-07-10 17:41:18 -0400
commitc7f1daa1d62b373cdcf6817e9edb94c121c9ebd9 (patch)
tree2ccd3026e8935e4c86387900e90446f9312972e1 /drivers/gpu/drm/amd
parentc74f9322484869c10117eb068998250df3714486 (diff)
downloadlinux-c7f1daa1d62b373cdcf6817e9edb94c121c9ebd9.tar.bz2
drm/amd/display: Fix CSC remap matrix not being applied on dcn30
[Why] DCN3 has two gamut remap matrices. When using CSC adjustment the CM remap is set to bypass and MPCC remap is used. However to bypass CM some state in the context is modified and not restored correctly resulting in subsequent calls to disable MPCC remap as well. [How] Fix logic for save/restore of remap enable flag when programming MPCC remap matrix. Signed-off-by: Aric Cyr <aric.cyr@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
index 5621c95177d2..7725a406c16e 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
@@ -1482,22 +1482,23 @@ static void dcn20_update_dchubp_dpp(
memset(&adjust, 0, sizeof(adjust));
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
- /* save the enablement of gamut remap for dpp*/
+
+ /* save the enablement of gamut remap for dpp */
enable_remap_dpp = pipe_ctx->stream->gamut_remap_matrix.enable_remap;
- /*force bypass gamut remap for dpp/cm*/
+
+ /* force bypass gamut remap for dpp/cm */
pipe_ctx->stream->gamut_remap_matrix.enable_remap = false;
dc->hwss.program_gamut_remap(pipe_ctx);
- /*restore gamut remap flag for the top plane and use this remap into mpc*/
- if (pipe_ctx->top_pipe == NULL)
- pipe_ctx->stream->gamut_remap_matrix.enable_remap = enable_remap_dpp;
- else
- pipe_ctx->stream->gamut_remap_matrix.enable_remap = false;
-
- if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
- adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
- for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
- adjust.temperature_matrix[i] =
- pipe_ctx->stream->gamut_remap_matrix.matrix[i];
+
+ /* restore gamut remap flag and use this remap into mpc */
+ pipe_ctx->stream->gamut_remap_matrix.enable_remap = enable_remap_dpp;
+
+ /* build remap matrix for top plane if enabled */
+ if (enable_remap_dpp && pipe_ctx->top_pipe == NULL) {
+ adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
+ for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
+ adjust.temperature_matrix[i] =
+ pipe_ctx->stream->gamut_remap_matrix.matrix[i];
}
mpc->funcs->set_gamut_remap(mpc, mpcc_id, &adjust);
} else