public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: Re: [PATCH 40/44] drm/i915: Preserve current RPS frequency
Date: Thu, 16 Jun 2016 12:15:05 +0300	[thread overview]
Message-ID: <87inx9wl46.fsf@intel.com> (raw)
In-Reply-To: <1465993109-19523-41-git-send-email-chris@chris-wilson.co.uk>

Chris Wilson <chris@chris-wilson.co.uk> writes:

> Select idle frequency during initialisation, then reset the last known
> frequency when re-enabling. This allows us to preserve the user selected
> frequency across resets.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c | 34 +++++++++++++++++-----------------
>  1 file changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 658a75659657..98f0afa08332 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -5092,6 +5092,7 @@ static void gen6_init_rps_frequencies(struct drm_i915_private *dev_priv)
>  	}
>  
>  	dev_priv->rps.idle_freq = dev_priv->rps.min_freq;
> +	dev_priv->rps.cur_freq = dev_priv->rps.idle_freq;
>  
>  	/* Preserve min/max settings in case of re-init */
>  	if (dev_priv->rps.max_freq_softlimit == 0)
> @@ -5108,6 +5109,15 @@ static void gen6_init_rps_frequencies(struct drm_i915_private *dev_priv)
>  	}
>  }
>  
> +static void reset_rps(struct drm_i915_private *dev_priv,
> +		      void (*set)(struct drm_i915_private *, u8))
> +{
> +	u8 freq = dev_priv->rps.cur_freq; /* force a reset */
> +	dev_priv->rps.power = -1;

I didn't find a spot where rps.power == -1 would cause
a reset.

For me it seems that gen6_init_rps_frequencies only handles
the enums thus with -1 we never will update the rps.power.

-Mika

> +	dev_priv->rps.cur_freq = -1;
> +	set(dev_priv, freq);
> +}
> +
>  /* See the Gen9_GT_PM_Programming_Guide doc for the below */
>  static void gen9_enable_rps(struct drm_i915_private *dev_priv)
>  {
> @@ -5144,8 +5154,7 @@ static void gen9_enable_rps(struct drm_i915_private *dev_priv)
>  	/* Leaning on the below call to gen6_set_rps to program/setup the
>  	 * Up/Down EI & threshold registers, as well as the RP_CONTROL,
>  	 * RP_INTERRUPT_LIMITS & RPNSWREQ registers */
> -	dev_priv->rps.power = HIGH_POWER; /* force a reset */
> -	gen6_set_rps(dev_priv, dev_priv->rps.idle_freq);
> +	reset_rps(dev_priv, gen6_set_rps);
>  
>  	intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
>  }
> @@ -5291,8 +5300,7 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
>  
>  	/* 6: Ring frequency + overclocking (our driver does this later */
>  
> -	dev_priv->rps.power = HIGH_POWER; /* force a reset */
> -	gen6_set_rps(dev_priv, dev_priv->rps.idle_freq);
> +	reset_rps(dev_priv, gen6_set_rps);
>  
>  	intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
>  }
> @@ -5385,8 +5393,7 @@ static void gen6_enable_rps(struct drm_i915_private *dev_priv)
>  		dev_priv->rps.max_freq = pcu_mbox & 0xff;
>  	}
>  
> -	dev_priv->rps.power = HIGH_POWER; /* force a reset */
> -	gen6_set_rps(dev_priv, dev_priv->rps.idle_freq);
> +	reset_rps(dev_priv, gen6_set_rps);
>  
>  	rc6vids = 0;
>  	ret = sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS, &rc6vids);
> @@ -5750,6 +5757,7 @@ static void valleyview_init_gt_powersave(struct drm_i915_private *dev_priv)
>  			 dev_priv->rps.min_freq);
>  
>  	dev_priv->rps.idle_freq = dev_priv->rps.min_freq;
> +	dev_priv->rps.cur_freq = dev_priv->rps.idle_freq;
>  
>  	/* Preserve min/max settings in case of re-init */
>  	if (dev_priv->rps.max_freq_softlimit == 0)
> @@ -5814,6 +5822,7 @@ static void cherryview_init_gt_powersave(struct drm_i915_private *dev_priv)
>  		  "Odd GPU freq values\n");
>  
>  	dev_priv->rps.idle_freq = dev_priv->rps.min_freq;
> +	dev_priv->rps.cur_freq = dev_priv->rps.idle_freq;
>  
>  	/* Preserve min/max settings in case of re-init */
>  	if (dev_priv->rps.max_freq_softlimit == 0)
> @@ -5922,7 +5931,7 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv)
>  			 intel_gpu_freq(dev_priv, dev_priv->rps.idle_freq),
>  			 dev_priv->rps.idle_freq);
>  
> -	valleyview_set_rps(dev_priv, dev_priv->rps.idle_freq);
> +	reset_rps(dev_priv, valleyview_set_rps);
>  
>  	intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
>  }
> @@ -6002,16 +6011,7 @@ static void valleyview_enable_rps(struct drm_i915_private *dev_priv)
>  	DRM_DEBUG_DRIVER("GPLL enabled? %s\n", yesno(val & GPLLENABLE));
>  	DRM_DEBUG_DRIVER("GPU status: 0x%08x\n", val);
>  
> -	dev_priv->rps.cur_freq = (val >> 8) & 0xff;
> -	DRM_DEBUG_DRIVER("current GPU freq: %d MHz (%u)\n",
> -			 intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq),
> -			 dev_priv->rps.cur_freq);
> -
> -	DRM_DEBUG_DRIVER("setting GPU freq to %d MHz (%u)\n",
> -			 intel_gpu_freq(dev_priv, dev_priv->rps.idle_freq),
> -			 dev_priv->rps.idle_freq);
> -
> -	valleyview_set_rps(dev_priv, dev_priv->rps.idle_freq);
> +	reset_rps(dev_priv, valleyview_set_rps);
>  
>  	intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
>  }
> -- 
> 2.8.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-06-16  9:15 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-15 12:17 BAT bug 95634, take 4 Chris Wilson
2016-06-15 12:17 ` [PATCH 01/44] drm: Export drm_dev_init() for subclassing Chris Wilson
2016-06-15 12:17 ` [PATCH 02/44] drm: Add a callback from connector registering Chris Wilson
2016-06-17  7:41   ` Daniel Vetter
2016-06-15 12:17 ` [PATCH 03/44] drm: Make drm_connector_register() safe against multiple calls Chris Wilson
2016-06-15 12:17 ` [PATCH 04/44] drm: Automatically unregister the connector during cleanup Chris Wilson
2016-06-17  7:44   ` Daniel Vetter
2016-06-15 12:17 ` [PATCH 05/44] drm: Automatically register/unregister all connectors Chris Wilson
2016-06-15 12:17 ` [PATCH 06/44] drm/arc: Remove redundant calls to drm_connector_register_all() Chris Wilson
2016-06-15 12:17 ` [PATCH 07/44] drm/atmel-hlcdc: " Chris Wilson
2016-06-15 12:17 ` [PATCH 08/44] drm/hisilicon: " Chris Wilson
2016-06-15 12:17 ` [PATCH 09/44] drm/mediatek: " Chris Wilson
2016-06-15 12:17 ` [PATCH 10/44] drm/msm: " Chris Wilson
2016-06-15 12:17 ` [PATCH 11/44] drm/rcar-du: " Chris Wilson
2016-06-15 12:17 ` [PATCH 12/44] drm: Pass the drm_dp_aux->hw_mutex to i2c for its locking Chris Wilson
2016-06-15 12:17 ` [PATCH 13/44] drm: Minimally initialise drm_dp_aux Chris Wilson
2016-06-15 12:17 ` [PATCH 14/44] drm/i915: Perform async fbdev initialisation much later Chris Wilson
2016-06-15 12:18 ` [PATCH 15/44] drm/i915: Make panel/backlight safe to setup/cleanup multiple times Chris Wilson
2016-06-16  6:34   ` Jani Nikula
2016-06-16  9:00     ` Chris Wilson
2016-06-15 12:18 ` [PATCH 16/44] drm/i915: Move panel's backlight setup next to panel init Chris Wilson
2016-06-15 12:18 ` [PATCH 17/44] drm/i915: Move intel_connector->unregister to connector->early_unregister Chris Wilson
2016-06-15 12:18 ` [PATCH 18/44] drm/i915: Move backlight unregistration to connector unregistration Chris Wilson
2016-06-15 12:18 ` [PATCH 19/44] drm/i915: Move registration actions to connector->late_register Chris Wilson
2016-06-15 12:18 ` [PATCH 20/44] drm/i915/dp: Free the drm_dp_aux along with the encoder Chris Wilson
2016-06-15 12:18 ` [PATCH 21/44] drm/i915: Move backlight registration to connector registration Chris Wilson
2016-06-15 12:18 ` [PATCH 22/44] drm/i915: Move connector registration to driver registration Chris Wilson
2016-06-15 12:18 ` [PATCH 23/44] drm/i915: Register debugfs interface last Chris Wilson
2016-06-15 12:18 ` [PATCH 24/44] drm/i915: Demidlayer driver loading Chris Wilson
2016-06-15 12:18 ` [PATCH 25/44] drm/i915: Demidlayer driver unloading Chris Wilson
2016-06-15 12:18 ` [PATCH 26/44] drm/i915: Remove redundant drm_connector_register_all() Chris Wilson
2016-06-15 12:18 ` [PATCH 27/44] drm/i915: Start exploiting drm_device subclassing Chris Wilson
2016-06-15 12:18 ` [PATCH 28/44] drm/i915: Merge i915_dma.c into i915_drv.c Chris Wilson
2016-06-15 12:18 ` [PATCH 29/44] drm/i915: Remove user controllable DRM_ERROR for i915_getparam() Chris Wilson
2016-06-15 12:33   ` Tvrtko Ursulin
2016-06-15 12:18 ` [PATCH 30/44] drm/i915: Remove user controllable DRM_ERROR for intel_get_pipe_from_crtc_id() Chris Wilson
2016-06-15 12:34   ` Tvrtko Ursulin
2016-06-15 12:18 ` [PATCH 31/44] drm/i915: Split out the PCI driver interface to i915_pci.c Chris Wilson
2016-06-15 12:18 ` [PATCH 32/44] drm/i915: Move module init/exit " Chris Wilson
2016-07-12 10:45   ` Joonas Lahtinen
2016-06-15 12:18 ` [PATCH 33/44] drm/i915: Skip idling an idle engine Chris Wilson
2016-06-15 12:18 ` [PATCH 34/44] drm/i915: Move legacy kernel context pinning to intel_ringbuffer.c Chris Wilson
2016-06-15 12:18 ` [PATCH 35/44] drm/i915: Treat kernel context as initialised Chris Wilson
2016-06-16  8:20   ` Mika Kuoppala
2016-06-16 11:00     ` Chris Wilson
2016-06-15 12:18 ` [PATCH 36/44] drm/i915: Mark all default contexts as uninitialised after context loss Chris Wilson
2016-06-15 12:18 ` [PATCH 37/44] drm/i915: No need to wait for idle on L3 remap Chris Wilson
2016-06-15 12:18 ` [PATCH 38/44] drm/i915: Split idling from forcing context switch Chris Wilson
2016-06-16  8:51   ` Mika Kuoppala
2016-06-16 10:58     ` Chris Wilson
2016-06-15 12:18 ` [PATCH 39/44] drm/i915: Only switch to default context when evicting from GGTT Chris Wilson
2016-06-15 12:18 ` [PATCH 40/44] drm/i915: Preserve current RPS frequency Chris Wilson
2016-06-16  9:15   ` Mika Kuoppala [this message]
2016-06-16 10:56     ` Chris Wilson
2016-06-15 12:18 ` [PATCH 41/44] drm/i915: Remove superfluous powersave work flushing Chris Wilson
2016-06-21 15:15   ` Chris Wilson
2016-06-15 12:18 ` [PATCH 42/44] drm/i915: Defer enabling rc6 til after we submit the first batch/context Chris Wilson
2016-06-21 15:16   ` Chris Wilson
2016-06-15 12:18 ` [PATCH 43/44] drm/i915/fbdev: Limit the global async-domain synchronization Chris Wilson
2016-06-15 12:18 ` [PATCH 44/44] drm/i915/fbdev: Flush mode configuration before lastclose Chris Wilson
2016-06-15 16:09 ` ✗ Ro.CI.BAT: warning for series starting with [01/44] drm: Export drm_dev_init() for subclassing Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87inx9wl46.fsf@intel.com \
    --to=mika.kuoppala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox