All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ville Syrjala <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [Intel-gfx] [PATCH 11/11] drm/i915: Use stashed away hpd isr bits in intel_digital_port_connected()
Date: Tue, 21 Jan 2020 19:11:00 +0200	[thread overview]
Message-ID: <20200121171100.4370-12-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20200121171100.4370-1-ville.syrjala@linux.intel.com>

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Get rid of several platform specific variants of
intel_digital_port_connected() and just use the ISR bits we've
stashed away.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c |  16 ++-
 drivers/gpu/drm/i915/display/intel_dp.c  | 121 ++---------------------
 drivers/gpu/drm/i915/display/intel_dp.h  |   7 +-
 drivers/gpu/drm/i915/display/intel_tc.c  |   4 +-
 4 files changed, 21 insertions(+), 127 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index d983860560cf..30ae97ee6d72 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4894,19 +4894,17 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
 		if (intel_phy_is_tc(dev_priv, phy))
 			intel_dig_port->connected = intel_tc_port_connected;
 		else
-			intel_dig_port->connected = icp_digital_port_connected;
-	} else if (IS_GEN9_LP(dev_priv)) {
-		intel_dig_port->connected = bxt_digital_port_connected;
-	} else if (port == PORT_A) {
-		if (INTEL_GEN(dev_priv) >= 8)
+			intel_dig_port->connected = pch_digital_port_connected;
+	} else if (INTEL_GEN(dev_priv) >= 8) {
+		if (port == PORT_A || IS_GEN9_LP(dev_priv))
 			intel_dig_port->connected = bdw_digital_port_connected;
 		else
-			intel_dig_port->connected = ivb_digital_port_connected;
+			intel_dig_port->connected = pch_digital_port_connected;
 	} else {
-		if (INTEL_PCH_TYPE(dev_priv) >= PCH_SPT)
-			intel_dig_port->connected = spt_digital_port_connected;
+		if (port == PORT_A)
+			intel_dig_port->connected = ilk_digital_port_connected;
 		else
-			intel_dig_port->connected = cpt_digital_port_connected;
+			intel_dig_port->connected = pch_digital_port_connected;
 	}
 
 	intel_infoframe_init(intel_dig_port);
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 4e1f73f80951..ac767be18df0 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5348,71 +5348,6 @@ edp_detect(struct intel_dp *intel_dp)
 	return connector_status_connected;
 }
 
-static bool ibx_digital_port_connected(struct intel_encoder *encoder)
-{
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	u32 bit;
-
-	switch (encoder->hpd_pin) {
-	case HPD_PORT_B:
-		bit = SDE_PORTB_HOTPLUG;
-		break;
-	case HPD_PORT_C:
-		bit = SDE_PORTC_HOTPLUG;
-		break;
-	case HPD_PORT_D:
-		bit = SDE_PORTD_HOTPLUG;
-		break;
-	default:
-		MISSING_CASE(encoder->hpd_pin);
-		return false;
-	}
-
-	return I915_READ(SDEISR) & bit;
-}
-
-bool cpt_digital_port_connected(struct intel_encoder *encoder)
-{
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	u32 bit;
-
-	switch (encoder->hpd_pin) {
-	case HPD_PORT_B:
-		bit = SDE_PORTB_HOTPLUG_CPT;
-		break;
-	case HPD_PORT_C:
-		bit = SDE_PORTC_HOTPLUG_CPT;
-		break;
-	case HPD_PORT_D:
-		bit = SDE_PORTD_HOTPLUG_CPT;
-		break;
-	default:
-		MISSING_CASE(encoder->hpd_pin);
-		return false;
-	}
-
-	return I915_READ(SDEISR) & bit;
-}
-
-bool spt_digital_port_connected(struct intel_encoder *encoder)
-{
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	u32 bit;
-
-	switch (encoder->hpd_pin) {
-	case HPD_PORT_A:
-		bit = SDE_PORTA_HOTPLUG_SPT;
-		break;
-	case HPD_PORT_E:
-		bit = SDE_PORTE_HOTPLUG_SPT;
-		break;
-	default:
-		return cpt_digital_port_connected(encoder);
-	}
-
-	return I915_READ(SDEISR) & bit;
-}
-
 static bool g4x_digital_port_connected(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
@@ -5459,59 +5394,28 @@ static bool gm45_digital_port_connected(struct intel_encoder *encoder)
 	return I915_READ(PORT_HOTPLUG_STAT) & bit;
 }
 
-static bool ilk_digital_port_connected(struct intel_encoder *encoder)
+bool ilk_digital_port_connected(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	u32 bit = dev_priv->hotplug.hpd[encoder->hpd_pin];
 
-	return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
-}
-
-bool ivb_digital_port_connected(struct intel_encoder *encoder)
-{
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-
-	return I915_READ(DEISR) & DE_DP_A_HOTPLUG_IVB;
+	return I915_READ(DEISR) & bit;
 }
 
 bool bdw_digital_port_connected(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-
-	return I915_READ(GEN8_DE_PORT_ISR) & GEN8_PORT_DP_A_HOTPLUG;
-}
-
-bool bxt_digital_port_connected(struct intel_encoder *encoder)
-{
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	u32 bit;
-
-	switch (encoder->hpd_pin) {
-	case HPD_PORT_A:
-		bit = BXT_DE_PORT_HP_DDIA;
-		break;
-	case HPD_PORT_B:
-		bit = BXT_DE_PORT_HP_DDIB;
-		break;
-	case HPD_PORT_C:
-		bit = BXT_DE_PORT_HP_DDIC;
-		break;
-	default:
-		MISSING_CASE(encoder->hpd_pin);
-		return false;
-	}
+	u32 bit = dev_priv->hotplug.hpd[encoder->hpd_pin];
 
 	return I915_READ(GEN8_DE_PORT_ISR) & bit;
 }
 
-bool icp_digital_port_connected(struct intel_encoder *encoder)
+bool pch_digital_port_connected(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
+	u32 bit = dev_priv->hotplug.pch_hpd[encoder->hpd_pin];
 
-	if (HAS_PCH_MCC(dev_priv) && phy == PHY_C)
-		return I915_READ(SDEISR) & SDE_TC_HOTPLUG_ICP(PORT_TC1);
-
-	return I915_READ(SDEISR) & SDE_DDI_HOTPLUG_ICP(phy);
+	return I915_READ(SDEISR) & bit;
 }
 
 /*
@@ -7577,16 +7481,11 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
 			intel_dig_port->connected = gm45_digital_port_connected;
 		else
 			intel_dig_port->connected = g4x_digital_port_connected;
-	} else if (port == PORT_A) {
-		if (IS_IVYBRIDGE(dev_priv))
-			intel_dig_port->connected = ivb_digital_port_connected;
-		else
+	} else {
+		if (port == PORT_A)
 			intel_dig_port->connected = ilk_digital_port_connected;
-	} else {
-		if (HAS_PCH_CPT(dev_priv))
-			intel_dig_port->connected = cpt_digital_port_connected;
 		else
-			intel_dig_port->connected = ibx_digital_port_connected;
+			intel_dig_port->connected = pch_digital_port_connected;
 	}
 
 	if (port != PORT_A)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index cf0df6f18734..1b0b524cdc64 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -116,12 +116,9 @@ void intel_dp_vsc_enable(struct intel_dp *intel_dp,
 void intel_dp_hdr_metadata_enable(struct intel_dp *intel_dp,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state);
-bool cpt_digital_port_connected(struct intel_encoder *encoder);
-bool spt_digital_port_connected(struct intel_encoder *encoder);
-bool ivb_digital_port_connected(struct intel_encoder *encoder);
+bool pch_digital_port_connected(struct intel_encoder *encoder);
+bool ilk_digital_port_connected(struct intel_encoder *encoder);
 bool bdw_digital_port_connected(struct intel_encoder *encoder);
-bool bxt_digital_port_connected(struct intel_encoder *encoder);
-bool icp_digital_port_connected(struct intel_encoder *encoder);
 bool intel_digital_port_connected(struct intel_encoder *encoder);
 
 static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
diff --git a/drivers/gpu/drm/i915/display/intel_tc.c b/drivers/gpu/drm/i915/display/intel_tc.c
index f498076b132c..7223db87a143 100644
--- a/drivers/gpu/drm/i915/display/intel_tc.c
+++ b/drivers/gpu/drm/i915/display/intel_tc.c
@@ -172,8 +172,8 @@ static void tc_port_fixup_legacy_flag(struct intel_digital_port *dig_port,
 static u32 tc_port_live_status_mask(struct intel_digital_port *dig_port)
 {
 	struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
-	enum tc_port tc_port = intel_port_to_tc(i915, dig_port->base.port);
 	struct intel_uncore *uncore = &i915->uncore;
+	u32 isr_bit = i915->hotplug.pch_hpd[dig_port->base.hpd_pin];
 	u32 mask = 0;
 	u32 val;
 
@@ -191,7 +191,7 @@ static u32 tc_port_live_status_mask(struct intel_digital_port *dig_port)
 	if (val & TC_LIVE_STATE_TC(dig_port->tc_phy_fia_idx))
 		mask |= BIT(TC_PORT_DP_ALT);
 
-	if (intel_uncore_read(uncore, SDEISR) & SDE_TC_HOTPLUG_ICP(tc_port))
+	if (intel_uncore_read(uncore, SDEISR) & isr_bit)
 		mask |= BIT(TC_PORT_LEGACY);
 
 	/* The sink can be connected only in a single mode. */
