All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Bride <jim.bride@linux.intel.com>
To: ville.syrjala@linux.intel.com
Cc: intel-gfx@lists.freedesktop.org,
	Maarten Maathuis <madman2003@gmail.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH 2/4] drm/i915: Respect alternate_ddc_pin for all DDI ports
Date: Thu, 13 Oct 2016 11:06:55 -0700	[thread overview]
Message-ID: <20161013180654.GE4042@shiv> (raw)
In-Reply-To: <1476208368-5710-3-git-send-email-ville.syrjala@linux.intel.com>

On Tue, Oct 11, 2016 at 08:52:46PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> The VBT provides the platform a way to mix and match the DDI ports vs.
> GMBUS pins. Currently we only trust the VBT for DDI E, which I suppose
> has no standard GMBUS pin assignment. However, there are machines out
> there that use a non-standard mapping for the other ports as well.
> Let's start trusting the VBT on this one for all ports on DDI platforms.
> 
> I've structured the code such that other platforms could easily start
> using this as well, by simply filling in the ddi_port_info. IIRC there
> may be CHV system that might actually need this.
> 
> v2: Include a commit message, include a debug message during init
> 
> Cc: stable@vger.kernel.org
> Cc: Maarten Maathuis <madman2003@gmail.com>
> Tested-by: Maarten Maatt show huis <madman2003@gmail.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97877
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_hdmi.c | 84 ++++++++++++++++++++++-----------------
>  1 file changed, 48 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 8d46f5836746..9ca86e901fc8 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1799,6 +1799,50 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
>  	intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
>  }
>  
> +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv,
> +			     enum port port)
> +{
> +	const struct ddi_vbt_port_info *info =
> +		&dev_priv->vbt.ddi_port_info[port];
> +	u8 ddc_pin;
> +
> +	if (info->alternate_ddc_pin) {
> +		DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n",
> +			      info->alternate_ddc_pin, port_name(port));
> +		return info->alternate_ddc_pin;
> +	}
> +
> +	switch (port) {
> +	case PORT_B:
> +		if (IS_BROXTON(dev_priv))
> +			ddc_pin = GMBUS_PIN_1_BXT;
> +		else
> +			ddc_pin = GMBUS_PIN_DPB;
> +		break;
> +	case PORT_C:
> +		if (IS_BROXTON(dev_priv))
> +			ddc_pin = GMBUS_PIN_2_BXT;
> +		else
> +			ddc_pin = GMBUS_PIN_DPC;
> +		break;
> +	case PORT_D:
> +		if (IS_CHERRYVIEW(dev_priv))
> +			ddc_pin = GMBUS_PIN_DPD_CHV;
> +		else
> +			ddc_pin = GMBUS_PIN_DPD;

In the code removed below there's a specific case covering Broxton that
isn't accounted for here.  Are we sure that we don't need that logic here?

Jim

> +		break;
> +	default:
> +		MISSING_CASE(port);
> +		ddc_pin = GMBUS_PIN_DPB;
> +		break;
> +	}
> +
> +	DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n",
> +		      ddc_pin, port_name(port));
> +
> +	return ddc_pin;
> +}
> +
>  void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  			       struct intel_connector *intel_connector)
>  {
> @@ -1808,7 +1852,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  	struct drm_device *dev = intel_encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  	enum port port = intel_dig_port->port;
> -	uint8_t alternate_ddc_pin;
>  
>  	DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
>  		      port_name(port));
> @@ -1826,12 +1869,10 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  	connector->doublescan_allowed = 0;
>  	connector->stereo_allowed = 1;
>  
> +	intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port);
> +
>  	switch (port) {
>  	case PORT_B:
> -		if (IS_BROXTON(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_1_BXT;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
>  		/*
>  		 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
>  		 * interrupts to check the external panel connection.
> @@ -1842,46 +1883,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  			intel_encoder->hpd_pin = HPD_PORT_B;
>  		break;
>  	case PORT_C:
> -		if (IS_BROXTON(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_2_BXT;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
>  		intel_encoder->hpd_pin = HPD_PORT_C;
>  		break;
>  	case PORT_D:
> -		if (WARN_ON(IS_BROXTON(dev_priv)))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DISABLED;
> -		else if (IS_CHERRYVIEW(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD_CHV;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
>  		intel_encoder->hpd_pin = HPD_PORT_D;
>  		break;
>  	case PORT_E:
> -		/* On SKL PORT E doesn't have seperate GMBUS pin
> -		 *  We rely on VBT to set a proper alternate GMBUS pin. */
> -		alternate_ddc_pin =
> -			dev_priv->vbt.ddi_port_info[PORT_E].alternate_ddc_pin;
> -		switch (alternate_ddc_pin) {
> -		case DDC_PIN_B:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
> -			break;
> -		case DDC_PIN_C:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
> -			break;
> -		case DDC_PIN_D:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
> -			break;
> -		default:
> -			MISSING_CASE(alternate_ddc_pin);
> -		}
>  		intel_encoder->hpd_pin = HPD_PORT_E;
>  		break;
> -	case PORT_A:
> -		intel_encoder->hpd_pin = HPD_PORT_A;
> -		/* Internal port only for eDP. */
>  	default:
> -		BUG();
> +		MISSING_CASE(port);
> +		return;
>  	}
>  
>  	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

WARNING: multiple messages have this Message-ID (diff)
From: Jim Bride <jim.bride@linux.intel.com>
To: ville.syrjala@linux.intel.com
Cc: intel-gfx@lists.freedesktop.org,
	Maarten Maathuis <madman2003@gmail.com>,
	stable@vger.kernel.org
Subject: Re: [Intel-gfx] [PATCH 2/4] drm/i915: Respect alternate_ddc_pin for all DDI ports
Date: Thu, 13 Oct 2016 11:06:55 -0700	[thread overview]
Message-ID: <20161013180654.GE4042@shiv> (raw)
In-Reply-To: <1476208368-5710-3-git-send-email-ville.syrjala@linux.intel.com>

On Tue, Oct 11, 2016 at 08:52:46PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> 
> The VBT provides the platform a way to mix and match the DDI ports vs.
> GMBUS pins. Currently we only trust the VBT for DDI E, which I suppose
> has no standard GMBUS pin assignment. However, there are machines out
> there that use a non-standard mapping for the other ports as well.
> Let's start trusting the VBT on this one for all ports on DDI platforms.
> 
> I've structured the code such that other platforms could easily start
> using this as well, by simply filling in the ddi_port_info. IIRC there
> may be CHV system that might actually need this.
> 
> v2: Include a commit message, include a debug message during init
> 
> Cc: stable@vger.kernel.org
> Cc: Maarten Maathuis <madman2003@gmail.com>
> Tested-by: Maarten Maatt show huis <madman2003@gmail.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97877
> Signed-off-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_hdmi.c | 84 ++++++++++++++++++++++-----------------
>  1 file changed, 48 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 8d46f5836746..9ca86e901fc8 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1799,6 +1799,50 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
>  	intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
>  }
>  
> +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv,
> +			     enum port port)
> +{
> +	const struct ddi_vbt_port_info *info =
> +		&dev_priv->vbt.ddi_port_info[port];
> +	u8 ddc_pin;
> +
> +	if (info->alternate_ddc_pin) {
> +		DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n",
> +			      info->alternate_ddc_pin, port_name(port));
> +		return info->alternate_ddc_pin;
> +	}
> +
> +	switch (port) {
> +	case PORT_B:
> +		if (IS_BROXTON(dev_priv))
> +			ddc_pin = GMBUS_PIN_1_BXT;
> +		else
> +			ddc_pin = GMBUS_PIN_DPB;
> +		break;
> +	case PORT_C:
> +		if (IS_BROXTON(dev_priv))
> +			ddc_pin = GMBUS_PIN_2_BXT;
> +		else
> +			ddc_pin = GMBUS_PIN_DPC;
> +		break;
> +	case PORT_D:
> +		if (IS_CHERRYVIEW(dev_priv))
> +			ddc_pin = GMBUS_PIN_DPD_CHV;
> +		else
> +			ddc_pin = GMBUS_PIN_DPD;

In the code removed below there's a specific case covering Broxton that
isn't accounted for here.  Are we sure that we don't need that logic here?

Jim

> +		break;
> +	default:
> +		MISSING_CASE(port);
> +		ddc_pin = GMBUS_PIN_DPB;
> +		break;
> +	}
> +
> +	DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n",
> +		      ddc_pin, port_name(port));
> +
> +	return ddc_pin;
> +}
> +
>  void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  			       struct intel_connector *intel_connector)
>  {
> @@ -1808,7 +1852,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  	struct drm_device *dev = intel_encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  	enum port port = intel_dig_port->port;
> -	uint8_t alternate_ddc_pin;
>  
>  	DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
>  		      port_name(port));
> @@ -1826,12 +1869,10 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  	connector->doublescan_allowed = 0;
>  	connector->stereo_allowed = 1;
>  
> +	intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port);
> +
>  	switch (port) {
>  	case PORT_B:
> -		if (IS_BROXTON(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_1_BXT;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
>  		/*
>  		 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
>  		 * interrupts to check the external panel connection.
> @@ -1842,46 +1883,17 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  			intel_encoder->hpd_pin = HPD_PORT_B;
>  		break;
>  	case PORT_C:
> -		if (IS_BROXTON(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_2_BXT;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
>  		intel_encoder->hpd_pin = HPD_PORT_C;
>  		break;
>  	case PORT_D:
> -		if (WARN_ON(IS_BROXTON(dev_priv)))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DISABLED;
> -		else if (IS_CHERRYVIEW(dev_priv))
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD_CHV;
> -		else
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
>  		intel_encoder->hpd_pin = HPD_PORT_D;
>  		break;
>  	case PORT_E:
> -		/* On SKL PORT E doesn't have seperate GMBUS pin
> -		 *  We rely on VBT to set a proper alternate GMBUS pin. */
> -		alternate_ddc_pin =
> -			dev_priv->vbt.ddi_port_info[PORT_E].alternate_ddc_pin;
> -		switch (alternate_ddc_pin) {
> -		case DDC_PIN_B:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPB;
> -			break;
> -		case DDC_PIN_C:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPC;
> -			break;
> -		case DDC_PIN_D:
> -			intel_hdmi->ddc_bus = GMBUS_PIN_DPD;
> -			break;
> -		default:
> -			MISSING_CASE(alternate_ddc_pin);
> -		}
>  		intel_encoder->hpd_pin = HPD_PORT_E;
>  		break;
> -	case PORT_A:
> -		intel_encoder->hpd_pin = HPD_PORT_A;
> -		/* Internal port only for eDP. */
>  	default:
> -		BUG();
> +		MISSING_CASE(port);
> +		return;
>  	}
>  
>  	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2016-10-13 18:08 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-11 17:52 [PATCH 0/4] drm/i915: Trust VBT aux/ddc information ville.syrjala
2016-10-11 17:52 ` [PATCH 1/4] drm/i915: Respect alternate_aux_channel for all DDI ports ville.syrjala
2016-10-11 17:52   ` ville.syrjala
2016-10-13 17:59   ` [Intel-gfx] " Jim Bride
2016-10-13 17:59     ` Jim Bride
2016-10-11 17:52 ` [PATCH 2/4] drm/i915: Respect alternate_ddc_pin " ville.syrjala
2016-10-11 17:52   ` ville.syrjala
2016-10-11 20:04   ` Maarten Maathuis
2016-10-12 10:57     ` Ville Syrjälä
2016-10-12 10:57       ` Ville Syrjälä
2016-10-12 16:56       ` Maarten Maathuis
2016-10-13 18:06   ` Jim Bride [this message]
2016-10-13 18:06     ` [Intel-gfx] " Jim Bride
2016-10-13 18:29     ` Ville Syrjälä
2016-10-13 18:29       ` [Intel-gfx] " Ville Syrjälä
2016-10-17  6:50       ` Daniel Vetter
2016-10-17  6:50         ` Daniel Vetter
2016-10-11 17:52 ` [PATCH 3/4] drm/i915: Clean up DDI DDC/AUX CH sanitation ville.syrjala
2016-10-11 17:52   ` ville.syrjala
2016-10-13 18:17   ` Jim Bride
2016-10-13 18:17     ` [Intel-gfx] " Jim Bride
2016-10-17 18:00   ` Ville Syrjälä
2016-10-17 18:00     ` Ville Syrjälä
2016-10-17 18:07   ` [PATCH v3 " ville.syrjala
2016-10-17 18:07     ` ville.syrjala
2016-10-20 21:53     ` Maarten Maathuis
2016-10-20 22:00       ` Maarten Maathuis
2016-10-21 13:17         ` Ville Syrjälä
2016-10-11 17:52 ` [PATCH 4/4] drm/i915: Fix whitespace issues ville.syrjala
2016-10-13 18:18   ` Jim Bride
2016-10-11 18:49 ` ✗ Fi.CI.BAT: warning for drm/i915: Trust VBT aux/ddc information Patchwork
2016-10-12 10:54   ` Ville Syrjälä
2016-10-17 18:54 ` ✗ Fi.CI.BAT: failure for drm/i915: Trust VBT aux/ddc information (rev2) 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=20161013180654.GE4042@shiv \
    --to=jim.bride@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=madman2003@gmail.com \
    --cc=stable@vger.kernel.org \
    --cc=ville.syrjala@linux.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.