From mboxrd@z Thu Jan 1 00:00:00 1970 From: jeff.mcgee@intel.com Subject: [PATCH 4/4] pm_rps: New subtest for gpu reset Date: Fri, 31 Jan 2014 10:13:53 -0600 Message-ID: <1391184833-10973-5-git-send-email-jeff.mcgee@intel.com> References: <1391184833-10973-1-git-send-email-jeff.mcgee@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id C3E55F9F4A for ; Fri, 31 Jan 2014 08:06:44 -0800 (PST) In-Reply-To: <1391184833-10973-1-git-send-email-jeff.mcgee@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org From: Jeff McGee Test that RPS functions as expected after a gpu reset. Signed-off-by: Jeff McGee --- tests/pm_rps.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/pm_rps.c b/tests/pm_rps.c index 05b859c..846abe6 100644 --- a/tests/pm_rps.c +++ b/tests/pm_rps.c @@ -133,6 +133,16 @@ static void checkit(const int *freqs) igt_assert(freqs[RP1] != 0); } +static void matchit(const int *freqs1, const int *freqs2) +{ + igt_assert(freqs1[CUR] == freqs2[CUR]); + igt_assert(freqs1[MIN] == freqs2[MIN]); + igt_assert(freqs1[MAX] == freqs2[MAX]); + igt_assert(freqs1[RP0] == freqs2[RP0]); + igt_assert(freqs1[RP1] == freqs2[RP1]); + igt_assert(freqs1[RPn] == freqs2[RPn]); +} + static void dumpit(const int *freqs) { int i; @@ -462,6 +472,55 @@ static void loaded_check(void) log("Required %d msec to reach cur=max\n", wait); } +#define STABILIZE_WAIT_TIMESTEP_MSEC 100 +#define STABILIZE_WAIT_TIMEOUT_MSEC 2000 +static void stabilize_check(int *freqs) +{ + int wait = 0; + + do { + read_freqs(freqs); + dump(freqs); + usleep(1000 * STABILIZE_WAIT_TIMESTEP_MSEC); + wait += STABILIZE_WAIT_TIMESTEP_MSEC; + } while (wait < STABILIZE_WAIT_TIMEOUT_MSEC); + + log("Waited %d msec to stabilize cur\n", wait); +} + +static void reset(void) +{ + int pre_freqs[NUMFREQ]; + int post_freqs[NUMFREQ]; + + log("Apply low load...\n"); + load_helper_run(LOW); + stabilize_check(pre_freqs); + + log("Stop rings...\n"); + stop_rings(); + while (rings_stopped()) + usleep(1000 * 100); + log("Ring stop cleared\n"); + + log("Apply high load...\n"); + load_helper_set_load(HIGH); + loaded_check(); + + log("Apply low load...\n"); + load_helper_set_load(LOW); + stabilize_check(post_freqs); + matchit(pre_freqs, post_freqs); + + log("Apply high load...\n"); + load_helper_set_load(HIGH); + loaded_check(); + + log("Removing load...\n"); + load_helper_stop(); + idle_check(); +} + static void pm_rps_exit_handler(int sig) { if (origfreqs[MIN] > readval(stuff[MAX].filp)) { @@ -555,5 +614,8 @@ int main(int argc, char **argv) load_helper_stop(); } + igt_subtest("reset") + reset(); + igt_exit(); } -- 1.8.5.2