All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eugeni Dodonov <eugeni.dodonov@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Eugeni Dodonov <eugeni.dodonov@intel.com>
Subject: [PATCH 25/29] drm/i915: detect digital outputs on Haswell
Date: Fri, 13 Apr 2012 17:09:01 -0300	[thread overview]
Message-ID: <1334347745-11743-26-git-send-email-eugeni.dodonov@intel.com> (raw)
In-Reply-To: <1334347745-11743-1-git-send-email-eugeni.dodonov@intel.com>

Digital port detection on Haswell is indicated by the presence of a bit in
DDI_BUF_CTL for port A, and by a different register for ports B, C and D.
So we check for those bits during the initialization time and let the hdmi
function know about those.

Note that this bit does not indicates whether the output is DP or HDMI.
However, the DDI buffers can be programmed in a way that is shared between
DP/HDMI and FDI/HDMI except for PORT E.

So for now, we detect those digital outputs as being HDMI, but proper DP
support is still pending.

Note that DDI A can only drive eDP, so we do not handle it here for hdmi
initialization.

Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |   51 +++++++++++++++++++++++-----------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index bdc22f5..1524966 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -8743,26 +8743,45 @@ static void intel_setup_outputs(struct drm_device *dev)
 	if (HAS_PCH_SPLIT(dev)) {
 		int found;
 
-		if (I915_READ(HDMIB) & PORT_DETECTED) {
-			/* PCH SDVOB multiplex with HDMIB */
-			found = intel_sdvo_init(dev, PCH_SDVOB, true);
-			if (!found)
-				intel_hdmi_init(dev, HDMIB);
-			if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
-				intel_dp_init(dev, PCH_DP_B);
-		}
+		if (IS_HASWELL(dev)) {
+			/* Haswell uses DDI functions to detect digital outputs */
+			found = I915_READ(DDI_BUF_CTL_A) & DDI_INIT_DISPLAY_DETECTED;
+			/* DDI A only supports eDP */
+			if (found)
+				DRM_INFO("Found digital output on DDI port A\n");
+
+			/* DDI B, C and D detection is indicated by the SFUSE_STRAP
+			 * register */
+			found = I915_READ(SFUSE_STRAP);
+
+			if (found & SFUSE_STRAP_DDIB_DETECTED)
+				intel_hdmi_init(dev, DDI_BUF_CTL(PORT_B));
+			if (found & SFUSE_STRAP_DDIC_DETECTED)
+				intel_hdmi_init(dev, DDI_BUF_CTL(PORT_C));
+			if (found & SFUSE_STRAP_DDID_DETECTED)
+				intel_hdmi_init(dev, DDI_BUF_CTL(PORT_D));
+		} else {
+			if (I915_READ(HDMIB) & PORT_DETECTED) {
+				/* PCH SDVOB multiplex with HDMIB */
+				found = intel_sdvo_init(dev, PCH_SDVOB, true);
+				if (!found)
+					intel_hdmi_init(dev, HDMIB);
+				if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
+					intel_dp_init(dev, PCH_DP_B);
+			}
 
-		if (I915_READ(HDMIC) & PORT_DETECTED)
-			intel_hdmi_init(dev, HDMIC);
+			if (I915_READ(HDMIC) & PORT_DETECTED)
+				intel_hdmi_init(dev, HDMIC);
 
-		if (I915_READ(HDMID) & PORT_DETECTED)
-			intel_hdmi_init(dev, HDMID);
+			if (I915_READ(HDMID) & PORT_DETECTED)
+				intel_hdmi_init(dev, HDMID);
 
-		if (I915_READ(PCH_DP_C) & DP_DETECTED)
-			intel_dp_init(dev, PCH_DP_C);
+			if (I915_READ(PCH_DP_C) & DP_DETECTED)
+				intel_dp_init(dev, PCH_DP_C);
 
-		if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
-			intel_dp_init(dev, PCH_DP_D);
+			if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
+				intel_dp_init(dev, PCH_DP_D);
+		}
 
 	} else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
 		bool found = false;
-- 
1.7.10

  parent reply	other threads:[~2012-04-13 20:35 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-13 20:08 [PATCH 00/29] Haswell round 3 Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 01/29] drm/i915: add definition of LPT FDI port width registers Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 02/29] drm/i915: add WRPLL divider programming bits Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 03/29] drm/i915: add Haswell DIP controls registers Eugeni Dodonov
