All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Souza, Jose" <jose.souza@intel.com>
To: "Roper, Matthew D" <matthew.d.roper@intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH] drm/i915/ehl: Introduce Mule Creek Canyon PCH
Date: Thu, 13 Jun 2019 23:19:07 +0000	[thread overview]
Message-ID: <2daee604f8446b2261895c3cb9621a396c7b71ca.camel@intel.com> (raw)
In-Reply-To: <20190524234210.11655-1-matthew.d.roper@intel.com>

On Fri, 2019-05-24 at 16:42 -0700, Matt Roper wrote:
> Although EHL introduces a new PCH, the South Display part of the PCH
> that we care about is nearly identical to ICP, just with some pins
> remapped.  Most notably, Port C is mapped to the pins that ICP uses
> for
> TC Port 1.

Reviewed-by: José Roberto de Souza <jose.souza@intel.com>

> 
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.c       |  8 +++++++-
>  drivers/gpu/drm/i915/i915_drv.h       |  3 +++
>  drivers/gpu/drm/i915/i915_irq.c       | 19 ++++++++++++++-----
>  drivers/gpu/drm/i915/intel_bios.c     | 11 ++++++++++-
>  drivers/gpu/drm/i915/intel_gmbus.c    | 14 ++++++++++++--
>  drivers/gpu/drm/i915/intel_hdmi.c     | 26
> +++++++++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_vbt_defs.h |  3 +++
>  7 files changed, 74 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c
> b/drivers/gpu/drm/i915/i915_drv.c
> index 83d2eb9e74cb..4fd13383b4fa 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -214,6 +214,10 @@ intel_pch_type(const struct drm_i915_private
> *dev_priv, unsigned short id)
>  		DRM_DEBUG_KMS("Found Ice Lake PCH\n");
>  		WARN_ON(!IS_ICELAKE(dev_priv));
>  		return PCH_ICP;
> +	case INTEL_PCH_MCC_DEVICE_ID_TYPE:
> +		DRM_DEBUG_KMS("Found Mule Creek Canyon PCH\n");
> +		WARN_ON(!IS_ELKHARTLAKE(dev_priv));
> +		return PCH_MCC;
>  	default:
>  		return PCH_NONE;
>  	}
> @@ -241,7 +245,9 @@ intel_virt_detect_pch(const struct
> drm_i915_private *dev_priv)
>  	 * make an educated guess as to which PCH is really there.
>  	 */
>  
> -	if (IS_ICELAKE(dev_priv))
> +	if (IS_ELKHARTLAKE(dev_priv))
> +		id = INTEL_PCH_MCC_DEVICE_ID_TYPE;
> +	else if (IS_ICELAKE(dev_priv))
>  		id = INTEL_PCH_ICP_DEVICE_ID_TYPE;
>  	else if (IS_CANNONLAKE(dev_priv) || IS_COFFEELAKE(dev_priv))
>  		id = INTEL_PCH_CNP_DEVICE_ID_TYPE;
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index 311e19154672..83a1802aa183 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -535,6 +535,7 @@ enum intel_pch {
>  	PCH_SPT,        /* Sunrisepoint/Kaby Lake PCH */
>  	PCH_CNP,        /* Cannon/Comet Lake PCH */
>  	PCH_ICP,	/* Ice Lake PCH */
> +	PCH_MCC,        /* Mule Creek Canyon PCH */
>  };
>  
>  #define QUIRK_LVDS_SSC_DISABLE (1<<1)
> @@ -2625,12 +2626,14 @@ IS_SUBPLATFORM(const struct drm_i915_private
> *i915,
>  #define INTEL_PCH_CNP_LP_DEVICE_ID_TYPE		0x9D80
>  #define INTEL_PCH_CMP_DEVICE_ID_TYPE		0x0280
>  #define INTEL_PCH_ICP_DEVICE_ID_TYPE		0x3480
> +#define INTEL_PCH_MCC_DEVICE_ID_TYPE		0x4B00
>  #define INTEL_PCH_P2X_DEVICE_ID_TYPE		0x7100
>  #define INTEL_PCH_P3X_DEVICE_ID_TYPE		0x7000
>  #define INTEL_PCH_QEMU_DEVICE_ID_TYPE		0x2900 /* qemu
> q35 has 2918 */
>  
>  #define INTEL_PCH_TYPE(dev_priv) ((dev_priv)->pch_type)
>  #define INTEL_PCH_ID(dev_priv) ((dev_priv)->pch_id)
> +#define HAS_PCH_MCC(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_MCC)
>  #define HAS_PCH_ICP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_ICP)
>  #define HAS_PCH_CNP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_CNP)
>  #define HAS_PCH_SPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_SPT)
> diff --git a/drivers/gpu/drm/i915/i915_irq.c
> b/drivers/gpu/drm/i915/i915_irq.c
> index 233211fde0ea..4c0eef03d1a4 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -140,6 +140,12 @@ static const u32 hpd_icp[HPD_NUM_PINS] = {
>  	[HPD_PORT_F] = SDE_TC4_HOTPLUG_ICP
>  };
>  
> +static const u32 hpd_mcc[HPD_NUM_PINS] = {
> +	[HPD_PORT_A] = SDE_DDIA_HOTPLUG_ICP,
> +	[HPD_PORT_B] = SDE_DDIB_HOTPLUG_ICP,
> +	[HPD_PORT_C] = SDE_TC1_HOTPLUG_ICP
> +};
> +
>  static void gen3_irq_reset(struct intel_uncore *uncore, i915_reg_t
> imr,
>  			   i915_reg_t iir, i915_reg_t ier)
>  {
> @@ -2451,7 +2457,8 @@ static void cpt_irq_handler(struct
> drm_i915_private *dev_priv, u32 pch_iir)
>  		cpt_serr_int_handler(dev_priv);
>  }
>  
> -static void icp_irq_handler(struct drm_i915_private *dev_priv, u32
> pch_iir)
> +static void icp_irq_handler(struct drm_i915_private *dev_priv, u32
> pch_iir,
> +			    const u32 *pins)
>  {
>  	u32 ddi_hotplug_trigger = pch_iir & SDE_DDI_MASK_ICP;
>  	u32 tc_hotplug_trigger = pch_iir & SDE_TC_MASK_ICP;
> @@ -2465,7 +2472,7 @@ static void icp_irq_handler(struct
> drm_i915_private *dev_priv, u32 pch_iir)
>  
>  		intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask,
>  				   ddi_hotplug_trigger,
> -				   dig_hotplug_reg, hpd_icp,
> +				   dig_hotplug_reg, pins,
>  				   icp_ddi_port_hotplug_long_detect);
>  	}
>  
> @@ -2477,7 +2484,7 @@ static void icp_irq_handler(struct
> drm_i915_private *dev_priv, u32 pch_iir)
>  
>  		intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask,
>  				   tc_hotplug_trigger,
> -				   dig_hotplug_reg, hpd_icp,
> +				   dig_hotplug_reg, pins,
>  				   icp_tc_port_hotplug_long_detect);
>  	}
>  
> @@ -2908,8 +2915,10 @@ gen8_de_irq_handler(struct drm_i915_private
> *dev_priv, u32 master_ctl)
>  			I915_WRITE(SDEIIR, iir);
>  			ret = IRQ_HANDLED;
>  
> -			if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
> -				icp_irq_handler(dev_priv, iir);
> +			if (INTEL_PCH_TYPE(dev_priv) >= PCH_MCC)
> +				icp_irq_handler(dev_priv, iir,
> hpd_mcc);
> +			else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
> +				icp_irq_handler(dev_priv, iir,
> hpd_icp);
>  			else if (INTEL_PCH_TYPE(dev_priv) >= PCH_SPT)
>  				spt_irq_handler(dev_priv, iir);
>  			else
> diff --git a/drivers/gpu/drm/i915/intel_bios.c
> b/drivers/gpu/drm/i915/intel_bios.c
> index a0b708f7f384..be14b4cdca08 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1329,12 +1329,21 @@ static const u8 icp_ddc_pin_map[] = {
>  	[ICL_DDC_BUS_PORT_4] = GMBUS_PIN_12_TC4_ICP,
>  };
>  
> +static const u8 mcc_ddc_pin_map[] = {
> +	[MCC_DDC_BUS_DDI_A] = GMBUS_PIN_1_BXT,
> +	[MCC_DDC_BUS_DDI_B] = GMBUS_PIN_2_BXT,
> +	[MCC_DDC_BUS_DDI_C] = GMBUS_PIN_9_TC1_ICP,
> +};
> +
>  static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
>  {
>  	const u8 *ddc_pin_map;
>  	int n_entries;
>  
> -	if (HAS_PCH_ICP(dev_priv)) {
> +	if (HAS_PCH_MCC(dev_priv)) {
> +		ddc_pin_map = mcc_ddc_pin_map;
> +		n_entries = ARRAY_SIZE(mcc_ddc_pin_map);
> +	} else if (HAS_PCH_ICP(dev_priv)) {
>  		ddc_pin_map = icp_ddc_pin_map;
>  		n_entries = ARRAY_SIZE(icp_ddc_pin_map);
>  	} else if (HAS_PCH_CNP(dev_priv)) {
> diff --git a/drivers/gpu/drm/i915/intel_gmbus.c
> b/drivers/gpu/drm/i915/intel_gmbus.c
> index 969ce8b71e32..67012fc66bcb 100644
> --- a/drivers/gpu/drm/i915/intel_gmbus.c
> +++ b/drivers/gpu/drm/i915/intel_gmbus.c
> @@ -88,11 +88,19 @@ static const struct gmbus_pin gmbus_pins_icp[] =
> {
>  	[GMBUS_PIN_12_TC4_ICP] = { "tc4", GPIOM },
>  };
>  
> +static const struct gmbus_pin gmbus_pins_mcc[] = {
> +	[GMBUS_PIN_1_BXT] = { "dpa", GPIOB },
> +	[GMBUS_PIN_2_BXT] = { "dpb", GPIOC },
> +	[GMBUS_PIN_9_TC1_ICP] = { "dpc", GPIOJ },
> +};
> +
>  /* pin is expected to be valid */
>  static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private
> *dev_priv,
>  					     unsigned int pin)
>  {
> -	if (HAS_PCH_ICP(dev_priv))
> +	if (HAS_PCH_MCC(dev_priv))
> +		return &gmbus_pins_mcc[pin];
> +	else if (HAS_PCH_ICP(dev_priv))
>  		return &gmbus_pins_icp[pin];
>  	else if (HAS_PCH_CNP(dev_priv))
>  		return &gmbus_pins_cnp[pin];
> @@ -111,7 +119,9 @@ bool intel_gmbus_is_valid_pin(struct
> drm_i915_private *dev_priv,
>  {
>  	unsigned int size;
>  
> -	if (HAS_PCH_ICP(dev_priv))
> +	if (HAS_PCH_MCC(dev_priv))
> +		size = ARRAY_SIZE(gmbus_pins_mcc);
> +	else if (HAS_PCH_ICP(dev_priv))
>  		size = ARRAY_SIZE(gmbus_pins_icp);
>  	else if (HAS_PCH_CNP(dev_priv))
>  		size = ARRAY_SIZE(gmbus_pins_cnp);
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> index a0b98a0178f6..13e701afe55f 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2860,6 +2860,28 @@ static u8 icl_port_to_ddc_pin(struct
> drm_i915_private *dev_priv, enum port port)
>  	return ddc_pin;
>  }
>  
> +static u8 mcc_port_to_ddc_pin(struct drm_i915_private *dev_priv,
> enum port port)
> +{
> +	u8 ddc_pin;
> +
> +	switch (port) {
> +	case PORT_A:
> +		ddc_pin = GMBUS_PIN_1_BXT;
> +		break;
> +	case PORT_B:
> +		ddc_pin = GMBUS_PIN_2_BXT;
> +		break;
> +	case PORT_C:
> +		ddc_pin = GMBUS_PIN_9_TC1_ICP;
> +		break;
> +	default:
> +		MISSING_CASE(port);
> +		ddc_pin = GMBUS_PIN_1_BXT;
> +		break;
> +	}
> +	return ddc_pin;
> +}
> +
>  static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv,
>  			      enum port port)
>  {
> @@ -2896,7 +2918,9 @@ static u8 intel_hdmi_ddc_pin(struct
> drm_i915_private *dev_priv,
>  		return info->alternate_ddc_pin;
>  	}
>  
> -	if (HAS_PCH_ICP(dev_priv))
> +	if (HAS_PCH_MCC(dev_priv))
> +		ddc_pin = mcc_port_to_ddc_pin(dev_priv, port);
> +	else if (HAS_PCH_ICP(dev_priv))
>  		ddc_pin = icl_port_to_ddc_pin(dev_priv, port);
>  	else if (HAS_PCH_CNP(dev_priv))
>  		ddc_pin = cnp_port_to_ddc_pin(dev_priv, port);
> diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h
> b/drivers/gpu/drm/i915/intel_vbt_defs.h
> index fdbbb9a53804..6dcc2ce95334 100644
> --- a/drivers/gpu/drm/i915/intel_vbt_defs.h
> +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h
> @@ -324,6 +324,9 @@ enum vbt_gmbus_ddi {
>  	ICL_DDC_BUS_PORT_2,
>  	ICL_DDC_BUS_PORT_3,
>  	ICL_DDC_BUS_PORT_4,
> +	MCC_DDC_BUS_DDI_A = 0x1,
> +	MCC_DDC_BUS_DDI_B,
> +	MCC_DDC_BUS_DDI_C = 0x4,
>  };
>  
>  #define DP_AUX_A 0x40
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2019-06-13 23:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-24 23:42 [PATCH] drm/i915/ehl: Introduce Mule Creek Canyon PCH Matt Roper
2019-05-26 15:31 ` ✓ Fi.CI.BAT: success for " Patchwork
2019-05-27 10:28 ` ✓ Fi.CI.IGT: " Patchwork
2019-06-13 23:19 ` Souza, Jose [this message]
2019-06-15  0:42   ` [CI] " Matt Roper
2019-06-15  5:08 ` ✓ Fi.CI.BAT: success for drm/i915/ehl: Introduce Mule Creek Canyon PCH (rev2) Patchwork
2019-06-15  9:12 ` ✓ Fi.CI.BAT: success for drm/i915/ehl: Introduce Mule Creek Canyon PCH (rev3) Patchwork
2019-06-17 11:36 ` ✗ Fi.CI.IGT: failure " Patchwork
2019-06-17 20:58   ` Matt Roper

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=2daee604f8446b2261895c3cb9621a396c7b71ca.camel@intel.com \
    --to=jose.souza@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=matthew.d.roper@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.