[igt-dev] [PATCH i-g-t v3 2/2] tests/xe_pm: Add d3-mmap IGT test
Gupta, Anshuman
anshuman.gupta at intel.com
Thu Oct 5 10:27:09 UTC 2023
> -----Original Message-----
> From: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> Sent: Thursday, October 5, 2023 3:54 PM
> To: igt-dev at lists.freedesktop.org
> Cc: Gupta, Anshuman <anshuman.gupta at intel.com>; Vivi, Rodrigo
> <rodrigo.vivi at intel.com>
> Subject: Re: [igt-dev] [PATCH i-g-t v3 2/2] tests/xe_pm: Add d3-mmap IGT
> test
>
> Hi Anshuman,
>
> On 2023-09-29 at 15:41:55 +0530, Anshuman Gupta wrote:
> > Adding a test to validate mmap memory mappings along with runtime
> > suspend and resume for both xe device and it's pci parent bridge in
> > device hierarchy.
> >
> > v2:
> > - Use 0xc00fee pattern. [Rodrigo]
> > - Test the pagefault case on read and write the mapping. [Rodrigo]
> >
> > Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> > ---
> > tests/intel/xe_pm.c | 88
> > +++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 88 insertions(+)
> >
> > diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c index
> > 48518a5e5..8656e2146 100644
> > --- a/tests/intel/xe_pm.c
> > +++ b/tests/intel/xe_pm.c
> > @@ -446,6 +446,77 @@ static void test_vram_d3cold_threshold(device_t
> device, int sysfs_fd)
> > igt_assert(in_d3(device, IGT_ACPI_D3Cold)); }
> >
> > +/**
> > + * SUBTEST: d3-mmap-%s
> > + * Description:
> > + * Validate mmap memory mapping with d3 state, for %arg[1] region,
> > + * if supported by device.
> > + * arg[1]:
> > + *
> > + * @vram: vram region
> > + * @system: system region
> > + *
> > + * Functionality: pm-d3
> > + * Run type: FULL
> ----- ^^^^^^^^^^^^^^
> Delete this line, field was removed some days ago.
>
> > + */
> > +static void test_mmap(device_t device, uint32_t flags) {
> > + size_t bo_size = 8192;
> > + uint32_t *map = NULL;
> > + uint32_t bo;
> > + int i;
> > +
> > + igt_require_f(flags, "Device doesn't support such memory region\n");
> > +
> > + bo = xe_bo_create_flags(device.fd_xe, 0, bo_size, flags);
> > + map = xe_bo_map(device.fd_xe, bo, bo_size);
> > + igt_assert(map);
> > + memset(map, 0, bo_size);
> > +
> > + 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);
> > +
> > + for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> sizeof(*map) or sizeof(map[0])
>
> > + map[i] = 0xc0ffee;
> ---------------- ^
> imho better use define or const, for example MAGIC_1
>
> > +
> > + for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
>
> > + igt_assert(map[i] == 0xc0ffee);
> ---------------------------- ^
>
> > +
> > + /* Runtime suspend and validate the pattern and changed the pattern
> */
> > + close(fw_handle);
> > +
> igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > + for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > + igt_assert(map[i] == 0xc0ffee);
> ----------------------------- ^
> Same here.
>
> > +
> > + /* dgfx page-fault on mmaping should wake the gpu */
> > + if (xe_has_vram(device.fd_xe))
> > + igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +
> igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > + for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > + map[i] = 0xdeadbeef;
> ---------------- ^
> MAGIC_2
>
> > +
> > + if (xe_has_vram(device.fd_xe))
> > + igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +
> igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > + /* Runtime resume and check the pattern */
> > + 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);
> > + for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > + igt_assert(map[i] == 0xdeadbeef);
> ----------------------------- ^
> Same here.
Thanks for review, I will do all of those change.
Br,
Anshuman.
>
> Regards,
> Kamil
>
> > +
> > + igt_assert(munmap(map, bo_size) == 0);
> > + gem_close(device.fd_xe, bo);
> > + close(fw_handle);
> > +}
> > +
> > igt_main
> > {
> > struct drm_xe_engine_class_instance *hwe; @@ -556,6 +627,23 @@
> > igt_main
> >
> igt_install_exit_handler(vram_d3cold_threshold_restore);
> > test_vram_d3cold_threshold(device, sysfs_fd);
> > }
> > +
> > + igt_describe("Validate mmap memory mappings with system
> region,"
> > + "when device along with parent bridge in d3");
> > + igt_subtest("d3-mmap-system") {
> > + test_mmap(device, system_memory(device.fd_xe));
> > + }
> > +
> > + igt_describe("Validate mmap memory mappings with vram
> region,"
> > + "when device along with parent bridge in d3");
> > + igt_subtest("d3-mmap-vram") {
> > + if (device.pci_root != device.pci_xe) {
> > +
> igt_pm_enable_pci_card_runtime_pm(device.pci_root, NULL);
> > +
> igt_pm_set_d3cold_allowed(device.pci_slot_name, 1);
> > + }
> > +
> > + test_mmap(device,
> visible_vram_memory(device.fd_xe, 0));
> > + }
> > }
> >
> > igt_fixture {
> > --
> > 2.25.1
> >
More information about the igt-dev
mailing list