hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/video/rockchip/rga3/include/rga.h
....@@ -139,6 +139,7 @@
139139 RGA_YUV_VDS = 0x1 << 10,
140140 RGA_OSD = 0x1 << 11,
141141 RGA_PRE_INTR = 0x1 << 12,
142
+ RGA_FULL_CSC = 0x1 << 13,
142143 };
143144
144145 enum rga_surf_format {
....@@ -201,6 +202,55 @@
201202 RGA_FORMAT_RGBA_2BPP = 0x30,
202203
203204 RGA_FORMAT_UNKNOWN = 0x100,
205
+};
206
+
207
+enum rga_alpha_mode {
208
+ RGA_ALPHA_STRAIGHT = 0,
209
+ RGA_ALPHA_INVERSE = 1,
210
+};
211
+
212
+enum rga_global_blend_mode {
213
+ RGA_ALPHA_GLOBAL = 0,
214
+ RGA_ALPHA_PER_PIXEL = 1,
215
+ RGA_ALPHA_PER_PIXEL_GLOBAL = 2,
216
+};
217
+
218
+enum rga_alpha_cal_mode {
219
+ RGA_ALPHA_SATURATION = 0,
220
+ RGA_ALPHA_NO_SATURATION = 1,
221
+};
222
+
223
+enum rga_factor_mode {
224
+ RGA_ALPHA_ZERO = 0,
225
+ RGA_ALPHA_ONE = 1,
226
+ /*
227
+ * When used as a factor for the SRC channel, it indicates
228
+ * the use of the DST channel's alpha value, and vice versa.
229
+ */
230
+ RGA_ALPHA_OPPOSITE = 2,
231
+ RGA_ALPHA_OPPOSITE_INVERSE = 3,
232
+ RGA_ALPHA_OWN = 4,
233
+};
234
+
235
+enum rga_color_mode {
236
+ RGA_ALPHA_PRE_MULTIPLIED = 0,
237
+ RGA_ALPHA_NO_PRE_MULTIPLIED = 1,
238
+};
239
+
240
+enum rga_alpha_blend_mode {
241
+ RGA_ALPHA_NONE = 0,
242
+ RGA_ALPHA_BLEND_SRC,
243
+ RGA_ALPHA_BLEND_DST,
244
+ RGA_ALPHA_BLEND_SRC_OVER,
245
+ RGA_ALPHA_BLEND_DST_OVER,
246
+ RGA_ALPHA_BLEND_SRC_IN,
247
+ RGA_ALPHA_BLEND_DST_IN,
248
+ RGA_ALPHA_BLEND_SRC_OUT,
249
+ RGA_ALPHA_BLEND_DST_OUT,
250
+ RGA_ALPHA_BLEND_SRC_ATOP,
251
+ RGA_ALPHA_BLEND_DST_ATOP,
252
+ RGA_ALPHA_BLEND_XOR,
253
+ RGA_ALPHA_BLEND_CLEAR,
204254 };
205255
206256 #define RGA_SCHED_PRIORITY_DEFAULT 0
....@@ -329,6 +379,16 @@
329379 struct rga_csc_coe coe_y;
330380 struct rga_csc_coe coe_u;
331381 struct rga_csc_coe coe_v;
382
+};
383
+
384
+struct rga_csc_range {
385
+ uint16_t max;
386
+ uint16_t min;
387
+};
388
+
389
+struct rga_csc_clip {
390
+ struct rga_csc_range y;
391
+ struct rga_csc_range uv;
332392 };
333393
334394 struct rga_mosaic_info {
....@@ -507,6 +567,12 @@
507567 uint16_t enable;
508568 };
509569
570
+struct rga_feature {
571
+ uint32_t global_alpha_en:1;
572
+ uint32_t full_csc_clip_en:1;
573
+ uint32_t user_close_fence:1;
574
+};
575
+
510576 struct rga_req {
511577 /* (enum) process mode sel */
512578 uint8_t render_mode;
....@@ -563,7 +629,7 @@
563629 /* porter duff alpha mode sel */
564630 uint8_t PD_mode;
565631
566
- /* global alpha value */
632
+ /* legacy: global alpha value */
567633 uint8_t alpha_global_value;
568634
569635 /* rop2/3/4 code scan from rop code table*/
....@@ -625,7 +691,28 @@
625691
626692 struct rga_pre_intr_info pre_intr_info;
627693
628
- uint8_t reservr[59];
694
+ /* global alpha */
695
+ uint8_t fg_global_alpha;
696
+ uint8_t bg_global_alpha;
697
+
698
+ struct rga_feature feature;
699
+
700
+ struct rga_csc_clip full_csc_clip;
701
+
702
+ uint8_t reservr[43];
703
+};
704
+
705
+struct rga_alpha_config {
706
+ bool enable;
707
+ bool fg_pre_multiplied;
708
+ bool bg_pre_multiplied;
709
+ bool fg_pixel_alpha_en;
710
+ bool bg_pixel_alpha_en;
711
+ bool fg_global_alpha_en;
712
+ bool bg_global_alpha_en;
713
+ uint16_t fg_global_alpha_value;
714
+ uint16_t bg_global_alpha_value;
715
+ enum rga_alpha_blend_mode mode;
629716 };
630717
631718 struct rga2_req {
....@@ -672,29 +759,7 @@
672759 /* ([7] = 1 gradient fill mode sel) */
673760 u16 alpha_rop_flag;
674761
675
- /* [0] SrcAlphaMode0 */
676
- /* [2:1] SrcGlobalAlphaMode0 */
677
- /* [3] SrcAlphaSelectMode0 */
678
- /* [6:4] SrcFactorMode0 */
679
- /* [7] SrcColorMode */
680
-
681
- /* [8] DstAlphaMode0 */
682
- /* [10:9] DstGlobalAlphaMode0 */
683
- /* [11] DstAlphaSelectMode0 */
684
- /* [14:12] DstFactorMode0 */
685
- /* [15] DstColorMode0 */
686
- u16 alpha_mode_0;
687
-
688
- /* [0] SrcAlphaMode1 */
689
- /* [2:1] SrcGlobalAlphaMode1 */
690
- /* [3] SrcAlphaSelectMode1 */
691
- /* [6:4] SrcFactorMode1 */
692
-
693
- /* [8] DstAlphaMode1 */
694
- /* [10:9] DstGlobalAlphaMode1 */
695
- /* [11] DstAlphaSelectMode1 */
696
- /* [14:12] DstFactorMode1 */
697
- u16 alpha_mode_1;
762
+ struct rga_alpha_config alpha_config;
698763
699764 /* 0 1 2 3 */
700765 u8 scale_bicu_mode;
....@@ -782,8 +847,10 @@
782847
783848 u16 alpha_rop_flag;
784849
785
- u16 alpha_mode_0;
786
- u16 alpha_mode_1;
850
+ struct rga_alpha_config alpha_config;
851
+
852
+ /* for abb mode presever alpha. */
853
+ bool abb_alpha_pass;
787854
788855 u8 scale_bicu_mode;
789856