All of lore.kernel.org
 help / color / mirror / Atom feed
* Prep. for DP audio MST support
@ 2016-08-03  1:46 Dhinakaran Pandiyan
  2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-03  1:46 UTC (permalink / raw)
  To: intel-gfx

This series lays the groundwork for more DP MST audio work that will
follow. Patch 1 got possibly reverted because Patch 3 was missing.

The APIs between i915 and audio drivers have to modified so that the audio
drivers can identify different displays connected to a port. The changes
introduced in Patch 2 will make that easy.

Dhinakaran Pandiyan(2)
[PATCH 2/3] drm/i915: Move audio_connector to intel_encoder
[PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders

Libin Yang(1)
[PATCH 1/3] drm/i915: start adding dp mst audio
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/3] drm/i915: start adding dp mst audio
  2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
@ 2016-08-03  1:46 ` Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:42   ` Lyude
  2016-08-03  1:46 ` [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-03  1:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: Libin Yang

From: Libin Yang <libin.yang@linux.intel.com>

(This patch is developed by Dave Airlie <airlied@redhat.com> originally)

This patch adds support for DP MST audio in i915.

Enable audio codec when DP MST is enabled if has_audio flag is set.
Disable audio codec when DP MST is disabled if has_audio flag is set.

Another separated patches to support DP MST audio will be implemented
in audio driver.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
 drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
 drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  2 ++
 4 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 531ca02..56e38b1 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2961,6 +2961,20 @@ static void intel_dp_info(struct seq_file *m,
 		intel_panel_info(m, &intel_connector->panel);
 }
 
+static void intel_dp_mst_info(struct seq_file *m,
+			  struct intel_connector *intel_connector)
+{
+	struct intel_encoder *intel_encoder = intel_connector->encoder;
+	struct intel_dp_mst_encoder *intel_mst =
+		enc_to_mst(&intel_encoder->base);
+	struct intel_digital_port *intel_dig_port = intel_mst->primary;
+	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
+					intel_connector->port);
+
+	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
+}
+
 static void intel_hdmi_info(struct seq_file *m,
 			    struct intel_connector *intel_connector)
 {
@@ -3003,7 +3017,10 @@ static void intel_connector_info(struct seq_file *m,
 	switch (connector->connector_type) {
 	case DRM_MODE_CONNECTOR_DisplayPort:
 	case DRM_MODE_CONNECTOR_eDP:
-		intel_dp_info(m, intel_connector);
+		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
+			intel_dp_mst_info(m, intel_connector);
+		else
+			intel_dp_info(m, intel_connector);
 		break;
 	case DRM_MODE_CONNECTOR_LVDS:
 		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index dd1d6fe..cbb4e7a 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2154,6 +2154,19 @@ void intel_ddi_fdi_disable(struct drm_crtc *crtc)
 	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
 }
 
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc)
+{
+	u32 temp;
+
+	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
+		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
+		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
+			return true;
+	}
+	return false;
+}
+
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config)
 {
@@ -2219,11 +2232,8 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
 		break;
 	}
 
-	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
-		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
-		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
-			pipe_config->has_audio = true;
-	}
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
 
 	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp &&
 	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 68a005d..84dbb50 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
 		return false;
 	}
 
+	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port))
+		pipe_config->has_audio = true;
 	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
 
 	pipe_config->pbn = mst_pbn;
@@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	struct drm_device *dev = encoder->base.dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct drm_crtc *crtc = encoder->base.crtc;
+	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	if (ret) {
 		DRM_ERROR("failed to update payload %d\n", ret);
 	}
+	if (intel_crtc->config->has_audio) {
+		intel_audio_codec_disable(encoder);
+		intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
+	}
 }
 
 static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
@@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
 	enum port port = intel_dig_port->port;
+	enum pipe pipe = crtc->pipe;
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
 
 	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
+	if (crtc->config->has_audio) {
+		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
+				 pipe_name(pipe));
+		intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
+		intel_audio_codec_enable(encoder);
+	}
 }
 
 static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
@@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
 	u32 temp, flags = 0;
 
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, crtc);
+
 	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
 	if (temp & TRANS_DDI_PHSYNC)
 		flags |= DRM_MODE_FLAG_PHSYNC;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index e74d851..f73de63c 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1123,6 +1123,8 @@ void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
 void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
 bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
 void intel_ddi_fdi_disable(struct drm_crtc *crtc);
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc);
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config);
 struct intel_encoder *
-- 
2.5.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder
  2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
@ 2016-08-03  1:46 ` Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:43   ` Lyude
  2016-08-03  1:46 ` [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders Dhinakaran Pandiyan
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-03  1:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan

With DP MST, a digital_port can carry more than one audio stream. Hence,
more than one audio_connector needs to be attached to intel_digital_port in
such cases. However, each stream is associated with an unique encoder. So,
instead of creating an array of audio_connectors per port, move
audio_connector from struct intel_digital_port to struct intel_encoder.
This also simplifies access to the right audio_connector from codec
functions in intel_audio.c that receive intel_encoder.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 10 ++++------
 drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 6700a7b..8c493de 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -523,7 +523,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 						     adjusted_mode);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = connector;
+	intel_encoder->audio_connector = connector;
 	/* referred in audio callbacks */
 	dev_priv->dig_port_map[port] = intel_encoder;
 	mutex_unlock(&dev_priv->av_mutex);
@@ -552,7 +552,7 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 		dev_priv->display.audio_codec_disable(intel_encoder);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = NULL;
+	intel_encoder->audio_connector = NULL;
 	dev_priv->dig_port_map[port] = NULL;
 	mutex_unlock(&dev_priv->av_mutex);
 
