* [PATCH v3] drm/i915: Debugfs disable RPS boost and idle
@ 2014-05-05 21:50 Daisy Sun
2014-05-06 5:51 ` Chris Wilson
2014-05-10 5:07 ` Deepak S
0 siblings, 2 replies; 4+ messages in thread
From: Daisy Sun @ 2014-05-05 21:50 UTC (permalink / raw)
To: intel-gfx
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.
Intention: when boost and idle are disabled, we have a clear vision
of turbo algorithm. It‘s very helpful to verify if the turbo
algorithm is working as expected.
Without debugfs hooks, the RPS boost or idle may kick in at
anytime and any circumstances.
V1->V2: Follow Daniel's comment to explain the intention.
V2->V3: Abandon flush_delayed work, abandon lock of rps.hw_lock
during get/set of rps.debugfs_disable_boost
Signed-off-by: Daisy Sun <daisy.sun@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 29 +++++++++++++++++++++++++++++
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/intel_pm.c | 8 ++++++--
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 1e83ae4..685f7e5 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3486,6 +3486,34 @@ 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;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ *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;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ DRM_DEBUG_DRIVER("%s RPS Boost-Idle mode\n",
+ val ? "Disable" : "Enable");
+
+ dev_priv->rps.debugfs_disable_boost = val;
+
+ 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 +3849,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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3] drm/i915: Debugfs disable RPS boost and idle
2014-05-05 21:50 [PATCH v3] drm/i915: Debugfs disable RPS boost and idle Daisy Sun
@ 2014-05-06 5:51 ` Chris Wilson
2014-05-07 1:50 ` Sun, Daisy
2014-05-10 5:07 ` Deepak S
1 sibling, 1 reply; 4+ messages in thread
From: Chris Wilson @ 2014-05-06 5:51 UTC (permalink / raw)
To: Daisy Sun; +Cc: intel-gfx
On Mon, May 05, 2014 at 02:50:27PM -0700, Daisy Sun 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.
>
> Intention: when boost and idle are disabled, we have a clear vision
> of turbo algorithm. It‘s very helpful to verify if the turbo
> algorithm is working as expected.
> Without debugfs hooks, the RPS boost or idle may kick in at
> anytime and any circumstances.
The algorithm is still not the same as you "intended". So can you not
tracepoints to give EI results for up/down signals and filter out the
noise?
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] drm/i915: Debugfs disable RPS boost and idle
2014-05-06 5:51 ` Chris Wilson
@ 2014-05-07 1:50 ` Sun, Daisy
0 siblings, 0 replies; 4+ messages in thread
From: Sun, Daisy @ 2014-05-07 1:50 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
"So can you not tracepoints to give EI results for up/down signals and
filter out the noise? ", Do you mean I don't need the debugfs at all?
For developer, he/she is able to trace anything including the point of
Turbo algorithm adjustment(+n/-n).
But as a black box, validation will not see the cause but only the result.
Boost / Idle function will set RP frequency to Max / Min, turbo
algorithm will +n / -n depends on our implementation.
My intention is to block the disturbance of Boost /Idle, then the RPS
frequency change can only cause bye Turbo algorithm.
- Daisy
On 5/5/2014 10:51 PM, Chris Wilson wrote:
> On Mon, May 05, 2014 at 02:50:27PM -0700, Daisy Sun 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.
>>
>> Intention: when boost and idle are disabled, we have a clear vision
>> of turbo algorithm. It‘s very helpful to verify if the turbo
>> algorithm is working as expected.
>> Without debugfs hooks, the RPS boost or idle may kick in at
>> anytime and any circumstances.
> The algorithm is still not the same as you "intended". So can you not
> tracepoints to give EI results for up/down signals and filter out the
> noise?
> -Chris
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] drm/i915: Debugfs disable RPS boost and idle
2014-05-05 21:50 [PATCH v3] drm/i915: Debugfs disable RPS boost and idle Daisy Sun
2014-05-06 5:51 ` Chris Wilson
@ 2014-05-10 5:07 ` Deepak S
1 sibling, 0 replies; 4+ messages in thread
From: Deepak S @ 2014-05-10 5:07 UTC (permalink / raw)
To: Daisy Sun, intel-gfx
On Tuesday 06 May 2014 03:20 AM, Daisy Sun 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.
>
> Intention: when boost and idle are disabled, we have a clear vision
> of turbo algorithm. It‘s very helpful to verify if the turbo
> algorithm is working as expected.
> Without debugfs hooks, the RPS boost or idle may kick in at
> anytime and any circumstances.
>
> V1->V2: Follow Daniel's comment to explain the intention.
> V2->V3: Abandon flush_delayed work, abandon lock of rps.hw_lock
> during get/set of rps.debugfs_disable_boost
>
> Signed-off-by: Daisy Sun <daisy.sun@intel.com>
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 29 +++++++++++++++++++++++++++++
> drivers/gpu/drm/i915/i915_drv.h | 1 +
> drivers/gpu/drm/i915/intel_pm.c | 8 ++++++--
> 3 files changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 1e83ae4..685f7e5 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3486,6 +3486,34 @@ 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;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> +
> + *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;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + int ret;
> +
> + DRM_DEBUG_DRIVER("%s RPS Boost-Idle mode\n",
> + val ? "Disable" : "Enable");
> +
> + dev_priv->rps.debugfs_disable_boost = val;
> +
> + 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 +3849,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) {
On VLV, when system is idle we wont get down threshold interrupts. So disabling this will not help you to test the algorithm. I think we need to retain gen6_rps_idle
> 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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-05-10 5:07 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-05 21:50 [PATCH v3] drm/i915: Debugfs disable RPS boost and idle Daisy Sun
2014-05-06 5:51 ` Chris Wilson
2014-05-07 1:50 ` Sun, Daisy
2014-05-10 5:07 ` Deepak S
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox