diff mbox series

[i-g-t,1/5] lib/igt_pm: igt lib helper routines to support DC5/6 tests

Message ID 1552498342-6133-2-git-send-email-anshuman.gupta@intel.com (mailing list archive)
State New, archived
Headers show
Series DC states igt tests patch series v8 | expand

Commit Message

Gupta, Anshuman March 13, 2019, 5:32 p.m. UTC
From: Jyoti Yadav <jyoti.r.yadav@intel.com>

dmc_loaded() will be used by new test i915_pm_dc.c which will validate
Display C States. So moving the same to igt_pm library.
Introduced igt_disable_runtime_pm() inorder to disable runtime suspend
for the function which support dc9.

v2: Simplify the comment section.
v3: Remove . from the subject line.
v4: Rebased, resolve conflicts in pm_rpm.c
    Included patch set version change log.
v5: Listing actual change in patch set changelog to make review easier.
v6: igt's lib added support for disabling runtime suspend, change in commit log.
    rebased due to test name pm_rpm changed to i915_pm_rpm.

Signed-off-by: Jyoti Yadav <jyoti.r.yadav@intel.com>
Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
---
 lib/igt_pm.c             | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_pm.h             |  2 ++
 tests/i915/i915_pm_rpm.c | 17 +----------------
 3 files changed, 50 insertions(+), 16 deletions(-)

Comments

