drm/i915: Check framebuffer stride more thoroughly
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 31 Oct 2012 15:50:18 +0000 (17:50 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Sun, 11 Nov 2012 22:51:12 +0000 (23:51 +0100)
Make sure the the framebuffer stride is smaller than 32k. That
seems to be the limit on recent hardware. Not quite sure if
<=Gen4 has smaller limits.

Also when using a tiled memory make sure the object stride matches
the framebuffer stride.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c

index 14fc264..2b598eb 100644 (file)
@@ -8352,6 +8352,14 @@ int intel_framebuffer_init(struct drm_device *dev,
        if (mode_cmd->pitches[0] & 63)
                return -EINVAL;
 
+       /* FIXME <= Gen4 stride limits are bit unclear */
+       if (mode_cmd->pitches[0] > 32768)
+               return -EINVAL;
+
+       if (obj->tiling_mode != I915_TILING_NONE &&
+           mode_cmd->pitches[0] != obj->stride)
+               return -EINVAL;
+
        /* Reject formats not supported by any plane early. */
        switch (mode_cmd->pixel_format) {
        case DRM_FORMAT_C8: