Skip to content

Commit bfd8a5c

Browse files
Andy Yanmmind
authored andcommitted
drm/rockchip: vop2: Add more supported 10bit formats
Add 10 bit RGB and AFBC based YUV format supported by vop2. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Acked-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20231018094318.2476081-1-andyshrk@163.com
1 parent 01d5a75 commit bfd8a5c

2 files changed

Lines changed: 61 additions & 6 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_vop2.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,11 @@ static u32 vop2_get_bpp(const struct drm_format_info *format)
299299
static enum vop2_data_format vop2_convert_format(u32 format)
300300
{
301301
switch (format) {
302+
case DRM_FORMAT_XRGB2101010:
303+
case DRM_FORMAT_ARGB2101010:
304+
case DRM_FORMAT_XBGR2101010:
305+
case DRM_FORMAT_ABGR2101010:
306+
return VOP2_FMT_XRGB101010;
302307
case DRM_FORMAT_XRGB8888:
303308
case DRM_FORMAT_ARGB8888:
304309
case DRM_FORMAT_XBGR8888:
@@ -311,10 +316,19 @@ static enum vop2_data_format vop2_convert_format(u32 format)
311316
case DRM_FORMAT_BGR565:
312317
return VOP2_FMT_RGB565;
313318
case DRM_FORMAT_NV12:
319+
case DRM_FORMAT_NV21:
320+
case DRM_FORMAT_YUV420_8BIT:
314321
return VOP2_FMT_YUV420SP;
322+
case DRM_FORMAT_NV15:
323+
case DRM_FORMAT_YUV420_10BIT:
324+
return VOP2_FMT_YUV420SP_10;
315325
case DRM_FORMAT_NV16:
326+
case DRM_FORMAT_NV61:
316327
return VOP2_FMT_YUV422SP;
328+
case DRM_FORMAT_Y210:
329+
return VOP2_FMT_YUV422SP_10;
317330
case DRM_FORMAT_NV24:
331+
case DRM_FORMAT_NV42:
318332
return VOP2_FMT_YUV444SP;
319333
case DRM_FORMAT_YUYV:
320334
case DRM_FORMAT_YVYU:
@@ -331,6 +345,11 @@ static enum vop2_data_format vop2_convert_format(u32 format)
331345
static enum vop2_afbc_format vop2_convert_afbc_format(u32 format)
332346
{
333347
switch (format) {
348+
case DRM_FORMAT_XRGB2101010:
349+
case DRM_FORMAT_ARGB2101010:
350+
case DRM_FORMAT_XBGR2101010:
351+
case DRM_FORMAT_ABGR2101010:
352+
return VOP2_AFBC_FMT_ARGB2101010;
334353
case DRM_FORMAT_XRGB8888:
335354
case DRM_FORMAT_ARGB8888:
336355
case DRM_FORMAT_XBGR8888:
@@ -342,6 +361,17 @@ static enum vop2_afbc_format vop2_convert_afbc_format(u32 format)
342361
case DRM_FORMAT_RGB565:
343362
case DRM_FORMAT_BGR565:
344363
return VOP2_AFBC_FMT_RGB565;
364+
case DRM_FORMAT_YUV420_8BIT:
365+
return VOP2_AFBC_FMT_YUV420;
366+
case DRM_FORMAT_YUV420_10BIT:
367+
return VOP2_AFBC_FMT_YUV420_10BIT;
368+
case DRM_FORMAT_YVYU:
369+
case DRM_FORMAT_YUYV:
370+
case DRM_FORMAT_VYUY:
371+
case DRM_FORMAT_UYVY:
372+
return VOP2_AFBC_FMT_YUV422;
373+
case DRM_FORMAT_Y210:
374+
return VOP2_AFBC_FMT_YUV422_10BIT;
345375
default:
346376
return VOP2_AFBC_FMT_INVALID;
347377
}
@@ -352,6 +382,8 @@ static enum vop2_afbc_format vop2_convert_afbc_format(u32 format)
352382
static bool vop2_win_rb_swap(u32 format)
353383
{
354384
switch (format) {
385+
case DRM_FORMAT_XBGR2101010:
386+
case DRM_FORMAT_ABGR2101010:
355387
case DRM_FORMAT_XBGR8888:
356388
case DRM_FORMAT_ABGR8888:
357389
case DRM_FORMAT_BGR888:
@@ -364,7 +396,15 @@ static bool vop2_win_rb_swap(u32 format)
364396

365397
static bool vop2_afbc_uv_swap(u32 format)
366398
{
367-
return false;
399+
switch (format) {
400+
case DRM_FORMAT_YUYV:
401+
case DRM_FORMAT_Y210:
402+
case DRM_FORMAT_YUV420_8BIT:
403+
case DRM_FORMAT_YUV420_10BIT:
404+
return true;
405+
default:
406+
return false;
407+
}
368408
}
369409

370410
static bool vop2_win_uv_swap(u32 format)
@@ -373,6 +413,9 @@ static bool vop2_win_uv_swap(u32 format)
373413
case DRM_FORMAT_NV12:
374414
case DRM_FORMAT_NV16:
375415
case DRM_FORMAT_NV24:
416+
case DRM_FORMAT_NV15:
417+
case DRM_FORMAT_YUYV:
418+
case DRM_FORMAT_UYVY:
376419
return true;
377420
default:
378421
return false;

drivers/gpu/drm/rockchip/rockchip_vop2_reg.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#include "rockchip_drm_vop2.h"
1717

1818
static const uint32_t formats_win_full_10bit[] = {
19+
DRM_FORMAT_XRGB2101010,
20+
DRM_FORMAT_ARGB2101010,
21+
DRM_FORMAT_XBGR2101010,
22+
DRM_FORMAT_ABGR2101010,
1923
DRM_FORMAT_XRGB8888,
2024
DRM_FORMAT_ARGB8888,
2125
DRM_FORMAT_XBGR8888,
@@ -24,6 +28,10 @@ static const uint32_t formats_win_full_10bit[] = {
2428
DRM_FORMAT_BGR888,
2529
DRM_FORMAT_RGB565,
2630
DRM_FORMAT_BGR565,
31+
DRM_FORMAT_YUV420_8BIT, /* yuv420_8bit non-Linear mode only */
32+
DRM_FORMAT_YUV420_10BIT, /* yuv420_10bit non-Linear mode only */
33+
DRM_FORMAT_YUYV, /* yuv422_8bit non-Linear mode only*/
34+
DRM_FORMAT_Y210, /* yuv422_10bit non-Linear mode only */
2735
};
2836

2937
static const uint32_t formats_win_full_10bit_yuyv[] = {
@@ -35,11 +43,15 @@ static const uint32_t formats_win_full_10bit_yuyv[] = {
3543
DRM_FORMAT_BGR888,
3644
DRM_FORMAT_RGB565,
3745
DRM_FORMAT_BGR565,
38-
DRM_FORMAT_NV12,
39-
DRM_FORMAT_NV16,
40-
DRM_FORMAT_NV24,
41-
DRM_FORMAT_YVYU,
42-
DRM_FORMAT_VYUY,
46+
DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
47+
DRM_FORMAT_NV21, /* yuv420_8bit linear mode, 2 plane */
48+
DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
49+
DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
50+
DRM_FORMAT_NV61, /* yuv422_8bit linear mode, 2 plane */
51+
DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
52+
DRM_FORMAT_NV42, /* yuv444_8bit linear mode, 2 plane */
53+
DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode */
54+
DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode */
4355
};
4456

4557
static const uint32_t formats_win_lite[] = {

0 commit comments

Comments
 (0)