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

Reply via email to