1d897a111SMichal Wajdeczko /*
2d897a111SMichal Wajdeczko  * SPDX-License-Identifier: MIT
3d897a111SMichal Wajdeczko  *
4e52e4a31SMauro Carvalho Chehab  * Copyright © 2008-2018 Intel Corporation
5d897a111SMichal Wajdeczko  */
6d897a111SMichal Wajdeczko 
7d897a111SMichal Wajdeczko #ifndef _I915_GPU_ERROR_H_
8d897a111SMichal Wajdeczko #define _I915_GPU_ERROR_H_
9d897a111SMichal Wajdeczko 
10cb823ed9SChris Wilson #include <linux/atomic.h>
11d897a111SMichal Wajdeczko #include <linux/kref.h>
12d897a111SMichal Wajdeczko #include <linux/ktime.h>
13d897a111SMichal Wajdeczko #include <linux/sched.h>
14d897a111SMichal Wajdeczko 
15d897a111SMichal Wajdeczko #include <drm/drm_mm.h>
16d897a111SMichal Wajdeczko 
174ae7eb92SJani Nikula #include "display/intel_display_device.h"
18112ed2d3SChris Wilson #include "gt/intel_engine.h"
19*cd378c37STvrtko Ursulin #include "gt/intel_engine_types.h"
20792592e7SDaniele Ceraolo Spurio #include "gt/intel_gt_types.h"
210f261b24SDaniele Ceraolo Spurio #include "gt/uc/intel_uc_fw.h"
22112ed2d3SChris Wilson 
23d897a111SMichal Wajdeczko #include "intel_device_info.h"
24d897a111SMichal Wajdeczko 
25d897a111SMichal Wajdeczko #include "i915_gem.h"
26d897a111SMichal Wajdeczko #include "i915_gem_gtt.h"
27d897a111SMichal Wajdeczko #include "i915_params.h"
28b7268c5eSChris Wilson #include "i915_scheduler.h"
29d897a111SMichal Wajdeczko 
30d897a111SMichal Wajdeczko struct drm_i915_private;
31742379c0SChris Wilson struct i915_vma_compress;
32742379c0SChris Wilson struct intel_engine_capture_vma;
33d897a111SMichal Wajdeczko struct intel_overlay_error_state;
34d897a111SMichal Wajdeczko 
35742379c0SChris Wilson struct i915_vma_coredump {
36742379c0SChris Wilson 	struct i915_vma_coredump *next;
37d897a111SMichal Wajdeczko 
38742379c0SChris Wilson 	char name[20];
39d897a111SMichal Wajdeczko 
40742379c0SChris Wilson 	u64 gtt_offset;
41742379c0SChris Wilson 	u64 gtt_size;
42742379c0SChris Wilson 	u32 gtt_page_sizes;
43d897a111SMichal Wajdeczko 
44742379c0SChris Wilson 	int unused;
45e45b98baSThomas Hellström 	struct list_head page_list;
46742379c0SChris Wilson };
47d897a111SMichal Wajdeczko 
48742379c0SChris Wilson struct i915_request_coredump {
49742379c0SChris Wilson 	unsigned long flags;
50742379c0SChris Wilson 	pid_t pid;
51742379c0SChris Wilson 	u32 context;
52742379c0SChris Wilson 	u32 seqno;
53742379c0SChris Wilson 	u32 head;
54742379c0SChris Wilson 	u32 tail;
55742379c0SChris Wilson 	struct i915_sched_attr sched_attr;
56742379c0SChris Wilson };
57d897a111SMichal Wajdeczko 
58a6f0f9cfSAlan Previn struct __guc_capture_parsed_output;
59a6f0f9cfSAlan Previn 
60742379c0SChris Wilson struct intel_engine_coredump {
61c990b4c3SChris Wilson 	const struct intel_engine_cs *engine;
62c990b4c3SChris Wilson 
63bda30024STvrtko Ursulin 	bool hung;
64742379c0SChris Wilson 	bool simulated;
65d897a111SMichal Wajdeczko 	u32 reset_count;
66d897a111SMichal Wajdeczko 
67d897a111SMichal Wajdeczko 	/* position of active request inside the ring */
68d897a111SMichal Wajdeczko 	u32 rq_head, rq_post, rq_tail;
69d897a111SMichal Wajdeczko 
70d897a111SMichal Wajdeczko 	/* Register state */
71742379c0SChris Wilson 	u32 ccid;
72d897a111SMichal Wajdeczko 	u32 start;
73d897a111SMichal Wajdeczko 	u32 tail;
74d897a111SMichal Wajdeczko 	u32 head;
75d897a111SMichal Wajdeczko 	u32 ctl;
76d897a111SMichal Wajdeczko 	u32 mode;
77d897a111SMichal Wajdeczko 	u32 hws;
78d897a111SMichal Wajdeczko 	u32 ipeir;
79d897a111SMichal Wajdeczko 	u32 ipehr;
8070a76a9bSChris Wilson 	u32 esr;
81d897a111SMichal Wajdeczko 	u32 bbstate;
82d897a111SMichal Wajdeczko 	u32 instpm;
83d897a111SMichal Wajdeczko 	u32 instps;
84d897a111SMichal Wajdeczko 	u64 bbaddr;
85d897a111SMichal Wajdeczko 	u64 acthd;
86d897a111SMichal Wajdeczko 	u32 fault_reg;
87d897a111SMichal Wajdeczko 	u64 faddr;
88d897a111SMichal Wajdeczko 	u32 rc_psmi; /* sleep state */
89b729cfeeSStuart Summers 	u32 nopid;
90b729cfeeSStuart Summers 	u32 excc;
91b729cfeeSStuart Summers 	u32 cmd_cctl;
92b729cfeeSStuart Summers 	u32 cscmdop;
93b729cfeeSStuart Summers 	u32 ctx_sr_ctl;
94b729cfeeSStuart Summers 	u32 dma_faddr_hi;
95b729cfeeSStuart Summers 	u32 dma_faddr_lo;
96d897a111SMichal Wajdeczko 	struct intel_instdone instdone;
97d897a111SMichal Wajdeczko 
98a6f0f9cfSAlan Previn 	/* GuC matched capture-lists info */
99583ebae7SJohn Harrison 	struct intel_guc_state_capture *guc_capture;
100a6f0f9cfSAlan Previn 	struct __guc_capture_parsed_output *guc_capture_node;
101a6f0f9cfSAlan Previn 
102742379c0SChris Wilson 	struct i915_gem_context_coredump {
103d897a111SMichal Wajdeczko 		char comm[TASK_COMM_LEN];
1041883a0a4STvrtko Ursulin 
1051883a0a4STvrtko Ursulin 		u64 total_runtime;
106bb6287cbSTvrtko Ursulin 		u64 avg_runtime;
1071883a0a4STvrtko Ursulin 
108d897a111SMichal Wajdeczko 		pid_t pid;
109d897a111SMichal Wajdeczko 		int active;
110d897a111SMichal Wajdeczko 		int guilty;
111b7268c5eSChris Wilson 		struct i915_sched_attr sched_attr;
112c8a76df6SJohn Harrison 		u32 hwsp_seqno;
113d897a111SMichal Wajdeczko 	} context;
114d897a111SMichal Wajdeczko 
115742379c0SChris Wilson 	struct i915_vma_coredump *vma;
116d897a111SMichal Wajdeczko 
1171a8585bdSChris Wilson 	struct i915_request_coredump execlist[EXECLIST_MAX_PORTS];
118d897a111SMichal Wajdeczko 	unsigned int num_ports;
119d897a111SMichal Wajdeczko 
120d897a111SMichal Wajdeczko 	struct {
121d897a111SMichal Wajdeczko 		u32 gfx_mode;
122d897a111SMichal Wajdeczko 		union {
123d897a111SMichal Wajdeczko 			u64 pdp[4];
124d897a111SMichal Wajdeczko 			u32 pp_dir_base;
125d897a111SMichal Wajdeczko 		};
126d897a111SMichal Wajdeczko 	} vm_info;
127c990b4c3SChris Wilson 
128742379c0SChris Wilson 	struct intel_engine_coredump *next;
129742379c0SChris Wilson };
130742379c0SChris Wilson 
131c5de70f6SJohn Harrison struct intel_ctb_coredump {
132c5de70f6SJohn Harrison 	u32 raw_head, head;
133c5de70f6SJohn Harrison 	u32 raw_tail, tail;
134c5de70f6SJohn Harrison 	u32 raw_status;
135c5de70f6SJohn Harrison 	u32 desc_offset;
136c5de70f6SJohn Harrison 	u32 cmds_offset;
137c5de70f6SJohn Harrison 	u32 size;
138c5de70f6SJohn Harrison };
139c5de70f6SJohn Harrison 
140742379c0SChris Wilson struct intel_gt_coredump {
141742379c0SChris Wilson 	const struct intel_gt *_gt;
142742379c0SChris Wilson 	bool awake;
143742379c0SChris Wilson 	bool simulated;
144742379c0SChris Wilson 
145792592e7SDaniele Ceraolo Spurio 	struct intel_gt_info info;
146792592e7SDaniele Ceraolo Spurio 
147742379c0SChris Wilson 	/* Generic register state */
148742379c0SChris Wilson 	u32 eir;
149742379c0SChris Wilson 	u32 pgtbl_er;
150742379c0SChris Wilson 	u32 ier;
151742379c0SChris Wilson 	u32 gtier[6], ngtier;
152742379c0SChris Wilson 	u32 forcewake;
153742379c0SChris Wilson 	u32 error; /* gen6+ */
154742379c0SChris Wilson 	u32 err_int; /* gen7 */
155742379c0SChris Wilson 	u32 fault_data0; /* gen8, gen9 */
156742379c0SChris Wilson 	u32 fault_data1; /* gen8, gen9 */
157742379c0SChris Wilson 	u32 done_reg;
158742379c0SChris Wilson 	u32 gac_eco;
159742379c0SChris Wilson 	u32 gam_ecochk;
160742379c0SChris Wilson 	u32 gab_ctl;
161742379c0SChris Wilson 	u32 gfx_mode;
162742379c0SChris Wilson 	u32 gtt_cache;
163742379c0SChris Wilson 	u32 aux_err; /* gen12 */
164742379c0SChris Wilson 	u32 gam_done; /* gen12 */
165368d179aSJohn Harrison 	u32 clock_frequency;
166368d179aSJohn Harrison 	u32 clock_period_ns;
167742379c0SChris Wilson 
168a6f0f9cfSAlan Previn 	/* Display related */
169a6f0f9cfSAlan Previn 	u32 derrmr;
170a6f0f9cfSAlan Previn 	u32 sfc_done[I915_MAX_SFC]; /* gen12 */
171a6f0f9cfSAlan Previn 
172742379c0SChris Wilson 	u32 nfence;
173742379c0SChris Wilson 	u64 fence[I915_MAX_NUM_FENCES];
174742379c0SChris Wilson 
175742379c0SChris Wilson 	struct intel_engine_coredump *engine;
176742379c0SChris Wilson 
177742379c0SChris Wilson 	struct intel_uc_coredump {
178742379c0SChris Wilson 		struct intel_uc_fw guc_fw;
179742379c0SChris Wilson 		struct intel_uc_fw huc_fw;
180c5de70f6SJohn Harrison 		struct guc_info {
181c5de70f6SJohn Harrison 			struct intel_ctb_coredump ctb[2];
182c5de70f6SJohn Harrison 			struct i915_vma_coredump *vma_ctb;
183c5de70f6SJohn Harrison 			struct i915_vma_coredump *vma_log;
184368d179aSJohn Harrison 			u32 timestamp;
185c5de70f6SJohn Harrison 			u16 last_fence;
186a6f0f9cfSAlan Previn 			bool is_guc_capture;
187c5de70f6SJohn Harrison 		} guc;
188742379c0SChris Wilson 	} *uc;
189742379c0SChris Wilson 
190742379c0SChris Wilson 	struct intel_gt_coredump *next;
191742379c0SChris Wilson };
192742379c0SChris Wilson 
193742379c0SChris Wilson struct i915_gpu_coredump {
194742379c0SChris Wilson 	struct kref ref;
195742379c0SChris Wilson 	ktime_t time;
196742379c0SChris Wilson 	ktime_t boottime;
197742379c0SChris Wilson 	ktime_t uptime;
198742379c0SChris Wilson 	unsigned long capture;
199742379c0SChris Wilson 
200742379c0SChris Wilson 	struct drm_i915_private *i915;
201742379c0SChris Wilson 
202742379c0SChris Wilson 	struct intel_gt_coredump *gt;
203742379c0SChris Wilson 
204742379c0SChris Wilson 	char error_msg[128];
205742379c0SChris Wilson 	bool simulated;
206742379c0SChris Wilson 	bool wakelock;
207742379c0SChris Wilson 	bool suspended;
208742379c0SChris Wilson 	int iommu;
209742379c0SChris Wilson 	u32 reset_count;
210742379c0SChris Wilson 	u32 suspend_count;
211742379c0SChris Wilson 
212742379c0SChris Wilson 	struct intel_device_info device_info;
213742379c0SChris Wilson 	struct intel_runtime_info runtime_info;
2144ae7eb92SJani Nikula 	struct intel_display_device_info display_device_info;
2154ae7eb92SJani Nikula 	struct intel_display_runtime_info display_runtime_info;
216742379c0SChris Wilson 	struct intel_driver_caps driver_caps;
217742379c0SChris Wilson 	struct i915_params params;
218742379c0SChris Wilson 
219742379c0SChris Wilson 	struct intel_overlay_error_state *overlay;
220d897a111SMichal Wajdeczko 
2210e39037bSChris Wilson 	struct scatterlist *sgl, *fit;
222d897a111SMichal Wajdeczko };
223d897a111SMichal Wajdeczko 
224d897a111SMichal Wajdeczko struct i915_gpu_error {
225d897a111SMichal Wajdeczko 	/* For reset and error_state handling. */
226d897a111SMichal Wajdeczko 	spinlock_t lock;
227d897a111SMichal Wajdeczko 	/* Protected by the above dev->gpu_error.lock. */
228742379c0SChris Wilson 	struct i915_gpu_coredump *first_error;
229d897a111SMichal Wajdeczko 
230d897a111SMichal Wajdeczko 	atomic_t pending_fb_pin;
231d897a111SMichal Wajdeczko 
2322caffbf1SChris Wilson 	/** Number of times the device has been reset (global) */
233cb823ed9SChris Wilson 	atomic_t reset_count;
2342caffbf1SChris Wilson 
235d897a111SMichal Wajdeczko 	/** Number of times an engine has been reset */
236*cd378c37STvrtko Ursulin 	atomic_t reset_engine_count[MAX_ENGINE_CLASS];
237d897a111SMichal Wajdeczko };
238d897a111SMichal Wajdeczko 
239d897a111SMichal Wajdeczko struct drm_i915_error_state_buf {
240d897a111SMichal Wajdeczko 	struct drm_i915_private *i915;
2410e39037bSChris Wilson 	struct scatterlist *sgl, *cur, *end;
2420e39037bSChris Wilson 
2430e39037bSChris Wilson 	char *buf;
2440e39037bSChris Wilson 	size_t bytes;
2450e39037bSChris Wilson 	size_t size;
2460e39037bSChris Wilson 	loff_t iter;
2470e39037bSChris Wilson 
248d897a111SMichal Wajdeczko 	int err;
249d897a111SMichal Wajdeczko };
250d897a111SMichal Wajdeczko 
i915_reset_count(struct i915_gpu_error * error)251f9bf77dfSJani Nikula static inline u32 i915_reset_count(struct i915_gpu_error *error)
252f9bf77dfSJani Nikula {
253f9bf77dfSJani Nikula 	return atomic_read(&error->reset_count);
254f9bf77dfSJani Nikula }
255f9bf77dfSJani Nikula 
i915_reset_engine_count(struct i915_gpu_error * error,const struct intel_engine_cs * engine)256f9bf77dfSJani Nikula static inline u32 i915_reset_engine_count(struct i915_gpu_error *error,
257f9bf77dfSJani Nikula 					  const struct intel_engine_cs *engine)
258f9bf77dfSJani Nikula {
259*cd378c37STvrtko Ursulin 	return atomic_read(&error->reset_engine_count[engine->class]);
260*cd378c37STvrtko Ursulin }
261*cd378c37STvrtko Ursulin 
262*cd378c37STvrtko Ursulin static inline void
i915_increase_reset_engine_count(struct i915_gpu_error * error,const struct intel_engine_cs * engine)263*cd378c37STvrtko Ursulin i915_increase_reset_engine_count(struct i915_gpu_error *error,
264*cd378c37STvrtko Ursulin 				 const struct intel_engine_cs *engine)
265*cd378c37STvrtko Ursulin {
266*cd378c37STvrtko Ursulin 	atomic_inc(&error->reset_engine_count[engine->class]);
267f9bf77dfSJani Nikula }
268f9bf77dfSJani Nikula 
269a6f0f9cfSAlan Previn #define CORE_DUMP_FLAG_NONE           0x0
270a6f0f9cfSAlan Previn #define CORE_DUMP_FLAG_IS_GUC_CAPTURE BIT(0)
271a6f0f9cfSAlan Previn 
2726197cff3SJohn Harrison #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) && IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM)
2736197cff3SJohn Harrison void intel_klog_error_capture(struct intel_gt *gt,
2746197cff3SJohn Harrison 			      intel_engine_mask_t engine_mask);
2756197cff3SJohn Harrison #else
intel_klog_error_capture(struct intel_gt * gt,intel_engine_mask_t engine_mask)2766197cff3SJohn Harrison static inline void intel_klog_error_capture(struct intel_gt *gt,
2776197cff3SJohn Harrison 					    intel_engine_mask_t engine_mask)
2786197cff3SJohn Harrison {
2796197cff3SJohn Harrison }
2806197cff3SJohn Harrison #endif
2816197cff3SJohn Harrison 
282d897a111SMichal Wajdeczko #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
283d897a111SMichal Wajdeczko 
284d897a111SMichal Wajdeczko __printf(2, 3)
285d897a111SMichal Wajdeczko void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...);
286a0f1f7b4SAlan Previn void intel_gpu_error_print_vma(struct drm_i915_error_state_buf *m,
287a0f1f7b4SAlan Previn 			       const struct intel_engine_cs *engine,
288a0f1f7b4SAlan Previn 			       const struct i915_vma_coredump *vma);
289a0f1f7b4SAlan Previn struct i915_vma_coredump *
290a0f1f7b4SAlan Previn intel_gpu_error_find_batch(const struct intel_engine_coredump *ee);
291d897a111SMichal Wajdeczko 
292bda30024STvrtko Ursulin struct i915_gpu_coredump *i915_gpu_coredump(struct intel_gt *gt,
293a6f0f9cfSAlan Previn 					    intel_engine_mask_t engine_mask, u32 dump_flags);
294bda30024STvrtko Ursulin void i915_capture_error_state(struct intel_gt *gt,
295a6f0f9cfSAlan Previn 			      intel_engine_mask_t engine_mask, u32 dump_flags);
296d897a111SMichal Wajdeczko 
297742379c0SChris Wilson struct i915_gpu_coredump *
298742379c0SChris Wilson i915_gpu_coredump_alloc(struct drm_i915_private *i915, gfp_t gfp);
299742379c0SChris Wilson 
300742379c0SChris Wilson struct intel_gt_coredump *
301a6f0f9cfSAlan Previn intel_gt_coredump_alloc(struct intel_gt *gt, gfp_t gfp, u32 dump_flags);
302742379c0SChris Wilson 
303742379c0SChris Wilson struct intel_engine_coredump *
304a6f0f9cfSAlan Previn intel_engine_coredump_alloc(struct intel_engine_cs *engine, gfp_t gfp, u32 dump_flags);
305742379c0SChris Wilson 
306742379c0SChris Wilson struct intel_engine_capture_vma *
307742379c0SChris Wilson intel_engine_coredump_add_request(struct intel_engine_coredump *ee,
308742379c0SChris Wilson 				  struct i915_request *rq,
309742379c0SChris Wilson 				  gfp_t gfp);
310742379c0SChris Wilson 
311742379c0SChris Wilson void intel_engine_coredump_add_vma(struct intel_engine_coredump *ee,
312742379c0SChris Wilson 				   struct intel_engine_capture_vma *capture,
313742379c0SChris Wilson 				   struct i915_vma_compress *compress);
314742379c0SChris Wilson 
315742379c0SChris Wilson struct i915_vma_compress *
316742379c0SChris Wilson i915_vma_capture_prepare(struct intel_gt_coredump *gt);
317742379c0SChris Wilson 
318742379c0SChris Wilson void i915_vma_capture_finish(struct intel_gt_coredump *gt,
319742379c0SChris Wilson 			     struct i915_vma_compress *compress);
320742379c0SChris Wilson 
321742379c0SChris Wilson void i915_error_state_store(struct i915_gpu_coredump *error);
322742379c0SChris Wilson 
323742379c0SChris Wilson static inline struct i915_gpu_coredump *
i915_gpu_coredump_get(struct i915_gpu_coredump * gpu)324742379c0SChris Wilson i915_gpu_coredump_get(struct i915_gpu_coredump *gpu)
325d897a111SMichal Wajdeczko {
326d897a111SMichal Wajdeczko 	kref_get(&gpu->ref);
327d897a111SMichal Wajdeczko 	return gpu;
328d897a111SMichal Wajdeczko }
329d897a111SMichal Wajdeczko 
330742379c0SChris Wilson ssize_t
331742379c0SChris Wilson i915_gpu_coredump_copy_to_buffer(struct i915_gpu_coredump *error,
3320e39037bSChris Wilson 				 char *buf, loff_t offset, size_t count);
3330e39037bSChris Wilson 
334742379c0SChris Wilson void __i915_gpu_coredump_free(struct kref *kref);
i915_gpu_coredump_put(struct i915_gpu_coredump * gpu)335742379c0SChris Wilson static inline void i915_gpu_coredump_put(struct i915_gpu_coredump *gpu)
336d897a111SMichal Wajdeczko {
337d897a111SMichal Wajdeczko 	if (gpu)
338742379c0SChris Wilson 		kref_put(&gpu->ref, __i915_gpu_coredump_free);
339d897a111SMichal Wajdeczko }
340d897a111SMichal Wajdeczko 
341742379c0SChris Wilson struct i915_gpu_coredump *i915_first_error_state(struct drm_i915_private *i915);
342d897a111SMichal Wajdeczko void i915_reset_error_state(struct drm_i915_private *i915);
343fb6f0b64SChris Wilson void i915_disable_error_state(struct drm_i915_private *i915, int err);
344d897a111SMichal Wajdeczko 
345d897a111SMichal Wajdeczko #else
346d897a111SMichal Wajdeczko 
3475efde05fSJani Nikula __printf(2, 3)
3485efde05fSJani Nikula static inline void
i915_error_printf(struct drm_i915_error_state_buf * e,const char * f,...)3495efde05fSJani Nikula i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...)
3505efde05fSJani Nikula {
3515efde05fSJani Nikula }
3525efde05fSJani Nikula 
353bda30024STvrtko Ursulin static inline void
i915_capture_error_state(struct intel_gt * gt,intel_engine_mask_t engine_mask,u32 dump_flags)354a6f0f9cfSAlan Previn i915_capture_error_state(struct intel_gt *gt, intel_engine_mask_t engine_mask, u32 dump_flags)
355d897a111SMichal Wajdeczko {
356d897a111SMichal Wajdeczko }
357d897a111SMichal Wajdeczko 
358742379c0SChris Wilson static inline struct i915_gpu_coredump *
i915_gpu_coredump_alloc(struct drm_i915_private * i915,gfp_t gfp)359742379c0SChris Wilson i915_gpu_coredump_alloc(struct drm_i915_private *i915, gfp_t gfp)
360742379c0SChris Wilson {
361742379c0SChris Wilson 	return NULL;
362742379c0SChris Wilson }
363742379c0SChris Wilson 
364742379c0SChris Wilson static inline struct intel_gt_coredump *
intel_gt_coredump_alloc(struct intel_gt * gt,gfp_t gfp,u32 dump_flags)365a6f0f9cfSAlan Previn intel_gt_coredump_alloc(struct intel_gt *gt, gfp_t gfp, u32 dump_flags)
366742379c0SChris Wilson {
367742379c0SChris Wilson 	return NULL;
368742379c0SChris Wilson }
369742379c0SChris Wilson 
370742379c0SChris Wilson static inline struct intel_engine_coredump *
intel_engine_coredump_alloc(struct intel_engine_cs * engine,gfp_t gfp,u32 dump_flags)371a6f0f9cfSAlan Previn intel_engine_coredump_alloc(struct intel_engine_cs *engine, gfp_t gfp, u32 dump_flags)
372742379c0SChris Wilson {
373742379c0SChris Wilson 	return NULL;
374742379c0SChris Wilson }
375742379c0SChris Wilson 
376742379c0SChris Wilson static inline struct intel_engine_capture_vma *
intel_engine_coredump_add_request(struct intel_engine_coredump * ee,struct i915_request * rq,gfp_t gfp)377742379c0SChris Wilson intel_engine_coredump_add_request(struct intel_engine_coredump *ee,
378742379c0SChris Wilson 				  struct i915_request *rq,
379742379c0SChris Wilson 				  gfp_t gfp)
380742379c0SChris Wilson {
381742379c0SChris Wilson 	return NULL;
382742379c0SChris Wilson }
383742379c0SChris Wilson 
384742379c0SChris Wilson static inline void
intel_engine_coredump_add_vma(struct intel_engine_coredump * ee,struct intel_engine_capture_vma * capture,struct i915_vma_compress * compress)385742379c0SChris Wilson intel_engine_coredump_add_vma(struct intel_engine_coredump *ee,
386742379c0SChris Wilson 			      struct intel_engine_capture_vma *capture,
387742379c0SChris Wilson 			      struct i915_vma_compress *compress)
388742379c0SChris Wilson {
389742379c0SChris Wilson }
390742379c0SChris Wilson 
391742379c0SChris Wilson static inline struct i915_vma_compress *
i915_vma_capture_prepare(struct intel_gt_coredump * gt)392d713e3abSChris Wilson i915_vma_capture_prepare(struct intel_gt_coredump *gt)
393742379c0SChris Wilson {
394742379c0SChris Wilson 	return NULL;
395742379c0SChris Wilson }
396742379c0SChris Wilson 
39759be9b9cSZhang Xiaoxu static inline void
i915_vma_capture_finish(struct intel_gt_coredump * gt,struct i915_vma_compress * compress)39859be9b9cSZhang Xiaoxu i915_vma_capture_finish(struct intel_gt_coredump *gt,
399d713e3abSChris Wilson 			struct i915_vma_compress *compress)
400742379c0SChris Wilson {
401742379c0SChris Wilson }
402742379c0SChris Wilson 
403742379c0SChris Wilson static inline void
i915_error_state_store(struct i915_gpu_coredump * error)40404062c58SZhang Xiaoxu i915_error_state_store(struct i915_gpu_coredump *error)
405742379c0SChris Wilson {
406742379c0SChris Wilson }
407742379c0SChris Wilson 
i915_gpu_coredump_put(struct i915_gpu_coredump * gpu)4087e36505dSChris Wilson static inline void i915_gpu_coredump_put(struct i915_gpu_coredump *gpu)
4097e36505dSChris Wilson {
4107e36505dSChris Wilson }
4117e36505dSChris Wilson 
412742379c0SChris Wilson static inline struct i915_gpu_coredump *
i915_first_error_state(struct drm_i915_private * i915)413d897a111SMichal Wajdeczko i915_first_error_state(struct drm_i915_private *i915)
414d897a111SMichal Wajdeczko {
415fb6f0b64SChris Wilson 	return ERR_PTR(-ENODEV);
416d897a111SMichal Wajdeczko }
417d897a111SMichal Wajdeczko 
i915_reset_error_state(struct drm_i915_private * i915)418d897a111SMichal Wajdeczko static inline void i915_reset_error_state(struct drm_i915_private *i915)
419d897a111SMichal Wajdeczko {
420d897a111SMichal Wajdeczko }
421d897a111SMichal Wajdeczko 
i915_disable_error_state(struct drm_i915_private * i915,int err)422fb6f0b64SChris Wilson static inline void i915_disable_error_state(struct drm_i915_private *i915,
423fb6f0b64SChris Wilson 					    int err)
424fb6f0b64SChris Wilson {
425fb6f0b64SChris Wilson }
426fb6f0b64SChris Wilson 
427d897a111SMichal Wajdeczko #endif /* IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) */
428d897a111SMichal Wajdeczko 
429d897a111SMichal Wajdeczko #endif /* _I915_GPU_ERROR_H_ */
430