mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 20:27:07 +07:00
drm/i915/gen9: Assume CDCLK PLL is off if it's not locked
If the CDCLK PLL isn't locked or incorrectly configured we can just assume that it's off resulting in fully re-initializing both CDCLK PLL and CDCLK dividers. This way the CDCLK PLL sanitization added in the following patch can be done on BXT the same way as it's done on SKL. v2: (Ville) - Remove the remaining PLL specific checks from skl_sanitize_cdclk() and depend instead on the corresponding check in skl_dpll0_update(). - Use vco == 0 instead of the corresponding boolean check in skl_sanitize_cdclk(). CC: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1464093513-16258-1-git-send-email-imre.deak@intel.com
This commit is contained in:
parent
5a21b6650a
commit
1c3f7700b2
@ -5540,21 +5540,22 @@ skl_dpll0_update(struct drm_i915_private *dev_priv)
|
|||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
dev_priv->cdclk_pll.ref = 24000;
|
dev_priv->cdclk_pll.ref = 24000;
|
||||||
|
dev_priv->cdclk_pll.vco = 0;
|
||||||
|
|
||||||
val = I915_READ(LCPLL1_CTL);
|
val = I915_READ(LCPLL1_CTL);
|
||||||
if ((val & LCPLL_PLL_ENABLE) == 0) {
|
if ((val & LCPLL_PLL_ENABLE) == 0)
|
||||||
dev_priv->cdclk_pll.vco = 0;
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
WARN_ON((val & LCPLL_PLL_LOCK) == 0);
|
if (WARN_ON((val & LCPLL_PLL_LOCK) == 0))
|
||||||
|
return;
|
||||||
|
|
||||||
val = I915_READ(DPLL_CTRL1);
|
val = I915_READ(DPLL_CTRL1);
|
||||||
|
|
||||||
WARN_ON((val & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
|
if (WARN_ON((val & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
|
||||||
DPLL_CTRL1_SSC(SKL_DPLL0) |
|
DPLL_CTRL1_SSC(SKL_DPLL0) |
|
||||||
DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
|
DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
|
||||||
DPLL_CTRL1_OVERRIDE(SKL_DPLL0));
|
DPLL_CTRL1_OVERRIDE(SKL_DPLL0)))
|
||||||
|
return;
|
||||||
|
|
||||||
switch (val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0)) {
|
switch (val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0)) {
|
||||||
case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, SKL_DPLL0):
|
case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, SKL_DPLL0):
|
||||||
@ -5569,7 +5570,6 @@ skl_dpll0_update(struct drm_i915_private *dev_priv)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
MISSING_CASE(val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
|
MISSING_CASE(val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
|
||||||
dev_priv->cdclk_pll.vco = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5769,18 +5769,11 @@ static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
|
|||||||
if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
|
if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
|
||||||
goto sanitize;
|
goto sanitize;
|
||||||
|
|
||||||
/* Is PLL enabled and locked ? */
|
|
||||||
if ((I915_READ(LCPLL1_CTL) & (LCPLL_PLL_ENABLE | LCPLL_PLL_LOCK)) !=
|
|
||||||
(LCPLL_PLL_ENABLE | LCPLL_PLL_LOCK))
|
|
||||||
goto sanitize;
|
|
||||||
|
|
||||||
if ((I915_READ(DPLL_CTRL1) & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
|
|
||||||
DPLL_CTRL1_SSC(SKL_DPLL0) |
|
|
||||||
DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
|
|
||||||
DPLL_CTRL1_OVERRIDE(SKL_DPLL0))
|
|
||||||
goto sanitize;
|
|
||||||
|
|
||||||
intel_update_cdclk(dev_priv->dev);
|
intel_update_cdclk(dev_priv->dev);
|
||||||
|
/* Is PLL enabled and locked ? */
|
||||||
|
if (dev_priv->cdclk_pll.vco == 0 ||
|
||||||
|
dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref)
|
||||||
|
goto sanitize;
|
||||||
|
|
||||||
/* DPLL okay; verify the cdclock
|
/* DPLL okay; verify the cdclock
|
||||||
*
|
*
|
||||||
@ -6681,14 +6674,14 @@ static void bxt_de_pll_update(struct drm_i915_private *dev_priv)
|
|||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
dev_priv->cdclk_pll.ref = 19200;
|
dev_priv->cdclk_pll.ref = 19200;
|
||||||
|
dev_priv->cdclk_pll.vco = 0;
|
||||||
|
|
||||||
val = I915_READ(BXT_DE_PLL_ENABLE);
|
val = I915_READ(BXT_DE_PLL_ENABLE);
|
||||||
if ((val & BXT_DE_PLL_PLL_ENABLE) == 0) {
|
if ((val & BXT_DE_PLL_PLL_ENABLE) == 0)
|
||||||
dev_priv->cdclk_pll.vco = 0;
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
WARN_ON((val & BXT_DE_PLL_LOCK) == 0);
|
if (WARN_ON((val & BXT_DE_PLL_LOCK) == 0))
|
||||||
|
return;
|
||||||
|
|
||||||
val = I915_READ(BXT_DE_PLL_CTL);
|
val = I915_READ(BXT_DE_PLL_CTL);
|
||||||
dev_priv->cdclk_pll.vco = (val & BXT_DE_PLL_RATIO_MASK) *
|
dev_priv->cdclk_pll.vco = (val & BXT_DE_PLL_RATIO_MASK) *
|
||||||
|
Loading…
Reference in New Issue
Block a user