drm/fourcc: Add fourcc for Mali linear tiled formats
authorAlexandru Gheorghe <alexandru-cosmin.gheorghe@arm.com>
Thu, 1 Nov 2018 15:11:30 +0000 (15:11 +0000)
committerAlexandru Gheorghe <alexandru-cosmin.gheorghe@arm.com>
Fri, 2 Nov 2018 09:55:44 +0000 (09:55 +0000)
Mali-DP implements a number of tiled yuv formats which are not
currently described in drm_fourcc.h.
This adds those definitions and describes their memory layout by
using the newly added char_per_block, block_w, block_h.

Reviewed-by: Brian Starkey <brian.starkey@arm.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@arm.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181101151051.1509-3-alexandru-cosmin.gheorghe@arm.com
drivers/gpu/drm/drm_fourcc.c
include/uapi/drm/drm_fourcc.h

index 8c4a79b3a4ad1c7c540ba8aa90df3642245db4f1..f523948c82b164977697518486f54c4d58e40430 100644 (file)
@@ -225,6 +225,18 @@ const struct drm_format_info *__drm_format_info(u32 format)
                { .format = DRM_FORMAT_UYVY,            .depth = 0,  .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
                { .format = DRM_FORMAT_VYUY,            .depth = 0,  .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
                { .format = DRM_FORMAT_AYUV,            .depth = 0,  .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, .is_yuv = true },
+               { .format = DRM_FORMAT_Y0L0,            .depth = 0,  .num_planes = 1,
+                 .char_per_block = { 8, 0, 0 }, .block_w = { 2, 0, 0 }, .block_h = { 2, 0, 0 },
+                 .hsub = 2, .vsub = 2, .has_alpha = true, .is_yuv = true },
+               { .format = DRM_FORMAT_X0L0,            .depth = 0,  .num_planes = 1,
+                 .char_per_block = { 8, 0, 0 }, .block_w = { 2, 0, 0 }, .block_h = { 2, 0, 0 },
+                 .hsub = 2, .vsub = 2, .is_yuv = true },
+               { .format = DRM_FORMAT_Y0L2,            .depth = 0,  .num_planes = 1,
+                 .char_per_block = { 8, 0, 0 }, .block_w = { 2, 0, 0 }, .block_h = { 2, 0, 0 },
+                 .hsub = 2, .vsub = 2, .has_alpha = true, .is_yuv = true },
+               { .format = DRM_FORMAT_X0L2,            .depth = 0,  .num_planes = 1,
+                 .char_per_block = { 8, 0, 0 }, .block_w = { 2, 0, 0 }, .block_h = { 2, 0, 0 },
+                 .hsub = 2, .vsub = 2, .is_yuv = true },
        };
 
        unsigned int i;
index 0cd40ebfa1b1669e2c29aa757b294cc479e51991..e7e48f1f4a74ccf3d320b43d99bffa0ff3811dc2 100644 (file)
@@ -152,6 +152,20 @@ extern "C" {
 
 #define DRM_FORMAT_AYUV                fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */
 
+/*
+ * packed YCbCr420 2x2 tiled formats
+ * first 64 bits will contain Y,Cb,Cr components for a 2x2 tile
+ */
+/* [63:0]   A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0  1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */
+#define DRM_FORMAT_Y0L0                fourcc_code('Y', '0', 'L', '0')
+/* [63:0]   X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0  1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian */
+#define DRM_FORMAT_X0L0                fourcc_code('X', '0', 'L', '0')
+
+/* [63:0]   A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0  1:1:10:10:10:1:1:10:10:10 little endian */
+#define DRM_FORMAT_Y0L2                fourcc_code('Y', '0', 'L', '2')
+/* [63:0]   X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0  1:1:10:10:10:1:1:10:10:10 little endian */
+#define DRM_FORMAT_X0L2                fourcc_code('X', '0', 'L', '2')
+
 /*
  * 2 plane RGB + A
  * index 0 = RGB plane, same format as the corresponding non _A8 format has