Home | History | Annotate | Line # | Download | only in selftests
      1  1.1  riastrad /*	$NetBSD: igt_reset.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $	*/
      2  1.1  riastrad 
      3  1.1  riastrad /*
      4  1.1  riastrad  * SPDX-License-Identifier: MIT
      5  1.1  riastrad  *
      6  1.1  riastrad  * Copyright  2018 Intel Corporation
      7  1.1  riastrad  */
      8  1.1  riastrad 
      9  1.1  riastrad #include <sys/cdefs.h>
     10  1.1  riastrad __KERNEL_RCSID(0, "$NetBSD: igt_reset.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
     11  1.1  riastrad 
     12  1.1  riastrad #include "igt_reset.h"
     13  1.1  riastrad 
     14  1.1  riastrad #include "gt/intel_engine.h"
     15  1.1  riastrad #include "gt/intel_gt.h"
     16  1.1  riastrad 
     17  1.1  riastrad #include "../i915_drv.h"
     18  1.1  riastrad 
     19  1.1  riastrad void igt_global_reset_lock(struct intel_gt *gt)
     20  1.1  riastrad {
     21  1.1  riastrad 	struct intel_engine_cs *engine;
     22  1.1  riastrad 	enum intel_engine_id id;
     23  1.1  riastrad 
     24  1.1  riastrad 	pr_debug("%s: current gpu_error=%08lx\n", __func__, gt->reset.flags);
     25  1.1  riastrad 
     26  1.1  riastrad 	while (test_and_set_bit(I915_RESET_BACKOFF, &gt->reset.flags))
     27  1.1  riastrad 		wait_event(gt->reset.queue,
     28  1.1  riastrad 			   !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
     29  1.1  riastrad 
     30  1.1  riastrad 	for_each_engine(engine, gt, id) {
     31  1.1  riastrad 		while (test_and_set_bit(I915_RESET_ENGINE + id,
     32  1.1  riastrad 					&gt->reset.flags))
     33  1.1  riastrad 			wait_on_bit(&gt->reset.flags, I915_RESET_ENGINE + id,
     34  1.1  riastrad 				    TASK_UNINTERRUPTIBLE);
     35  1.1  riastrad 	}
     36  1.1  riastrad }
     37  1.1  riastrad 
     38  1.1  riastrad void igt_global_reset_unlock(struct intel_gt *gt)
     39  1.1  riastrad {
     40  1.1  riastrad 	struct intel_engine_cs *engine;
     41  1.1  riastrad 	enum intel_engine_id id;
     42  1.1  riastrad 
     43  1.1  riastrad 	for_each_engine(engine, gt, id)
     44  1.1  riastrad 		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
     45  1.1  riastrad 
     46  1.1  riastrad 	clear_bit(I915_RESET_BACKOFF, &gt->reset.flags);
     47  1.1  riastrad 	wake_up_all(&gt->reset.queue);
     48  1.1  riastrad }
     49  1.1  riastrad 
     50  1.1  riastrad bool igt_force_reset(struct intel_gt *gt)
     51  1.1  riastrad {
     52  1.1  riastrad 	intel_gt_set_wedged(gt);
     53  1.1  riastrad 	intel_gt_reset(gt, 0, NULL);
     54  1.1  riastrad 
     55  1.1  riastrad 	return !intel_gt_is_wedged(gt);
     56  1.1  riastrad }
     57