diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0986-drm-amd-display-separate-cm-functions-out-from-dcn10.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0986-drm-amd-display-separate-cm-functions-out-from-dcn10.patch | 1534 |
1 files changed, 0 insertions, 1534 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0986-drm-amd-display-separate-cm-functions-out-from-dcn10.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0986-drm-amd-display-separate-cm-functions-out-from-dcn10.patch deleted file mode 100644 index 5de36176..00000000 --- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0986-drm-amd-display-separate-cm-functions-out-from-dcn10.patch +++ /dev/null @@ -1,1534 +0,0 @@ -From e259d96a5739d86a9adc4964edb8f3e91115aa1d Mon Sep 17 00:00:00 2001 -From: Yue Hin Lau <Yuehin.Lau@amd.com> -Date: Thu, 17 Aug 2017 17:17:37 -0400 -Subject: [PATCH 0986/4131] drm/amd/display: separate cm functions out from - dcn10_dpp - -Signed-off-by: Yue Hin Lau <Yuehin.Lau@amd.com> -Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> -Acked-by: Harry Wentland <Harry.Wentland@amd.com> ---- - drivers/gpu/drm/amd/display/dc/dcn10/Makefile | 2 +- - drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c | 662 ------------------ - drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h | 34 + - .../gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c | 776 +++++++++++++++++++++ - 4 files changed, 811 insertions(+), 663 deletions(-) - create mode 100644 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c - -diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile -index 83619e6..52b56d1 100644 ---- a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile -+++ b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile -@@ -4,7 +4,7 @@ - DCN10 = dcn10_resource.o dcn10_ipp.o dcn10_hw_sequencer.o \ - dcn10_dpp.o dcn10_opp.o dcn10_timing_generator.o \ - dcn10_mem_input.o dcn10_mpc.o dcn10_dwb.o \ -- dcn10_dpp_dscl.o -+ dcn10_dpp_dscl.o dcn10_dpp_cm.o - - AMD_DAL_DCN10 = $(addprefix $(AMDDALPATH)/dc/dcn10/,$(DCN10)) - -diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c -index a841ed3..f0e74af 100644 ---- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c -+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c -@@ -195,669 +195,7 @@ static void dpp_reset(struct transform *xfm_base) - REG_SET(DSCL_CONTROL, 0, SCL_BOUNDARY_MODE, 0); - } - --static void program_gamut_remap( -- struct dcn10_dpp *xfm, -- const uint16_t *regval, -- enum gamut_remap_select select) --{ -- uint16_t selection = 0; -- -- if (regval == NULL || select == GAMUT_REMAP_BYPASS) { -- REG_SET(CM_GAMUT_REMAP_CONTROL, 0, -- CM_GAMUT_REMAP_MODE, 0); -- return; -- } -- switch (select) { -- case GAMUT_REMAP_COEFF: -- selection = 1; -- break; -- case GAMUT_REMAP_COMA_COEFF: -- selection = 2; -- break; -- case GAMUT_REMAP_COMB_COEFF: -- selection = 3; -- break; -- default: -- break; -- } -- -- -- if (select == GAMUT_REMAP_COEFF) { -- -- REG_SET_2(CM_GAMUT_REMAP_C11_C12, 0, -- CM_GAMUT_REMAP_C11, regval[0], -- CM_GAMUT_REMAP_C12, regval[1]); -- regval += 2; -- REG_SET_2(CM_GAMUT_REMAP_C13_C14, 0, -- CM_GAMUT_REMAP_C13, regval[0], -- CM_GAMUT_REMAP_C14, regval[1]); -- regval += 2; -- REG_SET_2(CM_GAMUT_REMAP_C21_C22, 0, -- CM_GAMUT_REMAP_C21, regval[0], -- CM_GAMUT_REMAP_C22, regval[1]); -- regval += 2; -- REG_SET_2(CM_GAMUT_REMAP_C23_C24, 0, -- CM_GAMUT_REMAP_C23, regval[0], -- CM_GAMUT_REMAP_C24, regval[1]); -- regval += 2; -- REG_SET_2(CM_GAMUT_REMAP_C31_C32, 0, -- CM_GAMUT_REMAP_C31, regval[0], -- CM_GAMUT_REMAP_C32, regval[1]); -- regval += 2; -- REG_SET_2(CM_GAMUT_REMAP_C33_C34, 0, -- CM_GAMUT_REMAP_C33, regval[0], -- CM_GAMUT_REMAP_C34, regval[1]); -- -- } else if (select == GAMUT_REMAP_COMA_COEFF) { -- REG_SET_2(CM_COMA_C11_C12, 0, -- CM_COMA_C11, regval[0], -- CM_COMA_C12, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMA_C13_C14, 0, -- CM_COMA_C13, regval[0], -- CM_COMA_C14, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMA_C21_C22, 0, -- CM_COMA_C21, regval[0], -- CM_COMA_C22, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMA_C23_C24, 0, -- CM_COMA_C23, regval[0], -- CM_COMA_C24, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMA_C31_C32, 0, -- CM_COMA_C31, regval[0], -- CM_COMA_C32, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMA_C33_C34, 0, -- CM_COMA_C33, regval[0], -- CM_COMA_C34, regval[1]); -- -- } else { -- REG_SET_2(CM_COMB_C11_C12, 0, -- CM_COMB_C11, regval[0], -- CM_COMB_C12, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMB_C13_C14, 0, -- CM_COMB_C13, regval[0], -- CM_COMB_C14, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMB_C21_C22, 0, -- CM_COMB_C21, regval[0], -- CM_COMB_C22, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMB_C23_C24, 0, -- CM_COMB_C23, regval[0], -- CM_COMB_C24, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMB_C31_C32, 0, -- CM_COMB_C31, regval[0], -- CM_COMB_C32, regval[1]); -- regval += 2; -- REG_SET_2(CM_COMB_C33_C34, 0, -- CM_COMB_C33, regval[0], -- CM_COMB_C34, regval[1]); -- } -- -- REG_SET( -- CM_GAMUT_REMAP_CONTROL, 0, -- CM_GAMUT_REMAP_MODE, selection); -- --} -- --static void dcn_dpp_set_gamut_remap( -- struct transform *xfm, -- const struct xfm_grph_csc_adjustment *adjust) --{ -- struct dcn10_dpp *dcn_xfm = TO_DCN10_DPP(xfm); -- -- if (adjust->gamut_adjust_type != GRAPHICS_GAMUT_ADJUST_TYPE_SW) -- /* Bypass if type is bypass or hw */ -- program_gamut_remap(dcn_xfm, NULL, GAMUT_REMAP_BYPASS); -- else { -- struct fixed31_32 arr_matrix[12]; -- uint16_t arr_reg_val[12]; -- -- arr_matrix[0] = adjust->temperature_matrix[0]; -- arr_matrix[1] = adjust->temperature_matrix[1]; -- arr_matrix[2] = adjust->temperature_matrix[2]; -- arr_matrix[3] = dal_fixed31_32_zero; -- -- arr_matrix[4] = adjust->temperature_matrix[3]; -- arr_matrix[5] = adjust->temperature_matrix[4]; -- arr_matrix[6] = adjust->temperature_matrix[5]; -- arr_matrix[7] = dal_fixed31_32_zero; -- -- arr_matrix[8] = adjust->temperature_matrix[6]; -- arr_matrix[9] = adjust->temperature_matrix[7]; -- arr_matrix[10] = adjust->temperature_matrix[8]; -- arr_matrix[11] = dal_fixed31_32_zero; -- -- convert_float_matrix( -- arr_reg_val, arr_matrix, 12); -- -- program_gamut_remap(dcn_xfm, arr_reg_val, GAMUT_REMAP_COEFF); -- } --} - --static void oppn10_set_output_csc_default( -- struct transform *xfm_base, -- const struct default_adjustment *default_adjust) --{ -- -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- uint32_t ocsc_mode = 0; -- -- if (default_adjust != NULL) { -- switch (default_adjust->out_color_space) { -- case COLOR_SPACE_SRGB: -- case COLOR_SPACE_2020_RGB_FULLRANGE: -- ocsc_mode = 0; -- break; -- case COLOR_SPACE_SRGB_LIMITED: -- case COLOR_SPACE_2020_RGB_LIMITEDRANGE: -- ocsc_mode = 1; -- break; -- case COLOR_SPACE_YCBCR601: -- case COLOR_SPACE_YCBCR601_LIMITED: -- ocsc_mode = 2; -- break; -- case COLOR_SPACE_YCBCR709: -- case COLOR_SPACE_YCBCR709_LIMITED: -- case COLOR_SPACE_2020_YCBCR: -- ocsc_mode = 3; -- break; -- case COLOR_SPACE_UNKNOWN: -- default: -- break; -- } -- } -- -- REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode); -- --} -- --static void oppn10_program_color_matrix( -- struct dcn10_dpp *xfm, -- const struct out_csc_color_matrix *tbl_entry) --{ -- uint32_t mode; -- -- REG_GET(CM_OCSC_CONTROL, CM_OCSC_MODE, &mode); -- -- if (tbl_entry == NULL) { -- BREAK_TO_DEBUGGER(); -- return; -- } -- -- if (mode == 4) { -- /*R*/ -- REG_SET_2(CM_OCSC_C11_C12, 0, -- CM_OCSC_C11, tbl_entry->regval[0], -- CM_OCSC_C12, tbl_entry->regval[1]); -- -- REG_SET_2(CM_OCSC_C13_C14, 0, -- CM_OCSC_C13, tbl_entry->regval[2], -- CM_OCSC_C14, tbl_entry->regval[3]); -- -- /*G*/ -- REG_SET_2(CM_OCSC_C21_C22, 0, -- CM_OCSC_C21, tbl_entry->regval[4], -- CM_OCSC_C22, tbl_entry->regval[5]); -- -- REG_SET_2(CM_OCSC_C23_C24, 0, -- CM_OCSC_C23, tbl_entry->regval[6], -- CM_OCSC_C24, tbl_entry->regval[7]); -- -- /*B*/ -- REG_SET_2(CM_OCSC_C31_C32, 0, -- CM_OCSC_C31, tbl_entry->regval[8], -- CM_OCSC_C32, tbl_entry->regval[9]); -- -- REG_SET_2(CM_OCSC_C33_C34, 0, -- CM_OCSC_C33, tbl_entry->regval[10], -- CM_OCSC_C34, tbl_entry->regval[11]); -- } else { -- /*R*/ -- REG_SET_2(CM_COMB_C11_C12, 0, -- CM_COMB_C11, tbl_entry->regval[0], -- CM_COMB_C12, tbl_entry->regval[1]); -- -- REG_SET_2(CM_COMB_C13_C14, 0, -- CM_COMB_C13, tbl_entry->regval[2], -- CM_COMB_C14, tbl_entry->regval[3]); -- -- /*G*/ -- REG_SET_2(CM_COMB_C21_C22, 0, -- CM_COMB_C21, tbl_entry->regval[4], -- CM_COMB_C22, tbl_entry->regval[5]); -- -- REG_SET_2(CM_COMB_C23_C24, 0, -- CM_COMB_C23, tbl_entry->regval[6], -- CM_COMB_C24, tbl_entry->regval[7]); -- -- /*B*/ -- REG_SET_2(CM_COMB_C31_C32, 0, -- CM_COMB_C31, tbl_entry->regval[8], -- CM_COMB_C32, tbl_entry->regval[9]); -- -- REG_SET_2(CM_COMB_C33_C34, 0, -- CM_COMB_C33, tbl_entry->regval[10], -- CM_COMB_C34, tbl_entry->regval[11]); -- } --} -- --static void oppn10_set_output_csc_adjustment( -- struct transform *xfm_base, -- const struct out_csc_color_matrix *tbl_entry) --{ -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- //enum csc_color_mode config = CSC_COLOR_MODE_GRAPHICS_OUTPUT_CSC; -- uint32_t ocsc_mode = 4; -- -- /** -- *if (tbl_entry != NULL) { -- * switch (tbl_entry->color_space) { -- * case COLOR_SPACE_SRGB: -- * case COLOR_SPACE_2020_RGB_FULLRANGE: -- * ocsc_mode = 0; -- * break; -- * case COLOR_SPACE_SRGB_LIMITED: -- * case COLOR_SPACE_2020_RGB_LIMITEDRANGE: -- * ocsc_mode = 1; -- * break; -- * case COLOR_SPACE_YCBCR601: -- * case COLOR_SPACE_YCBCR601_LIMITED: -- * ocsc_mode = 2; -- * break; -- * case COLOR_SPACE_YCBCR709: -- * case COLOR_SPACE_YCBCR709_LIMITED: -- * case COLOR_SPACE_2020_YCBCR: -- * ocsc_mode = 3; -- * break; -- * case COLOR_SPACE_UNKNOWN: -- * default: -- * break; -- * } -- *} -- */ -- -- REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode); -- oppn10_program_color_matrix(xfm, tbl_entry); --} -- --static void oppn10_power_on_regamma_lut( -- struct transform *xfm_base, -- bool power_on) --{ -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- REG_SET(CM_MEM_PWR_CTRL, 0, -- RGAM_MEM_PWR_FORCE, power_on == true ? 0:1); -- --} -- --static void opp_program_regamma_lut( -- struct transform *xfm_base, -- const struct pwl_result_data *rgb, -- uint32_t num) --{ -- uint32_t i; -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- for (i = 0 ; i < num; i++) { -- REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].red_reg); -- REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].green_reg); -- REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].blue_reg); -- -- REG_SET(CM_RGAM_LUT_DATA, 0, -- CM_RGAM_LUT_DATA, rgb[i].delta_red_reg); -- REG_SET(CM_RGAM_LUT_DATA, 0, -- CM_RGAM_LUT_DATA, rgb[i].delta_green_reg); -- REG_SET(CM_RGAM_LUT_DATA, 0, -- CM_RGAM_LUT_DATA, rgb[i].delta_blue_reg); -- -- } -- --} -- --static void opp_configure_regamma_lut( -- struct transform *xfm_base, -- bool is_ram_a) --{ -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- -- REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK, -- CM_RGAM_LUT_WRITE_EN_MASK, 7); -- REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK, -- CM_RGAM_LUT_WRITE_SEL, is_ram_a == true ? 0:1); -- REG_SET(CM_RGAM_LUT_INDEX, 0, CM_RGAM_LUT_INDEX, 0); --} -- --/*program re gamma RAM A*/ --static void opp_program_regamma_luta_settings( -- struct transform *xfm_base, -- const struct pwl_params *params) --{ -- const struct gamma_curve *curve; -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- -- REG_SET_2(CM_RGAM_RAMA_START_CNTL_B, 0, -- CM_RGAM_RAMA_EXP_REGION_START_B, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_B, 0); -- REG_SET_2(CM_RGAM_RAMA_START_CNTL_G, 0, -- CM_RGAM_RAMA_EXP_REGION_START_G, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_G, 0); -- REG_SET_2(CM_RGAM_RAMA_START_CNTL_R, 0, -- CM_RGAM_RAMA_EXP_REGION_START_R, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_R, 0); -- -- REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_B, 0, -- CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope); -- REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_G, 0, -- CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope); -- REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_R, 0, -- CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope); -- -- REG_SET(CM_RGAM_RAMA_END_CNTL1_B, 0, -- CM_RGAM_RAMA_EXP_REGION_END_B, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMA_END_CNTL2_B, 0, -- CM_RGAM_RAMA_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMA_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y); -- -- REG_SET(CM_RGAM_RAMA_END_CNTL1_G, 0, -- CM_RGAM_RAMA_EXP_REGION_END_G, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMA_END_CNTL2_G, 0, -- CM_RGAM_RAMA_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMA_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y); -- -- REG_SET(CM_RGAM_RAMA_END_CNTL1_R, 0, -- CM_RGAM_RAMA_EXP_REGION_END_R, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMA_END_CNTL2_R, 0, -- CM_RGAM_RAMA_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMA_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y); -- -- curve = params->arr_curve_points; -- REG_SET_4(CM_RGAM_RAMA_REGION_0_1, 0, -- CM_RGAM_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_2_3, 0, -- CM_RGAM_RAMA_EXP_REGION2_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION3_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_4_5, 0, -- CM_RGAM_RAMA_EXP_REGION4_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION5_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_6_7, 0, -- CM_RGAM_RAMA_EXP_REGION6_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION7_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_8_9, 0, -- CM_RGAM_RAMA_EXP_REGION8_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION9_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_10_11, 0, -- CM_RGAM_RAMA_EXP_REGION10_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION11_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_12_13, 0, -- CM_RGAM_RAMA_EXP_REGION12_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION13_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_14_15, 0, -- CM_RGAM_RAMA_EXP_REGION14_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION15_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_16_17, 0, -- CM_RGAM_RAMA_EXP_REGION16_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION17_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_18_19, 0, -- CM_RGAM_RAMA_EXP_REGION18_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION19_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_20_21, 0, -- CM_RGAM_RAMA_EXP_REGION20_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION21_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_22_23, 0, -- CM_RGAM_RAMA_EXP_REGION22_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION23_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_24_25, 0, -- CM_RGAM_RAMA_EXP_REGION24_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION25_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_26_27, 0, -- CM_RGAM_RAMA_EXP_REGION26_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION27_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_28_29, 0, -- CM_RGAM_RAMA_EXP_REGION28_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION29_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_30_31, 0, -- CM_RGAM_RAMA_EXP_REGION30_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION31_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMA_REGION_32_33, 0, -- CM_RGAM_RAMA_EXP_REGION32_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMA_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMA_EXP_REGION33_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMA_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num); --} -- --/*program re gamma RAM B*/ --static void opp_program_regamma_lutb_settings( -- struct transform *xfm_base, -- const struct pwl_params *params) --{ -- const struct gamma_curve *curve; -- struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -- -- REG_SET_2(CM_RGAM_RAMB_START_CNTL_B, 0, -- CM_RGAM_RAMB_EXP_REGION_START_B, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_B, 0); -- REG_SET_2(CM_RGAM_RAMB_START_CNTL_G, 0, -- CM_RGAM_RAMB_EXP_REGION_START_G, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_G, 0); -- REG_SET_2(CM_RGAM_RAMB_START_CNTL_R, 0, -- CM_RGAM_RAMB_EXP_REGION_START_R, params->arr_points[0].custom_float_x, -- CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_R, 0); -- -- REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_B, 0, -- CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope); -- REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_G, 0, -- CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope); -- REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_R, 0, -- CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope); -- -- REG_SET(CM_RGAM_RAMB_END_CNTL1_B, 0, -- CM_RGAM_RAMB_EXP_REGION_END_B, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMB_END_CNTL2_B, 0, -- CM_RGAM_RAMB_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMB_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y); -- -- REG_SET(CM_RGAM_RAMB_END_CNTL1_G, 0, -- CM_RGAM_RAMB_EXP_REGION_END_G, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMB_END_CNTL2_G, 0, -- CM_RGAM_RAMB_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMB_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y); -- -- REG_SET(CM_RGAM_RAMB_END_CNTL1_R, 0, -- CM_RGAM_RAMB_EXP_REGION_END_R, params->arr_points[1].custom_float_x); -- REG_SET_2(CM_RGAM_RAMB_END_CNTL2_R, 0, -- CM_RGAM_RAMB_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope, -- CM_RGAM_RAMB_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y); -- -- curve = params->arr_curve_points; -- REG_SET_4(CM_RGAM_RAMB_REGION_0_1, 0, -- CM_RGAM_RAMB_EXP_REGION0_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION1_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_2_3, 0, -- CM_RGAM_RAMB_EXP_REGION2_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION3_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_4_5, 0, -- CM_RGAM_RAMB_EXP_REGION4_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION5_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_6_7, 0, -- CM_RGAM_RAMB_EXP_REGION6_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION7_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_8_9, 0, -- CM_RGAM_RAMB_EXP_REGION8_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION9_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_10_11, 0, -- CM_RGAM_RAMB_EXP_REGION10_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION11_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_12_13, 0, -- CM_RGAM_RAMB_EXP_REGION12_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION13_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_14_15, 0, -- CM_RGAM_RAMB_EXP_REGION14_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION15_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_16_17, 0, -- CM_RGAM_RAMB_EXP_REGION16_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION17_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_18_19, 0, -- CM_RGAM_RAMB_EXP_REGION18_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION19_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_20_21, 0, -- CM_RGAM_RAMB_EXP_REGION20_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION21_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_22_23, 0, -- CM_RGAM_RAMB_EXP_REGION22_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION23_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_24_25, 0, -- CM_RGAM_RAMB_EXP_REGION24_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION25_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_26_27, 0, -- CM_RGAM_RAMB_EXP_REGION26_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION27_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_28_29, 0, -- CM_RGAM_RAMB_EXP_REGION28_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION29_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_30_31, 0, -- CM_RGAM_RAMB_EXP_REGION30_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION31_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num); -- -- curve += 2; -- REG_SET_4(CM_RGAM_RAMB_REGION_32_33, 0, -- CM_RGAM_RAMB_EXP_REGION32_LUT_OFFSET, curve[0].offset, -- CM_RGAM_RAMB_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num, -- CM_RGAM_RAMB_EXP_REGION33_LUT_OFFSET, curve[1].offset, -- CM_RGAM_RAMB_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num); -- --} - - static bool oppn10_set_regamma_pwl( - struct transform *xfm_base, const struct pwl_params *params) -diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h -index 496df1f..a4dfdb9 100644 ---- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h -+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h -@@ -1387,6 +1387,40 @@ struct dcn10_dpp { - bool is_write_to_ram_a_safe; - }; - -+void opp_program_regamma_lut( -+ struct transform *xfm_base, -+ const struct pwl_result_data *rgb, -+ uint32_t num); -+ -+void oppn10_power_on_regamma_lut( -+ struct transform *xfm_base, -+ bool power_on); -+ -+void opp_configure_regamma_lut( -+ struct transform *xfm_base, -+ bool is_ram_a); -+ -+/*program re gamma RAM A*/ -+void opp_program_regamma_luta_settings( -+ struct transform *xfm_base, -+ const struct pwl_params *params); -+ -+/*program re gamma RAM B*/ -+void opp_program_regamma_lutb_settings( -+ struct transform *xfm_base, -+ const struct pwl_params *params); -+void oppn10_set_output_csc_adjustment( -+ struct transform *xfm_base, -+ const struct out_csc_color_matrix *tbl_entry); -+ -+void oppn10_set_output_csc_default( -+ struct transform *xfm_base, -+ const struct default_adjustment *default_adjust); -+ -+void dcn_dpp_set_gamut_remap( -+ struct transform *xfm, -+ const struct xfm_grph_csc_adjustment *adjust); -+ - void dcn10_dpp_set_scaler_manual_scale( - struct transform *xfm_base, - const struct scaler_data *scl_data); -diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c -new file mode 100644 -index 0000000..7eb4334 ---- /dev/null -+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c -@@ -0,0 +1,776 @@ -+/* -+ * Copyright 2016 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: AMD -+ * -+ */ -+ -+#include "dm_services.h" -+ -+#include "core_types.h" -+ -+#include "include/grph_object_id.h" -+#include "include/fixed31_32.h" -+#include "include/logger_interface.h" -+ -+#include "reg_helper.h" -+#include "dcn10_dpp.h" -+#include "basics/conversion.h" -+ -+#define NUM_PHASES 64 -+#define HORZ_MAX_TAPS 8 -+#define VERT_MAX_TAPS 8 -+ -+#define BLACK_OFFSET_RGB_Y 0x0 -+#define BLACK_OFFSET_CBCR 0x8000 -+ -+#define REG(reg)\ -+ xfm->tf_regs->reg -+ -+#define CTX \ -+ xfm->base.ctx -+ -+#undef FN -+#define FN(reg_name, field_name) \ -+ xfm->tf_shift->field_name, xfm->tf_mask->field_name -+ -+enum dcn10_coef_filter_type_sel { -+ SCL_COEF_LUMA_VERT_FILTER = 0, -+ SCL_COEF_LUMA_HORZ_FILTER = 1, -+ SCL_COEF_CHROMA_VERT_FILTER = 2, -+ SCL_COEF_CHROMA_HORZ_FILTER = 3, -+ SCL_COEF_ALPHA_VERT_FILTER = 4, -+ SCL_COEF_ALPHA_HORZ_FILTER = 5 -+}; -+ -+enum lb_memory_config { -+ /* Enable all 3 pieces of memory */ -+ LB_MEMORY_CONFIG_0 = 0, -+ -+ /* Enable only the first piece of memory */ -+ LB_MEMORY_CONFIG_1 = 1, -+ -+ /* Enable only the second piece of memory */ -+ LB_MEMORY_CONFIG_2 = 2, -+ -+ /* Only applicable in 4:2:0 mode, enable all 3 pieces of memory and the -+ * last piece of chroma memory used for the luma storage -+ */ -+ LB_MEMORY_CONFIG_3 = 3 -+}; -+ -+enum dscl_autocal_mode { -+ AUTOCAL_MODE_OFF = 0, -+ -+ /* Autocal calculate the scaling ratio and initial phase and the -+ * DSCL_MODE_SEL must be set to 1 -+ */ -+ AUTOCAL_MODE_AUTOSCALE = 1, -+ /* Autocal perform auto centering without replication and the -+ * DSCL_MODE_SEL must be set to 0 -+ */ -+ AUTOCAL_MODE_AUTOCENTER = 2, -+ /* Autocal perform auto centering and auto replication and the -+ * DSCL_MODE_SEL must be set to 0 -+ */ -+ AUTOCAL_MODE_AUTOREPLICATE = 3 -+}; -+ -+enum dscl_mode_sel { -+ DSCL_MODE_SCALING_444_BYPASS = 0, -+ DSCL_MODE_SCALING_444_RGB_ENABLE = 1, -+ DSCL_MODE_SCALING_444_YCBCR_ENABLE = 2, -+ DSCL_MODE_SCALING_420_YCBCR_ENABLE = 3, -+ DSCL_MODE_SCALING_420_LUMA_BYPASS = 4, -+ DSCL_MODE_SCALING_420_CHROMA_BYPASS = 5, -+ DSCL_MODE_DSCL_BYPASS = 6 -+}; -+ -+enum gamut_remap_select { -+ GAMUT_REMAP_BYPASS = 0, -+ GAMUT_REMAP_COEFF, -+ GAMUT_REMAP_COMA_COEFF, -+ GAMUT_REMAP_COMB_COEFF -+}; -+ -+static void program_gamut_remap( -+ struct dcn10_dpp *xfm, -+ const uint16_t *regval, -+ enum gamut_remap_select select) -+{ -+ uint16_t selection = 0; -+ -+ if (regval == NULL || select == GAMUT_REMAP_BYPASS) { -+ REG_SET(CM_GAMUT_REMAP_CONTROL, 0, -+ CM_GAMUT_REMAP_MODE, 0); -+ return; -+ } -+ switch (select) { -+ case GAMUT_REMAP_COEFF: -+ selection = 1; -+ break; -+ case GAMUT_REMAP_COMA_COEFF: -+ selection = 2; -+ break; -+ case GAMUT_REMAP_COMB_COEFF: -+ selection = 3; -+ break; -+ default: -+ break; -+ } -+ -+ -+ if (select == GAMUT_REMAP_COEFF) { -+ -+ REG_SET_2(CM_GAMUT_REMAP_C11_C12, 0, -+ CM_GAMUT_REMAP_C11, regval[0], -+ CM_GAMUT_REMAP_C12, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_GAMUT_REMAP_C13_C14, 0, -+ CM_GAMUT_REMAP_C13, regval[0], -+ CM_GAMUT_REMAP_C14, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_GAMUT_REMAP_C21_C22, 0, -+ CM_GAMUT_REMAP_C21, regval[0], -+ CM_GAMUT_REMAP_C22, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_GAMUT_REMAP_C23_C24, 0, -+ CM_GAMUT_REMAP_C23, regval[0], -+ CM_GAMUT_REMAP_C24, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_GAMUT_REMAP_C31_C32, 0, -+ CM_GAMUT_REMAP_C31, regval[0], -+ CM_GAMUT_REMAP_C32, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_GAMUT_REMAP_C33_C34, 0, -+ CM_GAMUT_REMAP_C33, regval[0], -+ CM_GAMUT_REMAP_C34, regval[1]); -+ -+ } else if (select == GAMUT_REMAP_COMA_COEFF) { -+ REG_SET_2(CM_COMA_C11_C12, 0, -+ CM_COMA_C11, regval[0], -+ CM_COMA_C12, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMA_C13_C14, 0, -+ CM_COMA_C13, regval[0], -+ CM_COMA_C14, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMA_C21_C22, 0, -+ CM_COMA_C21, regval[0], -+ CM_COMA_C22, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMA_C23_C24, 0, -+ CM_COMA_C23, regval[0], -+ CM_COMA_C24, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMA_C31_C32, 0, -+ CM_COMA_C31, regval[0], -+ CM_COMA_C32, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMA_C33_C34, 0, -+ CM_COMA_C33, regval[0], -+ CM_COMA_C34, regval[1]); -+ -+ } else { -+ REG_SET_2(CM_COMB_C11_C12, 0, -+ CM_COMB_C11, regval[0], -+ CM_COMB_C12, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMB_C13_C14, 0, -+ CM_COMB_C13, regval[0], -+ CM_COMB_C14, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMB_C21_C22, 0, -+ CM_COMB_C21, regval[0], -+ CM_COMB_C22, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMB_C23_C24, 0, -+ CM_COMB_C23, regval[0], -+ CM_COMB_C24, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMB_C31_C32, 0, -+ CM_COMB_C31, regval[0], -+ CM_COMB_C32, regval[1]); -+ regval += 2; -+ REG_SET_2(CM_COMB_C33_C34, 0, -+ CM_COMB_C33, regval[0], -+ CM_COMB_C34, regval[1]); -+ } -+ -+ REG_SET( -+ CM_GAMUT_REMAP_CONTROL, 0, -+ CM_GAMUT_REMAP_MODE, selection); -+ -+} -+ -+void dcn_dpp_set_gamut_remap( -+ struct transform *xfm, -+ const struct xfm_grph_csc_adjustment *adjust) -+{ -+ struct dcn10_dpp *dcn_xfm = TO_DCN10_DPP(xfm); -+ -+ if (adjust->gamut_adjust_type != GRAPHICS_GAMUT_ADJUST_TYPE_SW) -+ /* Bypass if type is bypass or hw */ -+ program_gamut_remap(dcn_xfm, NULL, GAMUT_REMAP_BYPASS); -+ else { -+ struct fixed31_32 arr_matrix[12]; -+ uint16_t arr_reg_val[12]; -+ -+ arr_matrix[0] = adjust->temperature_matrix[0]; -+ arr_matrix[1] = adjust->temperature_matrix[1]; -+ arr_matrix[2] = adjust->temperature_matrix[2]; -+ arr_matrix[3] = dal_fixed31_32_zero; -+ -+ arr_matrix[4] = adjust->temperature_matrix[3]; -+ arr_matrix[5] = adjust->temperature_matrix[4]; -+ arr_matrix[6] = adjust->temperature_matrix[5]; -+ arr_matrix[7] = dal_fixed31_32_zero; -+ -+ arr_matrix[8] = adjust->temperature_matrix[6]; -+ arr_matrix[9] = adjust->temperature_matrix[7]; -+ arr_matrix[10] = adjust->temperature_matrix[8]; -+ arr_matrix[11] = dal_fixed31_32_zero; -+ -+ convert_float_matrix( -+ arr_reg_val, arr_matrix, 12); -+ -+ program_gamut_remap(dcn_xfm, arr_reg_val, GAMUT_REMAP_COEFF); -+ } -+} -+ -+void oppn10_set_output_csc_default( -+ struct transform *xfm_base, -+ const struct default_adjustment *default_adjust) -+{ -+ -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ uint32_t ocsc_mode = 0; -+ -+ if (default_adjust != NULL) { -+ switch (default_adjust->out_color_space) { -+ case COLOR_SPACE_SRGB: -+ case COLOR_SPACE_2020_RGB_FULLRANGE: -+ ocsc_mode = 0; -+ break; -+ case COLOR_SPACE_SRGB_LIMITED: -+ case COLOR_SPACE_2020_RGB_LIMITEDRANGE: -+ ocsc_mode = 1; -+ break; -+ case COLOR_SPACE_YCBCR601: -+ case COLOR_SPACE_YCBCR601_LIMITED: -+ ocsc_mode = 2; -+ break; -+ case COLOR_SPACE_YCBCR709: -+ case COLOR_SPACE_YCBCR709_LIMITED: -+ case COLOR_SPACE_2020_YCBCR: -+ ocsc_mode = 3; -+ break; -+ case COLOR_SPACE_UNKNOWN: -+ default: -+ break; -+ } -+ } -+ -+ REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode); -+ -+} -+ -+static void oppn10_program_color_matrix( -+ struct dcn10_dpp *xfm, -+ const struct out_csc_color_matrix *tbl_entry) -+{ -+ uint32_t mode; -+ -+ REG_GET(CM_OCSC_CONTROL, CM_OCSC_MODE, &mode); -+ -+ if (tbl_entry == NULL) { -+ BREAK_TO_DEBUGGER(); -+ return; -+ } -+ -+ if (mode == 4) { -+ /*R*/ -+ REG_SET_2(CM_OCSC_C11_C12, 0, -+ CM_OCSC_C11, tbl_entry->regval[0], -+ CM_OCSC_C12, tbl_entry->regval[1]); -+ -+ REG_SET_2(CM_OCSC_C13_C14, 0, -+ CM_OCSC_C13, tbl_entry->regval[2], -+ CM_OCSC_C14, tbl_entry->regval[3]); -+ -+ /*G*/ -+ REG_SET_2(CM_OCSC_C21_C22, 0, -+ CM_OCSC_C21, tbl_entry->regval[4], -+ CM_OCSC_C22, tbl_entry->regval[5]); -+ -+ REG_SET_2(CM_OCSC_C23_C24, 0, -+ CM_OCSC_C23, tbl_entry->regval[6], -+ CM_OCSC_C24, tbl_entry->regval[7]); -+ -+ /*B*/ -+ REG_SET_2(CM_OCSC_C31_C32, 0, -+ CM_OCSC_C31, tbl_entry->regval[8], -+ CM_OCSC_C32, tbl_entry->regval[9]); -+ -+ REG_SET_2(CM_OCSC_C33_C34, 0, -+ CM_OCSC_C33, tbl_entry->regval[10], -+ CM_OCSC_C34, tbl_entry->regval[11]); -+ } else { -+ /*R*/ -+ REG_SET_2(CM_COMB_C11_C12, 0, -+ CM_COMB_C11, tbl_entry->regval[0], -+ CM_COMB_C12, tbl_entry->regval[1]); -+ -+ REG_SET_2(CM_COMB_C13_C14, 0, -+ CM_COMB_C13, tbl_entry->regval[2], -+ CM_COMB_C14, tbl_entry->regval[3]); -+ -+ /*G*/ -+ REG_SET_2(CM_COMB_C21_C22, 0, -+ CM_COMB_C21, tbl_entry->regval[4], -+ CM_COMB_C22, tbl_entry->regval[5]); -+ -+ REG_SET_2(CM_COMB_C23_C24, 0, -+ CM_COMB_C23, tbl_entry->regval[6], -+ CM_COMB_C24, tbl_entry->regval[7]); -+ -+ /*B*/ -+ REG_SET_2(CM_COMB_C31_C32, 0, -+ CM_COMB_C31, tbl_entry->regval[8], -+ CM_COMB_C32, tbl_entry->regval[9]); -+ -+ REG_SET_2(CM_COMB_C33_C34, 0, -+ CM_COMB_C33, tbl_entry->regval[10], -+ CM_COMB_C34, tbl_entry->regval[11]); -+ } -+} -+ -+void oppn10_set_output_csc_adjustment( -+ struct transform *xfm_base, -+ const struct out_csc_color_matrix *tbl_entry) -+{ -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ //enum csc_color_mode config = CSC_COLOR_MODE_GRAPHICS_OUTPUT_CSC; -+ uint32_t ocsc_mode = 4; -+ -+ /** -+ *if (tbl_entry != NULL) { -+ * switch (tbl_entry->color_space) { -+ * case COLOR_SPACE_SRGB: -+ * case COLOR_SPACE_2020_RGB_FULLRANGE: -+ * ocsc_mode = 0; -+ * break; -+ * case COLOR_SPACE_SRGB_LIMITED: -+ * case COLOR_SPACE_2020_RGB_LIMITEDRANGE: -+ * ocsc_mode = 1; -+ * break; -+ * case COLOR_SPACE_YCBCR601: -+ * case COLOR_SPACE_YCBCR601_LIMITED: -+ * ocsc_mode = 2; -+ * break; -+ * case COLOR_SPACE_YCBCR709: -+ * case COLOR_SPACE_YCBCR709_LIMITED: -+ * case COLOR_SPACE_2020_YCBCR: -+ * ocsc_mode = 3; -+ * break; -+ * case COLOR_SPACE_UNKNOWN: -+ * default: -+ * break; -+ * } -+ *} -+ */ -+ -+ REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode); -+ oppn10_program_color_matrix(xfm, tbl_entry); -+} -+ -+void oppn10_power_on_regamma_lut( -+ struct transform *xfm_base, -+ bool power_on) -+{ -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ REG_SET(CM_MEM_PWR_CTRL, 0, -+ RGAM_MEM_PWR_FORCE, power_on == true ? 0:1); -+ -+} -+ -+void opp_program_regamma_lut( -+ struct transform *xfm_base, -+ const struct pwl_result_data *rgb, -+ uint32_t num) -+{ -+ uint32_t i; -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ for (i = 0 ; i < num; i++) { -+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].red_reg); -+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].green_reg); -+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].blue_reg); -+ -+ REG_SET(CM_RGAM_LUT_DATA, 0, -+ CM_RGAM_LUT_DATA, rgb[i].delta_red_reg); -+ REG_SET(CM_RGAM_LUT_DATA, 0, -+ CM_RGAM_LUT_DATA, rgb[i].delta_green_reg); -+ REG_SET(CM_RGAM_LUT_DATA, 0, -+ CM_RGAM_LUT_DATA, rgb[i].delta_blue_reg); -+ -+ } -+ -+} -+ -+void opp_configure_regamma_lut( -+ struct transform *xfm_base, -+ bool is_ram_a) -+{ -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ -+ REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK, -+ CM_RGAM_LUT_WRITE_EN_MASK, 7); -+ REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK, -+ CM_RGAM_LUT_WRITE_SEL, is_ram_a == true ? 0:1); -+ REG_SET(CM_RGAM_LUT_INDEX, 0, CM_RGAM_LUT_INDEX, 0); -+} -+ -+/*program re gamma RAM A*/ -+void opp_program_regamma_luta_settings( -+ struct transform *xfm_base, -+ const struct pwl_params *params) -+{ -+ const struct gamma_curve *curve; -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ -+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_B, 0, -+ CM_RGAM_RAMA_EXP_REGION_START_B, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_B, 0); -+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_G, 0, -+ CM_RGAM_RAMA_EXP_REGION_START_G, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_G, 0); -+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_R, 0, -+ CM_RGAM_RAMA_EXP_REGION_START_R, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_R, 0); -+ -+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_B, 0, -+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope); -+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_G, 0, -+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope); -+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_R, 0, -+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope); -+ -+ REG_SET(CM_RGAM_RAMA_END_CNTL1_B, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_B, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_B, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMA_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y); -+ -+ REG_SET(CM_RGAM_RAMA_END_CNTL1_G, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_G, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_G, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMA_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y); -+ -+ REG_SET(CM_RGAM_RAMA_END_CNTL1_R, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_R, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_R, 0, -+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMA_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y); -+ -+ curve = params->arr_curve_points; -+ REG_SET_4(CM_RGAM_RAMA_REGION_0_1, 0, -+ CM_RGAM_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_2_3, 0, -+ CM_RGAM_RAMA_EXP_REGION2_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION3_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_4_5, 0, -+ CM_RGAM_RAMA_EXP_REGION4_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION5_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_6_7, 0, -+ CM_RGAM_RAMA_EXP_REGION6_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION7_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_8_9, 0, -+ CM_RGAM_RAMA_EXP_REGION8_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION9_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_10_11, 0, -+ CM_RGAM_RAMA_EXP_REGION10_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION11_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_12_13, 0, -+ CM_RGAM_RAMA_EXP_REGION12_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION13_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_14_15, 0, -+ CM_RGAM_RAMA_EXP_REGION14_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION15_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_16_17, 0, -+ CM_RGAM_RAMA_EXP_REGION16_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION17_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_18_19, 0, -+ CM_RGAM_RAMA_EXP_REGION18_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION19_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_20_21, 0, -+ CM_RGAM_RAMA_EXP_REGION20_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION21_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_22_23, 0, -+ CM_RGAM_RAMA_EXP_REGION22_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION23_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_24_25, 0, -+ CM_RGAM_RAMA_EXP_REGION24_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION25_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_26_27, 0, -+ CM_RGAM_RAMA_EXP_REGION26_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION27_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_28_29, 0, -+ CM_RGAM_RAMA_EXP_REGION28_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION29_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_30_31, 0, -+ CM_RGAM_RAMA_EXP_REGION30_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION31_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMA_REGION_32_33, 0, -+ CM_RGAM_RAMA_EXP_REGION32_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMA_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMA_EXP_REGION33_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMA_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num); -+} -+ -+/*program re gamma RAM B*/ -+void opp_program_regamma_lutb_settings( -+ struct transform *xfm_base, -+ const struct pwl_params *params) -+{ -+ const struct gamma_curve *curve; -+ struct dcn10_dpp *xfm = TO_DCN10_DPP(xfm_base); -+ -+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_B, 0, -+ CM_RGAM_RAMB_EXP_REGION_START_B, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_B, 0); -+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_G, 0, -+ CM_RGAM_RAMB_EXP_REGION_START_G, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_G, 0); -+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_R, 0, -+ CM_RGAM_RAMB_EXP_REGION_START_R, params->arr_points[0].custom_float_x, -+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_R, 0); -+ -+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_B, 0, -+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope); -+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_G, 0, -+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope); -+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_R, 0, -+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope); -+ -+ REG_SET(CM_RGAM_RAMB_END_CNTL1_B, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_B, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_B, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMB_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y); -+ -+ REG_SET(CM_RGAM_RAMB_END_CNTL1_G, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_G, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_G, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMB_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y); -+ -+ REG_SET(CM_RGAM_RAMB_END_CNTL1_R, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_R, params->arr_points[1].custom_float_x); -+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_R, 0, -+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope, -+ CM_RGAM_RAMB_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y); -+ -+ curve = params->arr_curve_points; -+ REG_SET_4(CM_RGAM_RAMB_REGION_0_1, 0, -+ CM_RGAM_RAMB_EXP_REGION0_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION1_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_2_3, 0, -+ CM_RGAM_RAMB_EXP_REGION2_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION3_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_4_5, 0, -+ CM_RGAM_RAMB_EXP_REGION4_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION5_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_6_7, 0, -+ CM_RGAM_RAMB_EXP_REGION6_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION7_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_8_9, 0, -+ CM_RGAM_RAMB_EXP_REGION8_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION9_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_10_11, 0, -+ CM_RGAM_RAMB_EXP_REGION10_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION11_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_12_13, 0, -+ CM_RGAM_RAMB_EXP_REGION12_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION13_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_14_15, 0, -+ CM_RGAM_RAMB_EXP_REGION14_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION15_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_16_17, 0, -+ CM_RGAM_RAMB_EXP_REGION16_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION17_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_18_19, 0, -+ CM_RGAM_RAMB_EXP_REGION18_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION19_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_20_21, 0, -+ CM_RGAM_RAMB_EXP_REGION20_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION21_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_22_23, 0, -+ CM_RGAM_RAMB_EXP_REGION22_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION23_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_24_25, 0, -+ CM_RGAM_RAMB_EXP_REGION24_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION25_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_26_27, 0, -+ CM_RGAM_RAMB_EXP_REGION26_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION27_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_28_29, 0, -+ CM_RGAM_RAMB_EXP_REGION28_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION29_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_30_31, 0, -+ CM_RGAM_RAMB_EXP_REGION30_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION31_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num); -+ -+ curve += 2; -+ REG_SET_4(CM_RGAM_RAMB_REGION_32_33, 0, -+ CM_RGAM_RAMB_EXP_REGION32_LUT_OFFSET, curve[0].offset, -+ CM_RGAM_RAMB_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num, -+ CM_RGAM_RAMB_EXP_REGION33_LUT_OFFSET, curve[1].offset, -+ CM_RGAM_RAMB_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num); -+ -+} --- -2.7.4 - |