Commit 0c4c801b authored by Kai Vehmanen's avatar Kai Vehmanen Committed by Jani Nikula

drm/i915: fix regression leading to display audio probe failure on GLK

In commit 4f0b4352 ("drm/i915: Extract cdclk requirements checking
to separate function") the order of force_min_cdclk_changed check and
intel_modeset_checks(), was reversed. This broke the mechanism to
immediately force a new CDCLK minimum, and lead to driver probe
errors for display audio on GLK platform with 5.9-rc1 kernel. Fix
the issue by moving intel_modeset_checks() call later.

[vsyrjala: It also broke the ability of planes to bump up the cdclk
and thus could lead to underruns when eg. flipping from 32bpp to
64bpp framebuffer. To be clear, we still compute the new cdclk
correctly but fail to actually program it to the hardware due to
intel_set_cdclk_{pre,post}_plane_update() not getting called on
account of state->modeset==false.]

Fixes: 4f0b4352 ("drm/i915: Extract cdclk requirements checking to separate function")
BugLink: https://github.com/thesofproject/linux/issues/2410Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200901151036.1312357-1-kai.vehmanen@linux.intel.com
(cherry picked from commit cf696856)
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent f4d51dff
...@@ -14956,12 +14956,6 @@ static int intel_atomic_check(struct drm_device *dev, ...@@ -14956,12 +14956,6 @@ static int intel_atomic_check(struct drm_device *dev,
if (dev_priv->wm.distrust_bios_wm) if (dev_priv->wm.distrust_bios_wm)
any_ms = true; any_ms = true;
if (any_ms) {
ret = intel_modeset_checks(state);
if (ret)
goto fail;
}
intel_fbc_choose_crtc(dev_priv, state); intel_fbc_choose_crtc(dev_priv, state);
ret = calc_watermark_data(state); ret = calc_watermark_data(state);
if (ret) if (ret)
...@@ -14976,6 +14970,10 @@ static int intel_atomic_check(struct drm_device *dev, ...@@ -14976,6 +14970,10 @@ static int intel_atomic_check(struct drm_device *dev,
goto fail; goto fail;
if (any_ms) { if (any_ms) {
ret = intel_modeset_checks(state);
if (ret)
goto fail;
ret = intel_modeset_calc_cdclk(state); ret = intel_modeset_calc_cdclk(state);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment