mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-12 02:16:17 +00:00
test/pm_rps: use igt logging
Cc: Jeff McGee <jeff.mcgee@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
eebdf7f920
commit
46ec3ef1f8
112
tests/pm_rps.c
112
tests/pm_rps.c
@ -40,8 +40,6 @@
|
|||||||
#include "intel_batchbuffer.h"
|
#include "intel_batchbuffer.h"
|
||||||
#include "igt_debugfs.h"
|
#include "igt_debugfs.h"
|
||||||
|
|
||||||
static bool verbose = false;
|
|
||||||
|
|
||||||
static int drm_fd;
|
static int drm_fd;
|
||||||
|
|
||||||
static const char sysfs_base_path[] = "/sys/class/drm/card%d/gt_%s_freq_mhz";
|
static const char sysfs_base_path[] = "/sys/class/drm/card%d/gt_%s_freq_mhz";
|
||||||
@ -133,18 +131,16 @@ static void matchit(const int *freqs1, const int *freqs2)
|
|||||||
igt_assert(freqs1[RPn] == freqs2[RPn]);
|
igt_assert(freqs1[RPn] == freqs2[RPn]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dumpit(const int *freqs)
|
static void dump(const int *freqs)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf("gt freq (MHz):");
|
igt_debug("gt freq (MHz):");
|
||||||
for (i = 0; i < NUMFREQ; i++)
|
for (i = 0; i < NUMFREQ; i++)
|
||||||
printf(" %s=%d", stuff[i].name, freqs[i]);
|
igt_debug(" %s=%d", stuff[i].name, freqs[i]);
|
||||||
|
|
||||||
printf("\n");
|
igt_debug("\n");
|
||||||
}
|
}
|
||||||
#define dump(x) if (verbose) dumpit(x)
|
|
||||||
#define log(...) if (verbose) printf(__VA_ARGS__)
|
|
||||||
|
|
||||||
enum load {
|
enum load {
|
||||||
LOW,
|
LOW,
|
||||||
@ -229,7 +225,7 @@ static void load_helper_run(enum load load)
|
|||||||
drm_intel_bo_map(lh.target_buffer, 0);
|
drm_intel_bo_map(lh.target_buffer, 0);
|
||||||
drm_intel_bo_unmap(lh.target_buffer);
|
drm_intel_bo_unmap(lh.target_buffer);
|
||||||
|
|
||||||
log("load helper sent %u dword writes\n", val);
|
igt_debug("load helper sent %u dword writes\n", val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,27 +258,27 @@ static void load_helper_init(void)
|
|||||||
/* MI_STORE_DATA can only use GTT address on gen4+/g33 and needs
|
/* MI_STORE_DATA can only use GTT address on gen4+/g33 and needs
|
||||||
* snoopable mem on pre-gen6. */
|
* snoopable mem on pre-gen6. */
|
||||||
if (intel_gen(lh.devid) < 6) {
|
if (intel_gen(lh.devid) < 6) {
|
||||||
log("load helper init failed: pre-gen6 not supported\n");
|
igt_debug("load helper init failed: pre-gen6 not supported\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lh.bufmgr = drm_intel_bufmgr_gem_init(drm_fd, 4096);
|
lh.bufmgr = drm_intel_bufmgr_gem_init(drm_fd, 4096);
|
||||||
if (!lh.bufmgr) {
|
if (!lh.bufmgr) {
|
||||||
log("load helper init failed: buffer manager init\n");
|
igt_debug("load helper init failed: buffer manager init\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
drm_intel_bufmgr_gem_enable_reuse(lh.bufmgr);
|
drm_intel_bufmgr_gem_enable_reuse(lh.bufmgr);
|
||||||
|
|
||||||
lh.batch = intel_batchbuffer_alloc(lh.bufmgr, lh.devid);
|
lh.batch = intel_batchbuffer_alloc(lh.bufmgr, lh.devid);
|
||||||
if (!lh.batch) {
|
if (!lh.batch) {
|
||||||
log("load helper init failed: batch buffer alloc\n");
|
igt_debug("load helper init failed: batch buffer alloc\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lh.target_buffer = drm_intel_bo_alloc(lh.bufmgr, "target bo",
|
lh.target_buffer = drm_intel_bo_alloc(lh.bufmgr, "target bo",
|
||||||
4096, 4096);
|
4096, 4096);
|
||||||
if (!lh.target_buffer) {
|
if (!lh.target_buffer) {
|
||||||
log("load helper init failed: target buffer alloc\n");
|
igt_debug("load helper init failed: target buffer alloc\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +308,7 @@ static void stop_rings(void)
|
|||||||
fd = igt_debugfs_open(&dfs, "i915_ring_stop", O_WRONLY);
|
fd = igt_debugfs_open(&dfs, "i915_ring_stop", O_WRONLY);
|
||||||
igt_assert(fd >= 0);
|
igt_assert(fd >= 0);
|
||||||
|
|
||||||
log("injecting ring stop\n");
|
igt_debug("injecting ring stop\n");
|
||||||
igt_assert(write(fd, data, sizeof(data)) == sizeof(data));
|
igt_assert(write(fd, data, sizeof(data)) == sizeof(data));
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
@ -342,67 +338,67 @@ static void min_max_config(void (*check)(void))
|
|||||||
/* hw (and so kernel) currently rounds to 50 MHz ... */
|
/* hw (and so kernel) currently rounds to 50 MHz ... */
|
||||||
fmid = fmid / 50 * 50;
|
fmid = fmid / 50 * 50;
|
||||||
|
|
||||||
log("\nCheck original min and max...\n");
|
igt_debug("\nCheck original min and max...\n");
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nSet min=RPn and max=RP0...\n");
|
igt_debug("\nSet min=RPn and max=RP0...\n");
|
||||||
writeval(stuff[MIN].filp, origfreqs[RPn]);
|
writeval(stuff[MIN].filp, origfreqs[RPn]);
|
||||||
writeval(stuff[MAX].filp, origfreqs[RP0]);
|
writeval(stuff[MAX].filp, origfreqs[RP0]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease min to midpoint...\n");
|
igt_debug("\nIncrease min to midpoint...\n");
|
||||||
writeval(stuff[MIN].filp, fmid);
|
writeval(stuff[MIN].filp, fmid);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease min to RP0...\n");
|
igt_debug("\nIncrease min to RP0...\n");
|
||||||
writeval(stuff[MIN].filp, origfreqs[RP0]);
|
writeval(stuff[MIN].filp, origfreqs[RP0]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease min above RP0 (invalid)...\n");
|
igt_debug("\nIncrease min above RP0 (invalid)...\n");
|
||||||
writeval_inval(stuff[MIN].filp, origfreqs[RP0] + 1000);
|
writeval_inval(stuff[MIN].filp, origfreqs[RP0] + 1000);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease max to RPn (invalid)...\n");
|
igt_debug("\nDecrease max to RPn (invalid)...\n");
|
||||||
writeval_inval(stuff[MAX].filp, origfreqs[RPn]);
|
writeval_inval(stuff[MAX].filp, origfreqs[RPn]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease min to midpoint...\n");
|
igt_debug("\nDecrease min to midpoint...\n");
|
||||||
writeval(stuff[MIN].filp, fmid);
|
writeval(stuff[MIN].filp, fmid);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease min to RPn...\n");
|
igt_debug("\nDecrease min to RPn...\n");
|
||||||
writeval(stuff[MIN].filp, origfreqs[RPn]);
|
writeval(stuff[MIN].filp, origfreqs[RPn]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease min below RPn (invalid)...\n");
|
igt_debug("\nDecrease min below RPn (invalid)...\n");
|
||||||
writeval_inval(stuff[MIN].filp, 0);
|
writeval_inval(stuff[MIN].filp, 0);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease max to midpoint...\n");
|
igt_debug("\nDecrease max to midpoint...\n");
|
||||||
writeval(stuff[MAX].filp, fmid);
|
writeval(stuff[MAX].filp, fmid);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease max to RPn...\n");
|
igt_debug("\nDecrease max to RPn...\n");
|
||||||
writeval(stuff[MAX].filp, origfreqs[RPn]);
|
writeval(stuff[MAX].filp, origfreqs[RPn]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nDecrease max below RPn (invalid)...\n");
|
igt_debug("\nDecrease max below RPn (invalid)...\n");
|
||||||
writeval_inval(stuff[MAX].filp, 0);
|
writeval_inval(stuff[MAX].filp, 0);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease min to RP0 (invalid)...\n");
|
igt_debug("\nIncrease min to RP0 (invalid)...\n");
|
||||||
writeval_inval(stuff[MIN].filp, origfreqs[RP0]);
|
writeval_inval(stuff[MIN].filp, origfreqs[RP0]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease max to midpoint...\n");
|
igt_debug("\nIncrease max to midpoint...\n");
|
||||||
writeval(stuff[MAX].filp, fmid);
|
writeval(stuff[MAX].filp, fmid);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease max to RP0...\n");
|
igt_debug("\nIncrease max to RP0...\n");
|
||||||
writeval(stuff[MAX].filp, origfreqs[RP0]);
|
writeval(stuff[MAX].filp, origfreqs[RP0]);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
log("\nIncrease max above RP0 (invalid)...\n");
|
igt_debug("\nIncrease max above RP0 (invalid)...\n");
|
||||||
writeval_inval(stuff[MAX].filp, origfreqs[RP0] + 1000);
|
writeval_inval(stuff[MAX].filp, origfreqs[RP0] + 1000);
|
||||||
check();
|
check();
|
||||||
|
|
||||||
@ -439,7 +435,7 @@ static void idle_check(void)
|
|||||||
} while (wait < IDLE_WAIT_TIMEOUT_MSEC);
|
} while (wait < IDLE_WAIT_TIMEOUT_MSEC);
|
||||||
|
|
||||||
igt_assert(freqs[CUR] == freqs[MIN]);
|
igt_assert(freqs[CUR] == freqs[MIN]);
|
||||||
log("Required %d msec to reach cur=min\n", wait);
|
igt_debug("Required %d msec to reach cur=min\n", wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LOADED_WAIT_TIMESTEP_MSEC 100
|
#define LOADED_WAIT_TIMESTEP_MSEC 100
|
||||||
@ -462,7 +458,7 @@ static void loaded_check(void)
|
|||||||
} while (wait < LOADED_WAIT_TIMEOUT_MSEC);
|
} while (wait < LOADED_WAIT_TIMEOUT_MSEC);
|
||||||
|
|
||||||
igt_assert(freqs[CUR] == freqs[MAX]);
|
igt_assert(freqs[CUR] == freqs[MAX]);
|
||||||
log("Required %d msec to reach cur=max\n", wait);
|
igt_debug("Required %d msec to reach cur=max\n", wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STABILIZE_WAIT_TIMESTEP_MSEC 100
|
#define STABILIZE_WAIT_TIMESTEP_MSEC 100
|
||||||
@ -478,7 +474,7 @@ static void stabilize_check(int *freqs)
|
|||||||
wait += STABILIZE_WAIT_TIMESTEP_MSEC;
|
wait += STABILIZE_WAIT_TIMESTEP_MSEC;
|
||||||
} while (wait < STABILIZE_WAIT_TIMEOUT_MSEC);
|
} while (wait < STABILIZE_WAIT_TIMEOUT_MSEC);
|
||||||
|
|
||||||
log("Waited %d msec to stabilize cur\n", wait);
|
igt_debug("Waited %d msec to stabilize cur\n", wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset(void)
|
static void reset(void)
|
||||||
@ -486,30 +482,30 @@ static void reset(void)
|
|||||||
int pre_freqs[NUMFREQ];
|
int pre_freqs[NUMFREQ];
|
||||||
int post_freqs[NUMFREQ];
|
int post_freqs[NUMFREQ];
|
||||||
|
|
||||||
log("Apply low load...\n");
|
igt_debug("Apply low load...\n");
|
||||||
load_helper_run(LOW);
|
load_helper_run(LOW);
|
||||||
stabilize_check(pre_freqs);
|
stabilize_check(pre_freqs);
|
||||||
|
|
||||||
log("Stop rings...\n");
|
igt_debug("Stop rings...\n");
|
||||||
stop_rings();
|
stop_rings();
|
||||||
while (rings_stopped())
|
while (rings_stopped())
|
||||||
usleep(1000 * 100);
|
usleep(1000 * 100);
|
||||||
log("Ring stop cleared\n");
|
igt_debug("Ring stop cleared\n");
|
||||||
|
|
||||||
log("Apply high load...\n");
|
igt_debug("Apply high load...\n");
|
||||||
load_helper_set_load(HIGH);
|
load_helper_set_load(HIGH);
|
||||||
loaded_check();
|
loaded_check();
|
||||||
|
|
||||||
log("Apply low load...\n");
|
igt_debug("Apply low load...\n");
|
||||||
load_helper_set_load(LOW);
|
load_helper_set_load(LOW);
|
||||||
stabilize_check(post_freqs);
|
stabilize_check(post_freqs);
|
||||||
matchit(pre_freqs, post_freqs);
|
matchit(pre_freqs, post_freqs);
|
||||||
|
|
||||||
log("Apply high load...\n");
|
igt_debug("Apply high load...\n");
|
||||||
load_helper_set_load(HIGH);
|
load_helper_set_load(HIGH);
|
||||||
loaded_check();
|
loaded_check();
|
||||||
|
|
||||||
log("Removing load...\n");
|
igt_debug("Removing load...\n");
|
||||||
load_helper_stop();
|
load_helper_stop();
|
||||||
idle_check();
|
idle_check();
|
||||||
}
|
}
|
||||||
@ -528,40 +524,8 @@ static void pm_rps_exit_handler(int sig)
|
|||||||
close(drm_fd);
|
close(drm_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opt_handler(int opt, int opt_index)
|
igt_main
|
||||||
{
|
{
|
||||||
switch (opt) {
|
|
||||||
case 'v':
|
|
||||||
verbose = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mod of igt_subtest_init that adds our extra options */
|
|
||||||
static void subtest_init(int argc, char **argv)
|
|
||||||
{
|
|
||||||
struct option long_opts[] = {
|
|
||||||
{"verbose", 0, 0, 'v'}
|
|
||||||
};
|
|
||||||
const char *help_str = " -v, --verbose";
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = igt_subtest_init_parse_opts(argc, argv, "v", long_opts,
|
|
||||||
help_str, opt_handler);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
/* exit with no error for -h/--help */
|
|
||||||
exit(ret == -1 ? 0 : ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
subtest_init(argc, argv);
|
|
||||||
|
|
||||||
igt_skip_on_simulation();
|
igt_skip_on_simulation();
|
||||||
|
|
||||||
igt_fixture {
|
igt_fixture {
|
||||||
@ -609,6 +573,4 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
igt_subtest("reset")
|
igt_subtest("reset")
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
igt_exit();
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user