On Sun, Aug 14, 2016 at 02:28:56PM +0100, Chris Wilson wrote: > For convenience when debugging user issues show the autotuning > RPS parameters in debugfs/i915_rps_boost_info. > > v2: Refine the presentation > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: fritsch@xxxxxxx Looks good to me (well, it doesn't, I hate having things on the same line as the case statement, but that's a personal opinion), compiles and works as it should. Reviewed-by: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 43 +++++++++++++++++++++++++++++++++++-- > 1 file changed, 41 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index c461072da142..8d302906d768 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -2441,6 +2441,16 @@ static int count_irq_waiters(struct drm_i915_private *i915) > return count; > } > > +static const char *rps_power_to_str(int power) > +{ > + switch (power) { > + default: return "unknown"; > + case LOW_POWER: return "low power"; > + case BETWEEN: return "mixed"; > + case HIGH_POWER: return "high power"; > + } > +} > + > static int i915_rps_boost_info(struct seq_file *m, void *data) > { > struct drm_info_node *node = m->private; > @@ -2452,12 +2462,17 @@ static int i915_rps_boost_info(struct seq_file *m, void *data) > seq_printf(m, "GPU busy? %s [%x]\n", > yesno(dev_priv->gt.awake), dev_priv->gt.active_engines); > seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv)); > - seq_printf(m, "Frequency requested %d; min hard:%d, soft:%d; max soft:%d, hard:%d\n", > - intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq), > + seq_printf(m, "Frequency requested %d\n", > + intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq)); > + seq_printf(m, " min hard:%d, soft:%d; max soft:%d, hard:%d\n", > intel_gpu_freq(dev_priv, dev_priv->rps.min_freq), > intel_gpu_freq(dev_priv, dev_priv->rps.min_freq_softlimit), > intel_gpu_freq(dev_priv, dev_priv->rps.max_freq_softlimit), > intel_gpu_freq(dev_priv, dev_priv->rps.max_freq)); > + seq_printf(m, " idle:%d, efficient:%d, boost:%d\n", > + intel_gpu_freq(dev_priv, dev_priv->rps.idle_freq), > + intel_gpu_freq(dev_priv, dev_priv->rps.efficient_freq), > + intel_gpu_freq(dev_priv, dev_priv->rps.boost_freq)); > > mutex_lock(&dev->filelist_mutex); > spin_lock(&dev_priv->rps.client_lock); > @@ -2478,6 +2493,30 @@ static int i915_rps_boost_info(struct seq_file *m, void *data) > spin_unlock(&dev_priv->rps.client_lock); > mutex_unlock(&dev->filelist_mutex); > > + if (INTEL_GEN(dev_priv) >= 6 && > + dev_priv->rps.enabled && > + dev_priv->gt.active_engines) { > + u32 rpupei, rpcurup; > + u32 rpdownei, rpcurdown; > + > + intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); > + rpupei = I915_READ_FW(GEN6_RP_CUR_UP_EI) & GEN6_CURICONT_MASK; > + rpcurup = I915_READ_FW(GEN6_RP_CUR_UP) & GEN6_CURBSYTAVG_MASK; > + rpdownei = I915_READ_FW(GEN6_RP_CUR_DOWN_EI) & GEN6_CURIAVG_MASK; > + rpcurdown = I915_READ_FW(GEN6_RP_CUR_DOWN) & GEN6_CURBSYTAVG_MASK; > + intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); > + > + seq_printf(m, "\nRPS Autotuning (current \"%s\" window):\n", > + rps_power_to_str(dev_priv->rps.power)); > + seq_printf(m, " Avg. up: %d%% [above threshold? %d%%]\n", > + 100*rpcurup/rpupei, > + dev_priv->rps.up_threshold); > + seq_printf(m, " Avg. down: %d%% [below threshold? %d%%]\n", > + 100*rpcurdown/rpdownei, > + dev_priv->rps.down_threshold); > + } else > + seq_printf(m, "\nRPS Autotuning inactive\n"); > + > return 0; > } > > -- > 2.8.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx