From: Ilya Bakoulin <ilya.bakou...@amd.com>

[Why]
LUT write index does not get reset to zero when writing the LUT values
for each separate RGB component, which results in wrong data for 2 of
the 3 components.

[How]
Reset LUT write index to zero before writing each component's data.

Reviewed-by: Krunoslav Kovac <krunoslav.ko...@amd.com>
Acked-by: Hersen Wu <hersenxs...@amd.com>
Signed-off-by: Ilya Bakoulin <ilya.bakou...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 3 +++
 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_mpc.c | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c 
b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c
index 50dc83404644..11f7746f3a65 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c
@@ -613,16 +613,19 @@ static void dpp3_program_blnd_pwl(
                        REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
rgb[i].red_reg);
                REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
last_base_value_red);
        } else {
+               REG_SET(CM_BLNDGAM_LUT_INDEX, 0, CM_BLNDGAM_LUT_INDEX, 0);
                REG_UPDATE(CM_BLNDGAM_LUT_CONTROL, 
CM_BLNDGAM_LUT_WRITE_COLOR_MASK, 4);
                for (i = 0 ; i < num; i++)
                        REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
rgb[i].red_reg);
                REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
last_base_value_red);
 
+               REG_SET(CM_BLNDGAM_LUT_INDEX, 0, CM_BLNDGAM_LUT_INDEX, 0);
                REG_UPDATE(CM_BLNDGAM_LUT_CONTROL, 
CM_BLNDGAM_LUT_WRITE_COLOR_MASK, 2);
                for (i = 0 ; i < num; i++)
                        REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
rgb[i].green_reg);
                REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
last_base_value_green);
 
+               REG_SET(CM_BLNDGAM_LUT_INDEX, 0, CM_BLNDGAM_LUT_INDEX, 0);
                REG_UPDATE(CM_BLNDGAM_LUT_CONTROL, 
CM_BLNDGAM_LUT_WRITE_COLOR_MASK, 1);
                for (i = 0 ; i < num; i++)
                        REG_SET(CM_BLNDGAM_LUT_DATA, 0, CM_BLNDGAM_LUT_DATA, 
rgb[i].blue_reg);
diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_mpc.c 
b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_mpc.c
index 1d052f08aff5..994b21ed272f 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_mpc.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_mpc.c
@@ -237,16 +237,19 @@ void mpc32_program_post1dlut_pwl(
                        REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, rgb[i].red_reg);
                REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, last_base_value_red);
        } else {
+               REG_SET(MPCC_MCM_1DLUT_LUT_INDEX[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_INDEX, 0);
                REG_UPDATE(MPCC_MCM_1DLUT_LUT_CONTROL[mpcc_id], 
MPCC_MCM_1DLUT_LUT_WRITE_COLOR_MASK, 4);
                for (i = 0 ; i < num; i++)
                        REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, rgb[i].red_reg);
                REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, last_base_value_red);
 
+               REG_SET(MPCC_MCM_1DLUT_LUT_INDEX[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_INDEX, 0);
                REG_UPDATE(MPCC_MCM_1DLUT_LUT_CONTROL[mpcc_id], 
MPCC_MCM_1DLUT_LUT_WRITE_COLOR_MASK, 2);
                for (i = 0 ; i < num; i++)
                        REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, rgb[i].green_reg);
                REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, last_base_value_green);
 
+               REG_SET(MPCC_MCM_1DLUT_LUT_INDEX[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_INDEX, 0);
                REG_UPDATE(MPCC_MCM_1DLUT_LUT_CONTROL[mpcc_id], 
MPCC_MCM_1DLUT_LUT_WRITE_COLOR_MASK, 1);
                for (i = 0 ; i < num; i++)
                        REG_SET(MPCC_MCM_1DLUT_LUT_DATA[mpcc_id], 0, 
MPCC_MCM_1DLUT_LUT_DATA, rgb[i].blue_reg);
-- 
2.25.1

Reply via email to