aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_display.c33
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h1
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c2
3 files changed, 14 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3feaaba3616d..310218afe9c9 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4485,7 +4485,7 @@ static void valleyview_set_cdclk(struct drm_device *dev, int cdclk)
4485 struct drm_i915_private *dev_priv = dev->dev_private; 4485 struct drm_i915_private *dev_priv = dev->dev_private;
4486 u32 val, cmd; 4486 u32 val, cmd;
4487 4487
4488 WARN_ON(valleyview_cur_cdclk(dev_priv) != dev_priv->vlv_cdclk_freq); 4488 WARN_ON(dev_priv->display.get_display_clock_speed(dev) != dev_priv->vlv_cdclk_freq);
4489 dev_priv->vlv_cdclk_freq = cdclk; 4489 dev_priv->vlv_cdclk_freq = cdclk;
4490 4490
4491 if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */ 4491 if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */
@@ -4542,24 +4542,6 @@ static void valleyview_set_cdclk(struct drm_device *dev, int cdclk)
4542 intel_i2c_reset(dev); 4542 intel_i2c_reset(dev);
4543} 4543}
4544 4544
4545int valleyview_cur_cdclk(struct drm_i915_private *dev_priv)
4546{
4547 int cur_cdclk, vco;
4548 int divider;
4549
4550 vco = valleyview_get_vco(dev_priv);
4551
4552 mutex_lock(&dev_priv->dpio_lock);
4553 divider = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
4554 mutex_unlock(&dev_priv->dpio_lock);
4555
4556 divider &= DISPLAY_FREQUENCY_VALUES;
4557
4558 cur_cdclk = DIV_ROUND_CLOSEST(vco << 1, divider + 1);
4559
4560 return cur_cdclk;
4561}
4562
4563static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv, 4545static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv,
4564 int max_pixclk) 4546 int max_pixclk)
4565{ 4547{
@@ -5269,7 +5251,18 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
5269 5251
5270static int valleyview_get_display_clock_speed(struct drm_device *dev) 5252static int valleyview_get_display_clock_speed(struct drm_device *dev)
5271{ 5253{
5272 return 400000; /* FIXME */ 5254 struct drm_i915_private *dev_priv = dev->dev_private;
5255 int vco = valleyview_get_vco(dev_priv);
5256 u32 val;
5257 int divider;
5258
5259 mutex_lock(&dev_priv->dpio_lock);
5260 val = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
5261 mutex_unlock(&dev_priv->dpio_lock);
5262
5263 divider = val & DISPLAY_FREQUENCY_VALUES;
5264
5265 return DIV_ROUND_CLOSEST(vco << 1, divider + 1);
5273} 5266}
5274 5267
5275static int i945_get_display_clock_speed(struct drm_device *dev) 5268static int i945_get_display_clock_speed(struct drm_device *dev)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 5f7c7bd94d90..056fca96b141 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -722,7 +722,6 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
722const char *intel_output_name(int output); 722const char *intel_output_name(int output);
723bool intel_has_pending_fb_unpin(struct drm_device *dev); 723bool intel_has_pending_fb_unpin(struct drm_device *dev);
724int intel_pch_rawclk(struct drm_device *dev); 724int intel_pch_rawclk(struct drm_device *dev);
725int valleyview_cur_cdclk(struct drm_i915_private *dev_priv);
726void intel_mark_busy(struct drm_device *dev); 725void intel_mark_busy(struct drm_device *dev);
727void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj, 726void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
728 struct intel_engine_cs *ring); 727 struct intel_engine_cs *ring);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index b907ee6f2592..146101c94769 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -5595,7 +5595,7 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
5595 } 5595 }
5596 DRM_DEBUG_DRIVER("DDR speed: %d MHz", dev_priv->mem_freq); 5596 DRM_DEBUG_DRIVER("DDR speed: %d MHz", dev_priv->mem_freq);
5597 5597
5598 dev_priv->vlv_cdclk_freq = valleyview_cur_cdclk(dev_priv); 5598 dev_priv->vlv_cdclk_freq = dev_priv->display.get_display_clock_speed(dev);
5599 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz", 5599 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz",
5600 dev_priv->vlv_cdclk_freq); 5600 dev_priv->vlv_cdclk_freq);
5601 5601