drm/i915: Fail if we can't get a fence for gen2/3 tiled scanout
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 21 Feb 2018 16:02:30 +0000 (18:02 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 22 Feb 2018 15:39:38 +0000 (17:39 +0200)
Gen2/3 display engine depends on the fence for tiled scanout. So if we
fail to get a fence fail the entire operation.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180221160235.11134-2-ville.syrjala@linux.intel.com
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/intel_display.c

index c14d2a25408dadf3642738d02c8a7b6d7bbe7b88..c96032c0406f11842ec34a2b4ec7c6d92769660f 100644 (file)
@@ -2123,6 +2123,8 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
                goto err;
 
        if (i915_vma_is_map_and_fenceable(vma)) {
+               int ret;
+
                /* Install a fence for tiled scan-out. Pre-i965 always needs a
                 * fence, whereas 965+ only requires a fence if using
                 * framebuffer compression.  For simplicity, we always, when
@@ -2139,7 +2141,13 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
                 * something and try to run the system in a "less than optimal"
                 * mode that matches the user configuration.
                 */
-               if (i915_vma_pin_fence(vma) == 0 && vma->fence)
+               ret = i915_vma_pin_fence(vma);
+               if (ret != 0 && INTEL_GEN(dev_priv) < 4) {
+                       vma = ERR_PTR(ret);
+                       goto err;
+               }
+
+               if (ret == 0 && vma->fence)
                        *out_flags |= PLANE_HAS_FENCE;
        }