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 <[email protected]>
Cc: Mika Kuoppala <[email protected]>
---
 drivers/gpu/drm/i915/gt/selftest_rps.c | 36 ++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c 
b/drivers/gpu/drm/i915/gt/selftest_rps.c
index e0a791eac752..f8c416ab8539 100644
--- a/drivers/gpu/drm/i915/gt/selftest_rps.c
+++ b/drivers/gpu/drm/i915/gt/selftest_rps.c
@@ -484,11 +484,29 @@ 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));
+                       }
+
                        err = -EINVAL;
                }
 
@@ -593,11 +611,29 @@ 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));
+                       }
+
                        err = -EINVAL;
                }
 
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to