1 | /* SPDX-License-Identifier: MIT */ |
2 | /* |
3 | * Copyright © 2008-2018 Intel Corporation |
4 | */ |
5 | |
6 | #ifndef I915_RESET_H |
7 | #define I915_RESET_H |
8 | |
9 | #include <linux/compiler.h> |
10 | #include <linux/types.h> |
11 | #include <linux/srcu.h> |
12 | |
13 | #include "intel_engine_types.h" |
14 | #include "intel_reset_types.h" |
15 | |
16 | struct i915_request; |
17 | struct intel_engine_cs; |
18 | struct intel_gt; |
19 | struct intel_guc; |
20 | |
21 | void intel_gt_init_reset(struct intel_gt *gt); |
22 | void intel_gt_fini_reset(struct intel_gt *gt); |
23 | |
24 | __printf(4, 5) |
25 | void intel_gt_handle_error(struct intel_gt *gt, |
26 | intel_engine_mask_t engine_mask, |
27 | unsigned long flags, |
28 | const char *fmt, ...); |
29 | #define I915_ERROR_CAPTURE BIT(0) |
30 | |
31 | void intel_gt_reset(struct intel_gt *gt, |
32 | intel_engine_mask_t stalled_mask, |
33 | const char *reason); |
34 | int intel_engine_reset(struct intel_engine_cs *engine, |
35 | const char *reason); |
36 | int __intel_engine_reset_bh(struct intel_engine_cs *engine, |
37 | const char *reason); |
38 | |
39 | void __i915_request_reset(struct i915_request *rq, bool guilty); |
40 | |
41 | int __must_check intel_gt_reset_trylock(struct intel_gt *gt, int *srcu); |
42 | int __must_check intel_gt_reset_lock_interruptible(struct intel_gt *gt, int *srcu); |
43 | void intel_gt_reset_unlock(struct intel_gt *gt, int tag); |
44 | |
45 | void intel_gt_set_wedged(struct intel_gt *gt); |
46 | bool intel_gt_unset_wedged(struct intel_gt *gt); |
47 | int intel_gt_terminally_wedged(struct intel_gt *gt); |
48 | |
49 | /* |
50 | * There's no unset_wedged_on_init paired with this one. |
51 | * Once we're wedged on init, there's no going back. |
52 | * Same thing for unset_wedged_on_fini. |
53 | */ |
54 | void intel_gt_set_wedged_on_init(struct intel_gt *gt); |
55 | void intel_gt_set_wedged_on_fini(struct intel_gt *gt); |
56 | |
57 | int __intel_gt_reset(struct intel_gt *gt, intel_engine_mask_t engine_mask); |
58 | |
59 | int intel_reset_guc(struct intel_gt *gt); |
60 | |
61 | struct intel_wedge_me { |
62 | struct delayed_work work; |
63 | struct intel_gt *gt; |
64 | const char *name; |
65 | }; |
66 | |
67 | void __intel_init_wedge(struct intel_wedge_me *w, |
68 | struct intel_gt *gt, |
69 | long timeout, |
70 | const char *name); |
71 | void __intel_fini_wedge(struct intel_wedge_me *w); |
72 | |
73 | #define intel_wedge_on_timeout(W, GT, TIMEOUT) \ |
74 | for (__intel_init_wedge((W), (GT), (TIMEOUT), __func__); \ |
75 | (W)->gt; \ |
76 | __intel_fini_wedge((W))) |
77 | |
78 | bool intel_has_gpu_reset(const struct intel_gt *gt); |
79 | bool intel_has_reset_engine(const struct intel_gt *gt); |
80 | |
81 | bool intel_engine_reset_needs_wa_22011802037(struct intel_gt *gt); |
82 | |
83 | #endif /* I915_RESET_H */ |
84 | |