diff mbox

[I-G-T,2/3] igt/gem_mocs_settings: adding RC6 tests

Message ID 1469784876-33201-4-git-send-email-peter.antoine@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Antoine July 29, 2016, 9:34 a.m. UTC
This change adds a RC6 test for the MOCS. The MOCS registers are loaded
and saved as part of the RC6 cycle but not all the registers are
saved/restored. This tests that those registers are correctly restored.

Signed-off-by: Peter Antoine <peter.antoine@intel.com>
---
 tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

Comments

Chris Wilson Aug. 1, 2016, 9:04 a.m. UTC | #1
On Fri, Jul 29, 2016 at 10:34:35AM +0100, Peter Antoine wrote:
> This change adds a RC6 test for the MOCS. The MOCS registers are loaded
> and saved as part of the RC6 cycle but not all the registers are
> saved/restored. This tests that those registers are correctly restored.
> 
> Signed-off-by: Peter Antoine <peter.antoine@intel.com>
> ---
>  tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
> index 4fb3a02..66d02d9 100644
> --- a/tests/gem_mocs_settings.c
> +++ b/tests/gem_mocs_settings.c
> @@ -518,6 +518,59 @@ static void run_tests(unsigned mode)
>  	intel_register_access_fini();
>  }
>  
> +static unsigned int readit(const char *path)
> +{
> +	unsigned int ret = 0;
> +	int scanned = 0;
> +	FILE *file;
> +
> +	file = fopen(path, "r");
> +	igt_assert(file);
> +	scanned = fscanf(file, "%u", &ret);
> +	igt_assert_eq(scanned, 1);
> +
> +	fclose(file);
> +
> +	return ret;
> +}
> +
> +static int read_rc6_residency(void)
> +{
> +	unsigned int residency;
> +	const int device = drm_get_card();
> +	static const char path_format[] =
> +				"/sys/class/drm/card%d/power/rc6_residency_ms";
> +	char path[sizeof(path_format)];
> +	int  ret;
> +
> +	ret = snprintf(path, sizeof(path)-1, path_format, device);
> +
> +	igt_assert_neq(ret, -1);
> +	residency = readit(path);

This is duplicating code from igt_sysfs.c

> +
> +	return residency;
> +}
> +
> +static void context_rc6_test(void)
> +{
> +	int fd = drm_open_driver(DRIVER_INTEL);
> +	int res_ms;
> +	uint32_t ctx_id = gem_context_create(fd);
> +
> +	igt_debug("RC6 Context Test\n");
> +	check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false);
> +	check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false);
> +
> +	res_ms = read_rc6_residency();
> +	sleep(3);

Still a large and arbitrary delay.

> +	igt_assert_neq(res_ms, read_rc6_residency());

Still an assert rather than skipping when the user has disabled rc6.
-Chris
Peter Antoine Aug. 1, 2016, 9:16 a.m. UTC | #2
On Mon, 1 Aug 2016, Chris Wilson wrote:

> On Fri, Jul 29, 2016 at 10:34:35AM +0100, Peter Antoine wrote:
>> This change adds a RC6 test for the MOCS. The MOCS registers are loaded
>> and saved as part of the RC6 cycle but not all the registers are
>> saved/restored. This tests that those registers are correctly restored.
>>
>> Signed-off-by: Peter Antoine <peter.antoine@intel.com>
>> ---
>>  tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 56 insertions(+)
>>
>> diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
>> index 4fb3a02..66d02d9 100644
>> --- a/tests/gem_mocs_settings.c
>> +++ b/tests/gem_mocs_settings.c
>> @@ -518,6 +518,59 @@ static void run_tests(unsigned mode)
>>  	intel_register_access_fini();
>>  }
>>
>> +static unsigned int readit(const char *path)
>> +{
>> +	unsigned int ret = 0;
>> +	int scanned = 0;
>> +	FILE *file;
>> +
>> +	file = fopen(path, "r");
>> +	igt_assert(file);
>> +	scanned = fscanf(file, "%u", &ret);
>> +	igt_assert_eq(scanned, 1);
>> +
>> +	fclose(file);
>> +
>> +	return ret;
>> +}
>> +
>> +static int read_rc6_residency(void)
>> +{
>> +	unsigned int residency;
>> +	const int device = drm_get_card();
>> +	static const char path_format[] =
>> +				"/sys/class/drm/card%d/power/rc6_residency_ms";
>> +	char path[sizeof(path_format)];
>> +	int  ret;
>> +
>> +	ret = snprintf(path, sizeof(path)-1, path_format, device);
>> +
>> +	igt_assert_neq(ret, -1);
>> +	residency = readit(path);
>
> This is duplicating code from igt_sysfs.c
Ok. Will fix.
>
>> +
>> +	return residency;
>> +}
>> +
>> +static void context_rc6_test(void)
>> +{
>> +	int fd = drm_open_driver(DRIVER_INTEL);
>> +	int res_ms;
>> +	uint32_t ctx_id = gem_context_create(fd);
>> +
>> +	igt_debug("RC6 Context Test\n");
>> +	check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false);
>> +	check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false);
>> +
>> +	res_ms = read_rc6_residency();
>> +	sleep(3);
Distracted. Will fix.
>
> Still a large and arbitrary delay.
>
>> +	igt_assert_neq(res_ms, read_rc6_residency());
Will change.
>
> Still an assert rather than skipping when the user has disabled rc6.
> -Chris
>
>

