aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2014-04-14 13:24:41 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-05 03:09:11 -0400
commit4e80519e31b76cb6bd9d62eee95d6555bce1bc10 (patch)
tree9895cba1b877de49d57f380b60ac2f456d170675
parent9486db611ca69ea67b6f4285fbb8afeb34585571 (diff)
drm/i915: vlv: setup RPS min/max frequencies once during init time
When enabling runtime PM on VLV, GT power save enabling becomes relatively frequent, so optimize it a bit. Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c66
1 files changed, 41 insertions, 25 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index ee6c568bcd14..2b200434897d 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3701,6 +3701,45 @@ static void valleyview_cleanup_pctx(struct drm_device *dev)
3701 dev_priv->vlv_pctx = NULL; 3701 dev_priv->vlv_pctx = NULL;
3702} 3702}
3703 3703
3704static void valleyview_init_gt_powersave(struct drm_device *dev)
3705{
3706 struct drm_i915_private *dev_priv = dev->dev_private;
3707
3708 valleyview_setup_pctx(dev);
3709
3710 mutex_lock(&dev_priv->rps.hw_lock);
3711
3712 dev_priv->rps.max_freq = valleyview_rps_max_freq(dev_priv);
3713 dev_priv->rps.rp0_freq = dev_priv->rps.max_freq;
3714 DRM_DEBUG_DRIVER("max GPU freq: %d MHz (%u)\n",
3715 vlv_gpu_freq(dev_priv, dev_priv->rps.max_freq),
3716 dev_priv->rps.max_freq);
3717
3718 dev_priv->rps.efficient_freq = valleyview_rps_rpe_freq(dev_priv);
3719 DRM_DEBUG_DRIVER("RPe GPU freq: %d MHz (%u)\n",
3720 vlv_gpu_freq(dev_priv, dev_priv->rps.efficient_freq),
3721 dev_priv->rps.efficient_freq);
3722
3723 dev_priv->rps.min_freq = valleyview_rps_min_freq(dev_priv);
3724 DRM_DEBUG_DRIVER("min GPU freq: %d MHz (%u)\n",
3725 vlv_gpu_freq(dev_priv, dev_priv->rps.min_freq),
3726 dev_priv->rps.min_freq);
3727
3728 /* Preserve min/max settings in case of re-init */
3729 if (dev_priv->rps.max_freq_softlimit == 0)
3730 dev_priv->rps.max_freq_softlimit = dev_priv->rps.max_freq;
3731
3732 if (dev_priv->rps.min_freq_softlimit == 0)
3733 dev_priv->rps.min_freq_softlimit = dev_priv->rps.min_freq;
3734
3735 mutex_unlock(&dev_priv->rps.hw_lock);
3736}
3737
3738static void valleyview_cleanup_gt_powersave(struct drm_device *dev)
3739{
3740 valleyview_cleanup_pctx(dev);
3741}
3742
3704static void valleyview_enable_rps(struct drm_device *dev) 3743static void valleyview_enable_rps(struct drm_device *dev)
3705{ 3744{
3706 struct drm_i915_private *dev_priv = dev->dev_private; 3745 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -3767,29 +3806,6 @@ static void valleyview_enable_rps(struct drm_device *dev)
3767 vlv_gpu_freq(dev_priv, dev_priv->rps.cur_freq), 3806 vlv_gpu_freq(dev_priv, dev_priv->rps.cur_freq),
3768 dev_priv->rps.cur_freq); 3807 dev_priv->rps.cur_freq);
3769 3808
3770 dev_priv->rps.max_freq = valleyview_rps_max_freq(dev_priv);
3771 dev_priv->rps.rp0_freq = dev_priv->rps.max_freq;
3772 DRM_DEBUG_DRIVER("max GPU freq: %d MHz (%u)\n",
3773 vlv_gpu_freq(dev_priv, dev_priv->rps.max_freq),
3774 dev_priv->rps.max_freq);
3775
3776 dev_priv->rps.efficient_freq = valleyview_rps_rpe_freq(dev_priv);
3777 DRM_DEBUG_DRIVER("RPe GPU freq: %d MHz (%u)\n",
3778 vlv_gpu_freq(dev_priv, dev_priv->rps.efficient_freq),
3779 dev_priv->rps.efficient_freq);
3780
3781 dev_priv->rps.min_freq = valleyview_rps_min_freq(dev_priv);
3782 DRM_DEBUG_DRIVER("min GPU freq: %d MHz (%u)\n",
3783 vlv_gpu_freq(dev_priv, dev_priv->rps.min_freq),
3784 dev_priv->rps.min_freq);
3785
3786 /* Preserve min/max settings in case of re-init */
3787 if (dev_priv->rps.max_freq_softlimit == 0)
3788 dev_priv->rps.max_freq_softlimit = dev_priv->rps.max_freq;
3789
3790 if (dev_priv->rps.min_freq_softlimit == 0)
3791 dev_priv->rps.min_freq_softlimit = dev_priv->rps.min_freq;
3792
3793 DRM_DEBUG_DRIVER("setting GPU freq to %d MHz (%u)\n", 3809 DRM_DEBUG_DRIVER("setting GPU freq to %d MHz (%u)\n",
3794 vlv_gpu_freq(dev_priv, dev_priv->rps.efficient_freq), 3810 vlv_gpu_freq(dev_priv, dev_priv->rps.efficient_freq),
3795 dev_priv->rps.efficient_freq); 3811 dev_priv->rps.efficient_freq);
@@ -4533,13 +4549,13 @@ void intel_init_gt_powersave(struct drm_device *dev)
4533 i915.enable_rc6 = sanitize_rc6_option(dev, i915.enable_rc6); 4549 i915.enable_rc6 = sanitize_rc6_option(dev, i915.enable_rc6);
4534 4550
4535 if (IS_VALLEYVIEW(dev)) 4551 if (IS_VALLEYVIEW(dev))
4536 valleyview_setup_pctx(dev); 4552 valleyview_init_gt_powersave(dev);
4537} 4553}
4538 4554
4539void intel_cleanup_gt_powersave(struct drm_device *dev) 4555void intel_cleanup_gt_powersave(struct drm_device *dev)
4540{ 4556{
4541 if (IS_VALLEYVIEW(dev)) 4557 if (IS_VALLEYVIEW(dev))
4542 valleyview_cleanup_pctx(dev); 4558 valleyview_cleanup_gt_powersave(dev);
4543} 4559}
4544 4560
4545void intel_disable_gt_powersave(struct drm_device *dev) 4561void intel_disable_gt_powersave(struct drm_device *dev)