@@ -707,7 +707,6 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 {
 	struct drm_i915_private *dev_priv = dev_to_i915(dev);
 	struct intel_encoder *intel_encoder;
-	struct intel_digital_port *intel_dig_port;
 	const u8 *eld;
 	int ret = -EINVAL;
 
@@ -716,10 +715,9 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 	/* intel_encoder might be NULL for DP MST */
 	if (intel_encoder) {
 		ret = 0;
-		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
-		*enabled = intel_dig_port->audio_connector != NULL;
+		*enabled = intel_encoder->audio_connector != NULL;
 		if (*enabled) {
-			eld = intel_dig_port->audio_connector->eld;
+			eld = intel_encoder->audio_connector->eld;
 			ret = drm_eld_size(eld);
 			memcpy(buf, eld, min(max_bytes, ret));
 		}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f73de63c..45020d2 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -220,6 +220,8 @@ struct intel_encoder {
 	void (*suspend)(struct intel_encoder *);
 	int crtc_mask;
 	enum hpd_pin hpd_pin;
+	/* for communication with audio component; protected by av_mutex */
+	const struct drm_connector *audio_connector;
 };
 
 struct intel_panel {
@@ -929,8 +931,6 @@ struct intel_digital_port {
 	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
 	bool release_cl2_override;
 	uint8_t max_lanes;
-	/* for communication with audio component; protected by av_mutex */
-	const struct drm_connector *audio_connector;
 };
 
 struct intel_dp_mst_encoder {
-- 
2.5.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders
  2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
  2016-08-03  1:46 ` [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
@ 2016-08-03  1:46 ` Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:51   ` Lyude
  2016-08-03  1:47 ` Prep. for DP audio MST support Yang, Libin
  2016-08-03  6:24 ` ✗ Ro.CI.BAT: failure for series starting with [1/3] drm/i915: start adding dp mst audio Patchwork
  4 siblings, 2 replies; 14+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-03  1:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan

When a MST encoder is passed to enc_to_dig_port(), the container_of() macro
does not return the digital port. Handle this by returning the member
"primary" in "struct intel_dp_mst_encoder"

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 45020d2..66af444 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1023,18 +1023,22 @@ intel_attached_encoder(struct drm_connector *connector)
 	return to_intel_connector(connector)->encoder;
 }
 
-static inline struct intel_digital_port *
-enc_to_dig_port(struct drm_encoder *encoder)
-{
-	return container_of(encoder, struct intel_digital_port, base.base);
-}
-
 static inline struct intel_dp_mst_encoder *
 enc_to_mst(struct drm_encoder *encoder)
 {
 	return container_of(encoder, struct intel_dp_mst_encoder, base.base);
 }
 
+static inline struct intel_digital_port *
+enc_to_dig_port(struct drm_encoder *encoder)
+{
+	if (encoder->encoder_type == DRM_MODE_ENCODER_DPMST)
+		return enc_to_mst(encoder)->primary;
+	else
+		return container_of(encoder, struct intel_digital_port,
+				    base.base);
+}
+
 static inline struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
 {
 	return &enc_to_dig_port(encoder)->dp;
-- 
2.5.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: Prep. for DP audio MST support
  2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
                   ` (2 preceding siblings ...)
  2016-08-03  1:46 ` [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders Dhinakaran Pandiyan
@ 2016-08-03  1:47 ` Yang, Libin
  2016-08-03  6:24 ` ✗ Ro.CI.BAT: failure for series starting with [1/3] drm/i915: start adding dp mst audio Patchwork
  4 siblings, 0 replies; 14+ messages in thread
From: Yang, Libin @ 2016-08-03  1:47 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran, intel-gfx; +Cc: tiwai

Add Takashi who is the audio driver maintainer.

Dhinakaran is working on gfx driver support for DP MST.


> -----Original Message-----
> From: Pandiyan, Dhinakaran
> Sent: Wednesday, August 3, 2016 9:47 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: cpaul@redhat.com; ville.syrjala@linux.intel.com; Yang, Libin
> <libin.yang@intel.com>
> Subject: Prep. for DP audio MST support
> 
> This series lays the groundwork for more DP MST audio work that will follow.
> Patch 1 got possibly reverted because Patch 3 was missing.
> 
> The APIs between i915 and audio drivers have to modified so that the audio
> drivers can identify different displays connected to a port. The changes
> introduced in Patch 2 will make that easy.
> 
> Dhinakaran Pandiyan(2)
> [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder [PATCH 3/3]
> drm/i915: Fix enc_to_dig_port for MST encoders
> 
> Libin Yang(1)
> [PATCH 1/3] drm/i915: start adding dp mst audio
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: start adding dp mst audio
  2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
@ 2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:42   ` Lyude
  1 sibling, 0 replies; 14+ messages in thread
From: Yang, Libin @ 2016-08-03  1:48 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran, intel-gfx; +Cc: tiwai, Libin Yang

Add Takashi

Regards,
Libin


> -----Original Message-----
> From: Pandiyan, Dhinakaran
> Sent: Wednesday, August 3, 2016 9:47 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: cpaul@redhat.com; ville.syrjala@linux.intel.com; Yang, Libin
> <libin.yang@intel.com>; Libin Yang <libin.yang@linux.intel.com>
> Subject: [PATCH 1/3] drm/i915: start adding dp mst audio
> 
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> (This patch is developed by Dave Airlie <airlied@redhat.com> originally)
> 
> This patch adds support for DP MST audio in i915.
> 
> Enable audio codec when DP MST is enabled if has_audio flag is set.
> Disable audio codec when DP MST is disabled if has_audio flag is set.
> 
> Another separated patches to support DP MST audio will be implemented in
> audio driver.
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
>  drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_drv.h    |  2 ++
>  4 files changed, 56 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> b/drivers/gpu/drm/i915/i915_debugfs.c
> index 531ca02..56e38b1 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2961,6 +2961,20 @@ static void intel_dp_info(struct seq_file *m,
>  		intel_panel_info(m, &intel_connector->panel);  }
> 
> +static void intel_dp_mst_info(struct seq_file *m,
> +			  struct intel_connector *intel_connector) {
> +	struct intel_encoder *intel_encoder = intel_connector->encoder;
> +	struct intel_dp_mst_encoder *intel_mst =
> +		enc_to_mst(&intel_encoder->base);
> +	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> +	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
> +					intel_connector->port);
> +
> +	seq_printf(m, "\taudio support: %s\n", yesno(has_audio)); }
> +
>  static void intel_hdmi_info(struct seq_file *m,
>  			    struct intel_connector *intel_connector)  { @@ -
> 3003,7 +3017,10 @@ static void intel_connector_info(struct seq_file *m,
>  	switch (connector->connector_type) {
>  	case DRM_MODE_CONNECTOR_DisplayPort:
>  	case DRM_MODE_CONNECTOR_eDP:
> -		intel_dp_info(m, intel_connector);
> +		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> +			intel_dp_mst_info(m, intel_connector);
> +		else
> +			intel_dp_info(m, intel_connector);
>  		break;
>  	case DRM_MODE_CONNECTOR_LVDS:
>  		if (intel_encoder->type == INTEL_OUTPUT_LVDS) diff --git
> a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index dd1d6fe..cbb4e7a 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2154,6 +2154,19 @@ void intel_ddi_fdi_disable(struct drm_crtc *crtc)
>  	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
>  }
> 
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc)
> +{
> +	u32 temp;
> +
> +	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> +		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> +		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> +			return true;
> +	}
> +	return false;
> +}
> +
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config)  { @@ -2219,11
> +2232,8 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
>  		break;
>  	}
> 
> -	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> -		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> -		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> -			pipe_config->has_audio = true;
> -	}
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
> 
>  	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp
> &&
>  	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) { diff --git
> a/drivers/gpu/drm/i915/intel_dp_mst.c
> b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 68a005d..84dbb50 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  		return false;
>  	}
> 
> +	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port))
> +		pipe_config->has_audio = true;
>  	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
> 
>  	pipe_config->pbn = mst_pbn;
> @@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct intel_encoder
> *encoder)
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder-
> >base);
>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	struct drm_device *dev = encoder->base.dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct drm_crtc *crtc = encoder->base.crtc;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>  	int ret;
> 
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); @@ -107,6
> +113,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
>  	if (ret) {
>  		DRM_ERROR("failed to update payload %d\n", ret);
>  	}
> +	if (intel_crtc->config->has_audio) {
> +		intel_audio_codec_disable(encoder);
> +		intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
> +	}
>  }
> 
>  static void intel_mst_post_disable_dp(struct intel_encoder *encoder) @@ -
> 207,7 +217,9 @@ static void intel_mst_enable_dp(struct intel_encoder
> *encoder)
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
>  	enum port port = intel_dig_port->port;
> +	enum pipe pipe = crtc->pipe;
>  	int ret;
> 
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); @@ -222,6
> +234,12 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
>  	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
> 
>  	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
> +	if (crtc->config->has_audio) {
> +		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
> +				 pipe_name(pipe));
> +		intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
> +		intel_audio_codec_enable(encoder);
> +	}
>  }
> 
>  static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
> @@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct
> intel_encoder *encoder,
>  	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
>  	u32 temp, flags = 0;
> 
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, crtc);
> +
>  	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
>  	if (temp & TRANS_DDI_PHSYNC)
>  		flags |= DRM_MODE_FLAG_PHSYNC;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index e74d851..f73de63c 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1123,6 +1123,8 @@ void intel_ddi_set_pipe_settings(struct drm_crtc
> *crtc);  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);  bool
> intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
> void intel_ddi_fdi_disable(struct drm_crtc *crtc);
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc);
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config);  struct
> intel_encoder *
> --
> 2.5.0

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder
  2016-08-03  1:46 ` [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
@ 2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:43   ` Lyude
  1 sibling, 0 replies; 14+ messages in thread
From: Yang, Libin @ 2016-08-03  1:48 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran, intel-gfx; +Cc: tiwai

Add Takashi

Regards,
Libin


> -----Original Message-----
> From: Pandiyan, Dhinakaran
> Sent: Wednesday, August 3, 2016 9:47 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: cpaul@redhat.com; ville.syrjala@linux.intel.com; Yang, Libin
> <libin.yang@intel.com>; Pandiyan, Dhinakaran
> <dhinakaran.pandiyan@intel.com>
> Subject: [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder
> 
> With DP MST, a digital_port can carry more than one audio stream. Hence,
> more than one audio_connector needs to be attached to intel_digital_port in
> such cases. However, each stream is associated with an unique encoder. So,
> instead of creating an array of audio_connectors per port, move
> audio_connector from struct intel_digital_port to struct intel_encoder.
> This also simplifies access to the right audio_connector from codec functions
> in intel_audio.c that receive intel_encoder.
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 10 ++++------
>  drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
>  2 files changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c
> b/drivers/gpu/drm/i915/intel_audio.c
> index 6700a7b..8c493de 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -523,7 +523,7 @@ void intel_audio_codec_enable(struct intel_encoder
> *intel_encoder)
>  						     adjusted_mode);
> 
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = connector;
> +	intel_encoder->audio_connector = connector;
>  	/* referred in audio callbacks */
>  	dev_priv->dig_port_map[port] = intel_encoder;
>  	mutex_unlock(&dev_priv->av_mutex);
> @@ -552,7 +552,7 @@ void intel_audio_codec_disable(struct intel_encoder
> *intel_encoder)
>  		dev_priv->display.audio_codec_disable(intel_encoder);
> 
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = NULL;
> +	intel_encoder->audio_connector = NULL;
>  	dev_priv->dig_port_map[port] = NULL;
>  	mutex_unlock(&dev_priv->av_mutex);
> 
> @@ -707,7 +707,6 @@ static int i915_audio_component_get_eld(struct
> device *dev, int port,  {
>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>  	struct intel_encoder *intel_encoder;
> -	struct intel_digital_port *intel_dig_port;
>  	const u8 *eld;
>  	int ret = -EINVAL;
> 
> @@ -716,10 +715,9 @@ static int i915_audio_component_get_eld(struct
> device *dev, int port,
>  	/* intel_encoder might be NULL for DP MST */
>  	if (intel_encoder) {
>  		ret = 0;
> -		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
> -		*enabled = intel_dig_port->audio_connector != NULL;
> +		*enabled = intel_encoder->audio_connector != NULL;
>  		if (*enabled) {
> -			eld = intel_dig_port->audio_connector->eld;
> +			eld = intel_encoder->audio_connector->eld;
>  			ret = drm_eld_size(eld);
>  			memcpy(buf, eld, min(max_bytes, ret));
>  		}
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index f73de63c..45020d2 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -220,6 +220,8 @@ struct intel_encoder {
>  	void (*suspend)(struct intel_encoder *);
>  	int crtc_mask;
>  	enum hpd_pin hpd_pin;
> +	/* for communication with audio component; protected by av_mutex
> */
> +	const struct drm_connector *audio_connector;
>  };
> 
>  struct intel_panel {
> @@ -929,8 +931,6 @@ struct intel_digital_port {
>  	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
>  	bool release_cl2_override;
>  	uint8_t max_lanes;
> -	/* for communication with audio component; protected by av_mutex
> */
> -	const struct drm_connector *audio_connector;
>  };
> 
>  struct intel_dp_mst_encoder {
> --
> 2.5.0

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders
  2016-08-03  1:46 ` [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders Dhinakaran Pandiyan
@ 2016-08-03  1:48   ` Yang, Libin
  2016-08-04 23:51   ` Lyude
  1 sibling, 0 replies; 14+ messages in thread
From: Yang, Libin @ 2016-08-03  1:48 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran, intel-gfx; +Cc: tiwai

Add Takashi

Regards,
Libin


> -----Original Message-----
> From: Pandiyan, Dhinakaran
> Sent: Wednesday, August 3, 2016 9:47 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: cpaul@redhat.com; ville.syrjala@linux.intel.com; Yang, Libin
> <libin.yang@intel.com>; Pandiyan, Dhinakaran
> <dhinakaran.pandiyan@intel.com>
> Subject: [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders
> 
> When a MST encoder is passed to enc_to_dig_port(), the container_of() macro
> does not return the digital port. Handle this by returning the member
> "primary" in "struct intel_dp_mst_encoder"
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 45020d2..66af444 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1023,18 +1023,22 @@ intel_attached_encoder(struct drm_connector
> *connector)
>  	return to_intel_connector(connector)->encoder;
>  }
> 
> -static inline struct intel_digital_port * -enc_to_dig_port(struct drm_encoder
> *encoder) -{
> -	return container_of(encoder, struct intel_digital_port, base.base);
> -}
> -
>  static inline struct intel_dp_mst_encoder *  enc_to_mst(struct drm_encoder
> *encoder)  {
>  	return container_of(encoder, struct intel_dp_mst_encoder,
> base.base);  }
> 
> +static inline struct intel_digital_port * enc_to_dig_port(struct
> +drm_encoder *encoder) {
> +	if (encoder->encoder_type == DRM_MODE_ENCODER_DPMST)
> +		return enc_to_mst(encoder)->primary;
> +	else
> +		return container_of(encoder, struct intel_digital_port,
> +				    base.base);
> +}
> +
>  static inline struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)  {
>  	return &enc_to_dig_port(encoder)->dp;
> --
> 2.5.0

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* ✗ Ro.CI.BAT: failure for series starting with [1/3] drm/i915: start adding dp mst audio
  2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
                   ` (3 preceding siblings ...)
  2016-08-03  1:47 ` Prep. for DP audio MST support Yang, Libin
@ 2016-08-03  6:24 ` Patchwork
  4 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2016-08-03  6:24 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/3] drm/i915: start adding dp mst audio
URL   : https://patchwork.freedesktop.org/series/10570/
State : failure

== Summary ==

Series 10570v1 Series without cover letter
http://patchwork.freedesktop.org/api/1.0/series/10570/revisions/1/mbox

Test gem_exec_gttfill:
        Subgroup basic:
                pass       -> SKIP       (fi-snb-i7-2600)
Test kms_cursor_legacy:
        Subgroup basic-flip-vs-cursor-legacy:
                pass       -> FAIL       (ro-hsw-i7-4770r)
                pass       -> FAIL       (ro-bdw-i5-5250u)
        Subgroup basic-flip-vs-cursor-varying-size:
                fail       -> PASS       (ro-bdw-i7-5557U)
                fail       -> PASS       (ro-snb-i7-2620M)

fi-hsw-i7-4770k  total:240  pass:218  dwarn:0   dfail:0   fail:0   skip:22 
fi-kbl-qkkr      total:240  pass:182  dwarn:30  dfail:0   fail:2   skip:26 
fi-skl-i5-6260u  total:240  pass:224  dwarn:0   dfail:0   fail:2   skip:14 
fi-snb-i7-2600   total:240  pass:197  dwarn:0   dfail:0   fail:0   skip:43 
ro-bdw-i5-5250u  total:240  pass:218  dwarn:4   dfail:0   fail:2   skip:16 
ro-bdw-i7-5557U  total:240  pass:224  dwarn:0   dfail:0   fail:0   skip:16 
ro-bdw-i7-5600u  total:240  pass:207  dwarn:0   dfail:0   fail:1   skip:32 
ro-bsw-n3050     total:240  pass:195  dwarn:0   dfail:0   fail:3   skip:42 
ro-byt-n2820     total:240  pass:197  dwarn:0   dfail:0   fail:3   skip:40 
ro-hsw-i3-4010u  total:240  pass:214  dwarn:0   dfail:0   fail:0   skip:26 
ro-hsw-i7-4770r  total:240  pass:213  dwarn:0   dfail:0   fail:1   skip:26 
ro-ilk-i7-620lm  total:240  pass:173  dwarn:1   dfail:0   fail:1   skip:65 
ro-ilk1-i5-650   total:235  pass:173  dwarn:0   dfail:0   fail:2   skip:60 
ro-ivb-i7-3770   total:240  pass:205  dwarn:0   dfail:0   fail:0   skip:35 
ro-ivb2-i7-3770  total:240  pass:209  dwarn:0   dfail:0   fail:0   skip:31 
ro-skl3-i5-6260u total:240  pass:222  dwarn:0   dfail:0   fail:4   skip:14 
ro-snb-i7-2620M  total:240  pass:198  dwarn:0   dfail:0   fail:1   skip:41 

Results at /archive/results/CI_IGT_test/RO_Patchwork_1671/

aa8628c drm-intel-nightly: 2016y-08m-02d-14h-10m-12s UTC integration manifest
b6a008a drm/i915: Fix enc_to_dig_port for MST encoders
730689f drm/i915: Move audio_connector to intel_encoder
a38fefd drm/i915: start adding dp mst audio

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: start adding dp mst audio
  2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
@ 2016-08-04 23:42   ` Lyude
  2016-08-05 17:10     ` Pandiyan, Dhinakaran
  1 sibling, 1 reply; 14+ messages in thread
From: Lyude @ 2016-08-04 23:42 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx; +Cc: Libin Yang

This should be added after patch #3, since that's the one that fixes
enc_to_mst(). Otherwise:

Reviewed-by: Lyude <cpaul@redhat.com>

On Tue, 2016-08-02 at 18:46 -0700, Dhinakaran Pandiyan wrote:
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> (This patch is developed by Dave Airlie <airlied@redhat.com>
> originally)
> 
> This patch adds support for DP MST audio in i915.
> 
> Enable audio codec when DP MST is enabled if has_audio flag is set.
> Disable audio codec when DP MST is disabled if has_audio flag is set.
> 
> Another separated patches to support DP MST audio will be implemented
> in audio driver.
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
>  drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_drv.h    |  2 ++
>  4 files changed, 56 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> b/drivers/gpu/drm/i915/i915_debugfs.c
> index 531ca02..56e38b1 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2961,6 +2961,20 @@ static void intel_dp_info(struct seq_file *m,
>  		intel_panel_info(m, &intel_connector->panel);
>  }
>  
> +static void intel_dp_mst_info(struct seq_file *m,
> +			  struct intel_connector *intel_connector)
> +{
> +	struct intel_encoder *intel_encoder = intel_connector-
> >encoder;
> +	struct intel_dp_mst_encoder *intel_mst =
> +		enc_to_mst(&intel_encoder->base);
> +	struct intel_digital_port *intel_dig_port = intel_mst-
> >primary;
> +	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp-
> >mst_mgr,
> +					intel_connector->port);
> +
> +	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
> +}
> +
>  static void intel_hdmi_info(struct seq_file *m,
>  			    struct intel_connector *intel_connector)
>  {
> @@ -3003,7 +3017,10 @@ static void intel_connector_info(struct
> seq_file *m,
>  	switch (connector->connector_type) {
>  	case DRM_MODE_CONNECTOR_DisplayPort:
>  	case DRM_MODE_CONNECTOR_eDP:
> -		intel_dp_info(m, intel_connector);
> +		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> +			intel_dp_mst_info(m, intel_connector);
> +		else
> +			intel_dp_info(m, intel_connector);
>  		break;
>  	case DRM_MODE_CONNECTOR_LVDS:
>  		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index dd1d6fe..cbb4e7a 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2154,6 +2154,19 @@ void intel_ddi_fdi_disable(struct drm_crtc
> *crtc)
>  	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
>  }
>  
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc)
> +{
> +	u32 temp;
> +
> +	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> +		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> +		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> +			return true;
> +	}
> +	return false;
> +}
> +
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config)
>  {
> @@ -2219,11 +2232,8 @@ void intel_ddi_get_config(struct intel_encoder
> *encoder,
>  		break;
>  	}
>  
> -	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> -		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> -		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> -			pipe_config->has_audio = true;
> -	}
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
>  
>  	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv-
> >vbt.edp.bpp &&
>  	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c
> b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 68a005d..84dbb50 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  		return false;
>  	}
>  
> +	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found-
> >port))
> +		pipe_config->has_audio = true;
>  	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
> bpp);
>  
>  	pipe_config->pbn = mst_pbn;
> @@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct
> intel_encoder *encoder)
>  	struct intel_dp_mst_encoder *intel_mst =
> enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst-
> >primary;
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	struct drm_device *dev = encoder->base.dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct drm_crtc *crtc = encoder->base.crtc;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>  	int ret;
>  
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> @@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct
> intel_encoder *encoder)
>  	if (ret) {
>  		DRM_ERROR("failed to update payload %d\n", ret);
>  	}
> +	if (intel_crtc->config->has_audio) {
> +		intel_audio_codec_disable(encoder);
> +		intel_display_power_put(dev_priv,
> POWER_DOMAIN_AUDIO);
> +	}
>  }
>  
>  static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
> @@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct
> intel_encoder *encoder)
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
>  	enum port port = intel_dig_port->port;
> +	enum pipe pipe = crtc->pipe;
>  	int ret;
>  
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> @@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct
> intel_encoder *encoder)
>  	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
>  
>  	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
> +	if (crtc->config->has_audio) {
> +		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
> +				 pipe_name(pipe));
> +		intel_display_power_get(dev_priv,
> POWER_DOMAIN_AUDIO);
> +		intel_audio_codec_enable(encoder);
> +	}
>  }
>  
>  static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder
> *encoder,
> @@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct
> intel_encoder *encoder,
>  	enum transcoder cpu_transcoder = pipe_config-
> >cpu_transcoder;
>  	u32 temp, flags = 0;
>  
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, crtc);
> +
>  	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
>  	if (temp & TRANS_DDI_PHSYNC)
>  		flags |= DRM_MODE_FLAG_PHSYNC;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index e74d851..f73de63c 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1123,6 +1123,8 @@ void intel_ddi_set_pipe_settings(struct
> drm_crtc *crtc);
>  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
>  bool intel_ddi_connector_get_hw_state(struct intel_connector
> *intel_connector);
>  void intel_ddi_fdi_disable(struct drm_crtc *crtc);
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc);
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config);
>  struct intel_encoder *
-- 
Cheers,
	Lyude
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder
  2016-08-03  1:46 ` [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
@ 2016-08-04 23:43   ` Lyude
  1 sibling, 0 replies; 14+ messages in thread
From: Lyude @ 2016-08-04 23:43 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx

Reviewed-by: Lyude <cpaul@redhat.com>

On Tue, 2016-08-02 at 18:46 -0700, Dhinakaran Pandiyan wrote:
> With DP MST, a digital_port can carry more than one audio stream.
> Hence,
> more than one audio_connector needs to be attached to
> intel_digital_port in
> such cases. However, each stream is associated with an unique
> encoder. So,
> instead of creating an array of audio_connectors per port, move
> audio_connector from struct intel_digital_port to struct
> intel_encoder.
> This also simplifies access to the right audio_connector from codec
> functions in intel_audio.c that receive intel_encoder.
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 10 ++++------
>  drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
>  2 files changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c
> b/drivers/gpu/drm/i915/intel_audio.c
> index 6700a7b..8c493de 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -523,7 +523,7 @@ void intel_audio_codec_enable(struct
> intel_encoder *intel_encoder)
>  						     adjusted_mode);
>  
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = connector;
> +	intel_encoder->audio_connector = connector;
>  	/* referred in audio callbacks */
>  	dev_priv->dig_port_map[port] = intel_encoder;
>  	mutex_unlock(&dev_priv->av_mutex);
> @@ -552,7 +552,7 @@ void intel_audio_codec_disable(struct
> intel_encoder *intel_encoder)
>  		dev_priv-
> >display.audio_codec_disable(intel_encoder);
>  
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = NULL;
> +	intel_encoder->audio_connector = NULL;
>  	dev_priv->dig_port_map[port] = NULL;
>  	mutex_unlock(&dev_priv->av_mutex);
>  
> @@ -707,7 +707,6 @@ static int i915_audio_component_get_eld(struct
> device *dev, int port,
>  {
>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>  	struct intel_encoder *intel_encoder;
> -	struct intel_digital_port *intel_dig_port;
>  	const u8 *eld;
>  	int ret = -EINVAL;
>  
> @@ -716,10 +715,9 @@ static int i915_audio_component_get_eld(struct
> device *dev, int port,
>  	/* intel_encoder might be NULL for DP MST */
>  	if (intel_encoder) {
>  		ret = 0;
> -		intel_dig_port = enc_to_dig_port(&intel_encoder-
> >base);
> -		*enabled = intel_dig_port->audio_connector != NULL;
> +		*enabled = intel_encoder->audio_connector != NULL;
>  		if (*enabled) {
> -			eld = intel_dig_port->audio_connector->eld;
> +			eld = intel_encoder->audio_connector->eld;
>  			ret = drm_eld_size(eld);
>  			memcpy(buf, eld, min(max_bytes, ret));
>  		}
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index f73de63c..45020d2 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -220,6 +220,8 @@ struct intel_encoder {
>  	void (*suspend)(struct intel_encoder *);
>  	int crtc_mask;
>  	enum hpd_pin hpd_pin;
> +	/* for communication with audio component; protected by
> av_mutex */
> +	const struct drm_connector *audio_connector;
>  };
>  
>  struct intel_panel {
> @@ -929,8 +931,6 @@ struct intel_digital_port {
>  	enum irqreturn (*hpd_pulse)(struct intel_digital_port *,
> bool);
>  	bool release_cl2_override;
>  	uint8_t max_lanes;
> -	/* for communication with audio component; protected by
> av_mutex */
> -	const struct drm_connector *audio_connector;
>  };
>  
>  struct intel_dp_mst_encoder {
-- 
Cheers,
	Lyude
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders
  2016-08-03  1:46 ` [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders Dhinakaran Pandiyan
  2016-08-03  1:48   ` Yang, Libin
@ 2016-08-04 23:51   ` Lyude
  2016-08-05 17:48     ` Pandiyan, Dhinakaran
  1 sibling, 1 reply; 14+ messages in thread
From: Lyude @ 2016-08-04 23:51 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx

There was some discussion that happened on the original version of this
patch:

https://patchwork.kernel.org/patch/8960831/

The general consensus was while this fixed the issue, it probably isn't
the way we want to fix it. It would be a better idea just to have
enc_to_mst_primary() or something along those lines, or just use
enc_to_mst()->primary explicitly.

On Tue, 2016-08-02 at 18:46 -0700, Dhinakaran Pandiyan wrote:
> When a MST encoder is passed to enc_to_dig_port(), the container_of()
> macro
> does not return the digital port. Handle this by returning the member
> "primary" in "struct intel_dp_mst_encoder"
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 45020d2..66af444 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1023,18 +1023,22 @@ intel_attached_encoder(struct drm_connector
> *connector)
>  	return to_intel_connector(connector)->encoder;
>  }
>  
> -static inline struct intel_digital_port *
> -enc_to_dig_port(struct drm_encoder *encoder)
> -{
> -	return container_of(encoder, struct intel_digital_port,
> base.base);
> -}
> -
>  static inline struct intel_dp_mst_encoder *
>  enc_to_mst(struct drm_encoder *encoder)
>  {
>  	return container_of(encoder, struct intel_dp_mst_encoder,
> base.base);
>  }
>  
> +static inline struct intel_digital_port *
> +enc_to_dig_port(struct drm_encoder *encoder)
> +{
> +	if (encoder->encoder_type == DRM_MODE_ENCODER_DPMST)
> +		return enc_to_mst(encoder)->primary;
> +	else
> +		return container_of(encoder, struct
> intel_digital_port,
> +				    base.base);
> +}
> +
>  static inline struct intel_dp *enc_to_intel_dp(struct drm_encoder
> *encoder)
>  {
>  	return &enc_to_dig_port(encoder)->dp;
-- 
Cheers,
	Lyude
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: start adding dp mst audio
  2016-08-04 23:42   ` Lyude
@ 2016-08-05 17:10     ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 14+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-05 17:10 UTC (permalink / raw)
  To: cpaul; +Cc: intel-gfx, libin.yang

Thanks Lyude. I realized that after sending the patches, will fix that.

On Thu, 2016-08-04 at 19:42 -0400, Lyude wrote:
> This should be added after patch #3, since that's the one that fixes
> enc_to_mst(). Otherwise:
> 
> Reviewed-by: Lyude <cpaul@redhat.com>
> 
> On Tue, 2016-08-02 at 18:46 -0700, Dhinakaran Pandiyan wrote:
> > From: Libin Yang <libin.yang@linux.intel.com>
> > 
> > (This patch is developed by Dave Airlie <airlied@redhat.com>
> > originally)
> > 
> > This patch adds support for DP MST audio in i915.
> > 
> > Enable audio codec when DP MST is enabled if has_audio flag is set.
> > Disable audio codec when DP MST is disabled if has_audio flag is set.
> > 
> > Another separated patches to support DP MST audio will be implemented
> > in audio driver.
> > 
> > Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
> >  drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
> >  drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
> >  drivers/gpu/drm/i915/intel_drv.h    |  2 ++
> >  4 files changed, 56 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> > b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 531ca02..56e38b1 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -2961,6 +2961,20 @@ static void intel_dp_info(struct seq_file *m,
> >  		intel_panel_info(m, &intel_connector->panel);
> >  }
> >  
> > +static void intel_dp_mst_info(struct seq_file *m,
> > +			  struct intel_connector *intel_connector)
> > +{
> > +	struct intel_encoder *intel_encoder = intel_connector-
> > >encoder;
> > +	struct intel_dp_mst_encoder *intel_mst =
> > +		enc_to_mst(&intel_encoder->base);
> > +	struct intel_digital_port *intel_dig_port = intel_mst-
> > >primary;
> > +	struct intel_dp *intel_dp = &intel_dig_port->dp;
> > +	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp-
> > >mst_mgr,
> > +					intel_connector->port);
> > +
> > +	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
> > +}
> > +
> >  static void intel_hdmi_info(struct seq_file *m,
> >  			    struct intel_connector *intel_connector)
> >  {
> > @@ -3003,7 +3017,10 @@ static void intel_connector_info(struct
> > seq_file *m,
> >  	switch (connector->connector_type) {
> >  	case DRM_MODE_CONNECTOR_DisplayPort:
> >  	case DRM_MODE_CONNECTOR_eDP:
> > -		intel_dp_info(m, intel_connector);
> > +		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> > +			intel_dp_mst_info(m, intel_connector);
> > +		else
> > +			intel_dp_info(m, intel_connector);
> >  		break;
> >  	case DRM_MODE_CONNECTOR_LVDS:
> >  		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> > b/drivers/gpu/drm/i915/intel_ddi.c
> > index dd1d6fe..cbb4e7a 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -2154,6 +2154,19 @@ void intel_ddi_fdi_disable(struct drm_crtc
> > *crtc)
> >  	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
> >  }
> >  
> > +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> > +				 struct intel_crtc *intel_crtc)
> > +{
> > +	u32 temp;
> > +
> > +	if (intel_display_power_is_enabled(dev_priv,
> > POWER_DOMAIN_AUDIO)) {
> > +		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> > +		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> > +			return true;
> > +	}
> > +	return false;
> > +}
> > +
> >  void intel_ddi_get_config(struct intel_encoder *encoder,
> >  			  struct intel_crtc_state *pipe_config)
> >  {
> > @@ -2219,11 +2232,8 @@ void intel_ddi_get_config(struct intel_encoder
> > *encoder,
> >  		break;
> >  	}
> >  
> > -	if (intel_display_power_is_enabled(dev_priv,
> > POWER_DOMAIN_AUDIO)) {
> > -		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> > -		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> > -			pipe_config->has_audio = true;
> > -	}
> > +	pipe_config->has_audio =
> > +		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
> >  
> >  	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv-
> > >vbt.edp.bpp &&
> >  	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c
> > b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index 68a005d..84dbb50 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct
> > intel_encoder *encoder,
> >  		return false;
> >  	}
> >  
> > +	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found-
> > >port))
> > +		pipe_config->has_audio = true;
> >  	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
> > bpp);
> >  
> >  	pipe_config->pbn = mst_pbn;
> > @@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct
> > intel_encoder *encoder)
> >  	struct intel_dp_mst_encoder *intel_mst =
> > enc_to_mst(&encoder->base);
> >  	struct intel_digital_port *intel_dig_port = intel_mst-
> > >primary;
> >  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> > +	struct drm_device *dev = encoder->base.dev;
> > +	struct drm_i915_private *dev_priv = dev->dev_private;
> > +	struct drm_crtc *crtc = encoder->base.crtc;
> > +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> >  	int ret;
> >  
> >  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> > @@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct
> > intel_encoder *encoder)
> >  	if (ret) {
> >  		DRM_ERROR("failed to update payload %d\n", ret);
> >  	}
> > +	if (intel_crtc->config->has_audio) {
> > +		intel_audio_codec_disable(encoder);
> > +		intel_display_power_put(dev_priv,
> > POWER_DOMAIN_AUDIO);
> > +	}
> >  }
> >  
> >  static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
> > @@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct
> > intel_encoder *encoder)
> >  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> >  	struct drm_device *dev = intel_dig_port->base.base.dev;
> >  	struct drm_i915_private *dev_priv = to_i915(dev);
> > +	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
> >  	enum port port = intel_dig_port->port;
> > +	enum pipe pipe = crtc->pipe;
> >  	int ret;
> >  
> >  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> > @@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct
> > intel_encoder *encoder)
> >  	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
> >  
> >  	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
> > +	if (crtc->config->has_audio) {
> > +		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
> > +				 pipe_name(pipe));
> > +		intel_display_power_get(dev_priv,
> > POWER_DOMAIN_AUDIO);
> > +		intel_audio_codec_enable(encoder);
> > +	}
> >  }
> >  
> >  static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder
> > *encoder,
> > @@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct
> > intel_encoder *encoder,
> >  	enum transcoder cpu_transcoder = pipe_config-
> > >cpu_transcoder;
> >  	u32 temp, flags = 0;
> >  
> > +	pipe_config->has_audio =
> > +		intel_ddi_is_audio_enabled(dev_priv, crtc);
> > +
> >  	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
> >  	if (temp & TRANS_DDI_PHSYNC)
> >  		flags |= DRM_MODE_FLAG_PHSYNC;
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > b/drivers/gpu/drm/i915/intel_drv.h
> > index e74d851..f73de63c 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1123,6 +1123,8 @@ void intel_ddi_set_pipe_settings(struct
> > drm_crtc *crtc);
> >  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
> >  bool intel_ddi_connector_get_hw_state(struct intel_connector
> > *intel_connector);
> >  void intel_ddi_fdi_disable(struct drm_crtc *crtc);
> > +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> > +				 struct intel_crtc *intel_crtc);
> >  void intel_ddi_get_config(struct intel_encoder *encoder,
> >  			  struct intel_crtc_state *pipe_config);
> >  struct intel_encoder *

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders
  2016-08-04 23:51   ` Lyude
@ 2016-08-05 17:48     ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 14+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-05 17:48 UTC (permalink / raw)
  To: cpaul; +Cc: intel-gfx

On Thu, 2016-08-04 at 19:51 -0400, Lyude wrote:
> There was some discussion that happened on the original version of this
> patch:
> 
> https://patchwork.kernel.org/patch/8960831/
> 
> The general consensus was while this fixed the issue, it probably isn't
> the way we want to fix it. It would be a better idea just to have
> enc_to_mst_primary() or something along those lines, or just use
> enc_to_mst()->primary explicitly.
> 

Thanks for the pointer and the review.

It seems like the concerns were about DP MST audio not working anyway. I
wonder with DP MST audio support coming up
(https://patchwork.kernel.org/patch/9260671/) , if the patch is more
acceptable.

> On Tue, 2016-08-02 at 18:46 -0700, Dhinakaran Pandiyan wrote:
> > When a MST encoder is passed to enc_to_dig_port(), the container_of()
> > macro
> > does not return the digital port. Handle this by returning the member
> > "primary" in "struct intel_dp_mst_encoder"
> > 
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++------
> >  1 file changed, 10 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > b/drivers/gpu/drm/i915/intel_drv.h
> > index 45020d2..66af444 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1023,18 +1023,22 @@ intel_attached_encoder(struct drm_connector
> > *connector)
> >  	return to_intel_connector(connector)->encoder;
> >  }
> >  
> > -static inline struct intel_digital_port *
> > -enc_to_dig_port(struct drm_encoder *encoder)
> > -{
> > -	return container_of(encoder, struct intel_digital_port,
> > base.base);
> > -}
> > -
> >  static inline struct intel_dp_mst_encoder *
> >  enc_to_mst(struct drm_encoder *encoder)
> >  {
> >  	return container_of(encoder, struct intel_dp_mst_encoder,
> > base.base);
> >  }
> >  
> > +static inline struct intel_digital_port *
> > +enc_to_dig_port(struct drm_encoder *encoder)
> > +{
> > +	if (encoder->encoder_type == DRM_MODE_ENCODER_DPMST)
> > +		return enc_to_mst(encoder)->primary;
> > +	else
> > +		return container_of(encoder, struct
> > intel_digital_port,
> > +				    base.base);
> > +}
> > +
> >  static inline struct intel_dp *enc_to_intel_dp(struct drm_encoder
> > *encoder)
> >  {
> >  	return &enc_to_dig_port(encoder)->dp;

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-08-05 17:48 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-03  1:46 Prep. for DP audio MST support Dhinakaran Pandiyan
2016-08-03  1:46 ` [PATCH 1/3] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
2016-08-03  1:48   ` Yang, Libin
2016-08-04 23:42   ` Lyude
2016-08-05 17:10     ` Pandiyan, Dhinakaran
2016-08-03  1:46 ` [PATCH 2/3] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
2016-08-03  1:48   ` Yang, Libin
2016-08-04 23:43   ` Lyude
2016-08-03  1:46 ` [PATCH 3/3] drm/i915: Fix enc_to_dig_port for MST encoders Dhinakaran Pandiyan
2016-08-03  1:48   ` Yang, Libin
2016-08-04 23:51   ` Lyude
2016-08-05 17:48     ` Pandiyan, Dhinakaran
2016-08-03  1:47 ` Prep. for DP audio MST support Yang, Libin
2016-08-03  6:24 ` ✗ Ro.CI.BAT: failure for series starting with [1/3] drm/i915: start adding dp mst audio Patchwork

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.