kernel: bump 5.4 to 5.4.48
[oweals/openwrt.git] / target / linux / bcm27xx / patches-5.4 / 950-0468-drm-vc4-Add-DRM_FORMAT_P030-support-to-firmware-kms.patch
1 From 531d3d5c89825bade52f4257d264bbb06775a6fa Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dave.stevenson@raspberrypi.com>
3 Date: Fri, 24 Jan 2020 14:24:33 +0000
4 Subject: [PATCH] drm/vc4: Add DRM_FORMAT_P030 support to firmware-kms
5
6 Adds support for this format which is 3 10bit samples packed into
7 4 bytes, as used by the HEVC codec block.
8
9 Signed-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,