blob: f6264ff04a892b54c78f04c282e86b7f989938d1 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From 531d3d5c89825bade52f4257d264bbb06775a6fa Mon Sep 17 00:00:00 2001
2From: Dave Stevenson <dave.stevenson@raspberrypi.com>
3Date: Fri, 24 Jan 2020 14:24:33 +0000
4Subject: [PATCH] drm/vc4: Add DRM_FORMAT_P030 support to firmware-kms
5
6Adds support for this format which is 3 10bit samples packed into
74 bytes, as used by the HEVC codec block.
8
9Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
10---
11 drivers/gpu/drm/vc4/vc4_firmware_kms.c | 21 ++++++++++++++++++++-
12 drivers/gpu/drm/vc4/vc_image_types.h | 4 ++++
13 2 files changed, 24 insertions(+), 1 deletion(-)
14
15--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
16+++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
17@@ -216,6 +216,10 @@ static const struct vc_image_format {
18 .vc_image = VC_IMAGE_YUV420SP,
19 .is_vu = 1,
20 },
21+ {
22+ .drm = DRM_FORMAT_P030,
23+ .vc_image = VC_IMAGE_YUV10COL,
24+ },
25 };
26
27 static const struct vc_image_format *vc4_get_vc_image_fmt(u32 drm_format)
28@@ -622,7 +626,15 @@ static int vc4_plane_to_mb(struct drm_pl
29 }
30 break;
31 case DRM_FORMAT_MOD_BROADCOM_SAND128:
32- mb->plane.vc_image_type = VC_IMAGE_YUV_UV;
33+ switch (mb->plane.vc_image_type) {
34+ case VC_IMAGE_YUV420SP:
35+ mb->plane.vc_image_type = VC_IMAGE_YUV_UV;
36+ break;
37+ /* VC_IMAGE_YUV10COL could be included in here, but it is only
38+ * valid as a SAND128 format, so the table at the top will have
39+ * already set the correct format.
40+ */
41+ }
42 /* Note that the column pitch is passed across in lines, not
43 * bytes.
44 */
45@@ -707,6 +719,13 @@ static bool vc4_fkms_format_mod_supporte
46 case DRM_FORMAT_MOD_BROADCOM_SAND128:
47 return true;
48 default:
49+ return false;
50+ }
51+ case DRM_FORMAT_P030:
52+ switch (fourcc_mod_broadcom_mod(modifier)) {
53+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
54+ return true;
55+ default:
56 return false;
57 }
58 case DRM_FORMAT_NV21:
59--- a/drivers/gpu/drm/vc4/vc_image_types.h
60+++ b/drivers/gpu/drm/vc4/vc_image_types.h
61@@ -139,6 +139,10 @@ enum {
62 VC_IMAGE_YUV_UV_16,
63 /* YUV4:2:0 with U,V in side-by-side format */
64 VC_IMAGE_YUV420_S,
65+ /* 10-bit YUV 420 column image format */
66+ VC_IMAGE_YUV10COL,
67+ /* 32-bpp, 10-bit R/G/B, 2-bit Alpha */
68+ VC_IMAGE_RGBA1010102,
69
70 VC_IMAGE_MAX, /* bounds for error checking */
71 VC_IMAGE_FORCE_ENUM_16BIT = 0xffff,