| From 24a1f16de97c4cf0029d9acd04be06db32208726 Mon Sep 17 00:00:00 2001 | 
 | From: Mika Kuoppala <mika.kuoppala@linux.intel.com> | 
 | Date: Fri, 8 Feb 2013 16:35:37 +0200 | 
 | Subject: drm/i915: disable shared panel fitter for pipe | 
 |  | 
 | From: Mika Kuoppala <mika.kuoppala@linux.intel.com> | 
 |  | 
 | commit 24a1f16de97c4cf0029d9acd04be06db32208726 upstream. | 
 |  | 
 | If encoder is switched off by BIOS, but the panel fitter is left on, | 
 | we never try to turn off the panel fitter and leave it still attached | 
 | to the pipe - which can cause blurry output elsewhere. | 
 |  | 
 | Based on work by Chris Wilson <chris@chris-wilson.co.uk> | 
 |  | 
 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58867 | 
 | Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> | 
 | Tested-by: Andreas Sturmlechner <andreas.sturmlechner@gmail.com> | 
 | [danvet: Remove the redundant HAS_PCH_SPLIT check and add a tiny | 
 | comment.] | 
 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | 
 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 
 |  | 
 | --- | 
 |  drivers/gpu/drm/i915/intel_display.c |    8 ++++++++ | 
 |  1 file changed, 8 insertions(+) | 
 |  | 
 | --- a/drivers/gpu/drm/i915/intel_display.c | 
 | +++ b/drivers/gpu/drm/i915/intel_display.c | 
 | @@ -2898,6 +2898,7 @@ static void i9xx_crtc_disable(struct drm | 
 |  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc); | 
 |  	int pipe = intel_crtc->pipe; | 
 |  	int plane = intel_crtc->plane; | 
 | +	u32 pctl; | 
 |   | 
 |  	if (!intel_crtc->active) | 
 |  		return; | 
 | @@ -2914,6 +2915,13 @@ static void i9xx_crtc_disable(struct drm | 
 |   | 
 |  	intel_disable_plane(dev_priv, plane, pipe); | 
 |  	intel_disable_pipe(dev_priv, pipe); | 
 | + | 
 | +	/* Disable pannel fitter if it is on this pipe. */ | 
 | +	pctl = I915_READ(PFIT_CONTROL); | 
 | +	if ((pctl & PFIT_ENABLE) && | 
 | +	    ((pctl & PFIT_PIPE_MASK) >> PFIT_PIPE_SHIFT) == pipe) | 
 | +		I915_WRITE(PFIT_CONTROL, 0); | 
 | + | 
 |  	intel_disable_pll(dev_priv, pipe); | 
 |   | 
 |  	intel_crtc->active = false; |