|
@@ -6158,17 +6158,34 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
|
|
|
struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
|
|
|
+ uint32_t plane_bit = 0;
|
|
|
int ret;
|
|
|
|
|
|
ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
|
|
|
if (ret)
|
|
|
goto err;
|
|
|
|
|
|
+ switch(intel_crtc->plane) {
|
|
|
+ case PLANE_A:
|
|
|
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_A;
|
|
|
+ break;
|
|
|
+ case PLANE_B:
|
|
|
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_B;
|
|
|
+ break;
|
|
|
+ case PLANE_C:
|
|
|
+ plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_C;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ WARN_ONCE(1, "unknown plane in flip command\n");
|
|
|
+ ret = -ENODEV;
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
ret = intel_ring_begin(ring, 4);
|
|
|
if (ret)
|
|
|
goto err_unpin;
|
|
|
|
|
|
- intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
|
|
|
+ intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | plane_bit);
|
|
|
intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
|
|
|
intel_ring_emit(ring, (obj->gtt_offset));
|
|
|
intel_ring_emit(ring, (MI_NOOP));
|