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
