Message ID | 20200429025528.236678-2-acelan.kao@canonical.com |
---|---|
State | New |
Headers | show |
Series | Intermittent display blackouts on event | expand |
Acked-by: You-Sheng Yang <vicamo.yang@canonical.com> On 2020-04-29 10:55, AceLan Kao wrote: > From: Kai Vehmanen <kai.vehmanen@linux.intel.com> > > BugLink: https://bugs.launchpad.net/bugs/1875254 > > Revert changes done in commit f6ec9483091f ("drm/i915: extend audio > CDCLK>=2*BCLK constraint to more platforms"). Audio drivers > communicate with i915 over HDA bus multiple times during system > boot-up and each of these transactions result in matching > get_power/put_power calls to i915, and depending on the platform, > a modeset change causing visible flicker. > > GLK is the only platform with minimum CDCLK significantly lower > than BCLK, and thus for GLK setting a higher CDCLK is mandatory. > > For other platforms, minimum CDCLK is close but below 2*BCLK > (e.g. on ICL, CDCLK=176.4kHz with BCLK=96kHz). Spec-wise the constraint > should be set, but in practise no communication errors have been > reported and the downside if set is the flicker observed at boot-time. > > Revert to old behaviour until better mechanism to manage > probe-time clocks is available. > > The full CDCLK>=2*BCLK constraint is still enforced at pipe > enable time in intel_crtc_compute_min_cdclk(). > > Bugzilla: https://gitlab.freedesktop.org/drm/intel/issues/913 > Fixes: f6ec9483091f ("drm/i915: extend audio CDCLK>=2*BCLK constraint to more platforms") > Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> > Reviewed-by: Matt Roper <matthew.d.roper@intel.com> > Signed-off-by: Matt Roper <matthew.d.roper@intel.com> > Link: https://patchwork.freedesktop.org/patch/msgid/20191231140007.31728-1-kai.vehmanen@linux.intel.com > (bacported from commit 1ee48a61aa57dbdbc3cd2808d8b28df40d938e44) > Signed-off-by: AceLan Kao <acelan.kao@canonical.com> > --- > drivers/gpu/drm/i915/display/intel_audio.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c > index 191561f0834b..5d4986633ab7 100644 > --- a/drivers/gpu/drm/i915/display/intel_audio.c > +++ b/drivers/gpu/drm/i915/display/intel_audio.c > @@ -852,7 +852,7 @@ static unsigned long i915_audio_component_get_power(struct device *kdev) > > /* Force CDCLK to 2*BCLK as long as we need audio to be powered. */ > if (dev_priv->audio_power_refcount++ == 0) { > - if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) > + if (IS_GEMINILAKE(dev_priv)) > glk_force_audio_cdclk(dev_priv, true); > > if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) > @@ -871,7 +871,7 @@ static void i915_audio_component_put_power(struct device *kdev, > > /* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */ > if (--dev_priv->audio_power_refcount == 0) > - if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) > + if (IS_GEMINILAKE(dev_priv)) > glk_force_audio_cdclk(dev_priv, false); > > intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie); >
diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c index 191561f0834b..5d4986633ab7 100644 --- a/drivers/gpu/drm/i915/display/intel_audio.c +++ b/drivers/gpu/drm/i915/display/intel_audio.c @@ -852,7 +852,7 @@ static unsigned long i915_audio_component_get_power(struct device *kdev) /* Force CDCLK to 2*BCLK as long as we need audio to be powered. */ if (dev_priv->audio_power_refcount++ == 0) { - if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) + if (IS_GEMINILAKE(dev_priv)) glk_force_audio_cdclk(dev_priv, true); if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) @@ -871,7 +871,7 @@ static void i915_audio_component_put_power(struct device *kdev, /* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */ if (--dev_priv->audio_power_refcount == 0) - if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) + if (IS_GEMINILAKE(dev_priv)) glk_force_audio_cdclk(dev_priv, false); intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie);