drm/vc4: Limit SAND tiling support to semiplanar YUV420 formats
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>
Fri, 14 Dec 2018 14:12:18 +0000 (15:12 +0100)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Fri, 11 Jan 2019 15:53:08 +0000 (16:53 +0100)
Despite what the HVS documentation indicates, the VC4 does not actually
support SAND tiling modes for any RGB format and only semiplanar YUV420
formats (NV12/NV21) can be used in these tiling modes.

The driver currently claims to support RGB formats for the associated
modifiers, so remove them from the supported list in the
format_mod_supported helper for RGB formats.

Remove further checks that are no longer necessary along the way, since
semi-planar YUV420 formats support every SAND tiling mode.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181214141218.12671-1-paul.kocialkowski@bootlin.com
drivers/gpu/drm/vc4/vc4_plane.c

index 2901ed0c52230f2a77b79850478b0cd652a39565..d098337c10e9394d843c192ab08595566f631c59 100644 (file)
@@ -675,20 +675,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
                uint32_t param = fourcc_mod_broadcom_param(fb->modifier);
                u32 tile_w, tile, x_off, pix_per_tile;
 
-               /* Column-based NV12 or RGBA.
-                */
-               if (fb->format->num_planes > 1) {
-                       if (hvs_format != HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE) {
-                               DRM_DEBUG_KMS("SAND format only valid for NV12/21");
-                               return -EINVAL;
-                       }
-                       hvs_format = HVS_PIXEL_FORMAT_H264;
-               } else {
-                       if (base_format_mod == DRM_FORMAT_MOD_BROADCOM_SAND256) {
-                               DRM_DEBUG_KMS("SAND256 format only valid for H.264");
-                               return -EINVAL;
-                       }
-               }
+               hvs_format = HVS_PIXEL_FORMAT_H264;
 
                switch (base_format_mod) {
                case DRM_FORMAT_MOD_BROADCOM_SAND64:
@@ -1151,8 +1138,6 @@ static bool vc4_format_mod_supported(struct drm_plane *plane,
                switch (fourcc_mod_broadcom_mod(modifier)) {
                case DRM_FORMAT_MOD_LINEAR:
                case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED:
-               case DRM_FORMAT_MOD_BROADCOM_SAND64:
-               case DRM_FORMAT_MOD_BROADCOM_SAND128:
                        return true;
                default:
                        return false;