public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: "Konduru, Chandra" <chandra.konduru@intel.com>
Cc: "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH v2 6/9] drm/i915: Disable all infoframes when	turning off the HDMI port
Date: Tue, 2 Jun 2015 14:11:13 +0300	[thread overview]
Message-ID: <20150602111113.GV5176@intel.com> (raw)
In-Reply-To: <76A9B330A4D78C4D99CB292C4CC06C0E36FEEECC@fmsmsx101.amr.corp.intel.com>

On Mon, Jun 01, 2015 at 10:48:03PM +0000, Konduru, Chandra wrote:
> 
> 
> > -----Original Message-----
> > From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of
> > ville.syrjala@linux.intel.com
> > Sent: Tuesday, May 05, 2015 7:06 AM
> > To: intel-gfx@lists.freedesktop.org
> > Subject: [Intel-gfx] [PATCH v2 6/9] drm/i915: Disable all infoframes when
> > turning off the HDMI port
> > 
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Currently we just disable the GCP infoframe when turning off the port.
> > That means if the same transcoder is used on a DP port next, we might
> > end up pushing infoframes over DP, which isn't intended. Just disable
> 
> Wonder how it is working. May be it is ok, or never hit using a previously 
> used transcoder for HDMI port for DP.
> 
> By the way, you mean end up pushing "other" infoframes over DP?

We don't send infoframes over DP at all currently. Or I should say we
never intended to send them. After this patch that should even be true.
Well, unless the BIOS already enables them and we just fire up a DP port
using the transcoder in question. So I suppose we should really have the
DP code clear the infoframe settings explicitly, or we should clear them
during the sanitize phase.

> 
> > all the infoframes when turning off the port.
> > 
> > Also protect against two ports stomping on each other on g4x due to
> > the single video DIP instance. Now only the first port to enable
> > gets to send infoframes.
> 
> So is, 2nd port doesn't gets to send infoframes, the expected behavior 
> when two ports trying with a single DIP?

I'm not sure what's the best behaviour here. Either we somehow pick one
of the ports to send infoframes (first come first serve in this patch),
or we could just disable infoframes entirely for cloned cases. But it's
probably a rare configuration anyway since HDMI cloning is only allowed
on g4x.

> 
> Seems like a corner case to test thoroughly. Is this path exercised in your testing?

I tested it long ago. Although I must admit that the patch looked a bit
different back then.

