| |
| /* |
| * SPDX-License-Identifier: MIT |
| * |
| * Copyright © 2019 Intel Corporation |
| */ |
| |
| #include "selftest_llc.h" |
| |
| static int live_gt_resume(void *arg) |
| { |
| struct intel_gt *gt = arg; |
| IGT_TIMEOUT(end_time); |
| int err; |
| |
| /* Do several suspend/resume cycles to check we don't explode! */ |
| do { |
| intel_gt_suspend_prepare(gt); |
| intel_gt_suspend_late(gt); |
| |
| if (gt->rc6.enabled) { |
| pr_err("rc6 still enabled after suspend!\n"); |
| intel_gt_set_wedged_on_init(gt); |
| err = -EINVAL; |
| break; |
| } |
| |
| err = intel_gt_resume(gt); |
| if (err) |
| break; |
| |
| if (gt->rc6.supported && !gt->rc6.enabled) { |
| pr_err("rc6 not enabled upon resume!\n"); |
| intel_gt_set_wedged_on_init(gt); |
| err = -EINVAL; |
| break; |
| } |
| |
| err = st_llc_verify(>->llc); |
| if (err) { |
| pr_err("llc state not restored upon resume!\n"); |
| intel_gt_set_wedged_on_init(gt); |
| break; |
| } |
| } while (!__igt_timeout(end_time, NULL)); |
| |
| return err; |
| } |
| |
| int intel_gt_pm_live_selftests(struct drm_i915_private *i915) |
| { |
| static const struct i915_subtest tests[] = { |
| SUBTEST(live_gt_resume), |
| }; |
| |
| if (intel_gt_is_wedged(&i915->gt)) |
| return 0; |
| |
| return intel_gt_live_subtests(tests, &i915->gt); |
| } |