2012-04-17 10:12   ` Daniel Vetter
2012-04-17 12:02     ` Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 04/29] drm/i915: support infoframes on Haswell Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 05/29] drm/i915: prevent NULL pointer exception when using gmbus Eugeni Dodonov
2012-04-13 20:18   ` Chris Wilson
2012-04-14  0:26     ` Eugeni Dodonov
2012-04-14 15:58       ` Daniel Vetter
2012-04-14 16:01         ` Chris Wilson
2012-04-13 20:08 ` [PATCH 06/29] drm/i915: add support for SBI ops Eugeni Dodonov
2012-04-13 20:26   ` Chris Wilson
2012-04-14  0:28     ` Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 07/29] drm/i915: calculate same watermarks on Haswell as on Ivy Bridge Eugeni Dodonov
2012-04-13 20:27   ` Chris Wilson
2012-04-13 20:08 ` [PATCH 08/29] drm/i915: share forcewaking code between IVB and HSW Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 09/29] drm/i915: haswell has 3 pipes as well Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 10/29] drm/i915: reuse Ivybridge interrupts code for Haswell Eugeni Dodonov
2012-04-15 23:29   ` Daniel Vetter
2012-04-13 20:08 ` [PATCH 11/29] drm/i915: share pipe count handling with Ivybridge Eugeni Dodonov
2012-04-17 10:19   ` Daniel Vetter
2012-04-17 10:36     ` Chris Wilson
2012-04-17 11:26       ` Daniel Vetter
2012-04-17 11:38         ` Chris Wilson
2012-04-13 20:08 ` [PATCH 12/29] drm/i915: share IVB cursor routine with Haswell Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 13/29] drm/i915: show unknown sdvox registers on hdmi init Eugeni Dodonov
2012-04-17 10:20   ` Daniel Vetter
2012-04-13 20:08 ` [PATCH 14/29] drm/i915: do not use fdi_normal_train on haswell Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 15/29] drm/i915: do not enable PCH PLL on pre-haswell Eugeni Dodonov
2012-04-13 20:55   ` Chris Wilson
2012-04-14  0:31     ` Eugeni Dodonov
2012-04-15 23:52   ` Daniel Vetter
2012-04-13 20:08 ` [PATCH 16/29] drm/i915: detect PCH encoders on Haswell Eugeni Dodonov
2012-04-17 10:21   ` Daniel Vetter
2012-04-13 20:08 ` [PATCH 17/29] drm/i915: enable power wells on haswell init Eugeni Dodonov
2012-04-13 21:03   ` Chris Wilson
2012-04-14  1:26     ` Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 18/29] drm/i915: disable rc6 on haswell for now Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 19/29] drm/i915: program WM_LINETIME on Haswell Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 20/29] drm/i915: do not use old code paths " Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 21/29] drm/i915: initialize DDI buffer translations Eugeni Dodonov
2012-04-13 21:05   ` Chris Wilson
2012-04-13 21:11   ` Chris Wilson
2012-04-14  1:32     ` Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 22/29] drm/i915: perform Haswell DDI link training in FDI mode Eugeni Dodonov
2012-04-13 20:08 ` [PATCH 23/29] drm/i915: disable pipe DDI function when disabling pipe Eugeni Dodonov
2012-04-13 20:09 ` [PATCH 24/29] drm/i915: program iCLKIP on Lynx Point Eugeni Dodonov
2012-04-15 23:49   ` Daniel Vetter
2012-04-16  0:44     ` Eugeni Dodonov
2012-04-16  8:26       ` Chris Wilson
2012-04-16  8:56         ` Daniel Vetter
2012-04-13 20:09 ` Eugeni Dodonov [this message]
2012-04-13 21:17   ` [PATCH 25/29] drm/i915: detect digital outputs on Haswell Chris Wilson
2012-04-14  0:37     ` Eugeni Dodonov
2012-04-15 23:36       ` Daniel Vetter
2012-04-13 20:09 ` [PATCH 26/29] drm/i915: add support for DDI-controlled digital outputs Eugeni Dodonov
2012-04-13 20:09 ` [PATCH 27/29] drm/i915: add WR PLL programming table Eugeni Dodonov
2012-04-13 20:09 ` [PATCH 28/29] drm/i915: prepare HDMI link for Haswell Eugeni Dodonov
2012-04-13 20:09 ` [PATCH 29/29] drm/i915: hook Haswell devices in place Eugeni Dodonov
2012-04-17 10:49 ` [PATCH 00/29] Haswell round 3 Daniel Vetter
2012-04-17 11:58   ` Eugeni Dodonov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1334347745-11743-26-git-send-email-eugeni.dodonov@intel.com \
    --to=eugeni.dodonov@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.