Report GPU throttle reasons when RPS tests fail to reach expected
frequencies or power levels.

Signed-off-by: Sk Anirban <[email protected]>
---
 drivers/gpu/drm/i915/gt/selftest_rps.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c 
b/drivers/gpu/drm/i915/gt/selftest_rps.c
index 73bc91c6ea07..01c671e00e61 100644
--- a/drivers/gpu/drm/i915/gt/selftest_rps.c
+++ b/drivers/gpu/drm/i915/gt/selftest_rps.c
@@ -1138,6 +1138,7 @@ int live_rps_power(void *arg)
        struct intel_engine_cs *engine;
        enum intel_engine_id id;
        struct igt_spinner spin;
+       u32 throttle;
        int err = 0;
 
        /*
@@ -1216,6 +1217,13 @@ int live_rps_power(void *arg)
                if (11 * min.power > 10 * max.power) {
                        pr_err("%s: did not conserve power when setting lower 
frequency!\n",
                               engine->name);
+
+                       throttle = intel_uncore_read(gt->uncore,
+                                                    
intel_gt_perf_limit_reasons_reg(gt));
+
+                       pr_warn("%s: GPU throttled with reasons 0x%08x\n",
+                               engine->name, throttle & 
GT0_PERF_LIMIT_REASONS_MASK);
+
                        err = -EINVAL;
                        break;
                }
@@ -1241,6 +1249,7 @@ int live_rps_dynamic(void *arg)
        struct intel_engine_cs *engine;
        enum intel_engine_id id;
        struct igt_spinner spin;
+       u32 throttle;
        int err = 0;
 
        /*
@@ -1299,6 +1308,14 @@ int live_rps_dynamic(void *arg)
                min.freq = wait_for_freq(rps, rps->min_freq, 2000);
                min.dt = ktime_sub(ktime_get(), min.dt);
 
+               if (max.freq != rps->max_freq) {
+                       throttle = intel_uncore_read(gt->uncore,
+                                                    
intel_gt_perf_limit_reasons_reg(gt));
+
+                       pr_warn("%s: GPU throttled with reasons 0x%08x\n",
+                               engine->name, throttle & 
GT0_PERF_LIMIT_REASONS_MASK);
+               }
+
                pr_info("%s: dynamically reclocked to %u:%uMHz while busy in 
%lluns, and %u:%uMHz while idle in %lluns\n",
                        engine->name,
                        max.freq, intel_gpu_freq(rps, max.freq),
-- 
2.43.0

Reply via email to