> 
> > 
> > v2: Rebase
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_hdmi.c | 85 ++++++++++++++++++---------------------
> >  1 file changed, 40 insertions(+), 45 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 766bdb1..03b4759 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -514,7 +514,13 @@ static void g4x_set_infoframes(struct drm_encoder
> > *encoder,
> >  	if (!enable) {
> >  		if (!(val & VIDEO_DIP_ENABLE))
> >  			return;
> > -		val &= ~VIDEO_DIP_ENABLE;
> > +		if (port != (val & VIDEO_DIP_PORT_MASK)) {
> > +			DRM_DEBUG_KMS("video DIP still enabled on port
> > %c\n",
> > +				      (val & VIDEO_DIP_PORT_MASK) >> 29);
> > +			return;
> > +		}
> > +		val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI |
> > +			 VIDEO_DIP_ENABLE_VENDOR |
> > VIDEO_DIP_ENABLE_SPD);
> >  		I915_WRITE(reg, val);
> >  		POSTING_READ(reg);
> >  		return;
> > @@ -522,16 +528,17 @@ static void g4x_set_infoframes(struct drm_encoder
> > *encoder,
> > 
> >  	if (port != (val & VIDEO_DIP_PORT_MASK)) {
> >  		if (val & VIDEO_DIP_ENABLE) {
> > -			val &= ~VIDEO_DIP_ENABLE;
> > -			I915_WRITE(reg, val);
> > -			POSTING_READ(reg);
> > +			DRM_DEBUG_KMS("video DIP already enabled on port
> > %c\n",
> > +				      (val & VIDEO_DIP_PORT_MASK) >> 29);
> > +			return;
> >  		}
> >  		val &= ~VIDEO_DIP_PORT_MASK;
> >  		val |= port;
> >  	}
> > 
> >  	val |= VIDEO_DIP_ENABLE;
> > -	val &= ~VIDEO_DIP_ENABLE_VENDOR;
> > +	val &= ~(VIDEO_DIP_ENABLE_AVI |
> > +		 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_SPD);
> > 
> >  	I915_WRITE(reg, val);
> >  	POSTING_READ(reg);
> > @@ -632,23 +639,6 @@ static bool intel_hdmi_set_gcp_infoframe(struct
> > drm_encoder *encoder)
> >  	return val != 0;
> >  }
> > 
> > -static void intel_disable_gcp_infoframe(struct intel_crtc *crtc)
> > -{
> > -	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
> > -	u32 reg;
> > -
> > -	if (HAS_DDI(dev_priv))
> > -		reg = HSW_TVIDEO_DIP_CTL(crtc->config->cpu_transcoder);
> > -	else if (IS_VALLEYVIEW(dev_priv))
> > -		reg = VLV_TVIDEO_DIP_CTL(crtc->pipe);
> > -	else if (HAS_PCH_SPLIT(dev_priv->dev))
> > -		reg = TVIDEO_DIP_CTL(crtc->pipe);
> > -	else
> > -		return;
> > -
> > -	I915_WRITE(reg, I915_READ(reg) & ~VIDEO_DIP_ENABLE_GCP);
> > -}
> > -
> >  static void ibx_set_infoframes(struct drm_encoder *encoder,
> >  			       bool enable,
> >  			       struct drm_display_mode *adjusted_mode)
> > @@ -669,25 +659,26 @@ static void ibx_set_infoframes(struct drm_encoder
> > *encoder,
> >  	if (!enable) {
> >  		if (!(val & VIDEO_DIP_ENABLE))
> >  			return;
> > -		val &= ~VIDEO_DIP_ENABLE;
> > +		val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI |
> > +			 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > +			 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> >  		I915_WRITE(reg, val);
> >  		POSTING_READ(reg);
> >  		return;
> >  	}
> > 
> >  	if (port != (val & VIDEO_DIP_PORT_MASK)) {
> > -		if (val & VIDEO_DIP_ENABLE) {
> > -			val &= ~VIDEO_DIP_ENABLE;
> > -			I915_WRITE(reg, val);
> > -			POSTING_READ(reg);
> > -		}
> > +		WARN(val & VIDEO_DIP_ENABLE,
> > +		     "DIP already enabled on port %c\n",
> > +		     (val & VIDEO_DIP_PORT_MASK) >> 29);
> >  		val &= ~VIDEO_DIP_PORT_MASK;
> >  		val |= port;
> >  	}
> > 
> >  	val |= VIDEO_DIP_ENABLE;
> > -	val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > -		 VIDEO_DIP_ENABLE_GCP);
> > +	val &= ~(VIDEO_DIP_ENABLE_AVI |
> > +		 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > +		 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> > 
> >  	if (intel_hdmi_set_gcp_infoframe(encoder))
> >  		val |= VIDEO_DIP_ENABLE_GCP;
> > @@ -718,7 +709,9 @@ static void cpt_set_infoframes(struct drm_encoder
> > *encoder,
> >  	if (!enable) {
> >  		if (!(val & VIDEO_DIP_ENABLE))
> >  			return;
> > -		val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI);
> > +		val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI |
> > +			 VIDEO_DIP_ENABLE_VENDOR |
> > VIDEO_DIP_ENABLE_GAMUT |
> > +			 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> >  		I915_WRITE(reg, val);
> >  		POSTING_READ(reg);
> >  		return;
> > @@ -727,7 +720,7 @@ static void cpt_set_infoframes(struct drm_encoder
> > *encoder,
> >  	/* Set both together, unset both together: see the spec. */
> >  	val |= VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI;
> >  	val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > -		 VIDEO_DIP_ENABLE_GCP);
> > +		 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> > 
> >  	if (intel_hdmi_set_gcp_infoframe(encoder))
> >  		val |= VIDEO_DIP_ENABLE_GCP;
> > @@ -760,25 +753,26 @@ static void vlv_set_infoframes(struct drm_encoder
> > *encoder,
> >  	if (!enable) {
> >  		if (!(val & VIDEO_DIP_ENABLE))
> >  			return;
> > -		val &= ~VIDEO_DIP_ENABLE;
> > +		val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI |
> > +			 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > +			 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> >  		I915_WRITE(reg, val);
> >  		POSTING_READ(reg);
> >  		return;
> >  	}
> > 
> >  	if (port != (val & VIDEO_DIP_PORT_MASK)) {
> > -		if (val & VIDEO_DIP_ENABLE) {
> > -			val &= ~VIDEO_DIP_ENABLE;
> > -			I915_WRITE(reg, val);
> > -			POSTING_READ(reg);
> > -		}
> > +		WARN(val & VIDEO_DIP_ENABLE,
> > +		     "DIP already enabled on port %c\n",
> > +		     (val & VIDEO_DIP_PORT_MASK) >> 29);
> >  		val &= ~VIDEO_DIP_PORT_MASK;
> >  		val |= port;
> >  	}
> > 
> >  	val |= VIDEO_DIP_ENABLE;
> > -	val &= ~(VIDEO_DIP_ENABLE_AVI | VIDEO_DIP_ENABLE_VENDOR |
> > -		 VIDEO_DIP_ENABLE_GAMUT | VIDEO_DIP_ENABLE_GCP);
> > +	val &= ~(VIDEO_DIP_ENABLE_AVI |
> > +		 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT |
> > +		 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP);
> > 
> >  	if (intel_hdmi_set_gcp_infoframe(encoder))
> >  		val |= VIDEO_DIP_ENABLE_GCP;
> > @@ -803,15 +797,16 @@ static void hsw_set_infoframes(struct drm_encoder
> > *encoder,
> > 
> >  	assert_hdmi_port_disabled(intel_hdmi);
> > 
> > +	val &= ~(VIDEO_DIP_ENABLE_VSC_HSW | VIDEO_DIP_ENABLE_AVI_HSW |
> > +		 VIDEO_DIP_ENABLE_GCP_HSW | VIDEO_DIP_ENABLE_VS_HSW |
> > +		 VIDEO_DIP_ENABLE_GMP_HSW | VIDEO_DIP_ENABLE_SPD_HSW);
> > +
> >  	if (!enable) {
> > -		I915_WRITE(reg, 0);
> > +		I915_WRITE(reg, val);
> >  		POSTING_READ(reg);
> >  		return;
> >  	}
> > 
> > -	val &= ~(VIDEO_DIP_ENABLE_VSC_HSW | VIDEO_DIP_ENABLE_GCP_HSW |
> > -		 VIDEO_DIP_ENABLE_VS_HSW | VIDEO_DIP_ENABLE_GMP_HSW);
> > -
> >  	if (intel_hdmi_set_gcp_infoframe(encoder))
> >  		val |= VIDEO_DIP_ENABLE_GCP_HSW;
> > 
> > @@ -1133,7 +1128,7 @@ static void intel_disable_hdmi(struct intel_encoder
> > *encoder)
> >  	if (IS_CHERRYVIEW(dev))
> >  		chv_powergate_phy_lanes(encoder, 0xf);
> > 
> > -	intel_disable_gcp_infoframe(to_intel_crtc(encoder->base.crtc));
> > +	intel_hdmi->set_infoframes(&encoder->base, false, NULL);
> >  }
> > 
> >  static int hdmi_portclock_limit(struct intel_hdmi *hdmi, bool respect_dvi_limit)
> > --
> > 2.0.5
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

  reply	other threads:[~2015-06-02 11:11 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-05 14:06 [PATCH 0/9] drm/i915: HDMI 12bpc fixes ville.syrjala
2015-05-05 14:06 ` [PATCH v2 1/9] drm/i915: Implement WaEnableHDMI8bpcBefore12bpc:snb, ivb ville.syrjala
2015-05-05 14:24   ` Jani Nikula
2015-05-25 11:39   ` Ander Conselvan De Oliveira
2015-06-01 21:49   ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH v2 2/9] drm/i915: Send GCP infoframes for deep color HDMI sinks ville.syrjala
2015-05-25 12:32   ` Ander Conselvan De Oliveira
2015-05-25 12:44     ` Ville Syrjälä
2015-05-25 13:09       ` Ander Conselvan De Oliveira
2015-05-25 13:14         ` Ville Syrjälä
2015-06-01 21:49   ` Konduru, Chandra
2015-06-02 12:58     ` Ville Syrjälä
2015-06-02 19:07       ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH v2 3/9] drm/i915: Enable default_phase in GCP when possible ville.syrjala
2015-06-01 21:49   ` Konduru, Chandra
2015-06-02 11:46     ` Ville Syrjälä
2015-06-02 18:21       ` Konduru, Chandra
2015-06-03  9:34         ` Ville Syrjälä
2015-06-03 20:38           ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH v2 4/9] drm/i915: Fix HDMI 12bpc TRANSCONF bpc value ville.syrjala
2015-06-01 21:48   ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH v2 5/9] drm/i915: Fix 12bpc HDMI enable for IBX ville.syrjala
2015-06-03 20:52   ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH v2 6/9] drm/i915: Disable all infoframes when turning off the HDMI port ville.syrjala
2015-06-01 22:48   ` Konduru, Chandra
2015-06-02 11:11     ` Ville Syrjälä [this message]
2015-06-02 18:18       ` Konduru, Chandra
2015-06-03  9:21         ` Ville Syrjälä
2015-06-03 23:24           ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH 7/9] drm/i915: Check infoframe state more diligently ville.syrjala
2015-06-01 22:57   ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH 8/9] drm/i915: Fix hdmi clock readout with pixel repeat ville.syrjala
2015-06-01 22:59   ` Konduru, Chandra
2015-05-05 14:06 ` [PATCH 9/9] drm/i915: Double the port clock when using double clocked modes with 12bpc ville.syrjala
2015-05-21 11:20   ` Ville Syrjälä
2015-06-01 23:23   ` Konduru, Chandra
2015-06-01 19:04 ` [PATCH 0/9] drm/i915: HDMI 12bpc fixes Konduru, Chandra
2015-06-15  9:37   ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150602111113.GV5176@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=chandra.konduru@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox