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
next prev parent 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