From 3bada1626cd35800533361296f4340f64b91321c Mon Sep 17 00:00:00 2001 From: Jeff McGee Date: Tue, 28 Jan 2014 18:25:03 -0600 Subject: [PATCH] pm_rps: New subtest min-max-config-idle Like subtest basic-api, but additionally requires that current frequency is settling to the configured minimum within reasonable time since we are idle. Signed-off-by: Jeff McGee Signed-off-by: Daniel Vetter --- tests/pm_rps.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/pm_rps.c b/tests/pm_rps.c index 7d9069a..dabc2ba 100644 --- a/tests/pm_rps.c +++ b/tests/pm_rps.c @@ -204,9 +204,12 @@ static void min_max_config(void (*check)(void)) log("\nIncrease max above RP0 (invalid)...\n"); writeval_inval(stuff[MAX].filp, origfreqs[RP0] + 1000); check(); + + writeval(stuff[MIN].filp, origfreqs[MIN]); + writeval(stuff[MAX].filp, origfreqs[MAX]); } -static void idle_check(void) +static void basic_check(void) { int freqs[NUMFREQ]; @@ -215,6 +218,29 @@ static void idle_check(void) checkit(freqs); } +#define IDLE_WAIT_TIMESTEP_MSEC 100 +#define IDLE_WAIT_TIMEOUT_MSEC 3000 +static void idle_check(void) +{ + int freqs[NUMFREQ]; + int wait = 0; + + /* Monitor frequencies until cur settles down to min, which should + * happen within the allotted time */ + do { + read_freqs(freqs); + dump(freqs); + checkit(freqs); + if (freqs[CUR] == freqs[MIN]) + break; + usleep(1000 * IDLE_WAIT_TIMESTEP_MSEC); + wait += IDLE_WAIT_TIMESTEP_MSEC; + } while (wait < IDLE_WAIT_TIMEOUT_MSEC); + + igt_assert(freqs[CUR] == freqs[MIN]); + log("Required %d msec to reach cur=min\n", wait); +} + static void pm_rps_exit_handler(int sig) { if (origfreqs[MIN] > readval(stuff[MAX].filp)) { @@ -291,6 +317,9 @@ int main(int argc, char **argv) } igt_subtest("basic-api") + min_max_config(basic_check); + + igt_subtest("min-max-config-idle") min_max_config(idle_check); igt_exit(); -- 2.7.4