* 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.