hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/amd/display/dc/dce/dce_transform.h
....@@ -108,6 +108,68 @@
108108 SRI(DCFE_MEM_PWR_CTRL, DCFE, id), \
109109 SRI(DCFE_MEM_PWR_STATUS, DCFE, id)
110110
111
+#if defined(CONFIG_DRM_AMD_DC_SI)
112
+#define XFM_COMMON_REG_LIST_DCE60_BASE(id) \
113
+ SRI(DATA_FORMAT, LB, id), \
114
+ SRI(GAMUT_REMAP_CONTROL, DCP, id), \
115
+ SRI(GAMUT_REMAP_C11_C12, DCP, id), \
116
+ SRI(GAMUT_REMAP_C13_C14, DCP, id), \
117
+ SRI(GAMUT_REMAP_C21_C22, DCP, id), \
118
+ SRI(GAMUT_REMAP_C23_C24, DCP, id), \
119
+ SRI(GAMUT_REMAP_C31_C32, DCP, id), \
120
+ SRI(GAMUT_REMAP_C33_C34, DCP, id), \
121
+ SRI(OUTPUT_CSC_C11_C12, DCP, id), \
122
+ SRI(OUTPUT_CSC_C13_C14, DCP, id), \
123
+ SRI(OUTPUT_CSC_C21_C22, DCP, id), \
124
+ SRI(OUTPUT_CSC_C23_C24, DCP, id), \
125
+ SRI(OUTPUT_CSC_C31_C32, DCP, id), \
126
+ SRI(OUTPUT_CSC_C33_C34, DCP, id), \
127
+ SRI(OUTPUT_CSC_CONTROL, DCP, id), \
128
+ SRI(REGAMMA_CNTLA_START_CNTL, DCP, id), \
129
+ SRI(REGAMMA_CNTLA_SLOPE_CNTL, DCP, id), \
130
+ SRI(REGAMMA_CNTLA_END_CNTL1, DCP, id), \
131
+ SRI(REGAMMA_CNTLA_END_CNTL2, DCP, id), \
132
+ SRI(REGAMMA_CNTLA_REGION_0_1, DCP, id), \
133
+ SRI(REGAMMA_CNTLA_REGION_2_3, DCP, id), \
134
+ SRI(REGAMMA_CNTLA_REGION_4_5, DCP, id), \
135
+ SRI(REGAMMA_CNTLA_REGION_6_7, DCP, id), \
136
+ SRI(REGAMMA_CNTLA_REGION_8_9, DCP, id), \
137
+ SRI(REGAMMA_CNTLA_REGION_10_11, DCP, id), \
138
+ SRI(REGAMMA_CNTLA_REGION_12_13, DCP, id), \
139
+ SRI(REGAMMA_CNTLA_REGION_14_15, DCP, id), \
140
+ SRI(REGAMMA_LUT_WRITE_EN_MASK, DCP, id), \
141
+ SRI(REGAMMA_LUT_INDEX, DCP, id), \
142
+ SRI(REGAMMA_LUT_DATA, DCP, id), \
143
+ SRI(REGAMMA_CONTROL, DCP, id), \
144
+ SRI(DENORM_CONTROL, DCP, id), \
145
+ SRI(DCP_SPATIAL_DITHER_CNTL, DCP, id), \
146
+ SRI(OUT_ROUND_CONTROL, DCP, id), \
147
+ SRI(SCL_TAP_CONTROL, SCL, id), \
148
+ SRI(SCL_CONTROL, SCL, id), \
149
+ SRI(SCL_BYPASS_CONTROL, SCL, id), \
150
+ SRI(EXT_OVERSCAN_LEFT_RIGHT, SCL, id), \
151
+ SRI(EXT_OVERSCAN_TOP_BOTTOM, SCL, id), \
152
+ SRI(SCL_VERT_FILTER_CONTROL, SCL, id), \
153
+ SRI(SCL_HORZ_FILTER_CONTROL, SCL, id), \
154
+ SRI(SCL_COEF_RAM_SELECT, SCL, id), \
155
+ SRI(SCL_COEF_RAM_TAP_DATA, SCL, id), \
156
+ SRI(VIEWPORT_START, SCL, id), \
157
+ SRI(VIEWPORT_SIZE, SCL, id), \
158
+ SRI(SCL_HORZ_FILTER_SCALE_RATIO, SCL, id), \
159
+ SRI(SCL_VERT_FILTER_SCALE_RATIO, SCL, id), \
160
+ SRI(SCL_VERT_FILTER_INIT, SCL, id), \
161
+ SRI(SCL_AUTOMATIC_MODE_CONTROL, SCL, id), \
162
+ SRI(DC_LB_MEMORY_SPLIT, LB, id), \
163
+ SRI(DC_LB_MEM_SIZE, LB, id), \
164
+ SRI(DCFE_MEM_LIGHT_SLEEP_CNTL, CRTC, id), \
165
+ SRI(SCL_UPDATE, SCL, id), \
166
+ SRI(SCL_F_SHARP_CONTROL, SCL, id)
167
+
168
+#define XFM_COMMON_REG_LIST_DCE60(id) \
169
+ XFM_COMMON_REG_LIST_DCE60_BASE(id), \
170
+ SRI(DCFE_MEM_LIGHT_SLEEP_CNTL, CRTC, id)
171
+#endif
172
+
111173 #define XFM_SF(reg_name, field_name, post_fix)\
112174 .field_name = reg_name ## __ ## field_name ## post_fix
113175
....@@ -203,6 +265,83 @@
203265 XFM_SF(DCFE_MEM_PWR_CTRL, DCP_LUT_MEM_PWR_DIS, mask_sh),\
204266 XFM_SF(DCFE_MEM_PWR_STATUS, DCP_REGAMMA_MEM_PWR_STATE, mask_sh),\
205267 XFM_SF(SCL_MODE, SCL_PSCL_EN, mask_sh)
268
+
269
+#if defined(CONFIG_DRM_AMD_DC_SI)
270
+#define XFM_COMMON_MASK_SH_LIST_DCE60(mask_sh) \
271
+ XFM_COMMON_MASK_SH_LIST_DCE60_COMMON_BASE(mask_sh), \
272
+ OPP_SF(DCFE_MEM_LIGHT_SLEEP_CNTL, REGAMMA_LUT_LIGHT_SLEEP_DIS, mask_sh),\
273
+ OPP_SF(DCFE_MEM_LIGHT_SLEEP_CNTL, DCP_LUT_LIGHT_SLEEP_DIS, mask_sh),\
274
+ OPP_SF(DCFE_MEM_LIGHT_SLEEP_CNTL, REGAMMA_LUT_MEM_PWR_STATE, mask_sh)
275
+
276
+#define XFM_COMMON_MASK_SH_LIST_DCE60_COMMON_BASE(mask_sh) \
277
+ XFM_SF(OUT_ROUND_CONTROL, OUT_ROUND_TRUNC_MODE, mask_sh), \
278
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_SPATIAL_DITHER_EN, mask_sh), \
279
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_SPATIAL_DITHER_MODE, mask_sh), \
280
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_SPATIAL_DITHER_DEPTH, mask_sh), \
281
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_FRAME_RANDOM_ENABLE, mask_sh), \
282
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_RGB_RANDOM_ENABLE, mask_sh), \
283
+ XFM_SF(DCP_SPATIAL_DITHER_CNTL, DCP_HIGHPASS_RANDOM_ENABLE, mask_sh), \
284
+ XFM_SF(DENORM_CONTROL, DENORM_MODE, mask_sh), \
285
+ XFM_SF(DATA_FORMAT, INTERLEAVE_EN, mask_sh), \
286
+ XFM_SF(GAMUT_REMAP_C11_C12, GAMUT_REMAP_C11, mask_sh), \
287
+ XFM_SF(GAMUT_REMAP_C11_C12, GAMUT_REMAP_C12, mask_sh), \
288
+ XFM_SF(GAMUT_REMAP_C13_C14, GAMUT_REMAP_C13, mask_sh), \
289
+ XFM_SF(GAMUT_REMAP_C13_C14, GAMUT_REMAP_C14, mask_sh), \
290
+ XFM_SF(GAMUT_REMAP_C21_C22, GAMUT_REMAP_C21, mask_sh), \
291
+ XFM_SF(GAMUT_REMAP_C21_C22, GAMUT_REMAP_C22, mask_sh), \
292
+ XFM_SF(GAMUT_REMAP_C23_C24, GAMUT_REMAP_C23, mask_sh), \
293
+ XFM_SF(GAMUT_REMAP_C23_C24, GAMUT_REMAP_C24, mask_sh), \
294
+ XFM_SF(GAMUT_REMAP_C31_C32, GAMUT_REMAP_C31, mask_sh), \
295
+ XFM_SF(GAMUT_REMAP_C31_C32, GAMUT_REMAP_C32, mask_sh), \
296
+ XFM_SF(GAMUT_REMAP_C33_C34, GAMUT_REMAP_C33, mask_sh), \
297
+ XFM_SF(GAMUT_REMAP_C33_C34, GAMUT_REMAP_C34, mask_sh), \
298
+ XFM_SF(GAMUT_REMAP_CONTROL, GRPH_GAMUT_REMAP_MODE, mask_sh), \
299
+ XFM_SF(OUTPUT_CSC_C11_C12, OUTPUT_CSC_C11, mask_sh),\
300
+ XFM_SF(OUTPUT_CSC_C11_C12, OUTPUT_CSC_C12, mask_sh),\
301
+ XFM_SF(OUTPUT_CSC_CONTROL, OUTPUT_CSC_GRPH_MODE, mask_sh),\
302
+ XFM_SF(REGAMMA_CNTLA_START_CNTL, REGAMMA_CNTLA_EXP_REGION_START, mask_sh),\
303
+ XFM_SF(REGAMMA_CNTLA_START_CNTL, REGAMMA_CNTLA_EXP_REGION_START_SEGMENT, mask_sh),\
304
+ XFM_SF(REGAMMA_CNTLA_SLOPE_CNTL, REGAMMA_CNTLA_EXP_REGION_LINEAR_SLOPE, mask_sh),\
305
+ XFM_SF(REGAMMA_CNTLA_END_CNTL1, REGAMMA_CNTLA_EXP_REGION_END, mask_sh),\
306
+ XFM_SF(REGAMMA_CNTLA_END_CNTL2, REGAMMA_CNTLA_EXP_REGION_END_BASE, mask_sh),\
307
+ XFM_SF(REGAMMA_CNTLA_END_CNTL2, REGAMMA_CNTLA_EXP_REGION_END_SLOPE, mask_sh),\
308
+ XFM_SF(REGAMMA_CNTLA_REGION_0_1, REGAMMA_CNTLA_EXP_REGION0_LUT_OFFSET, mask_sh),\
309
+ XFM_SF(REGAMMA_CNTLA_REGION_0_1, REGAMMA_CNTLA_EXP_REGION0_NUM_SEGMENTS, mask_sh),\
310
+ XFM_SF(REGAMMA_CNTLA_REGION_0_1, REGAMMA_CNTLA_EXP_REGION1_LUT_OFFSET, mask_sh),\
311
+ XFM_SF(REGAMMA_CNTLA_REGION_0_1, REGAMMA_CNTLA_EXP_REGION1_NUM_SEGMENTS, mask_sh),\
312
+ XFM_SF(REGAMMA_LUT_WRITE_EN_MASK, REGAMMA_LUT_WRITE_EN_MASK, mask_sh),\
313
+ XFM_SF(REGAMMA_CONTROL, GRPH_REGAMMA_MODE, mask_sh),\
314
+ XFM_SF(SCL_TAP_CONTROL, SCL_H_NUM_OF_TAPS, mask_sh), \
315
+ XFM_SF(SCL_TAP_CONTROL, SCL_V_NUM_OF_TAPS, mask_sh), \
316
+ XFM_SF(SCL_BYPASS_CONTROL, SCL_BYPASS_MODE, mask_sh), \
317
+ XFM_SF(EXT_OVERSCAN_LEFT_RIGHT, EXT_OVERSCAN_LEFT, mask_sh), \
318
+ XFM_SF(EXT_OVERSCAN_LEFT_RIGHT, EXT_OVERSCAN_RIGHT, mask_sh), \
319
+ XFM_SF(EXT_OVERSCAN_TOP_BOTTOM, EXT_OVERSCAN_TOP, mask_sh), \
320
+ XFM_SF(EXT_OVERSCAN_TOP_BOTTOM, EXT_OVERSCAN_BOTTOM, mask_sh), \
321
+ XFM_SF(SCL_COEF_RAM_SELECT, SCL_C_RAM_FILTER_TYPE, mask_sh), \
322
+ XFM_SF(SCL_COEF_RAM_SELECT, SCL_C_RAM_PHASE, mask_sh), \
323
+ XFM_SF(SCL_COEF_RAM_SELECT, SCL_C_RAM_TAP_PAIR_IDX, mask_sh), \
324
+ XFM_SF(SCL_COEF_RAM_TAP_DATA, SCL_C_RAM_EVEN_TAP_COEF_EN, mask_sh), \
325
+ XFM_SF(SCL_COEF_RAM_TAP_DATA, SCL_C_RAM_EVEN_TAP_COEF, mask_sh), \
326
+ XFM_SF(SCL_COEF_RAM_TAP_DATA, SCL_C_RAM_ODD_TAP_COEF_EN, mask_sh), \
327
+ XFM_SF(SCL_COEF_RAM_TAP_DATA, SCL_C_RAM_ODD_TAP_COEF, mask_sh), \
328
+ XFM_SF(VIEWPORT_START, VIEWPORT_X_START, mask_sh), \
329
+ XFM_SF(VIEWPORT_START, VIEWPORT_Y_START, mask_sh), \
330
+ XFM_SF(VIEWPORT_SIZE, VIEWPORT_HEIGHT, mask_sh), \
331
+ XFM_SF(VIEWPORT_SIZE, VIEWPORT_WIDTH, mask_sh), \
332
+ XFM_SF(SCL_HORZ_FILTER_SCALE_RATIO, SCL_H_SCALE_RATIO, mask_sh), \
333
+ XFM_SF(SCL_VERT_FILTER_SCALE_RATIO, SCL_V_SCALE_RATIO, mask_sh), \
334
+ XFM_SF(SCL_HORZ_FILTER_INIT_RGB_LUMA, SCL_H_INIT_INT_RGB_Y, mask_sh), \
335
+ XFM_SF(SCL_HORZ_FILTER_INIT_RGB_LUMA, SCL_H_INIT_FRAC_RGB_Y, mask_sh), \
336
+ XFM_SF(SCL_HORZ_FILTER_INIT_CHROMA, SCL_H_INIT_INT_CBCR, mask_sh), \
337
+ XFM_SF(SCL_HORZ_FILTER_INIT_CHROMA, SCL_H_INIT_FRAC_CBCR, mask_sh), \
338
+ XFM_SF(SCL_VERT_FILTER_INIT, SCL_V_INIT_INT, mask_sh), \
339
+ XFM_SF(SCL_VERT_FILTER_INIT, SCL_V_INIT_FRAC, mask_sh), \
340
+ XFM_SF(SCL_HORZ_FILTER_CONTROL, SCL_H_FILTER_PICK_NEAREST, mask_sh), \
341
+ XFM_SF(SCL_VERT_FILTER_CONTROL, SCL_V_FILTER_PICK_NEAREST, mask_sh), \
342
+ XFM_SF(DC_LB_MEMORY_SPLIT, DC_LB_MEMORY_CONFIG, mask_sh), \
343
+ XFM_SF(DC_LB_MEM_SIZE, DC_LB_MEM_SIZE, mask_sh)
344
+#endif
206345
207346 #define XFM_COMMON_MASK_SH_LIST_SOC_BASE(mask_sh) \
208347 XFM_SF(DCP0_OUT_CLAMP_CONTROL_B_CB, OUT_CLAMP_MIN_B_CB, mask_sh), \
....@@ -302,6 +441,7 @@
302441 type DCP_RGB_RANDOM_ENABLE; \
303442 type DCP_HIGHPASS_RANDOM_ENABLE; \
304443 type DENORM_MODE; \
444
+ type INTERLEAVE_EN; \
305445 type PIXEL_DEPTH; \
306446 type PIXEL_EXPAN_MODE; \
307447 type GAMUT_REMAP_C11; \
....@@ -365,12 +505,20 @@
365505 type SCL_V_SCALE_RATIO; \
366506 type SCL_H_INIT_INT; \
367507 type SCL_H_INIT_FRAC; \
508
+ type SCL_H_INIT_INT_RGB_Y; \
509
+ type SCL_H_INIT_FRAC_RGB_Y; \
510
+ type SCL_H_INIT_INT_CBCR; \
511
+ type SCL_H_INIT_FRAC_CBCR; \
368512 type SCL_V_INIT_INT; \
369513 type SCL_V_INIT_FRAC; \
514
+ type DC_LB_MEMORY_CONFIG; \
515
+ type DC_LB_MEM_SIZE; \
370516 type LB_MEMORY_CONFIG; \
371517 type LB_MEMORY_SIZE; \
372518 type SCL_V_2TAP_HARDCODE_COEF_EN; \
373519 type SCL_H_2TAP_HARDCODE_COEF_EN; \
520
+ type SCL_V_FILTER_PICK_NEAREST; \
521
+ type SCL_H_FILTER_PICK_NEAREST; \
374522 type SCL_COEF_UPDATE_COMPLETE; \
375523 type ALPHA_EN
376524
....@@ -383,6 +531,9 @@
383531 };
384532
385533 struct dce_transform_registers {
534
+#if defined(CONFIG_DRM_AMD_DC_SI)
535
+ uint32_t DATA_FORMAT;
536
+#endif
386537 uint32_t LB_DATA_FORMAT;
387538 uint32_t GAMUT_REMAP_CONTROL;
388539 uint32_t GAMUT_REMAP_C11_C12;
....@@ -438,8 +589,16 @@
438589 uint32_t SCL_HORZ_FILTER_SCALE_RATIO;
439590 uint32_t SCL_VERT_FILTER_SCALE_RATIO;
440591 uint32_t SCL_HORZ_FILTER_INIT;
592
+#if defined(CONFIG_DRM_AMD_DC_SI)
593
+ uint32_t SCL_HORZ_FILTER_INIT_RGB_LUMA;
594
+ uint32_t SCL_HORZ_FILTER_INIT_CHROMA;
595
+#endif
441596 uint32_t SCL_VERT_FILTER_INIT;
442597 uint32_t SCL_AUTOMATIC_MODE_CONTROL;
598
+#if defined(CONFIG_DRM_AMD_DC_SI)
599
+ uint32_t DC_LB_MEMORY_SPLIT;
600
+ uint32_t DC_LB_MEM_SIZE;
601
+#endif
443602 uint32_t LB_MEMORY_CTRL;
444603 uint32_t SCL_UPDATE;
445604 uint32_t SCL_F_SHARP_CONTROL;
....@@ -456,6 +615,16 @@
456615 struct init_int_and_frac h_init;
457616 struct init_int_and_frac v_init;
458617 };
618
+
619
+#if defined(CONFIG_DRM_AMD_DC_SI)
620
+struct sclh_ratios_inits {
621
+ uint32_t h_int_scale_ratio;
622
+ uint32_t v_int_scale_ratio;
623
+ struct init_int_and_frac h_init_luma;
624
+ struct init_int_and_frac h_init_chroma;
625
+ struct init_int_and_frac v_init;
626
+};
627
+#endif
459628
460629 enum ram_filter_type {
461630 FILTER_TYPE_RGB_Y_VERTICAL = 0, /* 0 - RGB/Y Vertical filter */
....@@ -489,6 +658,15 @@
489658 const struct dce_transform_shift *xfm_shift,
490659 const struct dce_transform_mask *xfm_mask);
491660
661
+#if defined(CONFIG_DRM_AMD_DC_SI)
662
+void dce60_transform_construct(struct dce_transform *xfm_dce,
663
+ struct dc_context *ctx,
664
+ uint32_t inst,
665
+ const struct dce_transform_registers *regs,
666
+ const struct dce_transform_shift *xfm_shift,
667
+ const struct dce_transform_mask *xfm_mask);
668
+#endif
669
+
492670 bool dce_transform_get_optimal_number_of_taps(
493671 struct transform *xfm,
494672 struct scaler_data *scl_data,