|
@@ -2389,22 +2389,24 @@ intel_pin_and_fence_fb_obj(struct drm_plane *plane,
|
|
* framebuffer compression. For simplicity, we always install
|
|
* framebuffer compression. For simplicity, we always install
|
|
* a fence as the cost is not that onerous.
|
|
* a fence as the cost is not that onerous.
|
|
*/
|
|
*/
|
|
- ret = i915_gem_object_get_fence(obj);
|
|
|
|
- if (ret == -EDEADLK) {
|
|
|
|
- /*
|
|
|
|
- * -EDEADLK means there are no free fences
|
|
|
|
- * no pending flips.
|
|
|
|
- *
|
|
|
|
- * This is propagated to atomic, but it uses
|
|
|
|
- * -EDEADLK to force a locking recovery, so
|
|
|
|
- * change the returned error to -EBUSY.
|
|
|
|
- */
|
|
|
|
- ret = -EBUSY;
|
|
|
|
- goto err_unpin;
|
|
|
|
- } else if (ret)
|
|
|
|
- goto err_unpin;
|
|
|
|
|
|
+ if (view.type == I915_GGTT_VIEW_NORMAL) {
|
|
|
|
+ ret = i915_gem_object_get_fence(obj);
|
|
|
|
+ if (ret == -EDEADLK) {
|
|
|
|
+ /*
|
|
|
|
+ * -EDEADLK means there are no free fences
|
|
|
|
+ * no pending flips.
|
|
|
|
+ *
|
|
|
|
+ * This is propagated to atomic, but it uses
|
|
|
|
+ * -EDEADLK to force a locking recovery, so
|
|
|
|
+ * change the returned error to -EBUSY.
|
|
|
|
+ */
|
|
|
|
+ ret = -EBUSY;
|
|
|
|
+ goto err_unpin;
|
|
|
|
+ } else if (ret)
|
|
|
|
+ goto err_unpin;
|
|
|
|
|
|
- i915_gem_object_pin_fence(obj);
|
|
|
|
|
|
+ i915_gem_object_pin_fence(obj);
|
|
|
|
+ }
|
|
|
|
|
|
dev_priv->mm.interruptible = true;
|
|
dev_priv->mm.interruptible = true;
|
|
intel_runtime_pm_put(dev_priv);
|
|
intel_runtime_pm_put(dev_priv);
|
|
@@ -2430,7 +2432,9 @@ static void intel_unpin_fb_obj(struct drm_framebuffer *fb,
|
|
ret = intel_fill_fb_ggtt_view(&view, fb, plane_state);
|
|
ret = intel_fill_fb_ggtt_view(&view, fb, plane_state);
|
|
WARN_ONCE(ret, "Couldn't get view from plane state!");
|
|
WARN_ONCE(ret, "Couldn't get view from plane state!");
|
|
|
|
|
|
- i915_gem_object_unpin_fence(obj);
|
|
|
|
|
|
+ if (view.type == I915_GGTT_VIEW_NORMAL)
|
|
|
|
+ i915_gem_object_unpin_fence(obj);
|
|
|
|
+
|
|
i915_gem_object_unpin_from_display_plane(obj, &view);
|
|
i915_gem_object_unpin_from_display_plane(obj, &view);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -14695,6 +14699,9 @@ static struct intel_quirk intel_quirks[] = {
|
|
|
|
|
|
/* Dell Chromebook 11 */
|
|
/* Dell Chromebook 11 */
|
|
{ 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
|
|
{ 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
|
|
|
|
+
|
|
|
|
+ /* Dell Chromebook 11 (2015 version) */
|
|
|
|
+ { 0x0a16, 0x1028, 0x0a35, quirk_backlight_present },
|
|
};
|
|
};
|
|
|
|
|
|
static void intel_init_quirks(struct drm_device *dev)
|
|
static void intel_init_quirks(struct drm_device *dev)
|