1 /*
2  * Copyright 2008 Advanced Micro Devices, Inc.
3  * Copyright 2008 Red Hat Inc.
4  * Copyright 2009 Jerome Glisse.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  *
24  */
25 
26 #include <linux/kthread.h>
27 #include <linux/pci.h>
28 #include <linux/uaccess.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/poll.h>
31 #include <drm/drm_debugfs.h>
32 
33 #include "amdgpu.h"
34 #include "amdgpu_pm.h"
35 #include "amdgpu_dm_debugfs.h"
36 #include "amdgpu_ras.h"
37 
38 /**
39  * amdgpu_debugfs_add_files - Add simple debugfs entries
40  *
41  * @adev:  Device to attach debugfs entries to
42  * @files:  Array of function callbacks that respond to reads
43  * @nfiles: Number of callbacks to register
44  *
45  */
46 int amdgpu_debugfs_add_files(struct amdgpu_device *adev,
47 			     const struct drm_info_list *files,
48 			     unsigned nfiles)
49 {
50 	unsigned i;
51 
52 	for (i = 0; i < adev->debugfs_count; i++) {
53 		if (adev->debugfs[i].files == files) {
54 			/* Already registered */
55 			return 0;
56 		}
57 	}
58 
59 	i = adev->debugfs_count + 1;
60 	if (i > AMDGPU_DEBUGFS_MAX_COMPONENTS) {
61 		DRM_ERROR("Reached maximum number of debugfs components.\n");
62 		DRM_ERROR("Report so we increase "
63 			  "AMDGPU_DEBUGFS_MAX_COMPONENTS.\n");
64 		return -EINVAL;
65 	}
66 	adev->debugfs[adev->debugfs_count].files = files;
67 	adev->debugfs[adev->debugfs_count].num_files = nfiles;
68 	adev->debugfs_count = i;
69 #if defined(CONFIG_DEBUG_FS)
70 	drm_debugfs_create_files(files, nfiles,
71 				 adev->ddev->primary->debugfs_root,
72 				 adev->ddev->primary);
73 #endif
74 	return 0;
75 }
76 
77 int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev)
78 {
79 #if defined(CONFIG_DEBUG_FS)
80 	unsigned long timeout = 600 * HZ;
81 	int ret;
82 
83 	wake_up_interruptible(&adev->autodump.gpu_hang);
84 
85 	ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout);
86 	if (ret == 0) {
87 		pr_err("autodump: timeout, move on to gpu recovery\n");
88 		return -ETIMEDOUT;
89 	}
90 #endif
91 	return 0;
92 }
93 
94 #if defined(CONFIG_DEBUG_FS)
95 
96 static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file)
97 {
98 	struct amdgpu_device *adev = inode->i_private;
99 	int ret;
100 
101 	file->private_data = adev;
102 
103 	mutex_lock(&adev->lock_reset);
104 	if (adev->autodump.dumping.done) {
105 		reinit_completion(&adev->autodump.dumping);
106 		ret = 0;
107 	} else {
108 		ret = -EBUSY;
109 	}
110 	mutex_unlock(&adev->lock_reset);
111 
112 	return ret;
113 }
114 
115 static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file)
116 {
117 	struct amdgpu_device *adev = file->private_data;
118 
119 	complete_all(&adev->autodump.dumping);
120 	return 0;
121 }
122 
123 static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table)
124 {
125 	struct amdgpu_device *adev = file->private_data;
126 
127 	poll_wait(file, &adev->autodump.gpu_hang, poll_table);
128 
129 	if (adev->in_gpu_reset)
130 		return POLLIN | POLLRDNORM | POLLWRNORM;
131 
132 	return 0;
133 }
134 
135 static const struct file_operations autodump_debug_fops = {
136 	.owner = THIS_MODULE,
137 	.open = amdgpu_debugfs_autodump_open,
138 	.poll = amdgpu_debugfs_autodump_poll,
139 	.release = amdgpu_debugfs_autodump_release,
140 };
141 
142 static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev)
143 {
144 	init_completion(&adev->autodump.dumping);
145 	complete_all(&adev->autodump.dumping);
146 	init_waitqueue_head(&adev->autodump.gpu_hang);
147 
148 	debugfs_create_file("amdgpu_autodump", 0600,
149 		adev->ddev->primary->debugfs_root,
150 		adev, &autodump_debug_fops);
151 }
152 
153 /**
154  * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes
155  *
156  * @read: True if reading
157  * @f: open file handle
158  * @buf: User buffer to write/read to
159  * @size: Number of bytes to write/read
160  * @pos:  Offset to seek to
161  *
162  * This debugfs entry has special meaning on the offset being sought.
163  * Various bits have different meanings:
164  *
165  * Bit 62:  Indicates a GRBM bank switch is needed
166  * Bit 61:  Indicates a SRBM bank switch is needed (implies bit 62 is
167  * 			zero)
168  * Bits 24..33: The SE or ME selector if needed
169  * Bits 34..43: The SH (or SA) or PIPE selector if needed
170  * Bits 44..53: The INSTANCE (or CU/WGP) or QUEUE selector if needed
171  *
172  * Bit 23:  Indicates that the PM power gating lock should be held
173  * 			This is necessary to read registers that might be
174  * 			unreliable during a power gating transistion.
175  *
176  * The lower bits are the BYTE offset of the register to read.  This
177  * allows reading multiple registers in a single call and having
178  * the returned size reflect that.
179  */
180 static int  amdgpu_debugfs_process_reg_op(bool read, struct file *f,
181 		char __user *buf, size_t size, loff_t *pos)
182 {
183 	struct amdgpu_device *adev = file_inode(f)->i_private;
184 	ssize_t result = 0;
185 	int r;
186 	bool pm_pg_lock, use_bank, use_ring;
187 	unsigned instance_bank, sh_bank, se_bank, me, pipe, queue, vmid;
188 
189 	pm_pg_lock = use_bank = use_ring = false;
190 	instance_bank = sh_bank = se_bank = me = pipe = queue = vmid = 0;
191 
192 	if (size & 0x3 || *pos & 0x3 ||
193 			((*pos & (1ULL << 62)) && (*pos & (1ULL << 61))))
194 		return -EINVAL;
195 
196 	/* are we reading registers for which a PG lock is necessary? */
197 	pm_pg_lock = (*pos >> 23) & 1;
198 
199 	if (*pos & (1ULL << 62)) {
200 		se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24;
201 		sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34;
202 		instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44;
203 
204 		if (se_bank == 0x3FF)
205 			se_bank = 0xFFFFFFFF;
206 		if (sh_bank == 0x3FF)
207 			sh_bank = 0xFFFFFFFF;
208 		if (instance_bank == 0x3FF)
209 			instance_bank = 0xFFFFFFFF;
210 		use_bank = true;
211 	} else if (*pos & (1ULL << 61)) {
212 
213 		me = (*pos & GENMASK_ULL(33, 24)) >> 24;
214 		pipe = (*pos & GENMASK_ULL(43, 34)) >> 34;
215 		queue = (*pos & GENMASK_ULL(53, 44)) >> 44;
216 		vmid = (*pos & GENMASK_ULL(58, 54)) >> 54;
217 
218 		use_ring = true;
219 	} else {
220 		use_bank = use_ring = false;
221 	}
222 
223 	*pos &= (1UL << 22) - 1;
224 
225 	r = pm_runtime_get_sync(adev->ddev->dev);
226 	if (r < 0)
227 		return r;
228 
229 	r = amdgpu_virt_enable_access_debugfs(adev);
230 	if (r < 0)
231 		return r;
232 
233 	if (use_bank) {
234 		if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) ||
235 		    (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) {
236 			pm_runtime_mark_last_busy(adev->ddev->dev);
237 			pm_runtime_put_autosuspend(adev->ddev->dev);
238 			amdgpu_virt_disable_access_debugfs(adev);
239 			return -EINVAL;
240 		}
241 		mutex_lock(&adev->grbm_idx_mutex);
242 		amdgpu_gfx_select_se_sh(adev, se_bank,
243 					sh_bank, instance_bank);
244 	} else if (use_ring) {
245 		mutex_lock(&adev->srbm_mutex);
246 		amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue, vmid);
247 	}
248 
249 	if (pm_pg_lock)
250 		mutex_lock(&adev->pm.mutex);
251 
252 	while (size) {
253 		uint32_t value;
254 
255 		if (read) {
256 			value = RREG32(*pos >> 2);
257 			r = put_user(value, (uint32_t *)buf);
258 		} else {
259 			r = get_user(value, (uint32_t *)buf);
260 			if (!r)
261 				amdgpu_mm_wreg_mmio_rlc(adev, *pos >> 2, value, 0);
262 		}
263 		if (r) {
264 			result = r;
265 			goto end;
266 		}
267 
268 		result += 4;
269 		buf += 4;
270 		*pos += 4;
271 		size -= 4;
272 	}
273 
274 end:
275 	if (use_bank) {
276 		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
277 		mutex_unlock(&adev->grbm_idx_mutex);
278 	} else if (use_ring) {
279 		amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0);
280 		mutex_unlock(&adev->srbm_mutex);
281 	}
282 
283 	if (pm_pg_lock)
284 		mutex_unlock(&adev->pm.mutex);
285 
286 	pm_runtime_mark_last_busy(adev->ddev->dev);
287 	pm_runtime_put_autosuspend(adev->ddev->dev);
288 
289 	amdgpu_virt_disable_access_debugfs(adev);
290 	return result;
291 }
292 
293 /**
294  * amdgpu_debugfs_regs_read - Callback for reading MMIO registers
295  */
296 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
297 					size_t size, loff_t *pos)
298 {
299 	return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos);
300 }
301 
302 /**
303  * amdgpu_debugfs_regs_write - Callback for writing MMIO registers
304  */
305 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
306 					 size_t size, loff_t *pos)
307 {
308 	return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos);
309 }
310 
311 
312 /**
313  * amdgpu_debugfs_regs_pcie_read - Read from a PCIE register
314  *
315  * @f: open file handle
316  * @buf: User buffer to store read data in
317  * @size: Number of bytes to read
318  * @pos:  Offset to seek to
319  *
320  * The lower bits are the BYTE offset of the register to read.  This
321  * allows reading multiple registers in a single call and having
322  * the returned size reflect that.
323  */
324 static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf,
325 					size_t size, loff_t *pos)
326 {
327 	struct amdgpu_device *adev = file_inode(f)->i_private;
328 	ssize_t result = 0;
329 	int r;
330 
331 	if (size & 0x3 || *pos & 0x3)
332 		return -EINVAL;
333 
334 	r = pm_runtime_get_sync(adev->ddev->dev);
335 	if (r < 0)
336 		return r;
337 
338 	r = amdgpu_virt_enable_access_debugfs(adev);
339 	if (r < 0)
340 		return r;
341 
342 	while (size) {
343 		uint32_t value;
344 
345 		value = RREG32_PCIE(*pos >> 2);
346 		r = put_user(value, (uint32_t *)buf);
347 		if (r) {
348 			pm_runtime_mark_last_busy(adev->ddev->dev);
349 			pm_runtime_put_autosuspend(adev->ddev->dev);
350 			amdgpu_virt_disable_access_debugfs(adev);
351 			return r;
352 		}
353 
354 		result += 4;
355 		buf += 4;
356 		*pos += 4;
357 		size -= 4;
358 	}
359 
360 	pm_runtime_mark_last_busy(adev->ddev->dev);
361 	pm_runtime_put_autosuspend(adev->ddev->dev);
362 
363 	amdgpu_virt_disable_access_debugfs(adev);
364 	return result;
365 }
366 
367 /**
368  * amdgpu_debugfs_regs_pcie_write - Write to a PCIE register
369  *
370  * @f: open file handle
371  * @buf: User buffer to write data from
372  * @size: Number of bytes to write
373  * @pos:  Offset to seek to
374  *
375  * The lower bits are the BYTE offset of the register to write.  This
376  * allows writing multiple registers in a single call and having
377  * the returned size reflect that.
378  */
379 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf,
380 					 size_t size, loff_t *pos)
381 {
382 	struct amdgpu_device *adev = file_inode(f)->i_private;
383 	ssize_t result = 0;
384 	int r;
385 
386 	if (size & 0x3 || *pos & 0x3)
387 		return -EINVAL;
388 
389 	r = pm_runtime_get_sync(adev->ddev->dev);
390 	if (r < 0)
391 		return r;
392 
393 	r = amdgpu_virt_enable_access_debugfs(adev);
394 	if (r < 0)
395 		return r;
396 
397 	while (size) {
398 		uint32_t value;
399 
400 		r = get_user(value, (uint32_t *)buf);
401 		if (r) {
402 			pm_runtime_mark_last_busy(adev->ddev->dev);
403 			pm_runtime_put_autosuspend(adev->ddev->dev);
404 			amdgpu_virt_disable_access_debugfs(adev);
405 			return r;
406 		}
407 
408 		WREG32_PCIE(*pos >> 2, value);
409 
410 		result += 4;
411 		buf += 4;
412 		*pos += 4;
413 		size -= 4;
414 	}
415 
416 	pm_runtime_mark_last_busy(adev->ddev->dev);
417 	pm_runtime_put_autosuspend(adev->ddev->dev);
418 
419 	amdgpu_virt_disable_access_debugfs(adev);
420 	return result;
421 }
422 
423 /**
424  * amdgpu_debugfs_regs_didt_read - Read from a DIDT register
425  *
426  * @f: open file handle
427  * @buf: User buffer to store read data in
428  * @size: Number of bytes to read
429  * @pos:  Offset to seek to
430  *
431  * The lower bits are the BYTE offset of the register to read.  This
432  * allows reading multiple registers in a single call and having
433  * the returned size reflect that.
434  */
435 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf,
436 					size_t size, loff_t *pos)
437 {
438 	struct amdgpu_device *adev = file_inode(f)->i_private;
439 	ssize_t result = 0;
440 	int r;
441 
442 	if (size & 0x3 || *pos & 0x3)
443 		return -EINVAL;
444 
445 	r = pm_runtime_get_sync(adev->ddev->dev);
446 	if (r < 0)
447 		return r;
448 
449 	r = amdgpu_virt_enable_access_debugfs(adev);
450 	if (r < 0)
451 		return r;
452 
453 	while (size) {
454 		uint32_t value;
455 
456 		value = RREG32_DIDT(*pos >> 2);
457 		r = put_user(value, (uint32_t *)buf);
458 		if (r) {
459 			pm_runtime_mark_last_busy(adev->ddev->dev);
460 			pm_runtime_put_autosuspend(adev->ddev->dev);
461 			amdgpu_virt_disable_access_debugfs(adev);
462 			return r;
463 		}
464 
465 		result += 4;
466 		buf += 4;
467 		*pos += 4;
468 		size -= 4;
469 	}
470 
471 	pm_runtime_mark_last_busy(adev->ddev->dev);
472 	pm_runtime_put_autosuspend(adev->ddev->dev);
473 
474 	amdgpu_virt_disable_access_debugfs(adev);
475 	return result;
476 }
477 
478 /**
479  * amdgpu_debugfs_regs_didt_write - Write to a DIDT register
480  *
481  * @f: open file handle
482  * @buf: User buffer to write data from
483  * @size: Number of bytes to write
484  * @pos:  Offset to seek to
485  *
486  * The lower bits are the BYTE offset of the register to write.  This
487  * allows writing multiple registers in a single call and having
488  * the returned size reflect that.
489  */
490 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf,
491 					 size_t size, loff_t *pos)
492 {
493 	struct amdgpu_device *adev = file_inode(f)->i_private;
494 	ssize_t result = 0;
495 	int r;
496 
497 	if (size & 0x3 || *pos & 0x3)
498 		return -EINVAL;
499 
500 	r = pm_runtime_get_sync(adev->ddev->dev);
501 	if (r < 0)
502 		return r;
503 
504 	r = amdgpu_virt_enable_access_debugfs(adev);
505 	if (r < 0)
506 		return r;
507 
508 	while (size) {
509 		uint32_t value;
510 
511 		r = get_user(value, (uint32_t *)buf);
512 		if (r) {
513 			pm_runtime_mark_last_busy(adev->ddev->dev);
514 			pm_runtime_put_autosuspend(adev->ddev->dev);
515 			amdgpu_virt_disable_access_debugfs(adev);
516 			return r;
517 		}
518 
519 		WREG32_DIDT(*pos >> 2, value);
520 
521 		result += 4;
522 		buf += 4;
523 		*pos += 4;
524 		size -= 4;
525 	}
526 
527 	pm_runtime_mark_last_busy(adev->ddev->dev);
528 	pm_runtime_put_autosuspend(adev->ddev->dev);
529 
530 	amdgpu_virt_disable_access_debugfs(adev);
531 	return result;
532 }
533 
534 /**
535  * amdgpu_debugfs_regs_smc_read - Read from a SMC register
536  *
537  * @f: open file handle
538  * @buf: User buffer to store read data in
539  * @size: Number of bytes to read
540  * @pos:  Offset to seek to
541  *
542  * The lower bits are the BYTE offset of the register to read.  This
543  * allows reading multiple registers in a single call and having
544  * the returned size reflect that.
545  */
546 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
547 					size_t size, loff_t *pos)
548 {
549 	struct amdgpu_device *adev = file_inode(f)->i_private;
550 	ssize_t result = 0;
551 	int r;
552 
553 	if (size & 0x3 || *pos & 0x3)
554 		return -EINVAL;
555 
556 	r = pm_runtime_get_sync(adev->ddev->dev);
557 	if (r < 0)
558 		return r;
559 
560 	r = amdgpu_virt_enable_access_debugfs(adev);
561 	if (r < 0)
562 		return r;
563 
564 	while (size) {
565 		uint32_t value;
566 
567 		value = RREG32_SMC(*pos);
568 		r = put_user(value, (uint32_t *)buf);
569 		if (r) {
570 			pm_runtime_mark_last_busy(adev->ddev->dev);
571 			pm_runtime_put_autosuspend(adev->ddev->dev);
572 			amdgpu_virt_disable_access_debugfs(adev);
573 			return r;
574 		}
575 
576 		result += 4;
577 		buf += 4;
578 		*pos += 4;
579 		size -= 4;
580 	}
581 
582 	pm_runtime_mark_last_busy(adev->ddev->dev);
583 	pm_runtime_put_autosuspend(adev->ddev->dev);
584 
585 	amdgpu_virt_disable_access_debugfs(adev);
586 	return result;
587 }
588 
589 /**
590  * amdgpu_debugfs_regs_smc_write - Write to a SMC register
591  *
592  * @f: open file handle
593  * @buf: User buffer to write data from
594  * @size: Number of bytes to write
595  * @pos:  Offset to seek to
596  *
597  * The lower bits are the BYTE offset of the register to write.  This
598  * allows writing multiple registers in a single call and having
599  * the returned size reflect that.
600  */
601 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf,
602 					 size_t size, loff_t *pos)
603 {
604 	struct amdgpu_device *adev = file_inode(f)->i_private;
605 	ssize_t result = 0;
606 	int r;
607 
608 	if (size & 0x3 || *pos & 0x3)
609 		return -EINVAL;
610 
611 	r = pm_runtime_get_sync(adev->ddev->dev);
612 	if (r < 0)
613 		return r;
614 
615 	r = amdgpu_virt_enable_access_debugfs(adev);
616 	if (r < 0)
617 		return r;
618 
619 	while (size) {
620 		uint32_t value;
621 
622 		r = get_user(value, (uint32_t *)buf);
623 		if (r) {
624 			pm_runtime_mark_last_busy(adev->ddev->dev);
625 			pm_runtime_put_autosuspend(adev->ddev->dev);
626 			amdgpu_virt_disable_access_debugfs(adev);
627 			return r;
628 		}
629 
630 		WREG32_SMC(*pos, value);
631 
632 		result += 4;
633 		buf += 4;
634 		*pos += 4;
635 		size -= 4;
636 	}
637 
638 	pm_runtime_mark_last_busy(adev->ddev->dev);
639 	pm_runtime_put_autosuspend(adev->ddev->dev);
640 
641 	amdgpu_virt_disable_access_debugfs(adev);
642 	return result;
643 }
644 
645 /**
646  * amdgpu_debugfs_gca_config_read - Read from gfx config data
647  *
648  * @f: open file handle
649  * @buf: User buffer to store read data in
650  * @size: Number of bytes to read
651  * @pos:  Offset to seek to
652  *
653  * This file is used to access configuration data in a somewhat
654  * stable fashion.  The format is a series of DWORDs with the first
655  * indicating which revision it is.  New content is appended to the
656  * end so that older software can still read the data.
657  */
658 
659 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf,
660 					size_t size, loff_t *pos)
661 {
662 	struct amdgpu_device *adev = file_inode(f)->i_private;
663 	ssize_t result = 0;
664 	int r;
665 	uint32_t *config, no_regs = 0;
666 
667 	if (size & 0x3 || *pos & 0x3)
668 		return -EINVAL;
669 
670 	config = kmalloc_array(256, sizeof(*config), GFP_KERNEL);
671 	if (!config)
672 		return -ENOMEM;
673 
674 	/* version, increment each time something is added */
675 	config[no_regs++] = 3;
676 	config[no_regs++] = adev->gfx.config.max_shader_engines;
677 	config[no_regs++] = adev->gfx.config.max_tile_pipes;
678 	config[no_regs++] = adev->gfx.config.max_cu_per_sh;
679 	config[no_regs++] = adev->gfx.config.max_sh_per_se;
680 	config[no_regs++] = adev->gfx.config.max_backends_per_se;
681 	config[no_regs++] = adev->gfx.config.max_texture_channel_caches;
682 	config[no_regs++] = adev->gfx.config.max_gprs;
683 	config[no_regs++] = adev->gfx.config.max_gs_threads;
684 	config[no_regs++] = adev->gfx.config.max_hw_contexts;
685 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend;
686 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend;
687 	config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size;
688 	config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size;
689 	config[no_regs++] = adev->gfx.config.num_tile_pipes;
690 	config[no_regs++] = adev->gfx.config.backend_enable_mask;
691 	config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes;
692 	config[no_regs++] = adev->gfx.config.mem_row_size_in_kb;
693 	config[no_regs++] = adev->gfx.config.shader_engine_tile_size;
694 	config[no_regs++] = adev->gfx.config.num_gpus;
695 	config[no_regs++] = adev->gfx.config.multi_gpu_tile_size;
696 	config[no_regs++] = adev->gfx.config.mc_arb_ramcfg;
697 	config[no_regs++] = adev->gfx.config.gb_addr_config;
698 	config[no_regs++] = adev->gfx.config.num_rbs;
699 
700 	/* rev==1 */
701 	config[no_regs++] = adev->rev_id;
702 	config[no_regs++] = adev->pg_flags;
703 	config[no_regs++] = adev->cg_flags;
704 
705 	/* rev==2 */
706 	config[no_regs++] = adev->family;
707 	config[no_regs++] = adev->external_rev_id;
708 
709 	/* rev==3 */
710 	config[no_regs++] = adev->pdev->device;
711 	config[no_regs++] = adev->pdev->revision;
712 	config[no_regs++] = adev->pdev->subsystem_device;
713 	config[no_regs++] = adev->pdev->subsystem_vendor;
714 
715 	while (size && (*pos < no_regs * 4)) {
716 		uint32_t value;
717 
718 		value = config[*pos >> 2];
719 		r = put_user(value, (uint32_t *)buf);
720 		if (r) {
721 			kfree(config);
722 			return r;
723 		}
724 
725 		result += 4;
726 		buf += 4;
727 		*pos += 4;
728 		size -= 4;
729 	}
730 
731 	kfree(config);
732 	return result;
733 }
734 
735 /**
736  * amdgpu_debugfs_sensor_read - Read from the powerplay sensors
737  *
738  * @f: open file handle
739  * @buf: User buffer to store read data in
740  * @size: Number of bytes to read
741  * @pos:  Offset to seek to
742  *
743  * The offset is treated as the BYTE address of one of the sensors
744  * enumerated in amd/include/kgd_pp_interface.h under the
745  * 'amd_pp_sensors' enumeration.  For instance to read the UVD VCLK
746  * you would use the offset 3 * 4 = 12.
747  */
748 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf,
749 					size_t size, loff_t *pos)
750 {
751 	struct amdgpu_device *adev = file_inode(f)->i_private;
752 	int idx, x, outsize, r, valuesize;
753 	uint32_t values[16];
754 
755 	if (size & 3 || *pos & 0x3)
756 		return -EINVAL;
757 
758 	if (!adev->pm.dpm_enabled)
759 		return -EINVAL;
760 
761 	/* convert offset to sensor number */
762 	idx = *pos >> 2;
763 
764 	valuesize = sizeof(values);
765 
766 	r = pm_runtime_get_sync(adev->ddev->dev);
767 	if (r < 0)
768 		return r;
769 
770 	r = amdgpu_virt_enable_access_debugfs(adev);
771 	if (r < 0)
772 		return r;
773 
774 	r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize);
775 
776 	pm_runtime_mark_last_busy(adev->ddev->dev);
777 	pm_runtime_put_autosuspend(adev->ddev->dev);
778 
779 	if (r) {
780 		amdgpu_virt_disable_access_debugfs(adev);
781 		return r;
782 	}
783 
784 	if (size > valuesize) {
785 		amdgpu_virt_disable_access_debugfs(adev);
786 		return -EINVAL;
787 	}
788 
789 	outsize = 0;
790 	x = 0;
791 	if (!r) {
792 		while (size) {
793 			r = put_user(values[x++], (int32_t *)buf);
794 			buf += 4;
795 			size -= 4;
796 			outsize += 4;
797 		}
798 	}
799 
800 	amdgpu_virt_disable_access_debugfs(adev);
801 	return !r ? outsize : r;
802 }
803 
804 /** amdgpu_debugfs_wave_read - Read WAVE STATUS data
805  *
806  * @f: open file handle
807  * @buf: User buffer to store read data in
808  * @size: Number of bytes to read
809  * @pos:  Offset to seek to
810  *
811  * The offset being sought changes which wave that the status data
812  * will be returned for.  The bits are used as follows:
813  *
814  * Bits 0..6: 	Byte offset into data
815  * Bits 7..14:	SE selector
816  * Bits 15..22:	SH/SA selector
817  * Bits 23..30: CU/{WGP+SIMD} selector
818  * Bits 31..36: WAVE ID selector
819  * Bits 37..44: SIMD ID selector
820  *
821  * The returned data begins with one DWORD of version information
822  * Followed by WAVE STATUS registers relevant to the GFX IP version
823  * being used.  See gfx_v8_0_read_wave_data() for an example output.
824  */
825 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
826 					size_t size, loff_t *pos)
827 {
828 	struct amdgpu_device *adev = f->f_inode->i_private;
829 	int r, x;
830 	ssize_t result=0;
831 	uint32_t offset, se, sh, cu, wave, simd, data[32];
832 
833 	if (size & 3 || *pos & 3)
834 		return -EINVAL;
835 
836 	/* decode offset */
837 	offset = (*pos & GENMASK_ULL(6, 0));
838 	se = (*pos & GENMASK_ULL(14, 7)) >> 7;
839 	sh = (*pos & GENMASK_ULL(22, 15)) >> 15;
840 	cu = (*pos & GENMASK_ULL(30, 23)) >> 23;
841 	wave = (*pos & GENMASK_ULL(36, 31)) >> 31;
842 	simd = (*pos & GENMASK_ULL(44, 37)) >> 37;
843 
844 	r = pm_runtime_get_sync(adev->ddev->dev);
845 	if (r < 0)
846 		return r;
847 
848 	r = amdgpu_virt_enable_access_debugfs(adev);
849 	if (r < 0)
850 		return r;
851 
852 	/* switch to the specific se/sh/cu */
853 	mutex_lock(&adev->grbm_idx_mutex);
854 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
855 
856 	x = 0;
857 	if (adev->gfx.funcs->read_wave_data)
858 		adev->gfx.funcs->read_wave_data(adev, simd, wave, data, &x);
859 
860 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
861 	mutex_unlock(&adev->grbm_idx_mutex);
862 
863 	pm_runtime_mark_last_busy(adev->ddev->dev);
864 	pm_runtime_put_autosuspend(adev->ddev->dev);
865 
866 	if (!x) {
867 		amdgpu_virt_disable_access_debugfs(adev);
868 		return -EINVAL;
869 	}
870 
871 	while (size && (offset < x * 4)) {
872 		uint32_t value;
873 
874 		value = data[offset >> 2];
875 		r = put_user(value, (uint32_t *)buf);
876 		if (r) {
877 			amdgpu_virt_disable_access_debugfs(adev);
878 			return r;
879 		}
880 
881 		result += 4;
882 		buf += 4;
883 		offset += 4;
884 		size -= 4;
885 	}
886 
887 	amdgpu_virt_disable_access_debugfs(adev);
888 	return result;
889 }
890 
891 /** amdgpu_debugfs_gpr_read - Read wave gprs
892  *
893  * @f: open file handle
894  * @buf: User buffer to store read data in
895  * @size: Number of bytes to read
896  * @pos:  Offset to seek to
897  *
898  * The offset being sought changes which wave that the status data
899  * will be returned for.  The bits are used as follows:
900  *
901  * Bits 0..11:	Byte offset into data
902  * Bits 12..19:	SE selector
903  * Bits 20..27:	SH/SA selector
904  * Bits 28..35: CU/{WGP+SIMD} selector
905  * Bits 36..43: WAVE ID selector
906  * Bits 37..44: SIMD ID selector
907  * Bits 52..59: Thread selector
908  * Bits 60..61: Bank selector (VGPR=0,SGPR=1)
909  *
910  * The return data comes from the SGPR or VGPR register bank for
911  * the selected operational unit.
912  */
913 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
914 					size_t size, loff_t *pos)
915 {
916 	struct amdgpu_device *adev = f->f_inode->i_private;
917 	int r;
918 	ssize_t result = 0;
919 	uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
920 
921 	if (size > 4096 || size & 3 || *pos & 3)
922 		return -EINVAL;
923 
924 	/* decode offset */
925 	offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
926 	se = (*pos & GENMASK_ULL(19, 12)) >> 12;
927 	sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
928 	cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
929 	wave = (*pos & GENMASK_ULL(43, 36)) >> 36;
930 	simd = (*pos & GENMASK_ULL(51, 44)) >> 44;
931 	thread = (*pos & GENMASK_ULL(59, 52)) >> 52;
932 	bank = (*pos & GENMASK_ULL(61, 60)) >> 60;
933 
934 	data = kcalloc(1024, sizeof(*data), GFP_KERNEL);
935 	if (!data)
936 		return -ENOMEM;
937 
938 	r = pm_runtime_get_sync(adev->ddev->dev);
939 	if (r < 0)
940 		return r;
941 
942 	r = amdgpu_virt_enable_access_debugfs(adev);
943 	if (r < 0)
944 		return r;
945 
946 	/* switch to the specific se/sh/cu */
947 	mutex_lock(&adev->grbm_idx_mutex);
948 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
949 
950 	if (bank == 0) {
951 		if (adev->gfx.funcs->read_wave_vgprs)
952 			adev->gfx.funcs->read_wave_vgprs(adev, simd, wave, thread, offset, size>>2, data);
953 	} else {
954 		if (adev->gfx.funcs->read_wave_sgprs)
955 			adev->gfx.funcs->read_wave_sgprs(adev, simd, wave, offset, size>>2, data);
956 	}
957 
958 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
959 	mutex_unlock(&adev->grbm_idx_mutex);
960 
961 	pm_runtime_mark_last_busy(adev->ddev->dev);
962 	pm_runtime_put_autosuspend(adev->ddev->dev);
963 
964 	while (size) {
965 		uint32_t value;
966 
967 		value = data[result >> 2];
968 		r = put_user(value, (uint32_t *)buf);
969 		if (r) {
970 			result = r;
971 			goto err;
972 		}
973 
974 		result += 4;
975 		buf += 4;
976 		size -= 4;
977 	}
978 
979 err:
980 	kfree(data);
981 	amdgpu_virt_disable_access_debugfs(adev);
982 	return result;
983 }
984 
985 /**
986  * amdgpu_debugfs_regs_gfxoff_write - Enable/disable GFXOFF
987  *
988  * @f: open file handle
989  * @buf: User buffer to write data from
990  * @size: Number of bytes to write
991  * @pos:  Offset to seek to
992  *
993  * Write a 32-bit zero to disable or a 32-bit non-zero to enable
994  */
995 static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf,
996 					 size_t size, loff_t *pos)
997 {
998 	struct amdgpu_device *adev = file_inode(f)->i_private;
999 	ssize_t result = 0;
1000 	int r;
1001 
1002 	if (size & 0x3 || *pos & 0x3)
1003 		return -EINVAL;
1004 
1005 	r = pm_runtime_get_sync(adev->ddev->dev);
1006 	if (r < 0)
1007 		return r;
1008 
1009 	while (size) {
1010 		uint32_t value;
1011 
1012 		r = get_user(value, (uint32_t *)buf);
1013 		if (r) {
1014 			pm_runtime_mark_last_busy(adev->ddev->dev);
1015 			pm_runtime_put_autosuspend(adev->ddev->dev);
1016 			return r;
1017 		}
1018 
1019 		amdgpu_gfx_off_ctrl(adev, value ? true : false);
1020 
1021 		result += 4;
1022 		buf += 4;
1023 		*pos += 4;
1024 		size -= 4;
1025 	}
1026 
1027 	pm_runtime_mark_last_busy(adev->ddev->dev);
1028 	pm_runtime_put_autosuspend(adev->ddev->dev);
1029 
1030 	return result;
1031 }
1032 
1033 
1034 static const struct file_operations amdgpu_debugfs_regs_fops = {
1035 	.owner = THIS_MODULE,
1036 	.read = amdgpu_debugfs_regs_read,
1037 	.write = amdgpu_debugfs_regs_write,
1038 	.llseek = default_llseek
1039 };
1040 static const struct file_operations amdgpu_debugfs_regs_didt_fops = {
1041 	.owner = THIS_MODULE,
1042 	.read = amdgpu_debugfs_regs_didt_read,
1043 	.write = amdgpu_debugfs_regs_didt_write,
1044 	.llseek = default_llseek
1045 };
1046 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = {
1047 	.owner = THIS_MODULE,
1048 	.read = amdgpu_debugfs_regs_pcie_read,
1049 	.write = amdgpu_debugfs_regs_pcie_write,
1050 	.llseek = default_llseek
1051 };
1052 static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
1053 	.owner = THIS_MODULE,
1054 	.read = amdgpu_debugfs_regs_smc_read,
1055 	.write = amdgpu_debugfs_regs_smc_write,
1056 	.llseek = default_llseek
1057 };
1058 
1059 static const struct file_operations amdgpu_debugfs_gca_config_fops = {
1060 	.owner = THIS_MODULE,
1061 	.read = amdgpu_debugfs_gca_config_read,
1062 	.llseek = default_llseek
1063 };
1064 
1065 static const struct file_operations amdgpu_debugfs_sensors_fops = {
1066 	.owner = THIS_MODULE,
1067 	.read = amdgpu_debugfs_sensor_read,
1068 	.llseek = default_llseek
1069 };
1070 
1071 static const struct file_operations amdgpu_debugfs_wave_fops = {
1072 	.owner = THIS_MODULE,
1073 	.read = amdgpu_debugfs_wave_read,
1074 	.llseek = default_llseek
1075 };
1076 static const struct file_operations amdgpu_debugfs_gpr_fops = {
1077 	.owner = THIS_MODULE,
1078 	.read = amdgpu_debugfs_gpr_read,
1079 	.llseek = default_llseek
1080 };
1081 
1082 static const struct file_operations amdgpu_debugfs_gfxoff_fops = {
1083 	.owner = THIS_MODULE,
1084 	.write = amdgpu_debugfs_gfxoff_write,
1085 };
1086 
1087 static const struct file_operations *debugfs_regs[] = {
1088 	&amdgpu_debugfs_regs_fops,
1089 	&amdgpu_debugfs_regs_didt_fops,
1090 	&amdgpu_debugfs_regs_pcie_fops,
1091 	&amdgpu_debugfs_regs_smc_fops,
1092 	&amdgpu_debugfs_gca_config_fops,
1093 	&amdgpu_debugfs_sensors_fops,
1094 	&amdgpu_debugfs_wave_fops,
1095 	&amdgpu_debugfs_gpr_fops,
1096 	&amdgpu_debugfs_gfxoff_fops,
1097 };
1098 
1099 static const char *debugfs_regs_names[] = {
1100 	"amdgpu_regs",
1101 	"amdgpu_regs_didt",
1102 	"amdgpu_regs_pcie",
1103 	"amdgpu_regs_smc",
1104 	"amdgpu_gca_config",
1105 	"amdgpu_sensors",
1106 	"amdgpu_wave",
1107 	"amdgpu_gpr",
1108 	"amdgpu_gfxoff",
1109 };
1110 
1111 /**
1112  * amdgpu_debugfs_regs_init -	Initialize debugfs entries that provide
1113  * 								register access.
1114  *
1115  * @adev: The device to attach the debugfs entries to
1116  */
1117 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1118 {
1119 	struct drm_minor *minor = adev->ddev->primary;
1120 	struct dentry *ent, *root = minor->debugfs_root;
1121 	unsigned int i;
1122 
1123 	for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) {
1124 		ent = debugfs_create_file(debugfs_regs_names[i],
1125 					  S_IFREG | S_IRUGO, root,
1126 					  adev, debugfs_regs[i]);
1127 		if (!i && !IS_ERR_OR_NULL(ent))
1128 			i_size_write(ent->d_inode, adev->rmmio_size);
1129 		adev->debugfs_regs[i] = ent;
1130 	}
1131 
1132 	return 0;
1133 }
1134 
1135 static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data)
1136 {
1137 	struct drm_info_node *node = (struct drm_info_node *) m->private;
1138 	struct drm_device *dev = node->minor->dev;
1139 	struct amdgpu_device *adev = dev->dev_private;
1140 	int r = 0, i;
1141 
1142 	r = pm_runtime_get_sync(dev->dev);
1143 	if (r < 0)
1144 		return r;
1145 
1146 	/* Avoid accidently unparking the sched thread during GPU reset */
1147 	mutex_lock(&adev->lock_reset);
1148 
1149 	/* hold on the scheduler */
1150 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1151 		struct amdgpu_ring *ring = adev->rings[i];
1152 
1153 		if (!ring || !ring->sched.thread)
1154 			continue;
1155 		kthread_park(ring->sched.thread);
1156 	}
1157 
1158 	seq_printf(m, "run ib test:\n");
1159 	r = amdgpu_ib_ring_tests(adev);
1160 	if (r)
1161 		seq_printf(m, "ib ring tests failed (%d).\n", r);
1162 	else
1163 		seq_printf(m, "ib ring tests passed.\n");
1164 
1165 	/* go on the scheduler */
1166 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1167 		struct amdgpu_ring *ring = adev->rings[i];
1168 
1169 		if (!ring || !ring->sched.thread)
1170 			continue;
1171 		kthread_unpark(ring->sched.thread);
1172 	}
1173 
1174 	mutex_unlock(&adev->lock_reset);
1175 
1176 	pm_runtime_mark_last_busy(dev->dev);
1177 	pm_runtime_put_autosuspend(dev->dev);
1178 
1179 	return 0;
1180 }
1181 
1182 static int amdgpu_debugfs_get_vbios_dump(struct seq_file *m, void *data)
1183 {
1184 	struct drm_info_node *node = (struct drm_info_node *) m->private;
1185 	struct drm_device *dev = node->minor->dev;
1186 	struct amdgpu_device *adev = dev->dev_private;
1187 
1188 	seq_write(m, adev->bios, adev->bios_size);
1189 	return 0;
1190 }
1191 
1192 static int amdgpu_debugfs_evict_vram(struct seq_file *m, void *data)
1193 {
1194 	struct drm_info_node *node = (struct drm_info_node *)m->private;
1195 	struct drm_device *dev = node->minor->dev;
1196 	struct amdgpu_device *adev = dev->dev_private;
1197 	int r;
1198 
1199 	r = pm_runtime_get_sync(dev->dev);
1200 	if (r < 0)
1201 		return r;
1202 
1203 	seq_printf(m, "(%d)\n", amdgpu_bo_evict_vram(adev));
1204 
1205 	pm_runtime_mark_last_busy(dev->dev);
1206 	pm_runtime_put_autosuspend(dev->dev);
1207 
1208 	return 0;
1209 }
1210 
1211 static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data)
1212 {
1213 	struct drm_info_node *node = (struct drm_info_node *)m->private;
1214 	struct drm_device *dev = node->minor->dev;
1215 	struct amdgpu_device *adev = dev->dev_private;
1216 	int r;
1217 
1218 	r = pm_runtime_get_sync(dev->dev);
1219 	if (r < 0)
1220 		return r;
1221 
1222 	seq_printf(m, "(%d)\n", ttm_bo_evict_mm(&adev->mman.bdev, TTM_PL_TT));
1223 
1224 	pm_runtime_mark_last_busy(dev->dev);
1225 	pm_runtime_put_autosuspend(dev->dev);
1226 
1227 	return 0;
1228 }
1229 
1230 static const struct drm_info_list amdgpu_debugfs_list[] = {
1231 	{"amdgpu_vbios", amdgpu_debugfs_get_vbios_dump},
1232 	{"amdgpu_test_ib", &amdgpu_debugfs_test_ib},
1233 	{"amdgpu_evict_vram", &amdgpu_debugfs_evict_vram},
1234 	{"amdgpu_evict_gtt", &amdgpu_debugfs_evict_gtt},
1235 };
1236 
1237 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
1238 					  struct dma_fence **fences)
1239 {
1240 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1241 	uint32_t sync_seq, last_seq;
1242 
1243 	last_seq = atomic_read(&ring->fence_drv.last_seq);
1244 	sync_seq = ring->fence_drv.sync_seq;
1245 
1246 	last_seq &= drv->num_fences_mask;
1247 	sync_seq &= drv->num_fences_mask;
1248 
1249 	do {
1250 		struct dma_fence *fence, **ptr;
1251 
1252 		++last_seq;
1253 		last_seq &= drv->num_fences_mask;
1254 		ptr = &drv->fences[last_seq];
1255 
1256 		fence = rcu_dereference_protected(*ptr, 1);
1257 		RCU_INIT_POINTER(*ptr, NULL);
1258 
1259 		if (!fence)
1260 			continue;
1261 
1262 		fences[last_seq] = fence;
1263 
1264 	} while (last_seq != sync_seq);
1265 }
1266 
1267 static void amdgpu_ib_preempt_signal_fences(struct dma_fence **fences,
1268 					    int length)
1269 {
1270 	int i;
1271 	struct dma_fence *fence;
1272 
1273 	for (i = 0; i < length; i++) {
1274 		fence = fences[i];
1275 		if (!fence)
1276 			continue;
1277 		dma_fence_signal(fence);
1278 		dma_fence_put(fence);
1279 	}
1280 }
1281 
1282 static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched)
1283 {
1284 	struct drm_sched_job *s_job;
1285 	struct dma_fence *fence;
1286 
1287 	spin_lock(&sched->job_list_lock);
1288 	list_for_each_entry(s_job, &sched->ring_mirror_list, node) {
1289 		fence = sched->ops->run_job(s_job);
1290 		dma_fence_put(fence);
1291 	}
1292 	spin_unlock(&sched->job_list_lock);
1293 }
1294 
1295 static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring)
1296 {
1297 	struct amdgpu_job *job;
1298 	struct drm_sched_job *s_job;
1299 	uint32_t preempt_seq;
1300 	struct dma_fence *fence, **ptr;
1301 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1302 	struct drm_gpu_scheduler *sched = &ring->sched;
1303 
1304 	if (ring->funcs->type != AMDGPU_RING_TYPE_GFX)
1305 		return;
1306 
1307 	preempt_seq = le32_to_cpu(*(drv->cpu_addr + 2));
1308 	if (preempt_seq <= atomic_read(&drv->last_seq))
1309 		return;
1310 
1311 	preempt_seq &= drv->num_fences_mask;
1312 	ptr = &drv->fences[preempt_seq];
1313 	fence = rcu_dereference_protected(*ptr, 1);
1314 
1315 	spin_lock(&sched->job_list_lock);
1316 	list_for_each_entry(s_job, &sched->ring_mirror_list, node) {
1317 		job = to_amdgpu_job(s_job);
1318 		if (job->fence == fence)
1319 			/* mark the job as preempted */
1320 			job->preemption_status |= AMDGPU_IB_PREEMPTED;
1321 	}
1322 	spin_unlock(&sched->job_list_lock);
1323 }
1324 
1325 static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
1326 {
1327 	int r, resched, length;
1328 	struct amdgpu_ring *ring;
1329 	struct dma_fence **fences = NULL;
1330 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1331 
1332 	if (val >= AMDGPU_MAX_RINGS)
1333 		return -EINVAL;
1334 
1335 	ring = adev->rings[val];
1336 
1337 	if (!ring || !ring->funcs->preempt_ib || !ring->sched.thread)
1338 		return -EINVAL;
1339 
1340 	/* the last preemption failed */
1341 	if (ring->trail_seq != le32_to_cpu(*ring->trail_fence_cpu_addr))
1342 		return -EBUSY;
1343 
1344 	length = ring->fence_drv.num_fences_mask + 1;
1345 	fences = kcalloc(length, sizeof(void *), GFP_KERNEL);
1346 	if (!fences)
1347 		return -ENOMEM;
1348 
1349 	/* Avoid accidently unparking the sched thread during GPU reset */
1350 	mutex_lock(&adev->lock_reset);
1351 
1352 	/* stop the scheduler */
1353 	kthread_park(ring->sched.thread);
1354 
1355 	resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
1356 
1357 	/* preempt the IB */
1358 	r = amdgpu_ring_preempt_ib(ring);
1359 	if (r) {
1360 		DRM_WARN("failed to preempt ring %d\n", ring->idx);
1361 		goto failure;
1362 	}
1363 
1364 	amdgpu_fence_process(ring);
1365 
1366 	if (atomic_read(&ring->fence_drv.last_seq) !=
1367 	    ring->fence_drv.sync_seq) {
1368 		DRM_INFO("ring %d was preempted\n", ring->idx);
1369 
1370 		amdgpu_ib_preempt_mark_partial_job(ring);
1371 
1372 		/* swap out the old fences */
1373 		amdgpu_ib_preempt_fences_swap(ring, fences);
1374 
1375 		amdgpu_fence_driver_force_completion(ring);
1376 
1377 		/* resubmit unfinished jobs */
1378 		amdgpu_ib_preempt_job_recovery(&ring->sched);
1379 
1380 		/* wait for jobs finished */
1381 		amdgpu_fence_wait_empty(ring);
1382 
1383 		/* signal the old fences */
1384 		amdgpu_ib_preempt_signal_fences(fences, length);
1385 	}
1386 
1387 failure:
1388 	/* restart the scheduler */
1389 	kthread_unpark(ring->sched.thread);
1390 
1391 	mutex_unlock(&adev->lock_reset);
1392 
1393 	ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched);
1394 
1395 	kfree(fences);
1396 
1397 	return 0;
1398 }
1399 
1400 static int amdgpu_debugfs_sclk_set(void *data, u64 val)
1401 {
1402 	int ret = 0;
1403 	uint32_t max_freq, min_freq;
1404 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1405 
1406 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
1407 		return -EINVAL;
1408 
1409 	ret = pm_runtime_get_sync(adev->ddev->dev);
1410 	if (ret < 0)
1411 		return ret;
1412 
1413 	if (is_support_sw_smu(adev)) {
1414 		ret = smu_get_dpm_freq_range(&adev->smu, SMU_SCLK, &min_freq, &max_freq, true);
1415 		if (ret || val > max_freq || val < min_freq)
1416 			return -EINVAL;
1417 		ret = smu_set_soft_freq_range(&adev->smu, SMU_SCLK, (uint32_t)val, (uint32_t)val, true);
1418 	} else {
1419 		return 0;
1420 	}
1421 
1422 	pm_runtime_mark_last_busy(adev->ddev->dev);
1423 	pm_runtime_put_autosuspend(adev->ddev->dev);
1424 
1425 	if (ret)
1426 		return -EINVAL;
1427 
1428 	return 0;
1429 }
1430 
1431 DEFINE_SIMPLE_ATTRIBUTE(fops_ib_preempt, NULL,
1432 			amdgpu_debugfs_ib_preempt, "%llu\n");
1433 
1434 DEFINE_SIMPLE_ATTRIBUTE(fops_sclk_set, NULL,
1435 			amdgpu_debugfs_sclk_set, "%llu\n");
1436 
1437 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1438 {
1439 	int r, i;
1440 
1441 	adev->debugfs_preempt =
1442 		debugfs_create_file("amdgpu_preempt_ib", 0600,
1443 				    adev->ddev->primary->debugfs_root, adev,
1444 				    &fops_ib_preempt);
1445 	if (!(adev->debugfs_preempt)) {
1446 		DRM_ERROR("unable to create amdgpu_preempt_ib debugsfs file\n");
1447 		return -EIO;
1448 	}
1449 
1450 	adev->smu.debugfs_sclk =
1451 		debugfs_create_file("amdgpu_force_sclk", 0200,
1452 				    adev->ddev->primary->debugfs_root, adev,
1453 				    &fops_sclk_set);
1454 	if (!(adev->smu.debugfs_sclk)) {
1455 		DRM_ERROR("unable to create amdgpu_set_sclk debugsfs file\n");
1456 		return -EIO;
1457 	}
1458 
1459 	/* Register debugfs entries for amdgpu_ttm */
1460 	r = amdgpu_ttm_debugfs_init(adev);
1461 	if (r) {
1462 		DRM_ERROR("Failed to init debugfs\n");
1463 		return r;
1464 	}
1465 
1466 	r = amdgpu_debugfs_pm_init(adev);
1467 	if (r) {
1468 		DRM_ERROR("Failed to register debugfs file for dpm!\n");
1469 		return r;
1470 	}
1471 
1472 	if (amdgpu_debugfs_sa_init(adev)) {
1473 		dev_err(adev->dev, "failed to register debugfs file for SA\n");
1474 	}
1475 
1476 	if (amdgpu_debugfs_fence_init(adev))
1477 		dev_err(adev->dev, "fence debugfs file creation failed\n");
1478 
1479 	r = amdgpu_debugfs_gem_init(adev);
1480 	if (r)
1481 		DRM_ERROR("registering gem debugfs failed (%d).\n", r);
1482 
1483 	r = amdgpu_debugfs_regs_init(adev);
1484 	if (r)
1485 		DRM_ERROR("registering register debugfs failed (%d).\n", r);
1486 
1487 	r = amdgpu_debugfs_firmware_init(adev);
1488 	if (r)
1489 		DRM_ERROR("registering firmware debugfs failed (%d).\n", r);
1490 
1491 #if defined(CONFIG_DRM_AMD_DC)
1492 	if (amdgpu_device_has_dc_support(adev)) {
1493 		if (dtn_debugfs_init(adev))
1494 			DRM_ERROR("amdgpu: failed initialize dtn debugfs support.\n");
1495 	}
1496 #endif
1497 
1498 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
1499 		struct amdgpu_ring *ring = adev->rings[i];
1500 
1501 		if (!ring)
1502 			continue;
1503 
1504 		if (amdgpu_debugfs_ring_init(adev, ring)) {
1505 			DRM_ERROR("Failed to register debugfs file for rings !\n");
1506 		}
1507 	}
1508 
1509 	amdgpu_ras_debugfs_create_all(adev);
1510 
1511 	amdgpu_debugfs_autodump_init(adev);
1512 
1513 	return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_list,
1514 					ARRAY_SIZE(amdgpu_debugfs_list));
1515 }
1516 
1517 #else
1518 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1519 {
1520 	return 0;
1521 }
1522 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1523 {
1524 	return 0;
1525 }
1526 #endif
1527