[Intel-gfx] [PATCH v6 3/3] drm/i915/selftests: use libpower to get power consumption
Riana Tauro
riana.tauro at intel.com
Wed Dec 7 05:17:47 UTC 2022
From: Tilak Tangudu <tilak.tangudu at intel.com>
use libpower library to verify power consumption values
in selftests.
v2: add per-gt hwmon support (Ashutosh)
v3: remove libpower changes (Ashutosh)
Signed-off-by: Tilak Tangudu <tilak.tangudu at intel.com>
Co-developed-by: Riana Tauro <riana.tauro at intel.com>
Signed-off-by: Riana Tauro <riana.tauro at intel.com>
Reviewed-by: Anshuman Gupta <anshuman.gupta at intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
---
drivers/gpu/drm/i915/gt/selftest_rc6.c | 10 +++++-----
drivers/gpu/drm/i915/gt/selftest_rps.c | 24 ++++++++++++------------
drivers/gpu/drm/i915/gt/selftest_slpc.c | 4 ++--
3 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/selftest_rc6.c b/drivers/gpu/drm/i915/gt/selftest_rc6.c
index 15b84c428f66..682f2fe67b3a 100644
--- a/drivers/gpu/drm/i915/gt/selftest_rc6.c
+++ b/drivers/gpu/drm/i915/gt/selftest_rc6.c
@@ -51,7 +51,7 @@ int live_rc6_manual(void *arg)
if (IS_VALLEYVIEW(gt->i915) || IS_CHERRYVIEW(gt->i915))
return 0;
- has_power = libpower_supported(gt->i915);
+ has_power = libpower_supported(gt);
wakeref = intel_runtime_pm_get(gt->uncore->rpm);
/* Force RC6 off for starters */
@@ -61,9 +61,9 @@ int live_rc6_manual(void *arg)
res[0] = rc6_residency(rc6);
dt = ktime_get();
- rc0_power = libpower_get_energy_uJ();
+ rc0_power = libpower_get_energy_uJ(gt);
msleep(250);
- rc0_power = libpower_get_energy_uJ() - rc0_power;
+ rc0_power = libpower_get_energy_uJ(gt) - rc0_power;
dt = ktime_sub(ktime_get(), dt);
res[1] = rc6_residency(rc6);
if ((res[1] - res[0]) >> 10) {
@@ -89,9 +89,9 @@ int live_rc6_manual(void *arg)
res[0] = rc6_residency(rc6);
intel_uncore_forcewake_flush(rc6_to_uncore(rc6), FORCEWAKE_ALL);
dt = ktime_get();
- rc6_power = libpower_get_energy_uJ();
+ rc6_power = libpower_get_energy_uJ(gt);
msleep(100);
- rc6_power = libpower_get_energy_uJ() - rc6_power;
+ rc6_power = libpower_get_energy_uJ(gt) - rc6_power;
dt = ktime_sub(ktime_get(), dt);
res[1] = rc6_residency(rc6);
if (res[1] == res[0]) {
diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c b/drivers/gpu/drm/i915/gt/selftest_rps.c
index b8b0b0c7617e..d5e9f57cca55 100644
--- a/drivers/gpu/drm/i915/gt/selftest_rps.c
+++ b/drivers/gpu/drm/i915/gt/selftest_rps.c
@@ -1090,38 +1090,38 @@ int live_rps_interrupt(void *arg)
return err;
}
-static u64 __measure_power(int duration_ms)
+static u64 __measure_power(struct intel_gt *gt, int duration_ms)
{
u64 dE, dt;
dt = ktime_get();
- dE = libpower_get_energy_uJ();
+ dE = libpower_get_energy_uJ(gt);
usleep_range(1000 * duration_ms, 2000 * duration_ms);
- dE = libpower_get_energy_uJ() - dE;
+ dE = libpower_get_energy_uJ(gt) - dE;
dt = ktime_get() - dt;
return div64_u64(1000 * 1000 * dE, dt);
}
-static u64 measure_power(struct intel_rps *rps, int *freq)
+static u64 measure_power(struct intel_gt *gt, int *freq)
{
u64 x[5];
int i;
for (i = 0; i < 5; i++)
- x[i] = __measure_power(5);
+ x[i] = __measure_power(gt, 5);
- *freq = (*freq + intel_rps_read_actual_frequency(rps)) / 2;
+ *freq = (*freq + intel_rps_read_actual_frequency(>->rps)) / 2;
/* A simple triangle filter for better result stability */
sort(x, 5, sizeof(*x), cmp_u64, NULL);
return div_u64(x[1] + 2 * x[2] + x[3], 4);
}
-static u64 measure_power_at(struct intel_rps *rps, int *freq)
+static u64 measure_power_at(struct intel_gt *gt, int *freq)
{
- *freq = rps_set_check(rps, *freq);
- return measure_power(rps, freq);
+ *freq = rps_set_check(>->rps, *freq);
+ return measure_power(gt, freq);
}
int live_rps_power(void *arg)
@@ -1143,7 +1143,7 @@ int live_rps_power(void *arg)
if (!intel_rps_is_enabled(rps) || GRAPHICS_VER(gt->i915) < 6)
return 0;
- if (!libpower_supported(gt->i915))
+ if (!libpower_supported(gt))
return 0;
if (igt_spinner_init(&spin, gt))
@@ -1187,10 +1187,10 @@ int live_rps_power(void *arg)
}
max.freq = rps->max_freq;
- max.power = measure_power_at(rps, &max.freq);
+ max.power = measure_power_at(gt, &max.freq);
min.freq = rps->min_freq;
- min.power = measure_power_at(rps, &min.freq);
+ min.power = measure_power_at(gt, &min.freq);
igt_spinner_end(&spin);
st_engine_heartbeat_enable(engine);
diff --git a/drivers/gpu/drm/i915/gt/selftest_slpc.c b/drivers/gpu/drm/i915/gt/selftest_slpc.c
index fc1cdda82ec6..20b9e05d3d16 100644
--- a/drivers/gpu/drm/i915/gt/selftest_slpc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_slpc.c
@@ -78,7 +78,7 @@ static u64 measure_power_at_freq(struct intel_gt *gt, int *freq, u64 *power)
if (err)
return err;
*freq = intel_rps_read_actual_frequency(>->rps);
- *power = measure_power(>->rps, freq);
+ *power = measure_power(gt, freq);
return err;
}
@@ -169,7 +169,7 @@ static int slpc_power(struct intel_gt *gt, struct intel_engine_cs *engine)
* actually saves power. Let's see if our RAPL measurement supports
* that theory.
*/
- if (!libpower_supported(gt->i915))
+ if (!libpower_supported(gt))
return 0;
min.freq = slpc->min_freq;
--
2.25.1
More information about the Intel-gfx
mailing list