All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Xiong Zhang <xiong.y.zhang@intel.com>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 6/6 v3] drm/i915: Enable HDMI on DDI-E
Date: Mon, 31 Aug 2015 18:47:41 +0300	[thread overview]
Message-ID: <87a8t7xxwi.fsf@intel.com> (raw)
In-Reply-To: <1439798644-12653-1-git-send-email-xiong.y.zhang@intel.com>

On Mon, 17 Aug 2015, Xiong Zhang <xiong.y.zhang@intel.com> wrote:
> DDI-E doesn't have the correspondent GMBUS pin.
>
> We rely on VBT to tell us which one it being used instead.
>
> The DVI/HDMI on shared port couldn't exist.
>
> This patch isn't tested without hardware wchich has HDMI
> on DDI-E.
>
> v2: fix trailing whitespace
> v3: MISSING_CASE take place of BUG()
>
> Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

Pushed to drm-intel-next-fixes.

BR,
Jani.

> ---
>  drivers/gpu/drm/i915/i915_drv.h   |  5 +++++
>  drivers/gpu/drm/i915/intel_bios.c | 25 +++++++++++++++++++++----
>  drivers/gpu/drm/i915/intel_hdmi.c | 21 +++++++++++++++++++++
>  3 files changed, 47 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 35192d2..22e8bf0 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1418,6 +1418,10 @@ enum modeset_restore {
>  #define DP_AUX_C 0x20
>  #define DP_AUX_D 0x30
>  
> +#define DDC_PIN_B  0x05
> +#define DDC_PIN_C  0x04
> +#define DDC_PIN_D  0x06
> +
>  struct ddi_vbt_port_info {
>  	/*
>  	 * This is an index in the HDMI/DVI DDI buffer translation table.
> @@ -1432,6 +1436,7 @@ struct ddi_vbt_port_info {
>  	uint8_t supports_dp:1;
>  
>  	uint8_t alternate_aux_channel;
> +	uint8_t alternate_ddc_pin;
>  
>  	uint8_t dp_boost_level;
>  	uint8_t hdmi_boost_level;
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 8e46149..a2ee347 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -905,7 +905,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>  	uint8_t hdmi_level_shift;
>  	int i, j;
>  	bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
> -	uint8_t aux_channel;
> +	uint8_t aux_channel, ddc_pin;
>  	/* Each DDI port can have more than one value on the "DVO Port" field,
>  	 * so look for all the possible values for each port and abort if more
>  	 * than one is found. */
> @@ -939,6 +939,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>  		return;
>  
>  	aux_channel = child->raw[25];
> +	ddc_pin = child->common.ddc_pin;
>  
>  	is_dvi = child->common.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>  	is_dp = child->common.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
> @@ -970,11 +971,27 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>  		DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port));
>  
>  	if (is_dvi) {
> -		if (child->common.ddc_pin == 0x05 && port != PORT_B)
> +		if (port == PORT_E) {
> +			info->alternate_ddc_pin = ddc_pin;
> +			/* if DDIE share ddc pin with other port, then
> +			 * dvi/hdmi couldn't exist on the shared port.
> +			 * Otherwise they share the same ddc bin and system
> +			 * couldn't communicate with them seperately. */
> +			if (ddc_pin == DDC_PIN_B) {
> +				dev_priv->vbt.ddi_port_info[PORT_B].supports_dvi = 0;
> +				dev_priv->vbt.ddi_port_info[PORT_B].supports_hdmi = 0;
> +			} else if (ddc_pin == DDC_PIN_C) {
> +				dev_priv->vbt.ddi_port_info[PORT_C].supports_dvi = 0;
> +				dev_priv->vbt.ddi_port_info[PORT_C].supports_hdmi = 0;
> +			} else if (ddc_pin == DDC_PIN_D) {
> +				dev_priv->vbt.ddi_port_info[PORT_D].supports_dvi = 0;
> +				dev_priv->vbt.ddi_port_info[PORT_D].supports_hdmi = 0;
> +			}
> +		} else if (ddc_pin == DDC_PIN_B && port != PORT_B)
>  			DRM_DEBUG_KMS("Unexpected DDC pin for port B\n");
> -		if (child->common.ddc_pin == 0x04 && port != PORT_C)
> +		else if (ddc_pin == DDC_PIN_C && port != PORT_C)
>  			DRM_DEBUG_KMS("Unexpected DDC pin for port C\n");
> -		if (child->common.ddc_pin == 0x06 && port != PORT_D)
> +		else if (ddc_pin == DDC_PIN_D && port != PORT_D)
>  			DRM_DEBUG_KMS("Unexpected DDC pin for port D\n");
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 7185062..d1a7f7b 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1956,6 +1956,7 @@ 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 = dev->dev_private;
>  	enum port port = intel_dig_port->port;
> +	uint8_t alternate_ddc_pin;
>  
>  	drm_connector_init(dev, connector, &intel_hdmi_connector_funcs,
>  			   DRM_MODE_CONNECTOR_HDMIA);
> @@ -1996,6 +1997,26 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
>  			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. */
> -- 
> 2.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-08-31 15:47 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-06  7:51 [PATCH 1/6] drm/i915/skl: Enable DDI-E Xiong Zhang
2015-08-06  7:51 ` [PATCH 2/6] drm/i915: Set power domain for DDI-E Xiong Zhang
2015-08-11  6:12   ` Zhang, Xiong Y
2015-08-06  7:51 ` [PATCH 3/6] drm/i915: Set alternate aux " Xiong Zhang
2015-08-08  0:01   ` [PATCH] " Rodrigo Vivi
2015-08-11  6:18     ` Zhang, Xiong Y
2015-08-13  8:40     ` shuang.he
2015-08-06  7:51 ` [PATCH 4/6] drm/i915: eDP can be present on DDI-E Xiong Zhang
2015-08-11  6:27   ` Zhang, Xiong Y
2015-08-11  9:47   ` Daniel Vetter
2015-08-11 10:09     ` Zhang, Xiong Y
2015-08-11 18:42     ` Vivi, Rodrigo
2015-08-12 10:27       ` Zhang, Xiong Y
2015-08-12 12:32         ` Daniel Vetter
2015-08-12 16:38           ` Vivi, Rodrigo
2015-08-31 15:47   ` Jani Nikula
2015-08-06  7:51 ` [PATCH 5/6] drm/i915/skl: enable DDIE hotplug Xiong Zhang
2015-08-08  0:06   ` Rodrigo Vivi
2015-08-10  6:53     ` [PATCH 5/6 v2] drm/i915/skl: enable DDI-E hotplug Xiong Zhang
2015-08-17  7:55       ` [PATCH 5/6 v3] " Xiong Zhang
2015-08-26  7:25         ` Jani Nikula
2015-08-06  7:51 ` [PATCH 6/6] drm/i915: Enable HDMI on DDI-E Xiong Zhang
2015-08-08  0:09   ` Rodrigo Vivi
2015-08-11  9:58   ` Daniel Vetter
2015-08-12 10:39     ` [PATCH 6/6 v3] " Xiong Zhang
2015-08-12 12:33       ` Daniel Vetter
2015-08-13  2:57         ` Zhang, Xiong Y
2015-08-14  8:42           ` Daniel Vetter
2015-08-14 10:38             ` Zhang, Xiong Y
2015-08-17  8:04             ` Xiong Zhang
2015-08-31 15:47               ` Jani Nikula [this message]
2015-08-12 14:19   ` [PATCH 6/6] " shuang.he
2015-08-06 13:30 ` [PATCH 1/6] drm/i915/skl: Enable DDI-E Daniel Vetter
2015-08-06 15:37   ` Vivi, Rodrigo
2015-08-08  0:35   ` [PATCH 8/6] " Rodrigo Vivi
2015-08-11  7:12     ` Zhang, Xiong Y
2015-08-31 15:48     ` Jani Nikula
2015-08-06 15:14 ` [PATCH 1/6] " Daniel Vetter
2015-08-06 15:50   ` Vivi, Rodrigo
2015-08-08  0:33   ` [PATCH 7/6] drm/i915/skl: DDI-E and DDI-A shares 4 lanes Rodrigo Vivi
2015-08-11  7:05     ` Zhang, Xiong Y
2015-08-11 18:38       ` Vivi, Rodrigo
2015-08-12  2:20         ` Zhang, Xiong Y
2015-08-12 16:51           ` Vivi, Rodrigo
2015-08-13  3:27             ` Zhang, Xiong Y
2015-08-13  5:48               ` Jindal, Sonika
2015-08-26  8:15                 ` Jani Nikula
2015-08-26 16:38                   ` Vivi, Rodrigo
2015-08-27  2:52                     ` Zhang, Xiong Y
2015-08-27 14:31                       ` Timo Aaltonen
2015-08-27 17:59                         ` Vivi, Rodrigo
2015-08-12 21:29       ` Timo Aaltonen

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=87a8t7xxwi.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=xiong.y.zhang@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.