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