Message ID | 20180418103707.14645-1-jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, 18 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote: > From: Abhay Kumar <abhay.kumar@intel.com> > > In GLK when the device boots with only 1366x768 panel without audio, HDA > codec doesn't come up. In this case, the CDCLK is less than twice the > BCLK. Even though audio isn't being enabled, having a too low CDCLK > leads to audio probe failing altogether. > > Require CDCLK to be at least twice the BLCK regardless of audio. This is > a minimal fix to improve things. Unfortunately, this a) leads to too > high CDCLK being used when audio is not used, and b) is still not enough > to fix audio probe when no outputs are connected at probe time. > > The proper fix would be to increase CDCLK dynamically from the audio > component hooks. > > v2: > - Address comment (Jani) > - New design approach > v3: - Typo fix on top of v1 > > v4 by Jani: rewrite commit message, add comment in code > > Cc: stable@vger.kernel.org > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@gmail.com> > Cc: Wenkai Du <wenkai.du@intel.com> > Reviewed-by: Wenkai Du <wenkai.du@intel.com> > Tested-by: Wenkai Du <wenkai.du@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102937 > Signed-off-by: Abhay Kumar <abhay.kumar@intel.com> > Signed-off-by: Jani Nikula <jani.nikula@intel.com> Pushed to dinq with Ville's Ack on another thread. BR, Jani. > --- > drivers/gpu/drm/i915/intel_cdclk.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c > index fc8b2c6e3508..32d24c69da3c 100644 > --- a/drivers/gpu/drm/i915/intel_cdclk.c > +++ b/drivers/gpu/drm/i915/intel_cdclk.c > @@ -2140,10 +2140,22 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state) > } > } > > - /* According to BSpec, "The CD clock frequency must be at least twice > + /* > + * According to BSpec, "The CD clock frequency must be at least twice > * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default. > + * > + * FIXME: Check the actual, not default, BCLK being used. > + * > + * FIXME: This does not depend on ->has_audio because the higher CDCLK > + * is required for audio probe, also when there are no audio capable > + * displays connected at probe time. This leads to unnecessarily high > + * CDCLK when audio is not required. > + * > + * FIXME: This limit is only applied when there are displays connected > + * at probe time. If we probe without displays, we'll still end up using > + * the platform minimum CDCLK, failing audio probe. > */ > - if (crtc_state->has_audio && INTEL_GEN(dev_priv) >= 9) > + if (INTEL_GEN(dev_priv) >= 9) > min_cdclk = max(2 * 96000, min_cdclk); > > /*
diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c index fc8b2c6e3508..32d24c69da3c 100644 --- a/drivers/gpu/drm/i915/intel_cdclk.c +++ b/drivers/gpu/drm/i915/intel_cdclk.c @@ -2140,10 +2140,22 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state) } } - /* According to BSpec, "The CD clock frequency must be at least twice + /* + * According to BSpec, "The CD clock frequency must be at least twice * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default. + * + * FIXME: Check the actual, not default, BCLK being used. + * + * FIXME: This does not depend on ->has_audio because the higher CDCLK + * is required for audio probe, also when there are no audio capable + * displays connected at probe time. This leads to unnecessarily high + * CDCLK when audio is not required. + * + * FIXME: This limit is only applied when there are displays connected + * at probe time. If we probe without displays, we'll still end up using + * the platform minimum CDCLK, failing audio probe. */ - if (crtc_state->has_audio && INTEL_GEN(dev_priv) >= 9) + if (INTEL_GEN(dev_priv) >= 9) min_cdclk = max(2 * 96000, min_cdclk); /*