Latent issue as the driver is currently just skipping programming 3x4 matrix and hdr multiplier blocks on bypass. Reset to default values if the bypass property is set true.
Signed-off-by: Melissa Wen <[email protected]> --- .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c index fa6883ae4dfb..84ff136183ee 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c @@ -1542,7 +1542,13 @@ __set_dm_plane_colorop_3x4_matrix(struct drm_plane_state *plane_state, } } - if (colorop_state && !colorop_state->bypass && colorop->type == DRM_COLOROP_CTM_3X4) { + if (colorop_state && colorop->type == DRM_COLOROP_CTM_3X4) { + if (colorop_state->bypass) { + dc_plane_state->gamut_remap_matrix.enable_remap = false; + dc_plane_state->input_csc_color_matrix.enable_adjustment = false; + return 0; + } + drm_dbg(dev, "3x4 matrix colorop with ID: %d\n", colorop->base.id); blob = colorop_state->data; if (blob->length == sizeof(struct drm_color_ctm_3x4)) { @@ -1581,9 +1587,13 @@ __set_dm_plane_colorop_multiplier(struct drm_plane_state *plane_state, } } - if (colorop_state && !colorop_state->bypass && colorop->type == DRM_COLOROP_MULTIPLIER) { - drm_dbg(dev, "Multiplier colorop with ID: %d\n", colorop->base.id); - dc_plane_state->hdr_mult = amdgpu_dm_fixpt_from_s3132(colorop_state->multiplier); + if (colorop_state && colorop->type == DRM_COLOROP_MULTIPLIER) { + if (colorop_state->bypass) { + dc_plane_state->hdr_mult = dc_fixpt_one; + } else { + drm_dbg(dev, "Multiplier colorop with ID: %d\n", colorop->base.id); + dc_plane_state->hdr_mult = amdgpu_dm_fixpt_from_s3132(colorop_state->multiplier); + } } return 0; -- 2.53.0
