diff options
| author | Olof Johansson <olof@lixom.net> | 2013-02-04 22:59:22 -0800 | 
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-02-04 22:59:22 -0800 | 
| commit | 604d11d99180806d94a9c48d76f96428dc5bcaa5 (patch) | |
| tree | f4853faccfb144706dd10be1c469d726643bf072 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
| parent | e28c99a85b3e9ab09944fb285c0c035fa997fa33 (diff) | |
| parent | 88b62b915b0b7e25870eb0604ed9a92ba4bfc9f7 (diff) | |
Merge tag 'v3.8-rc6' into next/dt
Linux 3.8-rc6
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 24 | 
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index ae253e04c39..42ff97d667d 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -505,13 +505,25 @@ static int init_render_ring(struct intel_ring_buffer *ring)  	struct drm_i915_private *dev_priv = dev->dev_private;  	int ret = init_ring_common(ring); -	if (INTEL_INFO(dev)->gen > 3) { +	if (INTEL_INFO(dev)->gen > 3)  		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH)); -		if (IS_GEN7(dev)) -			I915_WRITE(GFX_MODE_GEN7, -				   _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) | -				   _MASKED_BIT_ENABLE(GFX_REPLAY_MODE)); -	} + +	/* We need to disable the AsyncFlip performance optimisations in order +	 * to use MI_WAIT_FOR_EVENT within the CS. It should already be +	 * programmed to '1' on all products. +	 */ +	if (INTEL_INFO(dev)->gen >= 6) +		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE)); + +	/* Required for the hardware to program scanline values for waiting */ +	if (INTEL_INFO(dev)->gen == 6) +		I915_WRITE(GFX_MODE, +			   _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_ALWAYS)); + +	if (IS_GEN7(dev)) +		I915_WRITE(GFX_MODE_GEN7, +			   _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) | +			   _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));  	if (INTEL_INFO(dev)->gen >= 5) {  		ret = init_pipe_control(ring);  | 
