[PATCH i-g-t 2/2] tests/intel/xe_pm: Add mocs suspend resume test

Kumar, Janga Rahul janga.rahul.kumar at intel.com
Wed Apr 24 20:21:35 UTC 2024



> -----Original Message-----
> From: Roper, Matthew D <matthew.d.roper at intel.com>
> Sent: Saturday, March 23, 2024 2:55 AM
> To: Kumar, Janga Rahul <janga.rahul.kumar at intel.com>
> Cc: igt-dev at lists.freedesktop.org; Gandi, Ramadevi
> <ramadevi.gandi at intel.com>
> Subject: Re: [PATCH i-g-t 2/2] tests/intel/xe_pm: Add mocs suspend resume test
> 
> On Thu, Mar 21, 2024 at 08:46:37PM +0530, janga.rahul.kumar at intel.com
> wrote:
> > From: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
> >
> > Add test to check mocs values are retained over suspend/resume.
> >
> > Cc: Matt Roper <matthew.d.roper at intel.com>
> > Signed-off-by: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
> > ---
> >  tests/intel/xe_pm.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 43 insertions(+)
> >
> > diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c index
> > fcbed6249..0761d59c4 100644
> > --- a/tests/intel/xe_pm.c
> > +++ b/tests/intel/xe_pm.c
> > @@ -560,6 +560,45 @@ static void test_mmap(device_t device, uint32_t
> placement, uint32_t flags)
> >  	close(fw_handle);
> >  }
> >
> > +/**
> > + * SUBTEST: mocs_suspend_resume
> > + * Description:
> > + *     Validate mocs register contents over suspend resume
> > + *
> > + * Functionality: mocs
> > + * Run type: FULL
> > + */
> > +static void test_mocs_suspend_resume(device_t device) {
> > +	int gt;
> > +
> > +	xe_for_each_gt(device.fd_xe, gt) {
> > +		char path[256];
> > +
> > +		// Mocs debugfs contents before and after suspend-resume
> > +		char mocs_content_pre[4096], mocs_contents_post[4096];
> > +
> > +		sprintf(path, "gt%d/mocs", gt);
> > +		igt_assert(igt_debugfs_exists(device.fd_xe, path, O_RDONLY));
> > +		igt_debugfs_dump(device.fd_xe, path);
> > +		igt_debugfs_read(device.fd_xe, path, mocs_content_pre);
> > +
> > +		fw_handle = igt_debugfs_open(device.fd_xe, "forcewake_all",
> O_RDONLY);
> > +		igt_assert(fw_handle >= 0);
> > +		igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +		/* Runtime suspend  */
> > +		close(fw_handle);
> > +
> >
> +igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
> > +
> > +		igt_assert(igt_debugfs_exists(device.fd_xe, path, O_RDONLY));
> > +		igt_debugfs_dump(device.fd_xe, path);
> > +		igt_debugfs_read(device.fd_xe, path, mocs_contents_post);
> > +
> > +		igt_assert(strcmp(mocs_content_pre, mocs_contents_post) ==
> 0);
> > +	}
> > +}
> 
> Assuming xe_pm has already ensured that anything else that might have blocked
> runtime PM is out of the way, looks good to me.  But should we also test S3 and
> S4 as well rather than just runtime suspend?  Those follow different driver flows,
> and it's possible a driver bug could cause of to fail to reprogram MOCS on an
> S3/S4 resume, even though runtime PM resume works okay.
Sent v2 with S3/S4 s/r state.

> 
> It would also be good to extend this same pattern to other kinds of non-PM
> MOCS tests as well.  E.g., for reset IGTs it would be valuable to have subtests
Will send a separate series targeting reset and engine hang/reset.

Thanks,
Rahul
> like:
> 
>         a = capture
>         trigger engine hang & reset
>         b = capture
>         fail if a != b
> 
> and
> 
>         a = capture
>         trigger full GT reset
>         b = capture
>         fail if a != b
> 
> 
> Matt
> 
> > +
> >  igt_main
> >  {
> >  	struct drm_xe_engine_class_instance *hwe; @@ -701,6 +740,10 @@
> > igt_main
> >  			dpms_on_off(device, DRM_MODE_DPMS_ON);
> >  			igt_pm_set_autosuspend_delay(device.pci_xe,
> delay_ms);
> >  		}
> > +
> > +		igt_subtest("mocs_suspend_resume")
> > +			test_mocs_suspend_resume(device);
> > +
> >  	}
> >
> >  	igt_fixture {
> > --
> > 2.25.1
> >
> 
> --
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation


More information about the igt-dev mailing list