Message ID | 1474878043-9941-1-git-send-email-libin.yang@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Add DK, Jim and Jeeja Regards, Libin > -----Original Message----- > From: libin.yang@linux.intel.com [mailto:libin.yang@linux.intel.com] > Sent: Monday, September 26, 2016 4:21 PM > To: intel-gfx@lists.freedesktop.org; jani.nikula@linux.intel.com; > ville.syrjala@linux.intel.com; Vetter, Daniel <daniel.vetter@intel.com>; > tiwai@suse.de > Cc: Yang, Libin <libin.yang@intel.com>; Libin Yang > <libin.yang@linux.intel.com> > Subject: [PATCH] drm/i915/audio: extend get_saved_enc() to support more > scenarios > > From: Libin Yang <libin.yang@linux.intel.com> > > When bootup, audio driver may not know it is MST or not. The audio driver > will poll all the port & pipe combinations in either MST or Non-MST mode. > get_saved_enc() should handle this situation. > > Signed-off-by: Libin Yang <libin.yang@linux.intel.com> > --- > drivers/gpu/drm/i915/intel_audio.c | 32 ++++++++++++++++++++++++++++-- > -- > 1 file changed, 28 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_audio.c > b/drivers/gpu/drm/i915/intel_audio.c > index 9583f43..a6af14f 100644 > --- a/drivers/gpu/drm/i915/intel_audio.c > +++ b/drivers/gpu/drm/i915/intel_audio.c > @@ -635,25 +635,49 @@ static int > i915_audio_component_get_cdclk_freq(struct device *kdev) > return dev_priv->cdclk_freq; > } > > +/* > + * get the intel_encoder according to the parameter port and pipe > + * intel_encoder is saved by the index of pipe > + * MST & (pipe >= 0): return the av_enc_map[pipe], > + * when port is matched > + * MST & (pipe < 0): this is invalid > + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) > + * will get the right intel_encoder with port matched > + * Non-MST & (pipe < 0): get the right intel_encoder with port matched > +*/ > static struct intel_encoder *get_saved_enc(struct drm_i915_private > *dev_priv, > int port, int pipe) > { > + struct intel_encoder *encoder; > > if (WARN_ON(pipe >= I915_MAX_PIPES)) > return NULL; > > /* MST */ > - if (pipe >= 0) > - return dev_priv->av_enc_map[pipe]; > + if (pipe >= 0) { > + encoder = dev_priv->av_enc_map[pipe]; > + /* > + * when bootup, audio driver may not know it is > + * MST or not. So it will poll all the port & pipe > + * combinations > + */ > + if (encoder != NULL && encoder->port == port && > + encoder->type == INTEL_OUTPUT_DP_MST) > + return encoder; > + } > > /* Non-MST */ > - for_each_pipe(dev_priv, pipe) { > - struct intel_encoder *encoder; > + if (pipe > 0) > + return NULL; > > + for_each_pipe(dev_priv, pipe) { > encoder = dev_priv->av_enc_map[pipe]; > if (encoder == NULL) > continue; > > + if (encoder->type == INTEL_OUTPUT_DP_MST) > + continue; > + > if (port == encoder->port) > return encoder; > } > -- > 1.9.1
I will NAK all further DP MST audio patches until https://bugs.freedesktop.org/show_bug.cgi?id=97907 is fixed. BR, Jani. On Mon, 26 Sep 2016, "Yang, Libin" <libin.yang@intel.com> wrote: > Add DK, Jim and Jeeja > > Regards, > Libin > > >> -----Original Message----- >> From: libin.yang@linux.intel.com [mailto:libin.yang@linux.intel.com] >> Sent: Monday, September 26, 2016 4:21 PM >> To: intel-gfx@lists.freedesktop.org; jani.nikula@linux.intel.com; >> ville.syrjala@linux.intel.com; Vetter, Daniel <daniel.vetter@intel.com>; >> tiwai@suse.de >> Cc: Yang, Libin <libin.yang@intel.com>; Libin Yang >> <libin.yang@linux.intel.com> >> Subject: [PATCH] drm/i915/audio: extend get_saved_enc() to support more >> scenarios >> >> From: Libin Yang <libin.yang@linux.intel.com> >> >> When bootup, audio driver may not know it is MST or not. The audio driver >> will poll all the port & pipe combinations in either MST or Non-MST mode. >> get_saved_enc() should handle this situation. >> >> Signed-off-by: Libin Yang <libin.yang@linux.intel.com> >> --- >> drivers/gpu/drm/i915/intel_audio.c | 32 ++++++++++++++++++++++++++++-- >> -- >> 1 file changed, 28 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_audio.c >> b/drivers/gpu/drm/i915/intel_audio.c >> index 9583f43..a6af14f 100644 >> --- a/drivers/gpu/drm/i915/intel_audio.c >> +++ b/drivers/gpu/drm/i915/intel_audio.c >> @@ -635,25 +635,49 @@ static int >> i915_audio_component_get_cdclk_freq(struct device *kdev) >> return dev_priv->cdclk_freq; >> } >> >> +/* >> + * get the intel_encoder according to the parameter port and pipe >> + * intel_encoder is saved by the index of pipe >> + * MST & (pipe >= 0): return the av_enc_map[pipe], >> + * when port is matched >> + * MST & (pipe < 0): this is invalid >> + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) >> + * will get the right intel_encoder with port matched >> + * Non-MST & (pipe < 0): get the right intel_encoder with port matched >> +*/ >> static struct intel_encoder *get_saved_enc(struct drm_i915_private >> *dev_priv, >> int port, int pipe) >> { >> + struct intel_encoder *encoder; >> >> if (WARN_ON(pipe >= I915_MAX_PIPES)) >> return NULL; >> >> /* MST */ >> - if (pipe >= 0) >> - return dev_priv->av_enc_map[pipe]; >> + if (pipe >= 0) { >> + encoder = dev_priv->av_enc_map[pipe]; >> + /* >> + * when bootup, audio driver may not know it is >> + * MST or not. So it will poll all the port & pipe >> + * combinations >> + */ >> + if (encoder != NULL && encoder->port == port && >> + encoder->type == INTEL_OUTPUT_DP_MST) >> + return encoder; >> + } >> >> /* Non-MST */ >> - for_each_pipe(dev_priv, pipe) { >> - struct intel_encoder *encoder; >> + if (pipe > 0) >> + return NULL; >> >> + for_each_pipe(dev_priv, pipe) { >> encoder = dev_priv->av_enc_map[pipe]; >> if (encoder == NULL) >> continue; >> >> + if (encoder->type == INTEL_OUTPUT_DP_MST) >> + continue; >> + >> if (port == encoder->port) >> return encoder; >> } >> -- >> 1.9.1 >
Yes, I see. I will co-work with DK to fix the issue. Regards, Libin > -----Original Message----- > From: Jani Nikula [mailto:jani.nikula@linux.intel.com] > Sent: Monday, September 26, 2016 4:39 PM > To: Yang, Libin <libin.yang@intel.com>; libin.yang@linux.intel.com; intel- > gfx@lists.freedesktop.org; ville.syrjala@linux.intel.com; Vetter, Daniel > <daniel.vetter@intel.com>; tiwai@suse.de > Cc: Pandiyan, Dhinakaran <dhinakaran.pandiyan@intel.com>; Bride, Jim > <jim.bride@intel.com>; Kp, Jeeja <jeeja.kp@intel.com> > Subject: RE: [PATCH] drm/i915/audio: extend get_saved_enc() to support > more scenarios > > > I will NAK all further DP MST audio patches until > > https://bugs.freedesktop.org/show_bug.cgi?id=97907 > > is fixed. > > > BR, > Jani. > > > On Mon, 26 Sep 2016, "Yang, Libin" <libin.yang@intel.com> wrote: > > Add DK, Jim and Jeeja > > > > Regards, > > Libin > > > > > >> -----Original Message----- > >> From: libin.yang@linux.intel.com [mailto:libin.yang@linux.intel.com] > >> Sent: Monday, September 26, 2016 4:21 PM > >> To: intel-gfx@lists.freedesktop.org; jani.nikula@linux.intel.com; > >> ville.syrjala@linux.intel.com; Vetter, Daniel > >> <daniel.vetter@intel.com>; tiwai@suse.de > >> Cc: Yang, Libin <libin.yang@intel.com>; Libin Yang > >> <libin.yang@linux.intel.com> > >> Subject: [PATCH] drm/i915/audio: extend get_saved_enc() to support > >> more scenarios > >> > >> From: Libin Yang <libin.yang@linux.intel.com> > >> > >> When bootup, audio driver may not know it is MST or not. The audio > >> driver will poll all the port & pipe combinations in either MST or Non-MST > mode. > >> get_saved_enc() should handle this situation. > >> > >> Signed-off-by: Libin Yang <libin.yang@linux.intel.com> > >> --- > >> drivers/gpu/drm/i915/intel_audio.c | 32 > >> ++++++++++++++++++++++++++++-- > >> -- > >> 1 file changed, 28 insertions(+), 4 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/i915/intel_audio.c > >> b/drivers/gpu/drm/i915/intel_audio.c > >> index 9583f43..a6af14f 100644 > >> --- a/drivers/gpu/drm/i915/intel_audio.c > >> +++ b/drivers/gpu/drm/i915/intel_audio.c > >> @@ -635,25 +635,49 @@ static int > >> i915_audio_component_get_cdclk_freq(struct device *kdev) > >> return dev_priv->cdclk_freq; > >> } > >> > >> +/* > >> + * get the intel_encoder according to the parameter port and pipe > >> + * intel_encoder is saved by the index of pipe > >> + * MST & (pipe >= 0): return the av_enc_map[pipe], > >> + * when port is matched > >> + * MST & (pipe < 0): this is invalid > >> + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) > >> + * will get the right intel_encoder with port matched > >> + * Non-MST & (pipe < 0): get the right intel_encoder with port > >> +matched */ > >> static struct intel_encoder *get_saved_enc(struct drm_i915_private > >> *dev_priv, > >> int port, int pipe) > >> { > >> + struct intel_encoder *encoder; > >> > >> if (WARN_ON(pipe >= I915_MAX_PIPES)) > >> return NULL; > >> > >> /* MST */ > >> - if (pipe >= 0) > >> - return dev_priv->av_enc_map[pipe]; > >> + if (pipe >= 0) { > >> + encoder = dev_priv->av_enc_map[pipe]; > >> + /* > >> + * when bootup, audio driver may not know it is > >> + * MST or not. So it will poll all the port & pipe > >> + * combinations > >> + */ > >> + if (encoder != NULL && encoder->port == port && > >> + encoder->type == INTEL_OUTPUT_DP_MST) > >> + return encoder; > >> + } > >> > >> /* Non-MST */ > >> - for_each_pipe(dev_priv, pipe) { > >> - struct intel_encoder *encoder; > >> + if (pipe > 0) > >> + return NULL; > >> > >> + for_each_pipe(dev_priv, pipe) { > >> encoder = dev_priv->av_enc_map[pipe]; > >> if (encoder == NULL) > >> continue; > >> > >> + if (encoder->type == INTEL_OUTPUT_DP_MST) > >> + continue; > >> + > >> if (port == encoder->port) > >> return encoder; > >> } > >> -- > >> 1.9.1 > > > > -- > Jani Nikula, Intel Open Source Technology Center
Thanks. Unless there's a trivial quick fix, I expect a revert first. BR, Jani. On Mon, 26 Sep 2016, "Yang, Libin" <libin.yang@intel.com> wrote: > Yes, I see. I will co-work with DK to fix the issue. > > Regards, > Libin > > >> -----Original Message----- >> From: Jani Nikula [mailto:jani.nikula@linux.intel.com] >> Sent: Monday, September 26, 2016 4:39 PM >> To: Yang, Libin <libin.yang@intel.com>; libin.yang@linux.intel.com; intel- >> gfx@lists.freedesktop.org; ville.syrjala@linux.intel.com; Vetter, Daniel >> <daniel.vetter@intel.com>; tiwai@suse.de >> Cc: Pandiyan, Dhinakaran <dhinakaran.pandiyan@intel.com>; Bride, Jim >> <jim.bride@intel.com>; Kp, Jeeja <jeeja.kp@intel.com> >> Subject: RE: [PATCH] drm/i915/audio: extend get_saved_enc() to support >> more scenarios >> >> >> I will NAK all further DP MST audio patches until >> >> https://bugs.freedesktop.org/show_bug.cgi?id=97907 >> >> is fixed. >> >> >> BR, >> Jani. >> >> >> On Mon, 26 Sep 2016, "Yang, Libin" <libin.yang@intel.com> wrote: >> > Add DK, Jim and Jeeja >> > >> > Regards, >> > Libin >> > >> > >> >> -----Original Message----- >> >> From: libin.yang@linux.intel.com [mailto:libin.yang@linux.intel.com] >> >> Sent: Monday, September 26, 2016 4:21 PM >> >> To: intel-gfx@lists.freedesktop.org; jani.nikula@linux.intel.com; >> >> ville.syrjala@linux.intel.com; Vetter, Daniel >> >> <daniel.vetter@intel.com>; tiwai@suse.de >> >> Cc: Yang, Libin <libin.yang@intel.com>; Libin Yang >> >> <libin.yang@linux.intel.com> >> >> Subject: [PATCH] drm/i915/audio: extend get_saved_enc() to support >> >> more scenarios >> >> >> >> From: Libin Yang <libin.yang@linux.intel.com> >> >> >> >> When bootup, audio driver may not know it is MST or not. The audio >> >> driver will poll all the port & pipe combinations in either MST or Non-MST >> mode. >> >> get_saved_enc() should handle this situation. >> >> >> >> Signed-off-by: Libin Yang <libin.yang@linux.intel.com> >> >> --- >> >> drivers/gpu/drm/i915/intel_audio.c | 32 >> >> ++++++++++++++++++++++++++++-- >> >> -- >> >> 1 file changed, 28 insertions(+), 4 deletions(-) >> >> >> >> diff --git a/drivers/gpu/drm/i915/intel_audio.c >> >> b/drivers/gpu/drm/i915/intel_audio.c >> >> index 9583f43..a6af14f 100644 >> >> --- a/drivers/gpu/drm/i915/intel_audio.c >> >> +++ b/drivers/gpu/drm/i915/intel_audio.c >> >> @@ -635,25 +635,49 @@ static int >> >> i915_audio_component_get_cdclk_freq(struct device *kdev) >> >> return dev_priv->cdclk_freq; >> >> } >> >> >> >> +/* >> >> + * get the intel_encoder according to the parameter port and pipe >> >> + * intel_encoder is saved by the index of pipe >> >> + * MST & (pipe >= 0): return the av_enc_map[pipe], >> >> + * when port is matched >> >> + * MST & (pipe < 0): this is invalid >> >> + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) >> >> + * will get the right intel_encoder with port matched >> >> + * Non-MST & (pipe < 0): get the right intel_encoder with port >> >> +matched */ >> >> static struct intel_encoder *get_saved_enc(struct drm_i915_private >> >> *dev_priv, >> >> int port, int pipe) >> >> { >> >> + struct intel_encoder *encoder; >> >> >> >> if (WARN_ON(pipe >= I915_MAX_PIPES)) >> >> return NULL; >> >> >> >> /* MST */ >> >> - if (pipe >= 0) >> >> - return dev_priv->av_enc_map[pipe]; >> >> + if (pipe >= 0) { >> >> + encoder = dev_priv->av_enc_map[pipe]; >> >> + /* >> >> + * when bootup, audio driver may not know it is >> >> + * MST or not. So it will poll all the port & pipe >> >> + * combinations >> >> + */ >> >> + if (encoder != NULL && encoder->port == port && >> >> + encoder->type == INTEL_OUTPUT_DP_MST) >> >> + return encoder; >> >> + } >> >> >> >> /* Non-MST */ >> >> - for_each_pipe(dev_priv, pipe) { >> >> - struct intel_encoder *encoder; >> >> + if (pipe > 0) >> >> + return NULL; >> >> >> >> + for_each_pipe(dev_priv, pipe) { >> >> encoder = dev_priv->av_enc_map[pipe]; >> >> if (encoder == NULL) >> >> continue; >> >> >> >> + if (encoder->type == INTEL_OUTPUT_DP_MST) >> >> + continue; >> >> + >> >> if (port == encoder->port) >> >> return encoder; >> >> } >> >> -- >> >> 1.9.1 >> > >> >> -- >> Jani Nikula, Intel Open Source Technology Center
diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c index 9583f43..a6af14f 100644 --- a/drivers/gpu/drm/i915/intel_audio.c +++ b/drivers/gpu/drm/i915/intel_audio.c @@ -635,25 +635,49 @@ static int i915_audio_component_get_cdclk_freq(struct device *kdev) return dev_priv->cdclk_freq; } +/* + * get the intel_encoder according to the parameter port and pipe + * intel_encoder is saved by the index of pipe + * MST & (pipe >= 0): return the av_enc_map[pipe], + * when port is matched + * MST & (pipe < 0): this is invalid + * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry) + * will get the right intel_encoder with port matched + * Non-MST & (pipe < 0): get the right intel_encoder with port matched + */ static struct intel_encoder *get_saved_enc(struct drm_i915_private *dev_priv, int port, int pipe) { + struct intel_encoder *encoder; if (WARN_ON(pipe >= I915_MAX_PIPES)) return NULL; /* MST */ - if (pipe >= 0) - return dev_priv->av_enc_map[pipe]; + if (pipe >= 0) { + encoder = dev_priv->av_enc_map[pipe]; + /* + * when bootup, audio driver may not know it is + * MST or not. So it will poll all the port & pipe + * combinations + */ + if (encoder != NULL && encoder->port == port && + encoder->type == INTEL_OUTPUT_DP_MST) + return encoder; + } /* Non-MST */ - for_each_pipe(dev_priv, pipe) { - struct intel_encoder *encoder; + if (pipe > 0) + return NULL; + for_each_pipe(dev_priv, pipe) { encoder = dev_priv->av_enc_map[pipe]; if (encoder == NULL) continue; + if (encoder->type == INTEL_OUTPUT_DP_MST) + continue; + if (port == encoder->port) return encoder; }