diff mbox series

drm/i915/ehl: Port C's hotplug interrupt is associated with TC1 bits

Message ID 20191011002618.3087-1-vivek.kasireddy@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915/ehl: Port C's hotplug interrupt is associated with TC1 bits | expand

Commit Message

Kasireddy, Vivek Oct. 11, 2019, 12:26 a.m. UTC
On some platforms that have the MCC PCH, Port C's hotplug interrupt
bits are mapped to TC1 bits.

Suggested-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 3 +++
 drivers/gpu/drm/i915/i915_irq.c         | 8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

Comments

Souza, Jose Oct. 11, 2019, 6:01 p.m. UTC | #1
On Thu, 2019-10-10 at 17:26 -0700, Vivek Kasireddy wrote:
> On some platforms that have the MCC PCH, Port C's hotplug interrupt

Some?

> bits are mapped to TC1 bits.
> 
> Suggested-by: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 3 +++
>  drivers/gpu/drm/i915/i915_irq.c         | 8 ++++----
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 0e45c61d7331..6594f2af1257 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5282,6 +5282,9 @@ static bool icl_combo_port_connected(struct
> drm_i915_private *dev_priv,
>  {
>  	enum port port = intel_dig_port->base.port;
>  
> +	if (HAS_PCH_MCC(dev_priv) && port == PORT_C)
> +		return I915_READ(SDEISR) &
> SDE_TC_HOTPLUG_ICP(PORT_TC1);
> +
>  	return I915_READ(SDEISR) & SDE_DDI_HOTPLUG_ICP(port);
>  }
>  
> diff --git a/drivers/gpu/drm/i915/i915_irq.c
> b/drivers/gpu/drm/i915/i915_irq.c
> index 3af7f7914c40..a7c968b01af3 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -2249,8 +2249,8 @@ static void icp_irq_handler(struct
> drm_i915_private *dev_priv, u32 pch_iir)
>  		tc_port_hotplug_long_detect =
> tgp_tc_port_hotplug_long_detect;
>  		pins = hpd_tgp;
>  	} else if (HAS_PCH_MCC(dev_priv)) {
> -		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_TGP;
> -		tc_hotplug_trigger = 0;
> +		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
> +		tc_hotplug_trigger = pch_iir &
> SDE_TC_HOTPLUG_ICP(PORT_TC1);
>  		pins = hpd_icp;
>  	} else {
>  		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
> @@ -3377,8 +3377,8 @@ static void icp_hpd_irq_setup(struct
> drm_i915_private *dev_priv,
>  static void mcc_hpd_irq_setup(struct drm_i915_private *dev_priv)
>  {
>  	icp_hpd_irq_setup(dev_priv,
> -			  SDE_DDI_MASK_TGP, 0,
> -			  TGP_DDI_HPD_ENABLE_MASK, 0,
> +			  SDE_DDI_MASK_ICP,
> SDE_TC_HOTPLUG_ICP(PORT_TC1),
> +			  ICP_DDI_HPD_ENABLE_MASK,
> ICP_TC_HPD_ENABLE(PORT_TC1),
>  			  hpd_icp);
>  }
>
Matt Roper Oct. 14, 2019, 4:20 p.m. UTC | #2
On Thu, Oct 10, 2019 at 05:26:18PM -0700, Vivek Kasireddy wrote:
> On some platforms that have the MCC PCH, Port C's hotplug interrupt
> bits are mapped to TC1 bits.
> 
> Suggested-by: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>

As Jose pointed out, the "some" in the message here isn't correct; all
MCC platforms should behave this way, and the other PCH we were working
with previously turned out to be something different (not actually MCC);
I'll send a separate patch to deal with that other PCH in the next day
or two.

Aside from that,

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

Applied to dinq (with a tweaked commit message).  Thanks for the patch.


Matt

> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 3 +++
>  drivers/gpu/drm/i915/i915_irq.c         | 8 ++++----
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 0e45c61d7331..6594f2af1257 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5282,6 +5282,9 @@ static bool icl_combo_port_connected(struct drm_i915_private *dev_priv,
>  {
>  	enum port port = intel_dig_port->base.port;
>  
> +	if (HAS_PCH_MCC(dev_priv) && port == PORT_C)
> +		return I915_READ(SDEISR) & SDE_TC_HOTPLUG_ICP(PORT_TC1);
> +
>  	return I915_READ(SDEISR) & SDE_DDI_HOTPLUG_ICP(port);
>  }
>  
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 3af7f7914c40..a7c968b01af3 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -2249,8 +2249,8 @@ static void icp_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
>  		tc_port_hotplug_long_detect = tgp_tc_port_hotplug_long_detect;
>  		pins = hpd_tgp;
>  	} else if (HAS_PCH_MCC(dev_priv)) {
> -		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_TGP;
> -		tc_hotplug_trigger = 0;
> +		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
> +		tc_hotplug_trigger = pch_iir & SDE_TC_HOTPLUG_ICP(PORT_TC1);
>  		pins = hpd_icp;
>  	} else {
>  		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
> @@ -3377,8 +3377,8 @@ static void icp_hpd_irq_setup(struct drm_i915_private *dev_priv,
>  static void mcc_hpd_irq_setup(struct drm_i915_private *dev_priv)
>  {
>  	icp_hpd_irq_setup(dev_priv,
> -			  SDE_DDI_MASK_TGP, 0,
> -			  TGP_DDI_HPD_ENABLE_MASK, 0,
> +			  SDE_DDI_MASK_ICP, SDE_TC_HOTPLUG_ICP(PORT_TC1),
> +			  ICP_DDI_HPD_ENABLE_MASK, ICP_TC_HPD_ENABLE(PORT_TC1),
>  			  hpd_icp);
>  }
>  
> -- 
> 2.21.0
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 0e45c61d7331..6594f2af1257 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5282,6 +5282,9 @@  static bool icl_combo_port_connected(struct drm_i915_private *dev_priv,
 {
 	enum port port = intel_dig_port->base.port;
 
+	if (HAS_PCH_MCC(dev_priv) && port == PORT_C)
+		return I915_READ(SDEISR) & SDE_TC_HOTPLUG_ICP(PORT_TC1);
+
 	return I915_READ(SDEISR) & SDE_DDI_HOTPLUG_ICP(port);
 }
 
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 3af7f7914c40..a7c968b01af3 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2249,8 +2249,8 @@  static void icp_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
 		tc_port_hotplug_long_detect = tgp_tc_port_hotplug_long_detect;
 		pins = hpd_tgp;
 	} else if (HAS_PCH_MCC(dev_priv)) {
-		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_TGP;
-		tc_hotplug_trigger = 0;
+		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
+		tc_hotplug_trigger = pch_iir & SDE_TC_HOTPLUG_ICP(PORT_TC1);
 		pins = hpd_icp;
 	} else {
 		ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
@@ -3377,8 +3377,8 @@  static void icp_hpd_irq_setup(struct drm_i915_private *dev_priv,
 static void mcc_hpd_irq_setup(struct drm_i915_private *dev_priv)
 {
 	icp_hpd_irq_setup(dev_priv,
-			  SDE_DDI_MASK_TGP, 0,
-			  TGP_DDI_HPD_ENABLE_MASK, 0,
+			  SDE_DDI_MASK_ICP, SDE_TC_HOTPLUG_ICP(PORT_TC1),
+			  ICP_DDI_HPD_ENABLE_MASK, ICP_TC_HPD_ENABLE(PORT_TC1),
 			  hpd_icp);
 }