[Intel-gfx] [PATCH] drm/i915/bxt: Fix irq_port for eDP

Sonika Jindal sonika.jindal at intel.com
Mon Aug 31 02:05:32 PDT 2015


From: Durgadoss R <durgadoss.r at intel.com>

Currently, HDMI hotplug with eDP as local panel is failing
because the HDMI hpd is detected as a long hpd for eDP; and is
thus rightfully ignored. But, it should really be handled as
an interrupt on port B for HDMI (due to BXT A1 platform having
HPD pins A and B swapped). This patch sets the irq_port[PORT_A]
to NULL in case eDP is on port A so that irq handler does not
treat it as a 'dig_port' interrupt.

v2 (Sonika): Moving the setting of irq_port for BXT WA outside so that this
can be set for both hdmi or dp ports. For HDMI this is required
because we get interrupts for portB on the hpd line of portA for
BXT A0/A1.
This issue occurred because hpd on edp was not disabled
which was done as part of "drm/i915: Dont enable hpd for eDP" from
the series:
http://lists.freedesktop.org/archives/intel-gfx/2015-August/073266.html

This patch can be squashed to :
commit cf1d58833f07afbb4534b15caa3fd48baa313b2c
Author: Sonika Jindal <sonika.jindal at intel.com>
Date:   Mon Aug 10 10:35:36 2015 +0530

    drm/i915/bxt: WA for swapped HPD pins in A stepping

Signed-off-by: Durgadoss R <durgadoss.r at intel.com>
Signed-off-by: Sonika Jindal <sonika.jindal at intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c |   21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 56d778f..bba0cb6 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3242,15 +3242,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 			goto err;
 
 		intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
-		/*
-		 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
-		 * interrupts to check the external panel connection.
-		 */
-		if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < BXT_REVID_B0)
-					 && port == PORT_B)
-			dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
-		else
-			dev_priv->hotplug.irq_port[port] = intel_dig_port;
+		dev_priv->hotplug.irq_port[port] = intel_dig_port;
 	}
 
 	/* In theory we don't need the encoder->type check, but leave it just in
@@ -3259,6 +3251,17 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 		if (!intel_ddi_init_hdmi_connector(intel_dig_port))
 			goto err;
 	}
+	/*
+	 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
+	 * interrupts to check the external panel connection.
+	 */
+	if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < BXT_REVID_B0)) {
+		if (port == PORT_B) {
+			dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
+			intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
+		} else if (intel_encoder->type == INTEL_OUTPUT_EDP)
+			dev_priv->hotplug.irq_port[port] = NULL;
+	}
 
 	return;
 
-- 
1.7.10.4



More information about the Intel-gfx mailing list