| 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, |