<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>Hi Anirban,</p>
    <div class="moz-cite-prefix">On 30-06-2025 10:41, Sk Anirban wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:20250630051145.2572003-2-sk.anirban@intel.com">
      <pre wrap="" class="moz-quote-pre">Update the vram-d3cold-threshold test to include validation of VRAM
self-refresh (VRSR) functionality, by including checks for VRSR capability
and ModS residency. The test now differentiates between D3Cold and D3Hot
states based on VRAM self-refresh capability.

v2: Buffer size reduced from 4K to 256 and 8 bytes (Karthik)
v3: Update error message (Karthik)

Signed-off-by: Sk Anirban <a class="moz-txt-link-rfc2396E" href="mailto:sk.anirban@intel.com"><sk.anirban@intel.com></a>
---
 tests/intel/xe_pm.c | 49 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c
index 7e9324eec..c9582d337 100644
--- a/tests/intel/xe_pm.c
+++ b/tests/intel/xe_pm.c
@@ -144,6 +144,27 @@ static void vram_d3cold_threshold_restore(int sig)
        close(fd);
 }
 
+static uint64_t read_mods(device_t device)</pre>
    </blockquote>
    It would be even better if you could use a generic function for
    reading the residencies.<br>
    Better to use "<span class="cf0">read_content_line</span>" from the
    patch : <span class="cf0"><a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/series/149731">https://patchwork.freedesktop.org/series/149731</a></span>
    <blockquote type="cite" cite="mid:20250630051145.2572003-2-sk.anirban@intel.com">
      <pre wrap="" class="moz-quote-pre">
+{
+       uint64_t mods_value;
+       char buf[256];
+       int dir, ret;
+       char *mods_ptr;
+
+       dir = igt_debugfs_dir(device.fd_xe);
+       igt_assert(dir >= 0);
+       ret = igt_debugfs_simple_read(dir, "gtidle/dgfx_pkg_residencies", buf, sizeof(buf));</pre>
    </blockquote>
    <p>Remove <span style="white-space: pre-wrap">"gtidle", it no longer exists.</span></p>
    <p><span style="white-space: pre-wrap">Thanks,
Soham</span></p>
    <blockquote type="cite" cite="mid:20250630051145.2572003-2-sk.anirban@intel.com">
      <pre wrap="" class="moz-quote-pre">
+       igt_assert_f(ret >= 0, "Debugfs dgfx_pkg_residencies is not present.\n");
+
+       close(dir);
+
+       mods_ptr = strstr(buf, "Package ModS: ");
+       if (mods_ptr)
+               sscanf(mods_ptr, "Package ModS: %"PRIu64"\n", &mods_value);
+
+       return mods_value;
+}
+
 static bool setup_d3(device_t device, enum igt_acpi_d_state state)
 {
        igt_require_f(igt_has_pci_pm_capability(device.pci_xe),
@@ -561,10 +582,25 @@ static void test_vram_d3cold_threshold(device_t device, int sysfs_fd)
        };
        uint64_t vram_used_mb = 0, vram_total_mb = 0, threshold;
        uint32_t bo, placement;
+       int vrsr_capability = 0;
+       uint64_t mods_value = 0;
+       char buf[8];
+       int dir, ret;
        bool active;
        void *map;
        int i;
 
+       dir = igt_debugfs_dir(device.fd_xe);
+       igt_assert(dir >= 0);
+
+       ret = igt_debugfs_simple_read(dir, "vrsr_capable",
+                                     buf, sizeof(buf));
+       igt_assert_f(ret >= 0, "Debugfs vrsr_capable is not present.\n");
+       close(dir);
+
+       if (strstr(buf, "true"))
+               vrsr_capability = 1;
+
        igt_require(xe_has_vram(device.fd_xe));
 
        placement = vram_memory(device.fd_xe, 0);
@@ -595,10 +631,21 @@ static void test_vram_d3cold_threshold(device_t device, int sysfs_fd)
        munmap(map, SIZE);
        set_vram_d3cold_threshold(sysfs_fd, threshold);
 
+       if (vrsr_capability)
+               mods_value = read_mods(device);
+
        /* Setup D3Cold but card should be in D3hot */
        igt_assert(setup_d3(device, IGT_ACPI_D3Cold));
        sleep(1);
-       igt_assert(in_d3(device, IGT_ACPI_D3Hot));
+       if (vrsr_capability) {
+               igt_assert(in_d3(device, IGT_ACPI_D3Cold));
+               mods_value = read_mods(device) - mods_value;
+               igt_assert_f(mods_value > 0,
+                            "GPU couldn't enter ModS!");
+       } else {
+               igt_assert(in_d3(device, IGT_ACPI_D3Hot));
+       }
+
        igt_assert(igt_pm_get_acpi_real_d_state(device.pci_root) == IGT_ACPI_D0);
        gem_close(device.fd_xe, bo);
 
</pre>
    </blockquote>
  </body>
</html>