diff mbox

[STABLE,REVERT,natty] Patch "drm/i915: disable PCH ports if needed when disabling a CRTC" will be reverted

Message ID 20110927171230.GA3837@herton-IdeaPad-Y430
State New
Headers show

Commit Message

Herton Ronaldo Krzesinski Sept. 27, 2011, 5:12 p.m. UTC
Due to regressions reported (bugs 814325 and 838181), commit bbeaf88
("drm/i915: disable PCH ports if needed when disabling a CRTC) will be
reverted in the next natty upload (probable upload version: 2.6.38-12.51)

The attached patch will be applied to the master ubuntu-natty branch
before the packages are prepared.

Comments

Herton Ronaldo Krzesinski Sept. 27, 2011, 6:46 p.m. UTC | #1
On Tue, Sep 27, 2011 at 02:15:55PM -0400, Robert Hooker wrote:
> On Tue, Sep 27, 2011 at 1:12 PM, Herton R. Krzesinski
> <herton.krzesinski@canonical.com> wrote:
> > Due to regressions reported (bugs 814325 and 838181), commit bbeaf88
> > ("drm/i915: disable PCH ports if needed when disabling a CRTC) will be
> > reverted in the next natty upload (probable upload version: 2.6.38-12.51)
> >
> > The attached patch will be applied to the master ubuntu-natty branch
> > before the packages are prepared.
> >
> > --
> > []'s
> > Herton
> >
> > --
> > kernel-team mailing list
> > kernel-team@lists.ubuntu.com
> > https://lists.ubuntu.com/mailman/listinfo/kernel-team
> >
> >
> 
> 
> Just to be sure, marking these two bugs as regression-proposed and
> reopening the natty tasks will be the proper course of action once
> this goes in, correct?
> 
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/791752
> 
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/745112

Yes, except the tag should be regression-update instead of
regression-proposed, since the kernel with the problem was released to
-updates already.
diff mbox

Patch

From e7d68817a5b0e4b665ad3a6298302c835a15739d Mon Sep 17 00:00:00 2001
From: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Date: Tue, 27 Sep 2011 13:55:28 -0300
Subject: [PATCH] Revert "drm/i915: disable PCH ports if needed when disabling a CRTC"

This reverts commit bbeaf8811ba070fd186dfcabc957044c3a1149ac.

It was found that this change is bringing regressions, as can be seen on
Ubuntu bugs 814325, 838181. While a solution isn't found, the change is
being reverted.

BugLink: http://bugs.launchpad.net/bugs/814325
BugLink: http://bugs.launchpad.net/bugs/838181
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
---
 drivers/gpu/drm/i915/i915_reg.h      |   15 --------
 drivers/gpu/drm/i915/intel_display.c |   61 ++++-----------------------------
 2 files changed, 8 insertions(+), 68 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index e7cb5df..12c547a 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1444,7 +1444,6 @@ 
 #define   LVDS_PORT_EN			(1 << 31)
 /* Selects pipe B for LVDS data.  Must be set on pre-965. */
 #define   LVDS_PIPEB_SELECT		(1 << 30)
-#define   LVDS_PIPE_MASK		(1 << 30)
 /* LVDS dithering flag on 965/g4x platform */
 #define   LVDS_ENABLE_DITHER		(1 << 25)
 /* Enable border for unscaled (or aspect-scaled) display */
@@ -1480,9 +1479,6 @@ 
 #define   LVDS_B0B3_POWER_DOWN		(0 << 2)
 #define   LVDS_B0B3_POWER_UP		(3 << 2)
 
-#define LVDS_PIPE_ENABLED(V, P) \
-	(((V) & (LVDS_PIPE_MASK | LVDS_PORT_EN)) == ((P) << 30 | LVDS_PORT_EN))
-
 /* Video Data Island Packet control */
 #define VIDEO_DIP_DATA		0x61178
 #define VIDEO_DIP_CTL		0x61170
@@ -2071,10 +2067,6 @@ 
 
 #define   DP_PORT_EN			(1 << 31)
 #define   DP_PIPEB_SELECT		(1 << 30)
-#define   DP_PIPE_MASK			(1 << 30)
-
-#define DP_PIPE_ENABLED(V, P) \
-	(((V) & (DP_PIPE_MASK | DP_PORT_EN)) == ((P) << 30 | DP_PORT_EN))
 
 /* Link training mode - select a suitable mode for each stage */
 #define   DP_LINK_TRAIN_PAT_1		(0 << 28)
@@ -3156,15 +3148,11 @@ 
 #define  ADPA_CRT_HOTPLUG_VOLREF_475MV  (1<<17)
 #define  ADPA_CRT_HOTPLUG_FORCE_TRIGGER (1<<16)
 
-#define ADPA_PIPE_ENABLED(V, P) \
-	(((V) & (ADPA_TRANS_SELECT_MASK | ADPA_DAC_ENABLE)) == ((P) << 30 | ADPA_DAC_ENABLE))
-
 /* or SDVOB */
 #define HDMIB   0xe1140
 #define  PORT_ENABLE    (1 << 31)
 #define  TRANSCODER_A   (0)
 #define  TRANSCODER_B   (1 << 30)
-#define  TRANSCODER_MASK   (1 << 30)
 #define  COLOR_FORMAT_8bpc      (0)
 #define  COLOR_FORMAT_12bpc     (3 << 26)
 #define  SDVOB_HOTPLUG_ENABLE   (1 << 23)
@@ -3180,9 +3168,6 @@ 
 #define  HSYNC_ACTIVE_HIGH      (1 << 3)
 #define  PORT_DETECTED          (1 << 2)
 
-#define HDMI_PIPE_ENABLED(V, P) \
-	(((V) & (TRANSCODER_MASK | PORT_ENABLE)) == ((P) << 30 | PORT_ENABLE))
-
 /* PCH SDVOB multiplex with HDMIB */
 #define PCH_SDVOB	HDMIB
 
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 88dc3fe..841558b 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1058,53 +1058,6 @@  void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
 	}
 }
 
