1 2 /* 3 * SPDX-License-Identifier: MIT 4 * 5 * Copyright © 2019 Intel Corporation 6 */ 7 8 #include "selftest_llc.h" 9 10 static int live_gt_resume(void *arg) 11 { 12 struct intel_gt *gt = arg; 13 IGT_TIMEOUT(end_time); 14 int err; 15 16 /* Do several suspend/resume cycles to check we don't explode! */ 17 do { 18 intel_gt_suspend(gt); 19 20 if (gt->rc6.enabled) { 21 pr_err("rc6 still enabled after suspend!\n"); 22 intel_gt_set_wedged_on_init(gt); 23 err = -EINVAL; 24 break; 25 } 26 27 err = intel_gt_resume(gt); 28 if (err) 29 break; 30 31 if (gt->rc6.supported && !gt->rc6.enabled) { 32 pr_err("rc6 not enabled upon resume!\n"); 33 intel_gt_set_wedged_on_init(gt); 34 err = -EINVAL; 35 break; 36 } 37 38 err = st_llc_verify(>->llc); 39 if (err) { 40 pr_err("llc state not restored upon resume!\n"); 41 intel_gt_set_wedged_on_init(gt); 42 break; 43 } 44 } while (!__igt_timeout(end_time, NULL)); 45 46 return err; 47 } 48 49 int intel_gt_pm_live_selftests(struct drm_i915_private *i915) 50 { 51 static const struct i915_subtest tests[] = { 52 SUBTEST(live_gt_resume), 53 }; 54 55 if (intel_gt_is_wedged(&i915->gt)) 56 return 0; 57 58 return intel_gt_live_subtests(tests, &i915->gt); 59 } 60