diff mbox

[1/2] drm/i915: disable shared panel fitter for pipe

Message ID 1360334138-3876-1-git-send-email-mika.kuoppala@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mika Kuoppala Feb. 8, 2013, 2:35 p.m. UTC
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
Cc: stable@vger.kernel.org
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Daniel Vetter Feb. 9, 2013, 12:13 p.m. UTC | #1
On Fri, Feb 8, 2013 at 3:35 PM, Mika Kuoppala
<mika.kuoppala@linux.intel.com> wrote:
> 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

Tested-by from the reporter is missing.

> Cc: stable@vger.kernel.org
> Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |    9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d75c6a0..9b5f0fb 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3656,6 +3656,15 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
>
>         intel_disable_plane(dev_priv, plane, pipe);
>         intel_disable_pipe(dev_priv, pipe);
> +
> +       if (!HAS_PCH_SPLIT(dev)) {

This is always true in i9xx_crtc_disable, so you can remove this indentation.
-Daniel

> +               const u32 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;
> --
> 1.7.9.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d75c6a0..9b5f0fb 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3656,6 +3656,15 @@  static void i9xx_crtc_disable(struct drm_crtc *crtc)
 
 	intel_disable_plane(dev_priv, plane, pipe);
 	intel_disable_pipe(dev_priv, pipe);
+
+	if (!HAS_PCH_SPLIT(dev)) {
+		const u32 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;