1 /* $NetBSD: selftest_gt_pm.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ 2 3 4 /* 5 * SPDX-License-Identifier: MIT 6 * 7 * Copyright © 2019 Intel Corporation 8 */ 9 10 #include <sys/cdefs.h> 11 __KERNEL_RCSID(0, "$NetBSD: selftest_gt_pm.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); 12 13 #include "selftest_llc.h" 14 #include "selftest_rc6.h" 15 live_gt_resume(void * arg)16static int live_gt_resume(void *arg) 17 { 18 struct intel_gt *gt = arg; 19 IGT_TIMEOUT(end_time); 20 int err; 21 22 /* Do several suspend/resume cycles to check we don't explode! */ 23 do { 24 intel_gt_suspend_prepare(gt); 25 intel_gt_suspend_late(gt); 26 27 if (gt->rc6.enabled) { 28 pr_err("rc6 still enabled after suspend!\n"); 29 intel_gt_set_wedged_on_init(gt); 30 err = -EINVAL; 31 break; 32 } 33 34 err = intel_gt_resume(gt); 35 if (err) 36 break; 37 38 if (gt->rc6.supported && !gt->rc6.enabled) { 39 pr_err("rc6 not enabled upon resume!\n"); 40 intel_gt_set_wedged_on_init(gt); 41 err = -EINVAL; 42 break; 43 } 44 45 err = st_llc_verify(>->llc); 46 if (err) { 47 pr_err("llc state not restored upon resume!\n"); 48 intel_gt_set_wedged_on_init(gt); 49 break; 50 } 51 } while (!__igt_timeout(end_time, NULL)); 52 53 return err; 54 } 55 intel_gt_pm_live_selftests(struct drm_i915_private * i915)56int intel_gt_pm_live_selftests(struct drm_i915_private *i915) 57 { 58 static const struct i915_subtest tests[] = { 59 SUBTEST(live_rc6_manual), 60 SUBTEST(live_gt_resume), 61 }; 62 63 if (intel_gt_is_wedged(&i915->gt)) 64 return 0; 65 66 return intel_gt_live_subtests(tests, &i915->gt); 67 } 68 intel_gt_pm_late_selftests(struct drm_i915_private * i915)69int intel_gt_pm_late_selftests(struct drm_i915_private *i915) 70 { 71 static const struct i915_subtest tests[] = { 72 /* 73 * These tests may leave the system in an undesirable state. 74 * They are intended to be run last in CI and the system 75 * rebooted afterwards. 76 */ 77 SUBTEST(live_rc6_ctx_wa), 78 }; 79 80 if (intel_gt_is_wedged(&i915->gt)) 81 return 0; 82 83 return intel_gt_live_subtests(tests, &i915->gt); 84 } 85