-static void disable_pch_dp(struct drm_i915_private *dev_priv,
-			   enum pipe pipe, int reg)
-{
-	u32 val = I915_READ(reg);
-	if (DP_PIPE_ENABLED(val, pipe))
-		I915_WRITE(reg, val & ~DP_PORT_EN);
-}
-
-static void disable_pch_hdmi(struct drm_i915_private *dev_priv,
-			     enum pipe pipe, int reg)
-{
-	u32 val = I915_READ(reg);
-	if (HDMI_PIPE_ENABLED(val, pipe))
-		I915_WRITE(reg, val & ~PORT_ENABLE);
-}
-
-/* Disable any ports connected to this transcoder */
-static void intel_disable_pch_ports(struct drm_i915_private *dev_priv,
-				    enum pipe pipe)
-{
-	u32 reg, val;
-
-	val = I915_READ(PCH_PP_CONTROL);
-	I915_WRITE(PCH_PP_CONTROL, val | PANEL_UNLOCK_REGS);
-
-	disable_pch_dp(dev_priv, pipe, PCH_DP_B);
-	disable_pch_dp(dev_priv, pipe, PCH_DP_C);
-	disable_pch_dp(dev_priv, pipe, PCH_DP_D);
-
-	reg = PCH_ADPA;
-	val = I915_READ(reg);
-	if (ADPA_PIPE_ENABLED(val, pipe))
-		I915_WRITE(reg, val & ~ADPA_DAC_ENABLE);
-
-	reg = PCH_LVDS;
-	val = I915_READ(reg);
-	if (LVDS_PIPE_ENABLED(val, pipe)) {
-		I915_WRITE(reg, val & ~LVDS_PORT_EN);
-		POSTING_READ(reg);
-		udelay(100);
-	}
-
-	disable_pch_hdmi(dev_priv, pipe, HDMIB);
-	disable_pch_hdmi(dev_priv, pipe, HDMIC);
-	disable_pch_hdmi(dev_priv, pipe, HDMID);
-}
-
 static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
 {
 	struct drm_device *dev = crtc->dev;
@@ -2403,12 +2356,14 @@  static void ironlake_crtc_disable(struct drm_crtc *crtc)
 	POSTING_READ(reg);
 	udelay(100);
 
-	/* This is a horrible layering violation; we should be doing this in
-	 * the connector/encoder ->prepare instead, but we don't always have
-	 * enough information there about the config to know whether it will
-	 * actually be necessary or just cause undesired flicker.
-	 */
-	intel_disable_pch_ports(dev_priv, pipe);
+	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+		temp = I915_READ(PCH_LVDS);
+		if (temp & LVDS_PORT_EN) {
+			I915_WRITE(PCH_LVDS, temp & ~LVDS_PORT_EN);
+			POSTING_READ(PCH_LVDS);
+			udelay(100);
+		}
+	}
 
 	/* disable PCH transcoder */
 	reg = TRANSCONF(plane);
-- 
1.7.4.1