Imre Deak March 15, 2019, 10:52 a.m. UTC | #1
On Wed, Mar 13, 2019 at 11:02:18PM +0530, Anshuman Gupta wrote:
> From: Jyoti Yadav <jyoti.r.yadav@intel.com>
> 
> dmc_loaded() will be used by new test i915_pm_dc.c which will validate
> Display C States. So moving the same to igt_pm library.
> Introduced igt_disable_runtime_pm() inorder to disable runtime suspend
> for the function which support dc9.
> 
> v2: Simplify the comment section.
> v3: Remove . from the subject line.
> v4: Rebased, resolve conflicts in pm_rpm.c
>     Included patch set version change log.
> v5: Listing actual change in patch set changelog to make review easier.
> v6: igt's lib added support for disabling runtime suspend, change in commit log.
>     rebased due to test name pm_rpm changed to i915_pm_rpm.
> 
> Signed-off-by: Jyoti Yadav <jyoti.r.yadav@intel.com>
> Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
> ---
>  lib/igt_pm.c             | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_pm.h             |  2 ++
>  tests/i915/i915_pm_rpm.c | 17 +----------------
>  3 files changed, 50 insertions(+), 16 deletions(-)
> 
> diff --git a/lib/igt_pm.c b/lib/igt_pm.c
> index 4902723..0ed566f 100644
> --- a/lib/igt_pm.c
> +++ b/lib/igt_pm.c
> @@ -38,6 +38,7 @@
>  #include "drmtest.h"
>  #include "igt_pm.h"
>  #include "igt_aux.h"
> +#include "igt_sysfs.h"
>  
>  /**
>   * SECTION:igt_pm
> @@ -486,6 +487,7 @@ void igt_restore_runtime_pm(void)
>  	igt_pm_audio_restore_runtime_pm();
>  }
>  
> +

Extra w/s.

>  static void __igt_pm_runtime_exit_handler(int sig)
>  {
>  	__igt_restore_runtime_pm();
> @@ -577,6 +579,24 @@ bool igt_setup_runtime_pm(void)
>  	return true;
>  }
>  
> +bool igt_disable_runtime_pm(void)
> +{
> +	int fd;
> +	ssize_t size;
> +	char buf[6];
> +

This being a library function it should make sure that the original
value of POWER_DIR/control has been saved. For instance by asserting
that igt_setup_runtime_pm() has been called previously.

> +	/* We know we support runtime PM, let's try to disable it now. */
> +	fd = open(POWER_DIR "/control", O_RDWR);
> +	igt_assert_f(fd >= 0, "Can't open " POWER_DIR "/control\n");
> +	size = write(fd, "on\n", 3);
> +	igt_assert(size == 3);
> +	lseek(fd, 0, SEEK_SET);
> +	size = read(fd, buf, ARRAY_SIZE(buf));
> +	igt_assert(size == 3);
> +	igt_assert(strncmp(buf, "on\n", 3) == 0);
> +	close(fd);
> +	return true;
> +}
>  /**
>   * igt_get_runtime_pm_status:
>   *
> @@ -620,3 +640,30 @@ bool igt_wait_for_pm_status(enum igt_runtime_pm_status status)
>  {
>  	return igt_wait(igt_get_runtime_pm_status() == status, 10000, 100);
>  }
> +
> +/**
> + * dmc_loaded:
> + * @debugfs: fd to the debugfs dir.
> +
> + * Check whether DMC FW is loaded or not. DMC FW is require for few Display C
> + * states like DC5 and DC6. FW does the Context Save and Restore during Display
> + * C States entry and exit.
> + *
> + * Returns:
> + * True if DMC FW is loaded otherwise false.
> + */
> +bool igt_pm_dmc_loaded(int debugfs)
> +{
> +	igt_require(debugfs != -1);
> +	char buf[15];
> +	int len;
> +
> +	len = igt_sysfs_read(debugfs, "i915_dmc_info", buf, sizeof(buf) - 1);
> +	if (len < 0)
> +		return true; /* no CSR support, no DMC requirement */
> +
> +	buf[len] = '\0';
> +
> +	igt_info("DMC: %s\n", buf);
> +	return strstr(buf, "fw loaded: yes");
> +}
> diff --git a/lib/igt_pm.h b/lib/igt_pm.h
> index 10cc679..6c4617a 100644
> --- a/lib/igt_pm.h
> +++ b/lib/igt_pm.h
> @@ -47,8 +47,10 @@ enum igt_runtime_pm_status {
>  };
>  
>  bool igt_setup_runtime_pm(void);
> +bool igt_disable_runtime_pm(void);
>  void igt_restore_runtime_pm(void);
>  enum igt_runtime_pm_status igt_get_runtime_pm_status(void);
>  bool igt_wait_for_pm_status(enum igt_runtime_pm_status status);
> +bool igt_pm_dmc_loaded(int debugfs);
>  
>  #endif /* IGT_PM_H */
> diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c
> index be296f5..2d7cb5e 100644
> --- a/tests/i915/i915_pm_rpm.c
> +++ b/tests/i915/i915_pm_rpm.c
> @@ -710,21 +710,6 @@ static void setup_pc8(void)
>  	has_pc8 = true;
>  }
>  
> -static bool dmc_loaded(void)
> -{
> -	char buf[15];
> -	int len;
> -
> -	len = igt_sysfs_read(debugfs, "i915_dmc_info", buf, sizeof(buf) - 1);
> -	if (len < 0)
> -	    return true; /* no CSR support, no DMC requirement */
> -
> -	buf[len] = '\0';
> -
> -	igt_info("DMC: %s\n", buf);
> -	return strstr(buf, "fw loaded: yes");
> -}
> -
>  static void dump_file(int dir, const char *filename)
>  {
>  	char *contents;
> @@ -761,7 +746,7 @@ static bool setup_environment(void)
>  	igt_info("Runtime PM support: %d\n", has_runtime_pm);
>  	igt_info("PC8 residency support: %d\n", has_pc8);
>  	igt_require(has_runtime_pm);
> -	igt_require(dmc_loaded());
> +	igt_require(igt_pm_dmc_loaded(debugfs));
>  
>  out:
>  	disable_all_screens(&ms_data);
> -- 
> 2.7.4
>
diff mbox series

Patch

diff --git a/lib/igt_pm.c b/lib/igt_pm.c
index 4902723..0ed566f 100644
--- a/lib/igt_pm.c
+++ b/lib/igt_pm.c
@@ -38,6 +38,7 @@ 
 #include "drmtest.h"
 #include "igt_pm.h"
 #include "igt_aux.h"
+#include "igt_sysfs.h"
 
 /**
  * SECTION:igt_pm
@@ -486,6 +487,7 @@  void igt_restore_runtime_pm(void)
 	igt_pm_audio_restore_runtime_pm();
 }
 
+
 static void __igt_pm_runtime_exit_handler(int sig)
 {
 	__igt_restore_runtime_pm();
@@ -577,6 +579,24 @@  bool igt_setup_runtime_pm(void)
 	return true;
 }
 
+bool igt_disable_runtime_pm(void)
+{
+	int fd;
+	ssize_t size;
+	char buf[6];
+
+	/* We know we support runtime PM, let's try to disable it now. */
+	fd = open(POWER_DIR "/control", O_RDWR);
+	igt_assert_f(fd >= 0, "Can't open " POWER_DIR "/control\n");
+	size = write(fd, "on\n", 3);
+	igt_assert(size == 3);
+	lseek(fd, 0, SEEK_SET);
+	size = read(fd, buf, ARRAY_SIZE(buf));
+	igt_assert(size == 3);
+	igt_assert(strncmp(buf, "on\n", 3) == 0);
+	close(fd);
+	return true;
+}
 /**
  * igt_get_runtime_pm_status:
  *
@@ -620,3 +640,30 @@  bool igt_wait_for_pm_status(enum igt_runtime_pm_status status)
 {
 	return igt_wait(igt_get_runtime_pm_status() == status, 10000, 100);
 }
+
+/**
+ * dmc_loaded:
+ * @debugfs: fd to the debugfs dir.
+
+ * Check whether DMC FW is loaded or not. DMC FW is require for few Display C
+ * states like DC5 and DC6. FW does the Context Save and Restore during Display
+ * C States entry and exit.
+ *
+ * Returns:
+ * True if DMC FW is loaded otherwise false.
+ */
+bool igt_pm_dmc_loaded(int debugfs)
+{
+	igt_require(debugfs != -1);
+	char buf[15];
+	int len;
+
+	len = igt_sysfs_read(debugfs, "i915_dmc_info", buf, sizeof(buf) - 1);
+	if (len < 0)
+		return true; /* no CSR support, no DMC requirement */
+
+	buf[len] = '\0';
+
+	igt_info("DMC: %s\n", buf);
+	return strstr(buf, "fw loaded: yes");
+}
diff --git a/lib/igt_pm.h b/lib/igt_pm.h
index 10cc679..6c4617a 100644
--- a/lib/igt_pm.h
+++ b/lib/igt_pm.h
@@ -47,8 +47,10 @@  enum igt_runtime_pm_status {
 };
 
 bool igt_setup_runtime_pm(void);
+bool igt_disable_runtime_pm(void);
 void igt_restore_runtime_pm(void);
 enum igt_runtime_pm_status igt_get_runtime_pm_status(void);
 bool igt_wait_for_pm_status(enum igt_runtime_pm_status status);
+bool igt_pm_dmc_loaded(int debugfs);
 
 #endif /* IGT_PM_H */
diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c
index be296f5..2d7cb5e 100644
--- a/tests/i915/i915_pm_rpm.c
+++ b/tests/i915/i915_pm_rpm.c
@@ -710,21 +710,6 @@  static void setup_pc8(void)
 	has_pc8 = true;
 }
 
-static bool dmc_loaded(void)
-{
-	char buf[15];
-	int len;
-
-	len = igt_sysfs_read(debugfs, "i915_dmc_info", buf, sizeof(buf) - 1);
-	if (len < 0)
-	    return true; /* no CSR support, no DMC requirement */
-
-	buf[len] = '\0';
-
-	igt_info("DMC: %s\n", buf);
-	return strstr(buf, "fw loaded: yes");
-}
-
 static void dump_file(int dir, const char *filename)
 {
 	char *contents;
@@ -761,7 +746,7 @@  static bool setup_environment(void)
 	igt_info("Runtime PM support: %d\n", has_runtime_pm);
 	igt_info("PC8 residency support: %d\n", has_pc8);
 	igt_require(has_runtime_pm);
-	igt_require(dmc_loaded());
+	igt_require(igt_pm_dmc_loaded(debugfs));
 
 out:
 	disable_all_screens(&ms_data);