From: Yihan Zhu <[email protected]>

[WHY & HOW]
Avoid null curve data structure used in the cm block for the potential issue.

Reviewed-by: Charlene Liu <[email protected]>
Signed-off-by: Yihan Zhu <[email protected]>
Signed-off-by: Zaeem Mohamed <[email protected]>
---
 .../drm/amd/display/dc/mpc/dcn32/dcn32_mpc.c  | 380 +++++++++---------
 1 file changed, 192 insertions(+), 188 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/mpc/dcn32/dcn32_mpc.c 
b/drivers/gpu/drm/amd/display/dc/mpc/dcn32/dcn32_mpc.c
index a0e9e9f0441a..b4cea2b8cb2a 100644
--- a/drivers/gpu/drm/amd/display/dc/mpc/dcn32/dcn32_mpc.c
+++ b/drivers/gpu/drm/amd/display/dc/mpc/dcn32/dcn32_mpc.c
@@ -370,275 +370,279 @@ void mpc32_program_shaper_luta_settings(
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].red.custom_float_y);
 
        curve = params->arr_curve_points;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_0_1[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_2_3[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_4_5[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_6_7[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_8_9[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_10_11[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_12_13[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_14_15[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_16_17[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_18_19[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_20_21[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_22_23[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_24_25[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_26_27[mpcc_id], 0,
+       if (curve) {
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_0_1[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_28_29[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_30_31[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_32_33[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-}
-
-
-void mpc32_program_shaper_lutb_settings(
-               struct mpc *mpc,
-               const struct pwl_params *params,
-               uint32_t mpcc_id)
-{
-       const struct gamma_curve *curve;
-       struct dcn30_mpc *mpc30 = TO_DCN30_MPC(mpc);
-
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_B[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].blue.custom_float_x,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_G[mpcc_id], 0,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].green.custom_float_x,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_R[mpcc_id], 0,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].red.custom_float_x,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
-
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_B[mpcc_id], 0,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].blue.custom_float_x,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].blue.custom_float_y);
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_G[mpcc_id], 0,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].green.custom_float_x,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].green.custom_float_y);
-       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_R[mpcc_id], 0,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].red.custom_float_x,
-                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].red.custom_float_y);
-
-       curve = params->arr_curve_points;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_0_1[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_2_3[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_2_3[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_4_5[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_4_5[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_6_7[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_6_7[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_8_9[mpcc_id], 0,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,
-               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_8_9[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_10_11[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_10_11[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_12_13[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_12_13[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_14_15[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_14_15[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_16_17[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_16_17[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_18_19[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_18_19[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_20_21[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_20_21[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_22_23[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_22_23[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_24_25[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_24_25[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_26_27[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_26_27[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_28_29[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_28_29[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_30_31[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_30_31[mpcc_id], 0,
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMA_REGION_32_33[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+       }
+}
+
+
+void mpc32_program_shaper_lutb_settings(
+               struct mpc *mpc,
+               const struct pwl_params *params,
+               uint32_t mpcc_id)
+{
+       const struct gamma_curve *curve;
+       struct dcn30_mpc *mpc30 = TO_DCN30_MPC(mpc);
+
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_B[mpcc_id], 0,
+               MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].blue.custom_float_x,
+               MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_G[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].green.custom_float_x,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_START_CNTL_R[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_B, 
params->corner_points[0].red.custom_float_x,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, 0);
 
-       curve += 2;
-       REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_32_33[mpcc_id], 0,
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_B[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].blue.custom_float_x,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].blue.custom_float_y);
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_G[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].green.custom_float_x,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].green.custom_float_y);
+       REG_SET_2(MPCC_MCM_SHAPER_RAMB_END_CNTL_R[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_B, 
params->corner_points[1].red.custom_float_x,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION_END_BASE_B, 
params->corner_points[1].red.custom_float_y);
+
+       curve = params->arr_curve_points;
+       if (curve) {
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_0_1[mpcc_id], 0,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
                        MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_2_3[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_4_5[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_6_7[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_8_9[mpcc_id], 0,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                       MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_10_11[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_12_13[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_14_15[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_16_17[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_18_19[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_20_21[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_22_23[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_24_25[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_26_27[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_28_29[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_30_31[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+
+               curve += 2;
+               REG_SET_4(MPCC_MCM_SHAPER_RAMB_REGION_32_33[mpcc_id], 0,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, 
curve[0].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, 
curve[0].segments_num,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, 
curve[1].offset,
+                               MPCC_MCM_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, 
curve[1].segments_num);
+       }
 }
 
 
-- 
2.34.1

Reply via email to