drm/i915/selftests: Show the full scaling curve on failure
If we detect that the RPS end points do not scale perfectly, take the time to measure all the in between values as well. We are aborting the test, so we might as well spend the available time gathering critical debug information instead. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200421124636.22554-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
74f103928d
commit
4ea6b1c456
|
@ -484,11 +484,31 @@ int live_rps_frequency_cs(void *arg)
|
|||
if (!scaled_within(max.freq * min.count,
|
||||
min.freq * max.count,
|
||||
2, 3)) {
|
||||
int f;
|
||||
|
||||
pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n",
|
||||
engine->name,
|
||||
max.freq * min.count,
|
||||
min.freq * max.count);
|
||||
show_pcu_config(rps);
|
||||
|
||||
for (f = min.freq + 1; f <= rps->max_freq; f++) {
|
||||
int act = f;
|
||||
u64 count;
|
||||
|
||||
count = measure_cs_frequency_at(rps, engine, &act);
|
||||
if (act < f)
|
||||
break;
|
||||
|
||||
pr_info("%s: %x:%uMHz: %lluKHz [%d%%]\n",
|
||||
engine->name,
|
||||
act, intel_gpu_freq(rps, act), count,
|
||||
(int)DIV64_U64_ROUND_CLOSEST(100 * min.freq * count,
|
||||
act * min.count));
|
||||
|
||||
f = act; /* may skip ahead [pcu granularity] */
|
||||
}
|
||||
|
||||
err = -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -593,11 +613,31 @@ int live_rps_frequency_srm(void *arg)
|
|||
if (!scaled_within(max.freq * min.count,
|
||||
min.freq * max.count,
|
||||
1, 2)) {
|
||||
int f;
|
||||
|
||||
pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n",
|
||||
engine->name,
|
||||
max.freq * min.count,
|
||||
min.freq * max.count);
|
||||
show_pcu_config(rps);
|
||||
|
||||
for (f = min.freq + 1; f <= rps->max_freq; f++) {
|
||||
int act = f;
|
||||
u64 count;
|
||||
|
||||
count = measure_frequency_at(rps, cntr, &act);
|
||||
if (act < f)
|
||||
break;
|
||||
|
||||
pr_info("%s: %x:%uMHz: %lluKHz [%d%%]\n",
|
||||
engine->name,
|
||||
act, intel_gpu_freq(rps, act), count,
|
||||
(int)DIV64_U64_ROUND_CLOSEST(100 * min.freq * count,
|
||||
act * min.count));
|
||||
|
||||
f = act; /* may skip ahead [pcu granularity] */
|
||||
}
|
||||
|
||||
err = -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue