On Wed, Mar 13, 2019 at 11:02:18PM +0530, Anshuman Gupta wrote: > From: Jyoti Yadav <jyoti.r.yadav@xxxxxxxxx> > > 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@xxxxxxxxx> > Signed-off-by: Anshuman Gupta <anshuman.gupta@xxxxxxxxx> > --- > 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 > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx