stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lyude Paul <cpaul@redhat.com>
To: "Jani Nikula" <jani.nikula@linux.intel.com>,
	"Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org, Rob Clark <rclark@redhat.com>,
	David Airlie <airlied@linux.ie>,
	Daniel Vetter <daniel.vetter@intel.com>,
	"open list:INTEL DRM DRIVERS (excluding Poulsbo, Moorestow...),
	" "linux-kernel@vger.kernel.org (open list)"
	<dri-devel@lists.freedesktop.org>,
	stable@vger.kernel.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Fix enc_to_dig_port() for MST encoders
Date: Mon, 02 May 2016 11:11:31 -0400	[thread overview]
Message-ID: <1462201891.22017.0.camel@redhat.com> (raw)
In-Reply-To: <87vb31hqgw.fsf@intel.com>

I gave a short try at fixing MST audio, but it definitely looks like it's going
to require quite a bit of troubleshooting and a few more patches :(.

Since I can't find an immediate fix to actually make MST audio work I'm totally
in favor of reverting the MST audio support for the time being

On Thu, 2016-04-28 at 15:23 +0300, Jani Nikula wrote:
> On Thu, 28 Apr 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > 
> > On Thu, Apr 28, 2016 at 09:17:00AM +0300, Jani Nikula wrote:
> > > 
> > > On Wed, 27 Apr 2016, Lyude <cpaul@redhat.com> wrote:
> > > > 
> > > > For MST encoders, the encoder struct is stored in the intel_dp_mst
> > > > struct, not a intel_digital_port struct.
> > > > 
> > > > This fixes issues with hotplugging MST displays that support MST audio,
> > > > where hotplugging had a surprisingly good chance of accidentally
> > > > overwriting other parts of the kernel leading to seemingly unrelated
> > > > backtraces in sysfs, ext4, etc.
> > > > 
> > > > Cc: stable@vger.kernel.org
> > > > Signed-off-by: Lyude <cpaul@redhat.com>
> > > Ugh. Just ugh.
> > > 
> > > At a glance, it's probably this one that starts calling
> > > intel_audio_codec_enable() and intel_audio_codec_disable() on DP MST:
> > > 
> > > commit 3d52ccf52f2c51f613e42e65be0f06e4e6788093
> > > Author: Libin Yang <libin.yang@linux.intel.com>
> > > Date:   Wed Dec 2 14:09:44 2015 +0800
> > > 
> > >     drm/i915: start adding dp mst audio
> > > 
> > > which has been there since v4.5. Would it be feasible for you to revert
> > > the commit or change it so that it stops calling the audio codec
> > > enable/disable, to verify this is the culprit? So we could add a proper
> > > Fixes: line too.
> > I don't particularly like making enc_to_dig_port() work on MST encoders
> > because it'll likely result in the wrong thing anyway. I already asked
> > before how MST audio port handling is supposed to work, but never got
> > any answer. Right now, if you just use the ->primary dig_port in the
> > audio paths, there's no way audio can work correctly with MST, at least
> > if you enable multiple streams on the same port.
> > 
> > So what I would do is just revert the audio calls from the MST paths and
> > go back to the drawing board.
> I don't mind that approach either.
> 
> I was thinking we should probably add some dynamic type checking to
> enc_to_dig_port to catch this type of bugs.
> 
> BR,
> Jani.
> 
> > 
> > 
> > > 
> > > 
> > > The non-MST aware enc_to_dig_port() calls on platforms that might have
> > > MST were added in:
> > > 
> > > commit 51e1d83cab9988716ae68801a721f4df0aaa374b
> > > Author: David Henningsson <david.henningsson@canonical.com>
> > > Date:   Wed Aug 19 10:48:56 2015 +0200
> > > 
> > >     drm/i915: Call audio pin/ELD notify function
> > > 
> > > and:
> > > 
> > > commit 7e8275c2f2bbb384e18af37066b8b2f32b7d092f
> > > Author: Libin Yang <libin.yang@intel.com>
> > > Date:   Fri Sep 25 09:36:12 2015 +0800
> > > 
> > >     drm/i915: set proper N/CTS in modeset
> > > 
> > > but I don't think the codec enable/disable were called on MST at that
> > > time.
> > > 
> > > Some of the problem was probably seen by Takashi in
> > > 
> > > commit 0bdf5a05647a66dcc6394986e061daeac9b1cf96
> > > Author: Takashi Iwai <tiwai@suse.de>
> > > Date:   Mon Nov 30 18:19:39 2015 +0100
> > > 
> > >     drm/i915: Add reverse mapping between port and intel_encoder
> > > 
> > > which has a comment /* intel_encoder might be NULL for DP MST */. Maybe
> > > that needs to be updated to DTRT too.
> > > 
> > > 
> > > Lyude, thanks for your efforts in DP MST area. Much appreciated.
> > > 
> > > 
> > > BR,
> > > Jani.
> > > 
> > > 
> > > 
> > > > 
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_drv.h | 17 +++++++++++------
> > > >  1 file changed, 11 insertions(+), 6 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h
> > > > b/drivers/gpu/drm/i915/intel_drv.h
> > > > index 4c027d6..81f2212 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -918,18 +918,23 @@ 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;
> > > -- 
> > > Jani Nikula, Intel Open Source Technology Center
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-05-02 15:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-27 17:34 [PATCH] drm/i915: Fix enc_to_dig_port() for MST encoders Lyude
2016-04-28  6:17 ` Jani Nikula
2016-04-28 10:40   ` [Intel-gfx] " Ville Syrjälä
2016-04-28 12:23     ` Jani Nikula
2016-05-02 15:11       ` Lyude Paul [this message]
2016-05-02 20:24         ` 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=1462201891.22017.0.camel@redhat.com \
    --to=cpaul@redhat.com \
    --cc=airlied@linux.ie \
    --cc=daniel.vetter@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=rclark@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=ville.syrjala@linux.intel.com \
    /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;
as well as URLs for NNTP newsgroup(s).