[Intel-gfx] [PATCH] drm/i915: Debugfs disable RPS boost and idle

Daniel Vetter daniel at ffwll.ch
Fri Apr 25 19:41:41 CEST 2014


On Fri, Apr 25, 2014 at 7:29 PM, Daisy Sun <daisy.sun at intel.com> wrote:
> RP frequency request is affected by 2 modules: normal turbo
> algorithm and RPS boost algorithm. By adding RPS boost algorithm
> to the mix, the final frequency becomes relatively unpredictable.
> Add a switch to enable/disable RPS boost functionality. When
> disabled, RP frequency will follow the normal turbo algorithm only

This only really describes what the patch does, not why the rps boost
is a problem and why exactly we need to disable it. If you want to set
a fixed frequency then we have interfaces in sysfs for that, if the
booster does something stupid then we need to fix that.
-Daniel

>
> Issue: VIZ-3801
> Signed-off-by: Daisy Sun <daisy.sun at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 40 +++++++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/i915/i915_drv.h     |  1 +
>  drivers/gpu/drm/i915/intel_pm.c     |  8 ++++++--
>  3 files changed, 47 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 1e83ae4..2077bbd 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3486,6 +3486,45 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_drop_caches_fops,
>                         i915_drop_caches_get, i915_drop_caches_set,
>                         "0x%08llx\n");
>
> +static int i915_rps_disable_boost_get(void *data, u64 *val)
> +{
> +       struct drm_device *dev = data;
> +       drm_i915_private *dev_priv = dev->dev_private;
> +
> +       if (INTEL_INFO(dev)->gen < 6)
> +               return -ENODEV;
> +
> +       *val = dev_priv->rps.debugfs_disable_boost;
> +
> +       return 0;
> +}
> +
> +static int i915_rps_disable_boost_set(void *data, u64 val)
> +{
> +       struct drm_device *dev = data;
> +       drm_i915_private *dev_priv = dev->dev_private;
> +       int ret;
> +
> +       flush_delayed_work(&dev_priv->rps.delayed_resume_work);
> +
> +       DRM_DEBUG_DRIVER("Setting RPS disable Boost-Idle mode to %s\n",
> +                                val ? "on" : "off");
> +
> +       ret = mutex_lock_interruptible(&dev_priv->rps.hw_lock);
> +       if (ret)
> +               return ret;
> +
> +       dev_priv->rps.debugfs_disable_boost = val;
> +
> +       mutex_unlock(&dev_priv->rps.hw_lock);
> +
> +       return 0;
> +}
> +
> +DEFINE_SIMPLE_ATTRIBUTE(i915_rps_disable_boost_fops,
> +               i915_rps_disable_boost_get, i915_rps_disable_boost_set,
> +                       "%llu\n");
> +
>  static int
>  i915_max_freq_get(void *data, u64 *val)
>  {
> @@ -3821,6 +3860,7 @@ static const struct i915_debugfs_files {
>         {"i915_wedged", &i915_wedged_fops},
>         {"i915_max_freq", &i915_max_freq_fops},
>         {"i915_min_freq", &i915_min_freq_fops},
> +       {"i915_rps_disable_boost", &i915_rps_disable_boost_fops},
>         {"i915_cache_sharing", &i915_cache_sharing_fops},
>         {"i915_ring_stop", &i915_ring_stop_fops},
>         {"i915_ring_missed_irq", &i915_ring_missed_irq_fops},
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 272aa7a..9c427da 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -847,6 +847,7 @@ struct intel_gen6_power_mgmt {
>         int last_adj;
>         enum { LOW_POWER, BETWEEN, HIGH_POWER } power;
>
> +       bool debugfs_disable_boost;
>         bool enabled;
>         struct delayed_work delayed_resume_work;
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 75c1c76..6acac14 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3163,7 +3163,9 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
>         struct drm_device *dev = dev_priv->dev;
>
>         mutex_lock(&dev_priv->rps.hw_lock);
> -       if (dev_priv->rps.enabled) {
> +
> +       if (dev_priv->rps.enabled
> +               && !dev_priv->rps.debugfs_disable_boost) {
>                 if (IS_VALLEYVIEW(dev))
>                         vlv_set_rps_idle(dev_priv);
>                 else
> @@ -3178,7 +3180,9 @@ void gen6_rps_boost(struct drm_i915_private *dev_priv)
>         struct drm_device *dev = dev_priv->dev;
>
>         mutex_lock(&dev_priv->rps.hw_lock);
> -       if (dev_priv->rps.enabled) {
> +
> +       if (dev_priv->rps.enabled
> +               && !dev_priv->rps.debugfs_disable_boost) {
>                 if (IS_VALLEYVIEW(dev))
>                         valleyview_set_rps(dev_priv->dev, dev_priv->rps.max_freq_softlimit);
>                 else
> --
> 1.9.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch



More information about the Intel-gfx mailing list