--
    Peter Antoine (Android Graphics Driver Software Engineer)
    ---------------------------------------------------------------------
    Intel Corporation (UK) Limited
    Registered No. 1134945 (England)
    Registered Office: Pipers Way, Swindon SN3 1RJ
    VAT No: 860 2173 47
Peter Antoine Aug. 1, 2016, 10:03 a.m. UTC | #3
On Mon, 1 Aug 2016, Chris Wilson wrote:

> On Fri, Jul 29, 2016 at 10:34:35AM +0100, Peter Antoine wrote:
>> This change adds a RC6 test for the MOCS. The MOCS registers are loaded
>> and saved as part of the RC6 cycle but not all the registers are
>> saved/restored. This tests that those registers are correctly restored.
>>
>> Signed-off-by: Peter Antoine <peter.antoine@intel.com>
>> ---
>>  tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 56 insertions(+)
>>
>> diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
>> index 4fb3a02..66d02d9 100644
>> --- a/tests/gem_mocs_settings.c
>> +++ b/tests/gem_mocs_settings.c
>> @@ -518,6 +518,59 @@ static void run_tests(unsigned mode)
>>  	intel_register_access_fini();
>>  }
>>
>> +static unsigned int readit(const char *path)
>> +{
>> +	unsigned int ret = 0;
>> +	int scanned = 0;
>> +	FILE *file;
>> +
>> +	file = fopen(path, "r");
>> +	igt_assert(file);
>> +	scanned = fscanf(file, "%u", &ret);
>> +	igt_assert_eq(scanned, 1);
>> +
>> +	fclose(file);
>> +
>> +	return ret;
>> +}
>> +
>> +static int read_rc6_residency(void)
>> +{
>> +	unsigned int residency;
>> +	const int device = drm_get_card();
>> +	static const char path_format[] =
>> +				"/sys/class/drm/card%d/power/rc6_residency_ms";
>> +	char path[sizeof(path_format)];
>> +	int  ret;
>> +
>> +	ret = snprintf(path, sizeof(path)-1, path_format, device);
>> +
>> +	igt_assert_neq(ret, -1);
>> +	residency = readit(path);
>
> This is duplicating code from igt_sysfs.c

PS: Not in the current tree. The code is based on code from 
pm_rc6_residency.

>
>> +
>> +	return residency;
>> +}
>> +
>> +static void context_rc6_test(void)
>> +{
>> +	int fd = drm_open_driver(DRIVER_INTEL);
>> +	int res_ms;
>> +	uint32_t ctx_id = gem_context_create(fd);
>> +
>> +	igt_debug("RC6 Context Test\n");
>> +	check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false);
>> +	check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false);
>> +
>> +	res_ms = read_rc6_residency();
>> +	sleep(3);
>
> Still a large and arbitrary delay.
>
>> +	igt_assert_neq(res_ms, read_rc6_residency());
>
> Still an assert rather than skipping when the user has disabled rc6.
> -Chris
>
>

--
    Peter Antoine (Android Graphics Driver Software Engineer)
    ---------------------------------------------------------------------
    Intel Corporation (UK) Limited
    Registered No. 1134945 (England)
    Registered Office: Pipers Way, Swindon SN3 1RJ
    VAT No: 860 2173 47
Chris Wilson Aug. 1, 2016, 10:11 a.m. UTC | #4
On Mon, Aug 01, 2016 at 11:03:48AM +0100, Peter Antoine wrote:
> On Mon, 1 Aug 2016, Chris Wilson wrote:
> 
> >On Fri, Jul 29, 2016 at 10:34:35AM +0100, Peter Antoine wrote:
> >>This change adds a RC6 test for the MOCS. The MOCS registers are loaded
> >>and saved as part of the RC6 cycle but not all the registers are
> >>saved/restored. This tests that those registers are correctly restored.
> >>
> >>Signed-off-by: Peter Antoine <peter.antoine@intel.com>
> >>---
> >> tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
> >> 1 file changed, 56 insertions(+)
> >>
> >>diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
> >>index 4fb3a02..66d02d9 100644
> >>--- a/tests/gem_mocs_settings.c
> >>+++ b/tests/gem_mocs_settings.c
> >>@@ -518,6 +518,59 @@ static void run_tests(unsigned mode)
> >> 	intel_register_access_fini();
> >> }
> >>
> >>+static unsigned int readit(const char *path)
> >>+{
> >>+	unsigned int ret = 0;
> >>+	int scanned = 0;
> >>+	FILE *file;
> >>+
> >>+	file = fopen(path, "r");
> >>+	igt_assert(file);
> >>+	scanned = fscanf(file, "%u", &ret);
> >>+	igt_assert_eq(scanned, 1);
> >>+
> >>+	fclose(file);
> >>+
> >>+	return ret;
> >>+}
> >>+
> >>+static int read_rc6_residency(void)
> >>+{
> >>+	unsigned int residency;
> >>+	const int device = drm_get_card();
> >>+	static const char path_format[] =
> >>+				"/sys/class/drm/card%d/power/rc6_residency_ms";
> >>+	char path[sizeof(path_format)];
> >>+	int  ret;
> >>+
> >>+	ret = snprintf(path, sizeof(path)-1, path_format, device);
> >>+
> >>+	igt_assert_neq(ret, -1);
> >>+	residency = readit(path);
> >
> >This is duplicating code from igt_sysfs.c
> 
> PS: Not in the current tree. The code is based on code from
> pm_rc6_residency.

Your tree is a couple of months out of date.
-Chris
Peter Antoine Aug. 1, 2016, 10:43 a.m. UTC | #5
On Mon, 1 Aug 2016, Chris Wilson wrote:

> On Mon, Aug 01, 2016 at 11:03:48AM +0100, Peter Antoine wrote:
>> On Mon, 1 Aug 2016, Chris Wilson wrote:
>>
>>> On Fri, Jul 29, 2016 at 10:34:35AM +0100, Peter Antoine wrote:
>>>> This change adds a RC6 test for the MOCS. The MOCS registers are loaded
>>>> and saved as part of the RC6 cycle but not all the registers are
>>>> saved/restored. This tests that those registers are correctly restored.
>>>>
>>>> Signed-off-by: Peter Antoine <peter.antoine@intel.com>
>>>> ---
>>>> tests/gem_mocs_settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
>>>> 1 file changed, 56 insertions(+)
>>>>
>>>> diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
>>>> index 4fb3a02..66d02d9 100644
>>>> --- a/tests/gem_mocs_settings.c
>>>> +++ b/tests/gem_mocs_settings.c
>>>> @@ -518,6 +518,59 @@ static void run_tests(unsigned mode)
>>>> 	intel_register_access_fini();
>>>> }
>>>>
>>>> +static unsigned int readit(const char *path)
>>>> +{
>>>> +	unsigned int ret = 0;
>>>> +	int scanned = 0;
>>>> +	FILE *file;
>>>> +
>>>> +	file = fopen(path, "r");
>>>> +	igt_assert(file);
>>>> +	scanned = fscanf(file, "%u", &ret);
>>>> +	igt_assert_eq(scanned, 1);
>>>> +
>>>> +	fclose(file);
>>>> +
>>>> +	return ret;
>>>> +}
>>>> +
>>>> +static int read_rc6_residency(void)
>>>> +{
>>>> +	unsigned int residency;
>>>> +	const int device = drm_get_card();
>>>> +	static const char path_format[] =
>>>> +				"/sys/class/drm/card%d/power/rc6_residency_ms";
>>>> +	char path[sizeof(path_format)];
>>>> +	int  ret;
>>>> +
>>>> +	ret = snprintf(path, sizeof(path)-1, path_format, device);
>>>> +
>>>> +	igt_assert_neq(ret, -1);
>>>> +	residency = readit(path);
>>>
>>> This is duplicating code from igt_sysfs.c
>>
>> PS: Not in the current tree. The code is based on code from
>> pm_rc6_residency.
>
> Your tree is a couple of months out of date.
> -Chris

Am I pulling from the wrong repo?

git clone git://anongit.freedesktop.org/xorg/app/intel-gpu-tools re_pull
Cloning into 're_pull'...
remote: Counting objects: 25319, done.
remote: Compressing objects: 100% (5802/5802), done.
remote: Total 25319 (delta 19840), reused 24789 (delta 19458)
Receiving objects: 100% (25319/25319), 16.67 MiB | 1.35 MiB/s, done.
Resolving deltas: 100% (19840/19840), done.
Checking connectivity... done.

Top 10 commits:
53b4dfd tests: Skip if we cannot reserve infinite fd for ourselves
5c10362 igt/gem_busy: Don't run hang tests under the hangchecker
b2e8d2c igt/gem_concurrent_blit: More subtest grouping
d199ad8 igt/gem_concurrent_all: Fix up copy sizes
9315399 docs: minimal docs for igt_vgem.c

I get 62 references to the following search:
:vimgrep _residen ./**/*.c

All in:
overlay/rc6.c
tests/pm_rc6_residency.c
tests/pm_rpm.c
tools/intel_reg_decode.c
tools/intel_residency.c

Only the first 3 yielding code. What am I missing?

Peter.

>
>

--
    Peter Antoine (Android Graphics Driver Software Engineer)
    ---------------------------------------------------------------------
    Intel Corporation (UK) Limited
    Registered No. 1134945 (England)
    Registered Office: Pipers Way, Swindon SN3 1RJ
    VAT No: 860 2173 47
diff mbox

Patch

diff --git a/tests/gem_mocs_settings.c b/tests/gem_mocs_settings.c
index 4fb3a02..66d02d9 100644
--- a/tests/gem_mocs_settings.c
+++ b/tests/gem_mocs_settings.c
@@ -518,6 +518,59 @@  static void run_tests(unsigned mode)
 	intel_register_access_fini();
 }
 
+static unsigned int readit(const char *path)
+{
+	unsigned int ret = 0;
+	int scanned = 0;
+	FILE *file;
+
+	file = fopen(path, "r");
+	igt_assert(file);
+	scanned = fscanf(file, "%u", &ret);
+	igt_assert_eq(scanned, 1);
+
+	fclose(file);
+
+	return ret;
+}
+
+static int read_rc6_residency(void)
+{
+	unsigned int residency;
+	const int device = drm_get_card();
+	static const char path_format[] =
+				"/sys/class/drm/card%d/power/rc6_residency_ms";
+	char path[sizeof(path_format)];
+	int  ret;
+
+	ret = snprintf(path, sizeof(path)-1, path_format, device);
+
+	igt_assert_neq(ret, -1);
+	residency = readit(path);
+
+	return residency;
+}
+
+static void context_rc6_test(void)
+{
+	int fd = drm_open_driver(DRIVER_INTEL);
+	int res_ms;
+	uint32_t ctx_id = gem_context_create(fd);
+
+	igt_debug("RC6 Context Test\n");
+	check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false);
+	check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false);
+
+	res_ms = read_rc6_residency();
+	sleep(3);
+	igt_assert_neq(res_ms, read_rc6_residency());
+
+	check_control_registers(fd, I915_EXEC_RENDER, ctx_id, false);
+	check_l3cc_registers(fd, I915_EXEC_RENDER, ctx_id, false);
+	close(fd);
+}
+
+
 static void test_requirements(void)
 {
 	int fd = drm_open_driver_master(DRIVER_INTEL);
@@ -537,6 +590,9 @@  igt_main
 	igt_subtest("mocs-settings")
 		run_tests(NONE);
 
+	igt_subtest("mocs-rc6")
+		context_rc6_test();
+
 	igt_subtest("mocs-reset")
 		run_tests(RESET);