drm/i915: Force planar YUV coordinates to be a multiple of 2, v2.
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 20 Sep 2018 10:27:11 +0000 (12:27 +0200)
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Fri, 21 Sep 2018 17:30:54 +0000 (19:30 +0200)
We can't make NV12 work any other way. The scaler doesn't handle odd
coordinates well, and we will get visual corruption on the screen.

Changes since v1:
- Put the check in intel_plane_check_src_coordinates. (Ville)

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180920102711.4184-9-maarten.lankhorst@linux.intel.com
drivers/gpu/drm/i915/intel_sprite.c

index 7d3c7469d2719928075bf676b4933fcd8f0169f8..46c6336cb85831dcc016faa2f592daba244cd39f 100644 (file)
@@ -253,13 +253,20 @@ int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state)
        src->y2 = (src_y + src_h) << 16;
 
        if (fb->format->is_yuv &&
-           fb->format->format != DRM_FORMAT_NV12 &&
            (src_x & 1 || src_w & 1)) {
                DRM_DEBUG_KMS("src x/w (%u, %u) must be a multiple of 2 for YUV planes\n",
                              src_x, src_w);
                return -EINVAL;
        }
 
+       if (fb->format->is_yuv &&
+           fb->format->num_planes > 1 &&
+           (src_y & 1 || src_h & 1)) {
+               DRM_DEBUG_KMS("src y/h (%u, %u) must be a multiple of 2 for planar YUV planes\n",
+                             src_y, src_h);
+               return -EINVAL;
+       }
+
        return 0;
 }