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