diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_frontbuffer.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_frontbuffer.c | 21 | 
1 files changed, 5 insertions, 16 deletions
| diff --git a/drivers/gpu/drm/i915/intel_frontbuffer.c b/drivers/gpu/drm/i915/intel_frontbuffer.c index 73cb6e036445..a20cffb78c0f 100644 --- a/drivers/gpu/drm/i915/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/intel_frontbuffer.c @@ -110,16 +110,11 @@ static void intel_mark_fb_busy(struct drm_device *dev,  	struct drm_i915_private *dev_priv = dev->dev_private;  	enum pipe pipe; -	if (!i915.powersave) -		return; -  	for_each_pipe(dev_priv, pipe) {  		if (!(frontbuffer_bits & INTEL_FRONTBUFFER_ALL_MASK(pipe)))  			continue;  		intel_increase_pllclock(dev, pipe); -		if (ring && intel_fbc_enabled(dev)) -			ring->fbc_dirty = true;  	}  } @@ -127,6 +122,7 @@ static void intel_mark_fb_busy(struct drm_device *dev,   * intel_fb_obj_invalidate - invalidate frontbuffer object   * @obj: GEM object to invalidate   * @ring: set for asynchronous rendering + * @origin: which operation caused the invalidation   *   * This function gets called every time rendering on the given object starts and   * frontbuffer caching (fbc, low refresh rate for DRRS, panel self refresh) must @@ -135,7 +131,8 @@ static void intel_mark_fb_busy(struct drm_device *dev,   * scheduled.   */  void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj, -			     struct intel_engine_cs *ring) +			     struct intel_engine_cs *ring, +			     enum fb_op_origin origin)  {  	struct drm_device *dev = obj->base.dev;  	struct drm_i915_private *dev_priv = dev->dev_private; @@ -158,6 +155,7 @@ void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,  	intel_psr_invalidate(dev, obj->frontbuffer_bits);  	intel_edp_drrs_invalidate(dev, obj->frontbuffer_bits); +	intel_fbc_invalidate(dev_priv, obj->frontbuffer_bits, origin);  }  /** @@ -185,16 +183,7 @@ void intel_frontbuffer_flush(struct drm_device *dev,  	intel_edp_drrs_flush(dev, frontbuffer_bits);  	intel_psr_flush(dev, frontbuffer_bits); - -	/* -	 * FIXME: Unconditional fbc flushing here is a rather gross hack and -	 * needs to be reworked into a proper frontbuffer tracking scheme like -	 * psr employs. -	 */ -	if (dev_priv->fbc.need_sw_cache_clean) { -		dev_priv->fbc.need_sw_cache_clean = false; -		bdw_fbc_sw_flush(dev, FBC_REND_CACHE_CLEAN); -	} +	intel_fbc_flush(dev_priv, frontbuffer_bits);  }  /** | 
