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: Wed, 3 Jun 2015 12:21:08 +0300 [thread overview]
Message-ID: <20150603092108.GD5176@intel.com> (raw)
In-Reply-To: <76A9B330A4D78C4D99CB292C4CC06C0E36FEFAB4@fmsmsx101.amr.corp.intel.com>
On Tue, Jun 02, 2015 at 06:18:16PM +0000, Konduru, Chandra wrote:
>
>
> > -----Original Message-----
> > From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com]
> > Sent: Tuesday, June 02, 2015 4:11 AM
> > To: Konduru, Chandra
> > Cc: intel-gfx@lists.freedesktop.org
> > Subject: Re: [Intel-gfx] [PATCH v2 6/9] drm/i915: Disable all infoframes when
> > turning off the HDMI port
> >
> > 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.
>
> Agree that DP code path should clear the infoframe settings explicitly.
> As you are already touching this code, will you plan to handle it?
I don't think I'll go there now. It would require quite a bit more work
to expose the infoframe stuff to the DP code. DP + infoframes in general
sounds like a good project for someone else to figure out. A quick
glance at the DP spec suggests that we should at least send the audio
infoframe.
> Once it is taken care, it gets
> Reviewed-by: Chandra Konduru <Chandra.konduru@intel.com>
>
> >
> > >
> > > > 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.
>
> I am fine with what you outlined above. If anything come up, this can be
> revisited.
>
> >
> > >
> > > 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
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-06-03 9:21 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ä
2015-06-02 18:18 ` Konduru, Chandra
2015-06-03 9:21 ` Ville Syrjälä [this message]
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=20150603092108.GD5176@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