Move towards VLV/CHV clock interfaces that handle sideband get/put inside them instead of at the caller.
We'll need to move the calls outside of existing get/put. Suggested-by: Ville Syrjälä <ville.syrj...@linux.intel.com> Signed-off-by: Jani Nikula <jani.nik...@intel.com> --- drivers/gpu/drm/i915/display/intel_cdclk.c | 3 ++- drivers/gpu/drm/i915/display/intel_display.c | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c index 9725eebe5706..c54c7fd93f97 100644 --- a/drivers/gpu/drm/i915/display/intel_cdclk.c +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c @@ -608,9 +608,10 @@ static void vlv_get_cdclk(struct intel_display *display, { u32 val; + cdclk_config->vco = vlv_get_hpll_vco(display->drm); + vlv_iosf_sb_get(display->drm, BIT(VLV_IOSF_SB_CCK) | BIT(VLV_IOSF_SB_PUNIT)); - cdclk_config->vco = vlv_get_hpll_vco(display->drm); cdclk_config->cdclk = vlv_get_cck_clock(display->drm, "cdclk", CCK_DISPLAY_CLOCK_CONTROL, cdclk_config->vco); diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 5dca7f96b425..f5208583235d 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -146,10 +146,14 @@ int vlv_get_hpll_vco(struct drm_device *drm) { int hpll_freq, vco_freq[] = { 800, 1600, 2000, 2400 }; + vlv_cck_get(drm); + /* Obtain SKU information */ hpll_freq = vlv_cck_read(drm, CCK_FUSE_REG) & CCK_FUSE_HPLL_FREQ_MASK; + vlv_cck_put(drm); + return vco_freq[hpll_freq] * 1000; } @@ -175,11 +179,11 @@ int vlv_get_cck_clock_hpll(struct drm_device *drm, struct drm_i915_private *dev_priv = to_i915(drm); int hpll; - vlv_cck_get(drm); - if (dev_priv->hpll_freq == 0) dev_priv->hpll_freq = vlv_get_hpll_vco(drm); + vlv_cck_get(drm); + hpll = vlv_get_cck_clock(drm, name, reg, dev_priv->hpll_freq); vlv_cck_put(drm); -- 2.47.3