Commit 4ea6b1c4 authored by Chris Wilson's avatar Chris Wilson

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200421124636.22554-1-chris@chris-wilson.co.uk
parent 74f10392
...@@ -484,11 +484,31 @@ int live_rps_frequency_cs(void *arg) ...@@ -484,11 +484,31 @@ int live_rps_frequency_cs(void *arg)
if (!scaled_within(max.freq * min.count, if (!scaled_within(max.freq * min.count,
min.freq * max.count, min.freq * max.count,
2, 3)) { 2, 3)) {
int f;
pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n", pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n",
engine->name, engine->name,
max.freq * min.count, max.freq * min.count,
min.freq * max.count); min.freq * max.count);
show_pcu_config(rps); 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; err = -EINVAL;
} }
...@@ -593,11 +613,31 @@ int live_rps_frequency_srm(void *arg) ...@@ -593,11 +613,31 @@ int live_rps_frequency_srm(void *arg)
if (!scaled_within(max.freq * min.count, if (!scaled_within(max.freq * min.count,
min.freq * max.count, min.freq * max.count,
1, 2)) { 1, 2)) {
int f;
pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n", pr_err("%s: CS did not scale with frequency! scaled min:%llu, max:%llu\n",
engine->name, engine->name,
max.freq * min.count, max.freq * min.count,
min.freq * max.count); min.freq * max.count);
show_pcu_config(rps); 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; err = -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment