All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio
@ 2016-01-06  2:26 libin.yang
  2016-01-06  2:26 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: libin.yang @ 2016-01-06  2:26 UTC (permalink / raw)
  To: intel-gfx, conselvan2, jani.nikula, ville.syrjala, daniel.vetter, tiwai
  Cc: Libin Yang

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

For DP MST, use enc_to_mst(encoder)->primary to get intel_digital_port,
instead of using enc_to_dig_port(encoder).

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 31f6d21..431487a0 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -187,6 +187,16 @@ static bool intel_eld_uptodate(struct drm_connector *connector,
 	return true;
 }
 
+static struct intel_digital_port *
+intel_encoder_to_dig_port(struct intel_encoder *intel_encoder)
+{
+	struct drm_encoder *encoder = &intel_encoder->base;
+
+	if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
+		return enc_to_mst(encoder)->primary;
+	return enc_to_dig_port(encoder);
+}
+
 static void g4x_audio_codec_disable(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
@@ -286,7 +296,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	const uint8_t *eld = connector->eld;
 	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
+		intel_encoder_to_dig_port(encoder);
 	enum port port = intel_dig_port->port;
 	uint32_t tmp;
 	int len, i;
@@ -500,7 +510,8 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+	struct intel_digital_port *intel_dig_port =
+		intel_encoder_to_dig_port(intel_encoder);
 	enum port port = intel_dig_port->port;
 
 	connector = drm_select_eld(encoder);
@@ -546,7 +557,8 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+	struct intel_digital_port *intel_dig_port =
+		intel_encoder_to_dig_port(intel_encoder);
 	enum port port = intel_dig_port->port;
 
 	if (dev_priv->display.audio_codec_disable)
@@ -724,7 +736,8 @@ 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);
+		intel_dig_port =
+			intel_encoder_to_dig_port(intel_encoder);
 		*enabled = intel_dig_port->audio_connector != NULL;
 		if (*enabled) {
 			eld = intel_dig_port->audio_connector->eld;
-- 
1.9.1

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

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

* [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2016-01-06  2:26 [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio libin.yang
@ 2016-01-06  2:26 ` libin.yang
  2016-01-07 16:51   ` Ville Syrjälä
  2016-01-06 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
  2016-01-07 16:50 ` [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio Ville Syrjälä
  2 siblings, 1 reply; 10+ messages in thread
From: libin.yang @ 2016-01-06  2:26 UTC (permalink / raw)
  To: intel-gfx, conselvan2, jani.nikula, ville.syrjala, daniel.vetter, tiwai
  Cc: Libin Yang

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

hsw platforms supports DP MST while ilk doesn't.
This patch fixes the bug.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 431487a0..d8d42d3 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -272,8 +272,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
 	tmp |= AUD_CONFIG_N_PROG_ENABLE;
 	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
 	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
+	if (intel_crtc->config->has_dp_encoder)
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
 
@@ -339,7 +338,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
 	tmp = I915_READ(HSW_AUD_CFG(pipe));
 	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
 	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
+	if (intel_crtc->config->has_dp_encoder)
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	else
 		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
@@ -486,8 +485,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
 	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
 	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
 	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
+	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	else
 		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
@@ -526,8 +524,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 
 	/* ELD Conn_Type */
 	connector->eld[5] &= ~(3 << 2);
-	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
+	if (crtc->config->has_dp_encoder)
 		connector->eld[5] |= (1 << 2);
 
 	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
-- 
1.9.1

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

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

* ✗ failure: Fi.CI.BAT
  2016-01-06  2:26 [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio libin.yang
  2016-01-06  2:26 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
@ 2016-01-06 12:49 ` Patchwork
  2016-01-07 16:50 ` [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio Ville Syrjälä
  2 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2016-01-06 12:49 UTC (permalink / raw)
  To: libin.yang; +Cc: intel-gfx

== Summary ==

Built on 89d0d1b6f0e9c3a6b90476bd115cfe1881646fd6 drm-intel-nightly: 2016y-01m-06d-10h-37m-17s UTC integration manifest

Test kms_addfb_basic:
        Subgroup small-bo:
                skip       -> PASS       (bdw-nuci7)
Test pm_rpm:
        Subgroup basic-rte:
                pass       -> DMESG-WARN (byt-nuc) UNSTABLE

bdw-nuci7        total:132  pass:1    dwarn:0   dfail:0   fail:0   skip:131
bsw-nuc-2        total:135  pass:115  dwarn:0   dfail:0   fail:0   skip:20 
byt-nuc          total:135  pass:121  dwarn:1   dfail:0   fail:0   skip:13 
skl-i5k-2        total:135  pass:125  dwarn:2   dfail:0   fail:0   skip:8  
skl-i7k-2        total:135  pass:125  dwarn:2   dfail:0   fail:0   skip:8  

HANGED snb-dellxps in igt@drv_module_reload_basic

Results at /archive/results/CI_IGT_test/Patchwork_1097/

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

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

* Re: [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio
  2016-01-06  2:26 [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio libin.yang
  2016-01-06  2:26 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
  2016-01-06 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-07 16:50 ` Ville Syrjälä
  2016-01-08  2:18   ` Yang, Libin
  2 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2016-01-07 16:50 UTC (permalink / raw)
  To: libin.yang; +Cc: intel-gfx, tiwai, daniel.vetter

On Wed, Jan 06, 2016 at 10:26:41AM +0800, libin.yang@linux.intel.com wrote:
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> For DP MST, use enc_to_mst(encoder)->primary to get intel_digital_port,
> instead of using enc_to_dig_port(encoder).
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 31f6d21..431487a0 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -187,6 +187,16 @@ static bool intel_eld_uptodate(struct drm_connector *connector,
>  	return true;
>  }
>  
> +static struct intel_digital_port *
> +intel_encoder_to_dig_port(struct intel_encoder *intel_encoder)
> +{
> +	struct drm_encoder *encoder = &intel_encoder->base;
> +
> +	if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> +		return enc_to_mst(encoder)->primary;
> +	return enc_to_dig_port(encoder);
> +}
> +
>  static void g4x_audio_codec_disable(struct intel_encoder *encoder)
>  {
>  	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> @@ -286,7 +296,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
>  	const uint8_t *eld = connector->eld;
>  	struct intel_digital_port *intel_dig_port =
> -		enc_to_dig_port(&encoder->base);
> +		intel_encoder_to_dig_port(encoder);

This hunk makes sense since we just look at intel_dig_port->port. Might
make sense to entirely eliminate the local inte_dig_port variable from
these hooks so that there's no confusion whether it points at the fake
or primary encoder.

>  	enum port port = intel_dig_port->port;
>  	uint32_t tmp;
>  	int len, i;
> @@ -500,7 +510,8 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  	struct drm_device *dev = encoder->dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
> -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> +	struct intel_digital_port *intel_dig_port =
> +		intel_encoder_to_dig_port(intel_encoder);
>  	enum port port = intel_dig_port->port;
>  
>  	connector = drm_select_eld(encoder);
> @@ -546,7 +557,8 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
>  	struct drm_device *dev = encoder->dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
> -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> +	struct intel_digital_port *intel_dig_port =
> +		intel_encoder_to_dig_port(intel_encoder);

>  	enum port port = intel_dig_port->port;
>  
>  	if (dev_priv->display.audio_codec_disable)
> @@ -724,7 +736,8 @@ 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);
> +		intel_dig_port =
> +			intel_encoder_to_dig_port(intel_encoder);
>  		*enabled = intel_dig_port->audio_connector != NULL;

These not so much. We'd clobber 'intel_dig_port->audio_connector' for
the primary encoder whenever a new MST stream is enabled.

Was the intention just to fix the port information passed to
.pin_eld_notify()?

This whole thing seems highlight a rather big issue with the current
component stuff; How do you tell the streams apart when all are using
the same DDI port?

>  		if (*enabled) {
>  			eld = intel_dig_port->audio_connector->eld;
> -- 
> 1.9.1

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2016-01-06  2:26 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
@ 2016-01-07 16:51   ` Ville Syrjälä
  2016-01-07 16:59     ` Daniel Vetter
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2016-01-07 16:51 UTC (permalink / raw)
  To: libin.yang; +Cc: intel-gfx, tiwai, daniel.vetter

On Wed, Jan 06, 2016 at 10:26:42AM +0800, libin.yang@linux.intel.com wrote:
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> hsw platforms supports DP MST while ilk doesn't.
> This patch fixes the bug.
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 431487a0..d8d42d3 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -272,8 +272,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
>  	tmp |= AUD_CONFIG_N_PROG_ENABLE;
>  	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
>  	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> +	if (intel_crtc->config->has_dp_encoder)
>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
>  
> @@ -339,7 +338,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
>  	tmp = I915_READ(HSW_AUD_CFG(pipe));
>  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
>  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
> +	if (intel_crtc->config->has_dp_encoder)
>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	else
>  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> @@ -486,8 +485,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
>  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
>  	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
>  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> +	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))

Could have used has_dp_encoder everywhere, but whatever

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	else
>  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> @@ -526,8 +524,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  
>  	/* ELD Conn_Type */
>  	connector->eld[5] &= ~(3 << 2);
> -	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
> +	if (crtc->config->has_dp_encoder)
>  		connector->eld[5] |= (1 << 2);
>  
>  	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
> -- 
> 1.9.1

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2016-01-07 16:51   ` Ville Syrjälä
@ 2016-01-07 16:59     ` Daniel Vetter
  0 siblings, 0 replies; 10+ messages in thread
From: Daniel Vetter @ 2016-01-07 16:59 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: tiwai, daniel.vetter, libin.yang, intel-gfx

On Thu, Jan 07, 2016 at 06:51:08PM +0200, Ville Syrjälä wrote:
> On Wed, Jan 06, 2016 at 10:26:42AM +0800, libin.yang@linux.intel.com wrote:
> > From: Libin Yang <libin.yang@linux.intel.com>
> > 
> > hsw platforms supports DP MST while ilk doesn't.
> > This patch fixes the bug.
> > 
> > Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_audio.c | 11 ++++-------
> >  1 file changed, 4 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> > index 431487a0..d8d42d3 100644
> > --- a/drivers/gpu/drm/i915/intel_audio.c
> > +++ b/drivers/gpu/drm/i915/intel_audio.c
> > @@ -272,8 +272,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
> >  	tmp |= AUD_CONFIG_N_PROG_ENABLE;
> >  	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
> >  	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
> > -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> > -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> > +	if (intel_crtc->config->has_dp_encoder)
> >  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
> >  	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
> >  
> > @@ -339,7 +338,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
> >  	tmp = I915_READ(HSW_AUD_CFG(pipe));
> >  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
> >  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> > -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
> > +	if (intel_crtc->config->has_dp_encoder)
> >  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
> >  	else
> >  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> > @@ -486,8 +485,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
> >  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
> >  	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
> >  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> > -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> > -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> > +	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
> 
> Could have used has_dp_encoder everywhere, but whatever

I think this would be good chance to do for consistency, before merging.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio
  2016-01-07 16:50 ` [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio Ville Syrjälä
@ 2016-01-08  2:18   ` Yang, Libin
  0 siblings, 0 replies; 10+ messages in thread
From: Yang, Libin @ 2016-01-08  2:18 UTC (permalink / raw)
  To: ville.syrjala, libin.yang; +Cc: Vetter, Daniel, intel-gfx, tiwai

Hi Ville,

> -----Original Message-----
> From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> Sent: Friday, January 08, 2016 12:50 AM
> To: libin.yang@linux.intel.com
> Cc: intel-gfx@lists.freedesktop.org; conselvan2@gmail.com;
> jani.nikula@linux.intel.com; Vetter, Daniel; tiwai@suse.de; Yang, Libin
> Subject: Re: [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio
> 
> On Wed, Jan 06, 2016 at 10:26:41AM +0800, libin.yang@linux.intel.com
> wrote:
> > From: Libin Yang <libin.yang@linux.intel.com>
> >
> > For DP MST, use enc_to_mst(encoder)->primary to get
> intel_digital_port,
> > instead of using enc_to_dig_port(encoder).
> >
> > Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_audio.c | 21 +++++++++++++++++----
> >  1 file changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_audio.c
> b/drivers/gpu/drm/i915/intel_audio.c
> > index 31f6d21..431487a0 100644
> > --- a/drivers/gpu/drm/i915/intel_audio.c
> > +++ b/drivers/gpu/drm/i915/intel_audio.c
> > @@ -187,6 +187,16 @@ static bool intel_eld_uptodate(struct
> drm_connector *connector,
> >  	return true;
> >  }
> >
> > +static struct intel_digital_port *
> > +intel_encoder_to_dig_port(struct intel_encoder *intel_encoder)
> > +{
> > +	struct drm_encoder *encoder = &intel_encoder->base;
> > +
> > +	if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> > +		return enc_to_mst(encoder)->primary;
> > +	return enc_to_dig_port(encoder);
> > +}
> > +
> >  static void g4x_audio_codec_disable(struct intel_encoder *encoder)
> >  {
> >  	struct drm_i915_private *dev_priv = encoder->base.dev-
> >dev_private;
> > @@ -286,7 +296,7 @@ static void hsw_audio_codec_enable(struct
> drm_connector *connector,
> >  	struct i915_audio_component *acomp = dev_priv-
> >audio_component;
> >  	const uint8_t *eld = connector->eld;
> >  	struct intel_digital_port *intel_dig_port =
> > -		enc_to_dig_port(&encoder->base);
> > +		intel_encoder_to_dig_port(encoder);
> 
> This hunk makes sense since we just look at intel_dig_port->port. Might
> make sense to entirely eliminate the local inte_dig_port variable from
> these hooks so that there's no confusion whether it points at the fake
> or primary encoder.

Do you mean we can still use enc_to_dig_port()? Maybe the new code
is better. What do you think we use the wrapper
intel_encoder_to_dig_port() here?

> 
> >  	enum port port = intel_dig_port->port;
> >  	uint32_t tmp;
> >  	int len, i;
> > @@ -500,7 +510,8 @@ void intel_audio_codec_enable(struct
> intel_encoder *intel_encoder)
> >  	struct drm_device *dev = encoder->dev;
> >  	struct drm_i915_private *dev_priv = dev->dev_private;
> >  	struct i915_audio_component *acomp = dev_priv-
> >audio_component;
> > -	struct intel_digital_port *intel_dig_port =
> enc_to_dig_port(encoder);
> > +	struct intel_digital_port *intel_dig_port =
> > +		intel_encoder_to_dig_port(intel_encoder);
> >  	enum port port = intel_dig_port->port;
> >
> >  	connector = drm_select_eld(encoder);
> > @@ -546,7 +557,8 @@ void intel_audio_codec_disable(struct
> intel_encoder *intel_encoder)
> >  	struct drm_device *dev = encoder->dev;
> >  	struct drm_i915_private *dev_priv = dev->dev_private;
> >  	struct i915_audio_component *acomp = dev_priv-
> >audio_component;
> > -	struct intel_digital_port *intel_dig_port =
> enc_to_dig_port(encoder);
> > +	struct intel_digital_port *intel_dig_port =
> > +		intel_encoder_to_dig_port(intel_encoder);
> 
> >  	enum port port = intel_dig_port->port;
> >
> >  	if (dev_priv->display.audio_codec_disable)
> > @@ -724,7 +736,8 @@ 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);
> > +		intel_dig_port =
> > +			intel_encoder_to_dig_port(intel_encoder);
> >  		*enabled = intel_dig_port->audio_connector != NULL;
> 
> These not so much. We'd clobber 'intel_dig_port->audio_connector' for
> the primary encoder whenever a new MST stream is enabled.

Yes. If we are using i915_audio_component_get_eld() for MST audio,
we need a parameter device_entry_id in the function. I remember
David has sent a patch to support device entry before. But MST was
not supported and he removed the device_entry_id parameter.

> 
> Was the intention just to fix the port information passed to
> .pin_eld_notify()?

No. It's based on device entry.

> 
> This whole thing seems highlight a rather big issue with the current
> component stuff; How do you tell the streams apart when all are using
> the same DDI port?

If we need support other device entries, we need get
the other ports besides primary port. Do you know how
to get the ports?

As Takashi has changed to get eld_info from unsol_event to using this
callback, it seems this is a must to support MST audio.

> 
> >  		if (*enabled) {
> >  			eld = intel_dig_port->audio_connector->eld;
> > --
> > 1.9.1
> 
> --
> Ville Syrjälä
> Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2016-01-04 16:03   ` Ville Syrjälä
@ 2016-01-06  2:26     ` Yang, Libin
  0 siblings, 0 replies; 10+ messages in thread
From: Yang, Libin @ 2016-01-06  2:26 UTC (permalink / raw)
  To: ville.syrjala, libin.yang; +Cc: tiwai, intel-gfx, Vetter, Daniel

Hi Ville,

> -----Original Message-----
> From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> Sent: Tuesday, January 05, 2016 12:03 AM
> To: libin.yang@linux.intel.com
> Cc: intel-gfx@lists.freedesktop.org; conselvan2@gmail.com;
> tiwai@suse.de; jani.nikula@linux.intel.com; Vetter, Daniel; Yang, Libin
> Subject: Re: [PATCH 2/2] drm/i915: add dp mst judgement in
> hsw_audio_codec_enable
> 
> On Wed, Dec 23, 2015 at 02:50:47PM +0800, libin.yang@linux.intel.com
> wrote:
> > From: Libin Yang <libin.yang@linux.intel.com>
> >
> > hsw platforms supports DP MST while ilk doesn't.
> > This patch fixes the bug.
> >
> > Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_audio.c | 16 +++++++++-------
> >  1 file changed, 9 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_audio.c
> b/drivers/gpu/drm/i915/intel_audio.c
> > index 431487a0..f46fa7b 100644
> > --- a/drivers/gpu/drm/i915/intel_audio.c
> > +++ b/drivers/gpu/drm/i915/intel_audio.c
> > @@ -255,6 +255,11 @@ static void g4x_audio_codec_enable(struct
> drm_connector *connector,
> >  	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
> >  }
> >
> > +/* pipe type is DP SST or DP MST */
> > +#define intel_pipe_is_dp(intel_crtc) \
> > +	(intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT)
> || \
> > +	 intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> > +
> 
> crtc->config->has_dp_encoder should be good enough for all platforms.
> 
> Though I have some plans to eliminate it, but that doesn't mean we can't
> use it in the meantime.

Thanks. I have verified your method and it works. I will send the refined
patches.

Regards,
Libin

> 
> >  static void hsw_audio_codec_disable(struct intel_encoder *encoder)
> >  {
> >  	struct drm_i915_private *dev_priv = encoder->base.dev-
> >dev_private;
> > @@ -272,8 +277,7 @@ static void hsw_audio_codec_disable(struct
> intel_encoder *encoder)
> >  	tmp |= AUD_CONFIG_N_PROG_ENABLE;
> >  	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
> >  	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
> > -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT)
> ||
> > -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> > +	if (intel_pipe_is_dp(intel_crtc))
> >  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
> >  	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
> >
> > @@ -339,7 +343,7 @@ static void hsw_audio_codec_enable(struct
> drm_connector *connector,
> >  	tmp = I915_READ(HSW_AUD_CFG(pipe));
> >  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
> >  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> > -	if (intel_pipe_has_type(intel_crtc,
> INTEL_OUTPUT_DISPLAYPORT))
> > +	if (intel_pipe_is_dp(intel_crtc))
> >  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
> >  	else
> >  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> > @@ -486,8 +490,7 @@ static void ilk_audio_codec_enable(struct
> drm_connector *connector,
> >  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
> >  	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
> >  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> > -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT)
> ||
> > -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> > +	if (intel_pipe_has_type(intel_crtc,
> INTEL_OUTPUT_DISPLAYPORT))
> >  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
> >  	else
> >  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> > @@ -526,8 +529,7 @@ void intel_audio_codec_enable(struct
> intel_encoder *intel_encoder)
> >
> >  	/* ELD Conn_Type */
> >  	connector->eld[5] &= ~(3 << 2);
> > -	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> > -	    intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
> > +	if (intel_pipe_is_dp(crtc))
> >  		connector->eld[5] |= (1 << 2);
> >
> >  	connector->eld[6] = drm_av_sync_delay(connector,
> adjusted_mode) / 2;
> > --
> > 1.9.1
> 
> --
> Ville Syrjälä
> Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2015-12-23  6:50 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
@ 2016-01-04 16:03   ` Ville Syrjälä
  2016-01-06  2:26     ` Yang, Libin
  0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2016-01-04 16:03 UTC (permalink / raw)
  To: libin.yang; +Cc: intel-gfx, tiwai, daniel.vetter

On Wed, Dec 23, 2015 at 02:50:47PM +0800, libin.yang@linux.intel.com wrote:
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> hsw platforms supports DP MST while ilk doesn't.
> This patch fixes the bug.
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 431487a0..f46fa7b 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -255,6 +255,11 @@ static void g4x_audio_codec_enable(struct drm_connector *connector,
>  	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
>  }
>  
> +/* pipe type is DP SST or DP MST */
> +#define intel_pipe_is_dp(intel_crtc) \
> +	(intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) || \
> +	 intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> +

crtc->config->has_dp_encoder should be good enough for all platforms.

Though I have some plans to eliminate it, but that doesn't mean we can't
use it in the meantime.

>  static void hsw_audio_codec_disable(struct intel_encoder *encoder)
>  {
>  	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
> @@ -272,8 +277,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
>  	tmp |= AUD_CONFIG_N_PROG_ENABLE;
>  	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
>  	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> +	if (intel_pipe_is_dp(intel_crtc))
>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
>  
> @@ -339,7 +343,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
>  	tmp = I915_READ(HSW_AUD_CFG(pipe));
>  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
>  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
> +	if (intel_pipe_is_dp(intel_crtc))
>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	else
>  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> @@ -486,8 +490,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
>  	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
>  	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
>  	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
> -	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
> +	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
>  		tmp |= AUD_CONFIG_N_VALUE_INDEX;
>  	else
>  		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
> @@ -526,8 +529,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  
>  	/* ELD Conn_Type */
>  	connector->eld[5] &= ~(3 << 2);
> -	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
> -	    intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
> +	if (intel_pipe_is_dp(crtc))
>  		connector->eld[5] |= (1 << 2);
>  
>  	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
> -- 
> 1.9.1

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable
  2015-12-23  6:50 libin.yang
@ 2015-12-23  6:50 ` libin.yang
  2016-01-04 16:03   ` Ville Syrjälä
  0 siblings, 1 reply; 10+ messages in thread
From: libin.yang @ 2015-12-23  6:50 UTC (permalink / raw)
  To: intel-gfx, conselvan2, tiwai, jani.nikula, ville.syrjala, daniel.vetter
  Cc: Libin Yang

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

hsw platforms supports DP MST while ilk doesn't.
This patch fixes the bug.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 431487a0..f46fa7b 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -255,6 +255,11 @@ static void g4x_audio_codec_enable(struct drm_connector *connector,
 	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
 }
 
+/* pipe type is DP SST or DP MST */
+#define intel_pipe_is_dp(intel_crtc) \
+	(intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) || \
+	 intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
+
 static void hsw_audio_codec_disable(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
@@ -272,8 +277,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
 	tmp |= AUD_CONFIG_N_PROG_ENABLE;
 	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
 	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
+	if (intel_pipe_is_dp(intel_crtc))
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
 
@@ -339,7 +343,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
 	tmp = I915_READ(HSW_AUD_CFG(pipe));
 	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
 	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
+	if (intel_pipe_is_dp(intel_crtc))
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	else
 		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
@@ -486,8 +490,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
 	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
 	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
 	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
-	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
+	if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
 		tmp |= AUD_CONFIG_N_VALUE_INDEX;
 	else
 		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
@@ -526,8 +529,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 
 	/* ELD Conn_Type */
 	connector->eld[5] &= ~(3 << 2);
-	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
-	    intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
+	if (intel_pipe_is_dp(crtc))
 		connector->eld[5] |= (1 << 2);
 
 	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
-- 
1.9.1

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

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

end of thread, other threads:[~2016-01-08  2:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-06  2:26 [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio libin.yang
2016-01-06  2:26 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
2016-01-07 16:51   ` Ville Syrjälä
2016-01-07 16:59     ` Daniel Vetter
2016-01-06 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-07 16:50 ` [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio Ville Syrjälä
2016-01-08  2:18   ` Yang, Libin
  -- strict thread matches above, loose matches on Subject: below --
2015-12-23  6:50 libin.yang
2015-12-23  6:50 ` [PATCH 2/2] drm/i915: add dp mst judgement in hsw_audio_codec_enable libin.yang
2016-01-04 16:03   ` Ville Syrjälä
2016-01-06  2:26     ` Yang, Libin

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.