[i-g-t] tests/intel/xe_pm: Enhance vram-d3cold-threshold test to verify VRAM self-refresh

sk.anirban at intel.com sk.anirban at intel.com
Tue May 27 18:39:57 UTC 2025


From: Sk Anirban <sk.anirban at intel.com>

Update the vram-d3cold-threshold test to include validation of
VRAM self-refresh functionality. It introduces checks for VRAM
self-refresh capability and verifies the ModS residency to ensure
accurate self-refresh behavior.
The test now distinguishes between D3Cold and D3Hot states based on
VRAM self-refresh capability.

Signed-off-by: Sk Anirban <sk.anirban at intel.com>
---
 tests/intel/xe_pm.c | 51 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c
index 6eb21d5ec..f8074a9c6 100644
--- a/tests/intel/xe_pm.c
+++ b/tests/intel/xe_pm.c
@@ -144,6 +144,29 @@ static void vram_d3cold_threshold_restore(int sig)
 	close(fd);
 }
 
+static uint64_t read_mods(device_t device)
+{
+	uint64_t mods_value;
+	char buf[4096];
+	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));
+	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 +584,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[4096];
+	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 +633,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,
+			     "Mods residency is inaccurate: %"PRIu64"\n", mods_value);
+	} 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);
 
-- 
2.34.1



More information about the igt-dev mailing list