All of lore.kernel.org
 help / color / mirror / Atom feed
From: Egbert Eich <eich@suse.de>
To: intel-gfx@lists.freedesktop.org
Cc: Egbert Eich <eich@suse.de>,
	Daniel Vetter <daniel.vetter@intel.com>,
	Chris Wilson <chris.wilson@intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: [PATCH 2/8] drm/i915: Set hotplug_supported_flag for all chipset generations.
Date: Thu, 10 Jan 2013 10:02:40 -0500	[thread overview]
Message-ID: <1357830166-18049-3-git-send-email-eich@suse.de> (raw)
In-Reply-To: <1357830166-18049-1-git-send-email-eich@suse.de>

So far the hotplug_supported_mask in the struct drm_i915_private
is only used for pre-Ironlake chipsets.
This patch sets up the correct value for all generations.

Signed-off-by: Egbert Eich <eich@suse.de>
---
 drivers/gpu/drm/i915/i915_drv.h   |    4 ++
 drivers/gpu/drm/i915/i915_irq.c   |   71 +++++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_crt.c  |    2 +-
 drivers/gpu/drm/i915/intel_dp.c   |    4 +--
 drivers/gpu/drm/i915/intel_hdmi.c |    4 +--
 drivers/gpu/drm/i915/intel_sdvo.c |   12 +------
 6 files changed, 79 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index eeaf2a8..d7ad677 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1322,6 +1322,10 @@ extern void intel_irq_init(struct drm_device *dev);
 extern void intel_gt_init(struct drm_device *dev);
 extern void intel_gt_reset(struct drm_device *dev);
 
+extern u32 intel_crt_hotplug_int_status(struct drm_device *dev);
+extern u32 intel_sdvo_hotplug_int_status(struct drm_device *dev, bool is_sdvo_b);
+extern u32 intel_hotplug_int_status(struct drm_device *dev, enum port port);
+
 void i915_error_state_free(struct kref *error_ref);
 
 void
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index bb5e6d8..c0e302e 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2765,3 +2765,74 @@ void intel_irq_init(struct drm_device *dev)
 		dev->driver->disable_vblank = i915_disable_vblank;
 	}
 }
+
+u32 intel_hotplug_int_status(struct drm_device *dev, enum port port)
+{
+	/* SDVO is treated separately */
+	if (IS_IVYBRIDGE(dev) ||
+	    IS_HASWELL(dev) ||
+	    (HAS_PCH_SPLIT(dev) && HAS_PCH_CPT(dev))) {
+		switch (port) {
+		case PORT_B:
+			return SDE_PORTB_HOTPLUG_CPT;
+		case PORT_C:
+			return SDE_PORTC_HOTPLUG_CPT;
+		case PORT_D:
+			return SDE_PORTD_HOTPLUG_CPT;
+		default:
+			BUG();
+		}
+	} else if (HAS_PCH_SPLIT(dev)) { /* ! HAS_PCH_CPT(dev) */
+		switch (port) {
+		case PORT_B:
+			return SDE_PORTB_HOTPLUG;
+		case PORT_C:
+			return SDE_PORTC_HOTPLUG;
+		case PORT_D:
+			return SDE_PORTD_HOTPLUG;
+		default:
+			BUG();
+		}
+	} else {
+		switch (port) {
+		case PORT_B:
+			return HDMIB_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */
+		case PORT_C:
+			return HDMIC_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */
+		case PORT_D:
+			return HDMID_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */
+		default:
+			BUG();
+		}
+	}
+	return 0;
+}
+
+u32 intel_crt_hotplug_int_status(struct drm_device *dev)
+{
+	if (IS_IVYBRIDGE(dev) ||
+	    IS_HASWELL(dev) ||
+	    (HAS_PCH_SPLIT(dev) && HAS_PCH_CPT(dev))) {
+		return SDE_CRT_HOTPLUG_CPT;
+	} else if (HAS_PCH_SPLIT(dev)) { /* ! HAS_PCH_CPT(dev) */
+		return SDE_CRT_HOTPLUG;
+	} else {
+		return CRT_HOTPLUG_INT_STATUS;
+	}
+	return 0;
+}
+
+u32 intel_sdvo_hotplug_int_status(struct drm_device *dev, bool is_sdvo_b)
+{
+	if (IS_G4X(dev)) {
+		return is_sdvo_b ?
+			SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X;
+	} else if (IS_GEN4(dev)) {
+		return is_sdvo_b ?
+			SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965;
+	} else {
+		return is_sdvo_b ?
+			SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915;
+	}
+	return 0;
+}
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index fe20bf7..0cd9ff0 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -797,7 +797,7 @@ void intel_crt_init(struct drm_device *dev)
 	 */
 	crt->force_hotplug_required = 0;
 
-	dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
+	dev_priv->hotplug_supported_mask |= intel_crt_hotplug_int_status(dev);
 
 	/*
 	 * TODO: find a proper way to discover whether we need to set the
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index d76258d..1946b5b 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2754,21 +2754,19 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
 		name = "DPDDC-A";
 		break;
 	case PORT_B:
-		dev_priv->hotplug_supported_mask |= DPB_HOTPLUG_INT_STATUS;
 		name = "DPDDC-B";
 		break;
 	case PORT_C:
-		dev_priv->hotplug_supported_mask |= DPC_HOTPLUG_INT_STATUS;
 		name = "DPDDC-C";
 		break;
 	case PORT_D:
-		dev_priv->hotplug_supported_mask |= DPD_HOTPLUG_INT_STATUS;
 		name = "DPDDC-D";
 		break;
 	default:
 		WARN(1, "Invalid port %c\n", port_name(port));
 		break;
 	}
+	dev_priv->hotplug_supported_mask |= intel_hotplug_int_status(dev, port);
 
 	if (is_edp(intel_dp))
 		intel_dp_init_panel_power_sequencer(dev, intel_dp);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 2ee9821..d20f9ff 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -980,21 +980,19 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
 	switch (port) {
 	case PORT_B:
 		intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
-		dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
 		break;
 	case PORT_C:
 		intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
-		dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
 		break;
 	case PORT_D:
 		intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
-		dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
 		break;
 	case PORT_A:
 		/* Internal port only for eDP. */
 	default:
 		BUG();
 	}
+	dev_priv->hotplug_supported_mask |= intel_hotplug_int_status(dev, port);
 
 	if (!HAS_PCH_SPLIT(dev)) {
 		intel_hdmi->write_infoframe = g4x_write_infoframe;
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 0e03985..567846e 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2727,17 +2727,7 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
 		}
 	}
 
-	hotplug_mask = 0;
-	if (IS_G4X(dev)) {
-		hotplug_mask = intel_sdvo->is_sdvob ?
-			SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X;
-	} else if (IS_GEN4(dev)) {
-		hotplug_mask = intel_sdvo->is_sdvob ?
-			SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965;
-	} else {
-		hotplug_mask = intel_sdvo->is_sdvob ?
-			SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915;
-	}
+	hotplug_mask = intel_sdvo_hotplug_int_status(dev, intel_sdvo->is_sdvob);
 
 	drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);
 
