diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 9b8a7c7..2d5a135 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -8546,6 +8546,24 @@ err: return ret; } +#define for_each_intel_crtc(dev, intel_crtc) \ + list_for_each_entry((intel_crtc), \ + &(dev)->mode_config.crtc_list, \ + base.head) + +static int intel_num_active_pipes(struct drm_device *dev) +{ + struct intel_crtc *crtc; + int num_active_pipes = 0; + + for_each_intel_crtc(dev, crtc) + num_active_pipes += crtc->active; + + return num_active_pipes; +} + +#undef for_each_intel_crtc + static int intel_gen7_queue_flip(struct drm_device *dev, struct drm_crtc *crtc, struct drm_framebuffer *fb, @@ -8559,7 +8577,7 @@ static int intel_gen7_queue_flip(struct drm_device *dev, int len, ret; ring = obj->ring; - if (IS_VALLEYVIEW(dev) || ring == NULL || ring->id != RCS) + if (IS_VALLEYVIEW(dev) || ring == NULL || ring->id != RCS || intel_num_active_pipes(dev) > 1) ring = &dev_priv->ring[BCS]; ret = intel_pin_and_fence_fb_obj(dev, obj, ring);