-- 
2.24.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2020-01-21 17:11 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-21 17:10 [Intel-gfx] [PATCH 00/11] drm/i915: Hotplug cleanups Ville Syrjala
2020-01-21 17:10 ` [Intel-gfx] [PATCH 01/11] drm/i915: Prefer intel_connector over drm_connector in hotplug code Ville Syrjala
2020-01-22  9:50   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 02/11] drm/i915: Introduce intel_connector_hpd_pin() Ville Syrjala
2020-01-28  8:22   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 03/11] drm/i915/crt: Configure connector->polled and encoder->hpd_pin consistently Ville Syrjala
2020-01-28  8:23   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 04/11] drm/i915/hpd: Replace the loop-within-loop with two independent loops Ville Syrjala
2020-01-21 17:10 ` [Intel-gfx] [PATCH 05/11] drm/i915: Mark all HPD capabled connectors as such Ville Syrjala
2020-01-21 17:10 ` [Intel-gfx] [PATCH 06/11] drm/i915: Mark ns2501 as LVDS without a fixed mode Ville Syrjala
2020-01-28  8:42   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 07/11] drm/i915/dvo: Mark TMDS DVO connectors as polled Ville Syrjala
2020-01-28  8:45   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 08/11] drm/i915: Sprinkle missing commas Ville Syrjala
2020-01-28  8:36   ` Jani Nikula
2020-01-21 17:10 ` [Intel-gfx] [PATCH 09/11] drm/i915: Turn intel_digital_port_connected() in a vfunc Ville Syrjala
2020-01-21 19:44   ` [Intel-gfx] [PATCH v2 " Ville Syrjala
2020-01-28  9:06     ` Jani Nikula
2020-02-04 21:07       ` Ville Syrjälä
2020-01-21 17:10 ` [Intel-gfx] [PATCH 10/11] drm/i915: Stash hpd status bits under dev_priv Ville Syrjala
2020-01-21 17:11 ` Ville Syrjala [this message]
2020-01-21 19:18 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: Hotplug cleanups Patchwork
2020-01-21 20:52 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915: Hotplug cleanups (rev2) Patchwork
2020-01-23  3:35 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2020-01-23 18:07 ` [Intel-gfx] ✓ Fi.CI.IGT: success " Patchwork

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=20200121171100.4370-12-ville.syrjala@linux.intel.com \
    --to=ville.syrjala@linux.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.