-- 
1.7.7

  parent reply	other threads:[~2013-01-10 15:04 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-10 15:02 [PATCH 0/8] Detect and deal with Interrupt 'Storms' from noisy Hotplug Lines Egbert Eich
2013-01-10 15:02 ` [PATCH 1/8] drm/i915: Remove pch_rq_mask from struct drm_i915_private Egbert Eich
2013-01-11 20:13   ` Daniel Vetter
2013-01-10 15:02 ` Egbert Eich [this message]
2013-03-26 19:51   ` [PATCH 2/8] drm/i915: Set hotplug_supported_flag for all chipset generations Jesse Barnes
2013-01-10 15:02 ` [PATCH 3/8] drm/i915: Add hpd status bit to struct intel_connector Egbert Eich
2013-03-26 19:53   ` Jesse Barnes
2013-01-10 15:02 ` [PATCH 4/8] drm/i915: Add Hotplug IRQ Storm detection Egbert Eich
2013-03-26 19:59   ` Jesse Barnes
2013-01-10 15:02 ` [PATCH 5/8] drm/i915: Move hotplug interrupt enable for i915/i965/valleyview into a separate function Egbert Eich
2013-03-26 20:04   ` Jesse Barnes
2013-01-10 15:02 ` [PATCH 6/8] drm/i915: Only enable hotplug irq when needed on Ironlake and later chips Egbert Eich
2013-01-10 15:02 ` [PATCH 7/8] drm/i915: When detecting a hotplug IRQ storm disable respective IRQs Egbert Eich
2013-01-10 15:02 ` [PATCH 8/8] drm/i915: Add Reenable Timer to turn Hotplug Detection back on Egbert Eich
2013-01-11 20:34 ` [PATCH 0/8] Detect and deal with Interrupt 'Storms' from noisy Hotplug Lines Daniel Vetter
2013-01-17 14:01   ` Egbert Eich
2013-01-17 14:45     ` Daniel Vetter
2013-01-22 13:22       ` Egbert Eich
2013-01-22 13:48         ` Daniel Vetter
2013-01-22 15:11           ` Egbert Eich
2013-02-25 17:06           ` [PATCH v.2 00/12] " Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 01/12] DRM/i915: Remove valleyview_hpd_irq_setup Egbert Eich
2013-03-26 20:06               ` Jesse Barnes
2013-02-25 17:06             ` [PATCH v.2 02/12] DRM/I915: Add enum hpd_pin to intel_encoder Egbert Eich
2013-03-26 20:07               ` Jesse Barnes
2013-02-25 17:06             ` [PATCH v.2 03/12] DRM/i915: Convert HPD interrupts to make use of HPD pin assignment in encoders Egbert Eich
2013-02-28  0:12               ` Chris Wilson
2013-02-28  9:17                 ` [PATCH v.2 03/12] DRM/i915: Convert HPD interrupts to make use of HPD pin assignment in encoders (v2) Egbert Eich
2013-03-26 20:08               ` [PATCH v.2 03/12] DRM/i915: Convert HPD interrupts to make use of HPD pin assignment in encoders Jesse Barnes
2013-02-25 17:06             ` [PATCH v.2 04/12] DRM/i915: Remove i965_hpd_irq_setup Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 05/12] DRM/i915: Get rid if the 'hotplug_supported_mask' in struct drm_i915_private Egbert Eich
2013-03-26 21:06               ` Daniel Vetter
2013-03-27 15:08                 ` Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 06/12] DRM/i915: Add HPD IRQ storm detection Egbert Eich
2013-02-28  0:30               ` Chris Wilson
2013-02-28  9:19                 ` [PATCH v.2 06/12] DRM/i915: Add HPD IRQ storm detection (v2) Egbert Eich
2013-03-03 18:07                   ` Daniel Vetter
2013-03-05  7:38                     ` [PATCH v.3 06/12] DRM/i915: Add HPD IRQ storm detection (v3) Egbert Eich
2013-03-05  7:48                       ` [PATCH v.2 10/12] DRM/i915: Add Reenable Timer to turn Hotplug Detection back on (v2) Egbert Eich
2013-03-05 10:28                         ` Ville Syrjälä
2013-03-05 12:26                           ` [PATCH v.3 10/12] DRM/i915: Add Reenable Timer to turn Hotplug Detection back on (v3) Egbert Eich
2013-03-05  7:55                       ` [PATCH v.2 11/12] DRM/i915: Add bit field to record which pins have received HPD events (v2) Egbert Eich
2013-03-05 13:00                         ` [PATCH v.3 11/12] DRM/i915: Add bit field to record which pins have received HPD events (v3) Egbert Eich
2013-03-05 14:52                           ` Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 07/12] DRM/i915: (re)init HPD interrupt storm statistics Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 08/12] DRM/i915: Treat hpd_irq_setup() for ironake and older generations the same way Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 09/12] DRM/i915: Disable HPD interrupt on pin when irq storm is detected Egbert Eich
2013-03-05 12:34               ` [PATCH v.2 09/12] DRM/i915: Disable HPD interrupt on pin when irq storm is detected (v2) Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 10/12] DRM/i915: Add Reenable Timer to turn Hotplug Detection back on Egbert Eich
2013-03-27 15:12               ` Daniel Vetter
2013-02-25 17:06             ` [PATCH v.2 11/12] DRM/i915: Add bit field to record which pins have received HPD events Egbert Eich
2013-02-25 17:06             ` [PATCH v.2 12/12] DRM/i915: Only reprobe display on encoder which has received an HPD event Egbert Eich
2013-03-05 14:18               ` [PATCH v.3 " Egbert Eich
2013-02-28  0:46             ` [PATCH v.2 00/12] Detect and deal with Interrupt 'Storms' from noisy Hotplug Lines Chris Wilson

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=1357830166-18049-3-git-send-email-eich@suse.de \
    --to=eich@suse.de \
    --cc=chris.wilson@intel.com \
    --cc=daniel.vetter@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=rodrigo.vivi@intel.com \
    /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.