forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c
....@@ -51,10 +51,6 @@
5151
5252 #define NUM_ELEMENTS(a) (sizeof(a) / sizeof((a)[0]))
5353
54
-struct dcn10_input_csc_matrix {
55
- enum dc_color_space color_space;
56
- uint16_t regval[12];
57
-};
5854
5955 enum dcn10_coef_filter_type_sel {
6056 SCL_COEF_LUMA_VERT_FILTER = 0,
....@@ -90,33 +86,6 @@
9086 DSCL_MODE_SCALING_420_LUMA_BYPASS = 4,
9187 DSCL_MODE_SCALING_420_CHROMA_BYPASS = 5,
9288 DSCL_MODE_DSCL_BYPASS = 6
93
-};
94
-
95
-enum gamut_remap_select {
96
- GAMUT_REMAP_BYPASS = 0,
97
- GAMUT_REMAP_COEFF,
98
- GAMUT_REMAP_COMA_COEFF,
99
- GAMUT_REMAP_COMB_COEFF
100
-};
101
-
102
-static const struct dcn10_input_csc_matrix dcn10_input_csc_matrix[] = {
103
- {COLOR_SPACE_SRGB,
104
- {0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} },
105
- {COLOR_SPACE_SRGB_LIMITED,
106
- {0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} },
107
- {COLOR_SPACE_YCBCR601,
108
- {0x2cdd, 0x2000, 0, 0xe991, 0xe926, 0x2000, 0xf4fd, 0x10ef,
109
- 0, 0x2000, 0x38b4, 0xe3a6} },
110
- {COLOR_SPACE_YCBCR601_LIMITED,
111
- {0x3353, 0x2568, 0, 0xe400, 0xe5dc, 0x2568, 0xf367, 0x1108,
112
- 0, 0x2568, 0x40de, 0xdd3a} },
113
- {COLOR_SPACE_YCBCR709,
114
- {0x3265, 0x2000, 0, 0xe6ce, 0xf105, 0x2000, 0xfa01, 0xa7d, 0,
115
- 0x2000, 0x3b61, 0xe24f} },
116
-
117
- {COLOR_SPACE_YCBCR709_LIMITED,
118
- {0x39a6, 0x2568, 0, 0xe0d6, 0xeedd, 0x2568, 0xf925, 0x9a8, 0,
119
- 0x2568, 0x43ee, 0xdbb2} }
12089 };
12190
12291 static void program_gamut_remap(
....@@ -363,6 +332,8 @@
363332 uint32_t i;
364333 struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base);
365334
335
+ REG_SEQ_START();
336
+
366337 for (i = 0 ; i < num; i++) {
367338 REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].red_reg);
368339 REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].green_reg);
....@@ -454,7 +425,7 @@
454425 {
455426 struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base);
456427 int i;
457
- int arr_size = sizeof(dcn10_input_csc_matrix)/sizeof(struct dcn10_input_csc_matrix);
428
+ int arr_size = sizeof(dpp_input_csc_matrix)/sizeof(struct dpp_input_csc_matrix);
458429 const uint16_t *regval = NULL;
459430 uint32_t cur_select = 0;
460431 enum dcn10_input_csc_select select;
....@@ -467,8 +438,8 @@
467438
468439 if (tbl_entry == NULL) {
469440 for (i = 0; i < arr_size; i++)
470
- if (dcn10_input_csc_matrix[i].color_space == color_space) {
471
- regval = dcn10_input_csc_matrix[i].regval;
441
+ if (dpp_input_csc_matrix[i].color_space == color_space) {
442
+ regval = dpp_input_csc_matrix[i].regval;
472443 break;
473444 }
474445
....@@ -637,10 +608,16 @@
637608 case IPP_DEGAMMA_MODE_HW_xvYCC:
638609 REG_UPDATE(CM_DGAM_CONTROL, CM_DGAM_LUT_MODE, 2);
639610 break;
611
+ case IPP_DEGAMMA_MODE_USER_PWL:
612
+ REG_UPDATE(CM_DGAM_CONTROL, CM_DGAM_LUT_MODE, 3);
613
+ break;
640614 default:
641615 BREAK_TO_DEBUGGER();
642616 break;
643617 }
618
+
619
+ REG_SEQ_SUBMIT();
620
+ REG_SEQ_WAIT_DONE();
644621 }
645622
646623 void dpp1_degamma_ram_select(
....@@ -742,6 +719,8 @@
742719 /* COLOR_KEYER_CONTROL.COLOR_KEYER_EN = 0 this should be default */
743720 if (dpp->tf_mask->CM_BYPASS_EN)
744721 REG_SET(CM_CONTROL, 0, CM_BYPASS_EN, 1);
722
+ else
723
+ REG_SET(CM_CONTROL, 0, CM_BYPASS, 1);
745724
746725 /* Setting degamma bypass for now */
747726 REG_SET(CM_DGAM_CONTROL, 0, CM_DGAM_LUT_MODE, 0);