@@ -1202,3 +1202,18 @@ void igt_pm_print_pci_card_runtime_status(void)
igt_pm_print_pci_dev_runtime_status(__pci_dev_pwrattr[i].pci_dev);
}
}
+
+bool i915_is_slpc_enabled(int fd)
+{
+ int debugfs_fd = igt_debugfs_dir(fd);
+ char buf[4096];
+ int len;
+
+ igt_require(debugfs_fd != -1);
+
+ len = igt_debugfs_simple_read(debugfs_fd, "gt/uc/guc_slpc_info", buf, sizeof(buf));
+ if (len < 0)
+ return false;
+ else
+ return strstr(buf, "SLPC state: running");
+}
@@ -79,5 +79,6 @@ void igt_pm_enable_pci_card_runtime_pm(struct pci_device *root,
void igt_pm_setup_pci_card_runtime_pm(struct pci_device *pci_dev);
void igt_pm_restore_pci_card_runtime_pm(void);
void igt_pm_print_pci_card_runtime_status(void);
+bool i915_is_slpc_enabled(int fd);
#endif /* IGT_PM_H */
@@ -914,35 +914,54 @@ igt_main
igt_install_exit_handler(pm_rps_exit_handler);
}
- igt_subtest("basic-api")
+ igt_subtest("basic-api") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
min_max_config(basic_check, false);
+ }
/* Verify the constraints, check if we can reach idle */
- igt_subtest("min-max-config-idle")
+ igt_subtest("min-max-config-idle") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
min_max_config(idle_check, true);
+ }
/* Verify the constraints with high load, check if we can reach max */
igt_subtest("min-max-config-loaded") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
load_helper_run(HIGH);
min_max_config(loaded_check, false);
load_helper_stop();
}
/* Checks if we achieve boost using gem_wait */
- igt_subtest("waitboost")
+ igt_subtest("waitboost") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
waitboost(drm_fd, false);
+ }
igt_describe("Check if the order of fences does not affect waitboosting");
- igt_subtest("fence-order")
+ igt_subtest("fence-order") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
fence_order(drm_fd);
+ }
igt_describe("Check if context reuse does not affect waitboosting");
- igt_subtest("engine-order")
+ igt_subtest("engine-order") {
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
engine_order(drm_fd);
+ }
/* Test boost frequency after GPU reset */
igt_subtest("reset") {
igt_hang_t hang = igt_allow_hang(drm_fd, 0, 0);
+ igt_skip_on_f(i915_is_slpc_enabled(drm_fd),
+ "This subtest is not supported when SLPC is enabled");
waitboost(drm_fd, true);
igt_disallow_hang(drm_fd, hang);
}
These tests were specifically designed for host Turbo. Skip them when SLPC is enabled as they fail frequently. We will look to keep adding to SLPC test coverage with these scenarios. Bug: https://gitlab.freedesktop.org/drm/intel/-/issues/3963 Bug: https://gitlab.freedesktop.org/drm/intel/issues/4016 Bug: https://gitlab.freedesktop.org/drm/intel/issues/5468 Bug: https://gitlab.freedesktop.org/drm/intel/issues/5831 Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com> --- lib/igt_pm.c | 15 +++++++++++++++ lib/igt_pm.h | 1 + tests/i915/i915_pm_rps.c | 29 ++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 5 deletions(-)