xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/rga3/rga_hw_config.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) Rockchip Electronics Co., Ltd.
4  *
5  * Author:
6  *	Huang Lee <Putin.li@rock-chips.com>
7  */
8 
9 #include "rga_hw_config.h"
10 
11 /* RGA 1Word = 4Byte */
12 #define WORD_TO_BYTE(w) ((w) * 4)
13 
14 const uint32_t rga3_input_raster_format[] = {
15 	RGA_FORMAT_RGBA_8888,
16 	RGA_FORMAT_BGRA_8888,
17 	RGA_FORMAT_RGB_888,
18 	RGA_FORMAT_BGR_888,
19 	RGA_FORMAT_RGB_565,
20 	RGA_FORMAT_BGR_565,
21 	RGA_FORMAT_YCbCr_422_SP,
22 	RGA_FORMAT_YCbCr_420_SP,
23 	RGA_FORMAT_YCrCb_422_SP,
24 	RGA_FORMAT_YCrCb_420_SP,
25 	RGA_FORMAT_YVYU_422,
26 	RGA_FORMAT_VYUY_422,
27 	RGA_FORMAT_YUYV_422,
28 	RGA_FORMAT_UYVY_422,
29 	RGA_FORMAT_YCbCr_420_SP_10B,
30 	RGA_FORMAT_YCrCb_420_SP_10B,
31 	RGA_FORMAT_YCbCr_422_SP_10B,
32 	RGA_FORMAT_YCrCb_422_SP_10B,
33 	RGA_FORMAT_ARGB_8888,
34 	RGA_FORMAT_ABGR_8888,
35 };
36 
37 const uint32_t rga3_output_raster_format[] = {
38 	RGA_FORMAT_RGBA_8888,
39 	RGA_FORMAT_BGRA_8888,
40 	RGA_FORMAT_RGB_888,
41 	RGA_FORMAT_BGR_888,
42 	RGA_FORMAT_RGB_565,
43 	RGA_FORMAT_BGR_565,
44 	RGA_FORMAT_YCbCr_422_SP,
45 	RGA_FORMAT_YCbCr_420_SP,
46 	RGA_FORMAT_YCrCb_422_SP,
47 	RGA_FORMAT_YCrCb_420_SP,
48 	RGA_FORMAT_YVYU_422,
49 	RGA_FORMAT_VYUY_422,
50 	RGA_FORMAT_YUYV_422,
51 	RGA_FORMAT_UYVY_422,
52 	RGA_FORMAT_YCbCr_420_SP_10B,
53 	RGA_FORMAT_YCrCb_420_SP_10B,
54 	RGA_FORMAT_YCbCr_422_SP_10B,
55 	RGA_FORMAT_YCrCb_422_SP_10B,
56 };
57 
58 const uint32_t rga3_fbcd_format[] = {
59 	RGA_FORMAT_RGBA_8888,
60 	RGA_FORMAT_BGRA_8888,
61 	RGA_FORMAT_RGB_888,
62 	RGA_FORMAT_BGR_888,
63 	RGA_FORMAT_RGB_565,
64 	RGA_FORMAT_BGR_565,
65 	RGA_FORMAT_YCbCr_422_SP,
66 	RGA_FORMAT_YCbCr_420_SP,
67 	RGA_FORMAT_YCrCb_422_SP,
68 	RGA_FORMAT_YCrCb_420_SP,
69 	RGA_FORMAT_YCbCr_420_SP_10B,
70 	RGA_FORMAT_YCrCb_420_SP_10B,
71 	RGA_FORMAT_YCbCr_422_SP_10B,
72 	RGA_FORMAT_YCrCb_422_SP_10B,
73 };
74 
75 const uint32_t rga3_tile_format[] = {
76 	RGA_FORMAT_YCbCr_422_SP,
77 	RGA_FORMAT_YCbCr_420_SP,
78 	RGA_FORMAT_YCrCb_422_SP,
79 	RGA_FORMAT_YCrCb_420_SP,
80 	RGA_FORMAT_YCbCr_420_SP_10B,
81 	RGA_FORMAT_YCrCb_420_SP_10B,
82 	RGA_FORMAT_YCbCr_422_SP_10B,
83 	RGA_FORMAT_YCrCb_422_SP_10B,
84 };
85 
86 const uint32_t rga2e_input_raster_format[] = {
87 	RGA_FORMAT_RGBA_8888,
88 	RGA_FORMAT_RGBX_8888,
89 	RGA_FORMAT_BGRA_8888,
90 	RGA_FORMAT_BGRX_8888,
91 	RGA_FORMAT_RGB_888,
92 	RGA_FORMAT_BGR_888,
93 	RGA_FORMAT_RGB_565,
94 	RGA_FORMAT_BGR_565,
95 	RGA_FORMAT_YCbCr_422_P,
96 	RGA_FORMAT_YCbCr_420_P,
97 	RGA_FORMAT_YCrCb_422_P,
98 	RGA_FORMAT_YCrCb_420_P,
99 	RGA_FORMAT_YCbCr_422_SP,
100 	RGA_FORMAT_YCbCr_420_SP,
101 	RGA_FORMAT_YCrCb_422_SP,
102 	RGA_FORMAT_YCrCb_420_SP,
103 	RGA_FORMAT_YVYU_422,
104 	RGA_FORMAT_VYUY_422,
105 	RGA_FORMAT_YUYV_422,
106 	RGA_FORMAT_UYVY_422,
107 	RGA_FORMAT_YCbCr_420_SP_10B,
108 	RGA_FORMAT_YCrCb_420_SP_10B,
109 	RGA_FORMAT_YCbCr_422_SP_10B,
110 	RGA_FORMAT_YCrCb_422_SP_10B,
111 	RGA_FORMAT_YCbCr_400,
112 	RGA_FORMAT_RGBA_5551,
113 	RGA_FORMAT_BGRA_5551,
114 	RGA_FORMAT_RGBA_4444,
115 	RGA_FORMAT_BGRA_4444,
116 	RGA_FORMAT_XRGB_8888,
117 	RGA_FORMAT_XBGR_8888,
118 	RGA_FORMAT_BPP1,
119 	RGA_FORMAT_BPP2,
120 	RGA_FORMAT_BPP4,
121 	RGA_FORMAT_BPP8,
122 	RGA_FORMAT_ARGB_8888,
123 	RGA_FORMAT_ARGB_5551,
124 	RGA_FORMAT_ARGB_4444,
125 	RGA_FORMAT_ABGR_8888,
126 	RGA_FORMAT_ABGR_5551,
127 	RGA_FORMAT_ABGR_4444,
128 };
129 
130 const uint32_t rga2e_output_raster_format[] = {
131 	RGA_FORMAT_RGBA_8888,
132 	RGA_FORMAT_RGBX_8888,
133 	RGA_FORMAT_BGRA_8888,
134 	RGA_FORMAT_BGRX_8888,
135 	RGA_FORMAT_RGB_888,
136 	RGA_FORMAT_BGR_888,
137 	RGA_FORMAT_RGB_565,
138 	RGA_FORMAT_BGR_565,
139 	RGA_FORMAT_YCbCr_422_P,
140 	RGA_FORMAT_YCbCr_420_P,
141 	RGA_FORMAT_YCrCb_422_P,
142 	RGA_FORMAT_YCrCb_420_P,
143 	RGA_FORMAT_YCbCr_422_SP,
144 	RGA_FORMAT_YCbCr_420_SP,
145 	RGA_FORMAT_YCrCb_422_SP,
146 	RGA_FORMAT_YCrCb_420_SP,
147 	RGA_FORMAT_YVYU_420,
148 	RGA_FORMAT_VYUY_420,
149 	RGA_FORMAT_YUYV_420,
150 	RGA_FORMAT_UYVY_420,
151 	RGA_FORMAT_YVYU_422,
152 	RGA_FORMAT_VYUY_422,
153 	RGA_FORMAT_YUYV_422,
154 	RGA_FORMAT_UYVY_422,
155 	RGA_FORMAT_YCbCr_420_SP_10B,
156 	RGA_FORMAT_YCrCb_420_SP_10B,
157 	RGA_FORMAT_YCbCr_422_SP_10B,
158 	RGA_FORMAT_YCrCb_422_SP_10B,
159 	RGA_FORMAT_Y4,
160 	RGA_FORMAT_YCbCr_400,
161 	RGA_FORMAT_RGBA_5551,
162 	RGA_FORMAT_BGRA_5551,
163 	RGA_FORMAT_RGBA_4444,
164 	RGA_FORMAT_BGRA_4444,
165 	RGA_FORMAT_XRGB_8888,
166 	RGA_FORMAT_XBGR_8888,
167 	RGA_FORMAT_ARGB_8888,
168 	RGA_FORMAT_ARGB_5551,
169 	RGA_FORMAT_ARGB_4444,
170 	RGA_FORMAT_ABGR_8888,
171 	RGA_FORMAT_ABGR_5551,
172 	RGA_FORMAT_ABGR_4444,
173 };
174 
175 const struct rga_win_data rga3_win_data[] = {
176 	{
177 		.name = "rga3-win0",
178 		.raster_formats = rga3_input_raster_format,
179 		.num_of_raster_formats = ARRAY_SIZE(rga3_input_raster_format),
180 		.fbc_formats = rga3_fbcd_format,
181 		.num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format),
182 		.tile_formats = rga3_tile_format,
183 		.num_of_tile_formats = ARRAY_SIZE(rga3_tile_format),
184 		.supported_rotations = RGA_MODE_ROTATE_MASK,
185 		.scale_up_mode = RGA_SCALE_UP_BIC,
186 		.scale_down_mode = RGA_SCALE_DOWN_AVG,
187 		.rd_mode = RGA_RASTER_MODE | RGA_FBC_MODE | RGA_TILE_MODE,
188 
189 	},
190 
191 	{
192 		.name = "rga3-win1",
193 		.raster_formats = rga3_input_raster_format,
194 		.num_of_raster_formats = ARRAY_SIZE(rga3_input_raster_format),
195 		.fbc_formats = rga3_fbcd_format,
196 		.num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format),
197 		.tile_formats = rga3_tile_format,
198 		.num_of_tile_formats = ARRAY_SIZE(rga3_tile_format),
199 		.supported_rotations = RGA_MODE_ROTATE_MASK,
200 		.scale_up_mode = RGA_SCALE_UP_BIC,
201 		.scale_down_mode = RGA_SCALE_DOWN_AVG,
202 		.rd_mode = RGA_RASTER_MODE | RGA_FBC_MODE | RGA_TILE_MODE,
203 
204 	},
205 
206 	{
207 		.name = "rga3-wr",
208 		.raster_formats = rga3_output_raster_format,
209 		.num_of_raster_formats = ARRAY_SIZE(rga3_output_raster_format),
210 		.fbc_formats = rga3_fbcd_format,
211 		.num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format),
212 		.tile_formats = rga3_tile_format,
213 		.num_of_tile_formats = ARRAY_SIZE(rga3_tile_format),
214 		.supported_rotations = 0,
215 		.scale_up_mode = RGA_SCALE_UP_NONE,
216 		.scale_down_mode = RGA_SCALE_DOWN_NONE,
217 		.rd_mode = RGA_RASTER_MODE | RGA_FBC_MODE | RGA_TILE_MODE,
218 
219 	},
220 };
221 
222 const struct rga_win_data rga2e_win_data[] = {
223 	{
224 		.name = "rga2e-src0",
225 		.raster_formats = rga2e_input_raster_format,
226 		.num_of_raster_formats = ARRAY_SIZE(rga2e_input_raster_format),
227 		.supported_rotations = RGA_MODE_ROTATE_MASK,
228 		.scale_up_mode = RGA_SCALE_UP_BIC,
229 		.scale_down_mode = RGA_SCALE_DOWN_AVG,
230 		.rd_mode = RGA_RASTER_MODE,
231 
232 	},
233 
234 	{
235 		.name = "rga2e-src1",
236 		.raster_formats = rga2e_input_raster_format,
237 		.num_of_raster_formats = ARRAY_SIZE(rga2e_input_raster_format),
238 		.supported_rotations = RGA_MODE_ROTATE_MASK,
239 		.scale_up_mode = RGA_SCALE_UP_BIC,
240 		.scale_down_mode = RGA_SCALE_DOWN_AVG,
241 		.rd_mode = RGA_RASTER_MODE,
242 
243 	},
244 
245 	{
246 		.name = "rga2-dst",
247 		.raster_formats = rga2e_output_raster_format,
248 		.num_of_raster_formats = ARRAY_SIZE(rga2e_output_raster_format),
249 		.supported_rotations = 0,
250 		.scale_up_mode = RGA_SCALE_UP_NONE,
251 		.scale_down_mode = RGA_SCALE_DOWN_NONE,
252 		.rd_mode = RGA_RASTER_MODE,
253 
254 	},
255 };
256 
257 const struct rga_hw_data rga3_data = {
258 	.version = 0,
259 	.input_range = {{68, 2}, {8176, 8176}},
260 	.output_range = {{68, 2}, {8128, 8128}},
261 
262 	.win = rga3_win_data,
263 	.win_size = ARRAY_SIZE(rga3_win_data),
264 	/* 1 << factor mean real factor */
265 	.max_upscale_factor = 3,
266 	.max_downscale_factor = 3,
267 
268 	.byte_stride_align = 16,
269 	.max_byte_stride = WORD_TO_BYTE(8192),
270 
271 	.feature = RGA_COLOR_KEY,
272 	.csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
273 			RGA_MODE_CSC_BT709 | RGA_MODE_CSC_BT2020,
274 	.csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
275 			RGA_MODE_CSC_BT709 | RGA_MODE_CSC_BT2020,
276 	.mmu = RGA_IOMMU,
277 };
278 
279 const struct rga_hw_data rga2e_data = {
280 	.version = 0,
281 	.input_range = {{2, 2}, {8192, 8192}},
282 	.output_range = {{2, 2}, {4096, 4096}},
283 
284 	.win = rga2e_win_data,
285 	.win_size = ARRAY_SIZE(rga2e_win_data),
286 	/* 1 << factor mean real factor */
287 	.max_upscale_factor = 4,
288 	.max_downscale_factor = 4,
289 
290 	.byte_stride_align = 4,
291 	.max_byte_stride = WORD_TO_BYTE(8192),
292 
293 	.feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE |
294 		   RGA_COLOR_KEY | RGA_ROP_CALCULATE |
295 		   RGA_NN_QUANTIZE | RGA_DITHER,
296 	.csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
297 			RGA_MODE_CSC_BT709,
298 	.csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
299 			RGA_MODE_CSC_BT709,
300 	.mmu = RGA_MMU,
301 };
302 
303 const struct rga_hw_data rga2e_1106_data = {
304 	.version = 0,
305 	.input_range = {{2, 2}, {8192, 8192}},
306 	.output_range = {{2, 2}, {4096, 4096}},
307 
308 	.win = rga2e_win_data,
309 	.win_size = ARRAY_SIZE(rga2e_win_data),
310 	/* 1 << factor mean real factor */
311 	.max_upscale_factor = 4,
312 	.max_downscale_factor = 4,
313 
314 	.byte_stride_align = 4,
315 	.max_byte_stride = WORD_TO_BYTE(8192),
316 
317 	.feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE |
318 		   RGA_COLOR_KEY | RGA_ROP_CALCULATE |
319 		   RGA_NN_QUANTIZE | RGA_DITHER | RGA_MOSAIC |
320 		   RGA_YIN_YOUT | RGA_YUV_HDS | RGA_YUV_VDS |
321 		   RGA_OSD | RGA_PRE_INTR,
322 	.csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
323 			RGA_MODE_CSC_BT709,
324 	.csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
325 			RGA_MODE_CSC_BT709,
326 	.mmu = RGA_NONE_MMU,
327 };
328 
329 const struct rga_hw_data rga2e_iommu_data = {
330 	.version = 0,
331 	.input_range = {{2, 2}, {8192, 8192}},
332 	.output_range = {{2, 2}, {4096, 4096}},
333 
334 	.win = rga2e_win_data,
335 	.win_size = ARRAY_SIZE(rga2e_win_data),
336 	/* 1 << factor mean real factor */
337 	.max_upscale_factor = 4,
338 	.max_downscale_factor = 4,
339 
340 	.byte_stride_align = 4,
341 	.max_byte_stride = WORD_TO_BYTE(8192),
342 
343 	.feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE |
344 		   RGA_COLOR_KEY | RGA_ROP_CALCULATE |
345 		   RGA_NN_QUANTIZE | RGA_DITHER | RGA_MOSAIC |
346 		   RGA_YIN_YOUT | RGA_YUV_HDS | RGA_YUV_VDS |
347 		   RGA_OSD | RGA_PRE_INTR,
348 	.csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
349 			RGA_MODE_CSC_BT709,
350 	.csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F |
351 			RGA_MODE_CSC_BT709,
352 	.mmu = RGA_IOMMU,
353 };
354