72 lines
2.2 KiB
Diff
72 lines
2.2 KiB
Diff
|
From 531d3d5c89825bade52f4257d264bbb06775a6fa Mon Sep 17 00:00:00 2001
|
||
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
Date: Fri, 24 Jan 2020 14:24:33 +0000
|
||
|
Subject: [PATCH] drm/vc4: Add DRM_FORMAT_P030 support to firmware-kms
|
||
|
|
||
|
Adds support for this format which is 3 10bit samples packed into
|
||
|
4 bytes, as used by the HEVC codec block.
|
||
|
|
||
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
---
|
||
|
drivers/gpu/drm/vc4/vc4_firmware_kms.c | 21 ++++++++++++++++++++-
|
||
|
drivers/gpu/drm/vc4/vc_image_types.h | 4 ++++
|
||
|
2 files changed, 24 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
|
||
|
+++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
|
||
|
@@ -216,6 +216,10 @@ static const struct vc_image_format {
|
||
|
.vc_image = VC_IMAGE_YUV420SP,
|
||
|
.is_vu = 1,
|
||
|
},
|
||
|
+ {
|
||
|
+ .drm = DRM_FORMAT_P030,
|
||
|
+ .vc_image = VC_IMAGE_YUV10COL,
|
||
|
+ },
|
||
|
};
|
||
|
|
||
|
static const struct vc_image_format *vc4_get_vc_image_fmt(u32 drm_format)
|
||
|
@@ -622,7 +626,15 @@ static int vc4_plane_to_mb(struct drm_pl
|
||
|
}
|
||
|
break;
|
||
|
case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||
|
- mb->plane.vc_image_type = VC_IMAGE_YUV_UV;
|
||
|
+ switch (mb->plane.vc_image_type) {
|
||
|
+ case VC_IMAGE_YUV420SP:
|
||
|
+ mb->plane.vc_image_type = VC_IMAGE_YUV_UV;
|
||
|
+ break;
|
||
|
+ /* VC_IMAGE_YUV10COL could be included in here, but it is only
|
||
|
+ * valid as a SAND128 format, so the table at the top will have
|
||
|
+ * already set the correct format.
|
||
|
+ */
|
||
|
+ }
|
||
|
/* Note that the column pitch is passed across in lines, not
|
||
|
* bytes.
|
||
|
*/
|
||
|
@@ -707,6 +719,13 @@ static bool vc4_fkms_format_mod_supporte
|
||
|
case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||
|
return true;
|
||
|
default:
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+ case DRM_FORMAT_P030:
|
||
|
+ switch (fourcc_mod_broadcom_mod(modifier)) {
|
||
|
+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||
|
+ return true;
|
||
|
+ default:
|
||
|
return false;
|
||
|
}
|
||
|
case DRM_FORMAT_NV21:
|
||
|
--- a/drivers/gpu/drm/vc4/vc_image_types.h
|
||
|
+++ b/drivers/gpu/drm/vc4/vc_image_types.h
|
||
|
@@ -139,6 +139,10 @@ enum {
|
||
|
VC_IMAGE_YUV_UV_16,
|
||
|
/* YUV4:2:0 with U,V in side-by-side format */
|
||
|
VC_IMAGE_YUV420_S,
|
||
|
+ /* 10-bit YUV 420 column image format */
|
||
|
+ VC_IMAGE_YUV10COL,
|
||
|
+ /* 32-bpp, 10-bit R/G/B, 2-bit Alpha */
|
||
|
+ VC_IMAGE_RGBA1010102,
|
||
|
|
||
|
VC_IMAGE_MAX, /* bounds for error checking */
|
||
|
VC_IMAGE_FORCE_ENUM_16BIT = 0xffff,
|