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