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 		pm_runtime_put_autosuspend(adev->ddev->dev);
228 		return r;
229 	}
230 
231 	r = amdgpu_virt_enable_access_debugfs(adev);
232 	if (r < 0) {
233 		pm_runtime_put_autosuspend(adev->ddev->dev);
234 		return r;
235 	}
236 
237 	if (use_bank) {
238 		if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) ||
239 		    (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) {
240 			pm_runtime_mark_last_busy(adev->ddev->dev);
241 			pm_runtime_put_autosuspend(adev->ddev->dev);
242 			amdgpu_virt_disable_access_debugfs(adev);
243 			return -EINVAL;
244 		}
245 		mutex_lock(&adev->grbm_idx_mutex);
246 		amdgpu_gfx_select_se_sh(adev, se_bank,
247 					sh_bank, instance_bank);
248 	} else if (use_ring) {
249 		mutex_lock(&adev->srbm_mutex);
250 		amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue, vmid);
251 	}
252 
253 	if (pm_pg_lock)
254 		mutex_lock(&adev->pm.mutex);
255 
256 	while (size) {
257 		uint32_t value;
258 
259 		if (read) {
260 			value = RREG32(*pos >> 2);
261 			r = put_user(value, (uint32_t *)buf);
262 		} else {
263 			r = get_user(value, (uint32_t *)buf);
264 			if (!r)
265 				amdgpu_mm_wreg_mmio_rlc(adev, *pos >> 2, value, 0);
266 		}
267 		if (r) {
268 			result = r;
269 			goto end;
270 		}
271 
272 		result += 4;
273 		buf += 4;
274 		*pos += 4;
275 		size -= 4;
276 	}
277 
278 end:
279 	if (use_bank) {
280 		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
281 		mutex_unlock(&adev->grbm_idx_mutex);
282 	} else if (use_ring) {
283 		amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0);
284 		mutex_unlock(&adev->srbm_mutex);
285 	}
286 
287 	if (pm_pg_lock)
288 		mutex_unlock(&adev->pm.mutex);
289 
290 	pm_runtime_mark_last_busy(adev->ddev->dev);
291 	pm_runtime_put_autosuspend(adev->ddev->dev);
292 
293 	amdgpu_virt_disable_access_debugfs(adev);
294 	return result;
295 }
296 
297 /**
298  * amdgpu_debugfs_regs_read - Callback for reading MMIO registers
299  */
300 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
301 					size_t size, loff_t *pos)
302 {
303 	return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos);
304 }
305 
306 /**
307  * amdgpu_debugfs_regs_write - Callback for writing MMIO registers
308  */
309 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
310 					 size_t size, loff_t *pos)
311 {
312 	return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos);
313 }
314 
315 
316 /**
317  * amdgpu_debugfs_regs_pcie_read - Read from a PCIE register
318  *
319  * @f: open file handle
320  * @buf: User buffer to store read data in
321  * @size: Number of bytes to read
322  * @pos:  Offset to seek to
323  *
324  * The lower bits are the BYTE offset of the register to read.  This
325  * allows reading multiple registers in a single call and having
326  * the returned size reflect that.
327  */
328 static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf,
329 					size_t size, loff_t *pos)
330 {
331 	struct amdgpu_device *adev = file_inode(f)->i_private;
332 	ssize_t result = 0;
333 	int r;
334 
335 	if (size & 0x3 || *pos & 0x3)
336 		return -EINVAL;
337 
338 	r = pm_runtime_get_sync(adev->ddev->dev);
339 	if (r < 0) {
340 		pm_runtime_put_autosuspend(adev->ddev->dev);
341 		return r;
342 	}
343 
344 	r = amdgpu_virt_enable_access_debugfs(adev);
345 	if (r < 0) {
346 		pm_runtime_put_autosuspend(adev->ddev->dev);
347 		return r;
348 	}
349 
350 	while (size) {
351 		uint32_t value;
352 
353 		value = RREG32_PCIE(*pos >> 2);
354 		r = put_user(value, (uint32_t *)buf);
355 		if (r) {
356 			pm_runtime_mark_last_busy(adev->ddev->dev);
357 			pm_runtime_put_autosuspend(adev->ddev->dev);
358 			amdgpu_virt_disable_access_debugfs(adev);
359 			return r;
360 		}
361 
362 		result += 4;
363 		buf += 4;
364 		*pos += 4;
365 		size -= 4;
366 	}
367 
368 	pm_runtime_mark_last_busy(adev->ddev->dev);
369 	pm_runtime_put_autosuspend(adev->ddev->dev);
370 
371 	amdgpu_virt_disable_access_debugfs(adev);
372 	return result;
373 }
374 
375 /**
376  * amdgpu_debugfs_regs_pcie_write - Write to a PCIE register
377  *
378  * @f: open file handle
379  * @buf: User buffer to write data from
380  * @size: Number of bytes to write
381  * @pos:  Offset to seek to
382  *
383  * The lower bits are the BYTE offset of the register to write.  This
384  * allows writing multiple registers in a single call and having
385  * the returned size reflect that.
386  */
387 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf,
388 					 size_t size, loff_t *pos)
389 {
390 	struct amdgpu_device *adev = file_inode(f)->i_private;
391 	ssize_t result = 0;
392 	int r;
393 
394 	if (size & 0x3 || *pos & 0x3)
395 		return -EINVAL;
396 
397 	r = pm_runtime_get_sync(adev->ddev->dev);
398 	if (r < 0) {
399 		pm_runtime_put_autosuspend(adev->ddev->dev);
400 		return r;
401 	}
402 
403 	r = amdgpu_virt_enable_access_debugfs(adev);
404 	if (r < 0) {
405 		pm_runtime_put_autosuspend(adev->ddev->dev);
406 		return r;
407 	}
408 
409 	while (size) {
410 		uint32_t value;
411 
412 		r = get_user(value, (uint32_t *)buf);
413 		if (r) {
414 			pm_runtime_mark_last_busy(adev->ddev->dev);
415 			pm_runtime_put_autosuspend(adev->ddev->dev);
416 			amdgpu_virt_disable_access_debugfs(adev);
417 			return r;
418 		}
419 
420 		WREG32_PCIE(*pos >> 2, value);
421 
422 		result += 4;
423 		buf += 4;
424 		*pos += 4;
425 		size -= 4;
426 	}
427 
428 	pm_runtime_mark_last_busy(adev->ddev->dev);
429 	pm_runtime_put_autosuspend(adev->ddev->dev);
430 
431 	amdgpu_virt_disable_access_debugfs(adev);
432 	return result;
433 }
434 
435 /**
436  * amdgpu_debugfs_regs_didt_read - Read from a DIDT register
437  *
438  * @f: open file handle
439  * @buf: User buffer to store read data in
440  * @size: Number of bytes to read
441  * @pos:  Offset to seek to
442  *
443  * The lower bits are the BYTE offset of the register to read.  This
444  * allows reading multiple registers in a single call and having
445  * the returned size reflect that.
446  */
447 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf,
448 					size_t size, loff_t *pos)
449 {
450 	struct amdgpu_device *adev = file_inode(f)->i_private;
451 	ssize_t result = 0;
452 	int r;
453 
454 	if (size & 0x3 || *pos & 0x3)
455 		return -EINVAL;
456 
457 	r = pm_runtime_get_sync(adev->ddev->dev);
458 	if (r < 0) {
459 		pm_runtime_put_autosuspend(adev->ddev->dev);
460 		return r;
461 	}
462 
463 	r = amdgpu_virt_enable_access_debugfs(adev);
464 	if (r < 0) {
465 		pm_runtime_put_autosuspend(adev->ddev->dev);
466 		return r;
467 	}
468 
469 	while (size) {
470 		uint32_t value;
471 
472 		value = RREG32_DIDT(*pos >> 2);
473 		r = put_user(value, (uint32_t *)buf);
474 		if (r) {
475 			pm_runtime_mark_last_busy(adev->ddev->dev);
476 			pm_runtime_put_autosuspend(adev->ddev->dev);
477 			amdgpu_virt_disable_access_debugfs(adev);
478 			return r;
479 		}
480 
481 		result += 4;
482 		buf += 4;
483 		*pos += 4;
484 		size -= 4;
485 	}
486 
487 	pm_runtime_mark_last_busy(adev->ddev->dev);
488 	pm_runtime_put_autosuspend(adev->ddev->dev);
489 
490 	amdgpu_virt_disable_access_debugfs(adev);
491 	return result;
492 }
493 
494 /**
495  * amdgpu_debugfs_regs_didt_write - Write to a DIDT register
496  *
497  * @f: open file handle
498  * @buf: User buffer to write data from
499  * @size: Number of bytes to write
500  * @pos:  Offset to seek to
501  *
502  * The lower bits are the BYTE offset of the register to write.  This
503  * allows writing multiple registers in a single call and having
504  * the returned size reflect that.
505  */
506 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf,
507 					 size_t size, loff_t *pos)
508 {
509 	struct amdgpu_device *adev = file_inode(f)->i_private;
510 	ssize_t result = 0;
511 	int r;
512 
513 	if (size & 0x3 || *pos & 0x3)
514 		return -EINVAL;
515 
516 	r = pm_runtime_get_sync(adev->ddev->dev);
517 	if (r < 0) {
518 		pm_runtime_put_autosuspend(adev->ddev->dev);
519 		return r;
520 	}
521 
522 	r = amdgpu_virt_enable_access_debugfs(adev);
523 	if (r < 0) {
524 		pm_runtime_put_autosuspend(adev->ddev->dev);
525 		return r;
526 	}
527 
528 	while (size) {
529 		uint32_t value;
530 
531 		r = get_user(value, (uint32_t *)buf);
532 		if (r) {
533 			pm_runtime_mark_last_busy(adev->ddev->dev);
534 			pm_runtime_put_autosuspend(adev->ddev->dev);
535 			amdgpu_virt_disable_access_debugfs(adev);
536 			return r;
537 		}
538 
539 		WREG32_DIDT(*pos >> 2, value);
540 
541 		result += 4;
542 		buf += 4;
543 		*pos += 4;
544 		size -= 4;
545 	}
546 
547 	pm_runtime_mark_last_busy(adev->ddev->dev);
548 	pm_runtime_put_autosuspend(adev->ddev->dev);
549 
550 	amdgpu_virt_disable_access_debugfs(adev);
551 	return result;
552 }
553 
554 /**
555  * amdgpu_debugfs_regs_smc_read - Read from a SMC register
556  *
557  * @f: open file handle
558  * @buf: User buffer to store read data in
559  * @size: Number of bytes to read
560  * @pos:  Offset to seek to
561  *
562  * The lower bits are the BYTE offset of the register to read.  This
563  * allows reading multiple registers in a single call and having
564  * the returned size reflect that.
565  */
566 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
567 					size_t size, loff_t *pos)
568 {
569 	struct amdgpu_device *adev = file_inode(f)->i_private;
570 	ssize_t result = 0;
571 	int r;
572 
573 	if (size & 0x3 || *pos & 0x3)
574 		return -EINVAL;
575 
576 	r = pm_runtime_get_sync(adev->ddev->dev);
577 	if (r < 0) {
578 		pm_runtime_put_autosuspend(adev->ddev->dev);
579 		return r;
580 	}
581 
582 	r = amdgpu_virt_enable_access_debugfs(adev);
583 	if (r < 0) {
584 		pm_runtime_put_autosuspend(adev->ddev->dev);
585 		return r;
586 	}
587 
588 	while (size) {
589 		uint32_t value;
590 
591 		value = RREG32_SMC(*pos);
592 		r = put_user(value, (uint32_t *)buf);
593 		if (r) {
594 			pm_runtime_mark_last_busy(adev->ddev->dev);
595 			pm_runtime_put_autosuspend(adev->ddev->dev);
596 			amdgpu_virt_disable_access_debugfs(adev);
597 			return r;
598 		}
599 
600 		result += 4;
601 		buf += 4;
602 		*pos += 4;
603 		size -= 4;
604 	}
605 
606 	pm_runtime_mark_last_busy(adev->ddev->dev);
607 	pm_runtime_put_autosuspend(adev->ddev->dev);
608 
609 	amdgpu_virt_disable_access_debugfs(adev);
610 	return result;
611 }
612 
613 /**
614  * amdgpu_debugfs_regs_smc_write - Write to a SMC register
615  *
616  * @f: open file handle
617  * @buf: User buffer to write data from
618  * @size: Number of bytes to write
619  * @pos:  Offset to seek to
620  *
621  * The lower bits are the BYTE offset of the register to write.  This
622  * allows writing multiple registers in a single call and having
623  * the returned size reflect that.
624  */
625 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf,
626 					 size_t size, loff_t *pos)
627 {
628 	struct amdgpu_device *adev = file_inode(f)->i_private;
629 	ssize_t result = 0;
630 	int r;
631 
632 	if (size & 0x3 || *pos & 0x3)
633 		return -EINVAL;
634 
635 	r = pm_runtime_get_sync(adev->ddev->dev);
636 	if (r < 0) {
637 		pm_runtime_put_autosuspend(adev->ddev->dev);
638 		return r;
639 	}
640 
641 	r = amdgpu_virt_enable_access_debugfs(adev);
642 	if (r < 0) {
643 		pm_runtime_put_autosuspend(adev->ddev->dev);
644 		return r;
645 	}
646 
647 	while (size) {
648 		uint32_t value;
649 
650 		r = get_user(value, (uint32_t *)buf);
651 		if (r) {
652 			pm_runtime_mark_last_busy(adev->ddev->dev);
653 			pm_runtime_put_autosuspend(adev->ddev->dev);
654 			amdgpu_virt_disable_access_debugfs(adev);
655 			return r;
656 		}
657 
658 		WREG32_SMC(*pos, value);
659 
660 		result += 4;
661 		buf += 4;
662 		*pos += 4;
663 		size -= 4;
664 	}
665 
666 	pm_runtime_mark_last_busy(adev->ddev->dev);
667 	pm_runtime_put_autosuspend(adev->ddev->dev);
668 
669 	amdgpu_virt_disable_access_debugfs(adev);
670 	return result;
671 }
672 
673 /**
674  * amdgpu_debugfs_gca_config_read - Read from gfx config data
675  *
676  * @f: open file handle
677  * @buf: User buffer to store read data in
678  * @size: Number of bytes to read
679  * @pos:  Offset to seek to
680  *
681  * This file is used to access configuration data in a somewhat
682  * stable fashion.  The format is a series of DWORDs with the first
683  * indicating which revision it is.  New content is appended to the
684  * end so that older software can still read the data.
685  */
686 
687 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf,
688 					size_t size, loff_t *pos)
689 {
690 	struct amdgpu_device *adev = file_inode(f)->i_private;
691 	ssize_t result = 0;
692 	int r;
693 	uint32_t *config, no_regs = 0;
694 
695 	if (size & 0x3 || *pos & 0x3)
696 		return -EINVAL;
697 
698 	config = kmalloc_array(256, sizeof(*config), GFP_KERNEL);
699 	if (!config)
700 		return -ENOMEM;
701 
702 	/* version, increment each time something is added */
703 	config[no_regs++] = 3;
704 	config[no_regs++] = adev->gfx.config.max_shader_engines;
705 	config[no_regs++] = adev->gfx.config.max_tile_pipes;
706 	config[no_regs++] = adev->gfx.config.max_cu_per_sh;
707 	config[no_regs++] = adev->gfx.config.max_sh_per_se;
708 	config[no_regs++] = adev->gfx.config.max_backends_per_se;
709 	config[no_regs++] = adev->gfx.config.max_texture_channel_caches;
710 	config[no_regs++] = adev->gfx.config.max_gprs;
711 	config[no_regs++] = adev->gfx.config.max_gs_threads;
712 	config[no_regs++] = adev->gfx.config.max_hw_contexts;
713 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend;
714 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend;
715 	config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size;
716 	config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size;
717 	config[no_regs++] = adev->gfx.config.num_tile_pipes;
718 	config[no_regs++] = adev->gfx.config.backend_enable_mask;
719 	config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes;
720 	config[no_regs++] = adev->gfx.config.mem_row_size_in_kb;
721 	config[no_regs++] = adev->gfx.config.shader_engine_tile_size;
722 	config[no_regs++] = adev->gfx.config.num_gpus;
723 	config[no_regs++] = adev->gfx.config.multi_gpu_tile_size;
724 	config[no_regs++] = adev->gfx.config.mc_arb_ramcfg;
725 	config[no_regs++] = adev->gfx.config.gb_addr_config;
726 	config[no_regs++] = adev->gfx.config.num_rbs;
727 
728 	/* rev==1 */
729 	config[no_regs++] = adev->rev_id;
730 	config[no_regs++] = adev->pg_flags;
731 	config[no_regs++] = adev->cg_flags;
732 
733 	/* rev==2 */
734 	config[no_regs++] = adev->family;
735 	config[no_regs++] = adev->external_rev_id;
736 
737 	/* rev==3 */
738 	config[no_regs++] = adev->pdev->device;
739 	config[no_regs++] = adev->pdev->revision;
740 	config[no_regs++] = adev->pdev->subsystem_device;
741 	config[no_regs++] = adev->pdev->subsystem_vendor;
742 
743 	while (size && (*pos < no_regs * 4)) {
744 		uint32_t value;
745 
746 		value = config[*pos >> 2];
747 		r = put_user(value, (uint32_t *)buf);
748 		if (r) {
749 			kfree(config);
750 			return r;
751 		}
752 
753 		result += 4;
754 		buf += 4;
755 		*pos += 4;
756 		size -= 4;
757 	}
758 
759 	kfree(config);
760 	return result;
761 }
762 
763 /**
764  * amdgpu_debugfs_sensor_read - Read from the powerplay sensors
765  *
766  * @f: open file handle
767  * @buf: User buffer to store read data in
768  * @size: Number of bytes to read
769  * @pos:  Offset to seek to
770  *
771  * The offset is treated as the BYTE address of one of the sensors
772  * enumerated in amd/include/kgd_pp_interface.h under the
773  * 'amd_pp_sensors' enumeration.  For instance to read the UVD VCLK
774  * you would use the offset 3 * 4 = 12.
775  */
776 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf,
777 					size_t size, loff_t *pos)
778 {
779 	struct amdgpu_device *adev = file_inode(f)->i_private;
780 	int idx, x, outsize, r, valuesize;
781 	uint32_t values[16];
782 
783 	if (size & 3 || *pos & 0x3)
784 		return -EINVAL;
785 
786 	if (!adev->pm.dpm_enabled)
787 		return -EINVAL;
788 
789 	/* convert offset to sensor number */
790 	idx = *pos >> 2;
791 
792 	valuesize = sizeof(values);
793 
794 	r = pm_runtime_get_sync(adev->ddev->dev);
795 	if (r < 0) {
796 		pm_runtime_put_autosuspend(adev->ddev->dev);
797 		return r;
798 	}
799 
800 	r = amdgpu_virt_enable_access_debugfs(adev);
801 	if (r < 0) {
802 		pm_runtime_put_autosuspend(adev->ddev->dev);
803 		return r;
804 	}
805 
806 	r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize);
807 
808 	pm_runtime_mark_last_busy(adev->ddev->dev);
809 	pm_runtime_put_autosuspend(adev->ddev->dev);
810 
811 	if (r) {
812 		amdgpu_virt_disable_access_debugfs(adev);
813 		return r;
814 	}
815 
816 	if (size > valuesize) {
817 		amdgpu_virt_disable_access_debugfs(adev);
818 		return -EINVAL;
819 	}
820 
821 	outsize = 0;
822 	x = 0;
823 	if (!r) {
824 		while (size) {
825 			r = put_user(values[x++], (int32_t *)buf);
826 			buf += 4;
827 			size -= 4;
828 			outsize += 4;
829 		}
830 	}
831 
832 	amdgpu_virt_disable_access_debugfs(adev);
833 	return !r ? outsize : r;
834 }
835 
836 /** amdgpu_debugfs_wave_read - Read WAVE STATUS data
837  *
838  * @f: open file handle
839  * @buf: User buffer to store read data in
840  * @size: Number of bytes to read
841  * @pos:  Offset to seek to
842  *
843  * The offset being sought changes which wave that the status data
844  * will be returned for.  The bits are used as follows:
845  *
846  * Bits 0..6: 	Byte offset into data
847  * Bits 7..14:	SE selector
848  * Bits 15..22:	SH/SA selector
849  * Bits 23..30: CU/{WGP+SIMD} selector
850  * Bits 31..36: WAVE ID selector
851  * Bits 37..44: SIMD ID selector
852  *
853  * The returned data begins with one DWORD of version information
854  * Followed by WAVE STATUS registers relevant to the GFX IP version
855  * being used.  See gfx_v8_0_read_wave_data() for an example output.
856  */
857 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
858 					size_t size, loff_t *pos)
859 {
860 	struct amdgpu_device *adev = f->f_inode->i_private;
861 	int r, x;
862 	ssize_t result=0;
863 	uint32_t offset, se, sh, cu, wave, simd, data[32];
864 
865 	if (size & 3 || *pos & 3)
866 		return -EINVAL;
867 
868 	/* decode offset */
869 	offset = (*pos & GENMASK_ULL(6, 0));
870 	se = (*pos & GENMASK_ULL(14, 7)) >> 7;
871 	sh = (*pos & GENMASK_ULL(22, 15)) >> 15;
872 	cu = (*pos & GENMASK_ULL(30, 23)) >> 23;
873 	wave = (*pos & GENMASK_ULL(36, 31)) >> 31;
874 	simd = (*pos & GENMASK_ULL(44, 37)) >> 37;
875 
876 	r = pm_runtime_get_sync(adev->ddev->dev);
877 	if (r < 0) {
878 		pm_runtime_put_autosuspend(adev->ddev->dev);
879 		return r;
880 	}
881 
882 	r = amdgpu_virt_enable_access_debugfs(adev);
883 	if (r < 0) {
884 		pm_runtime_put_autosuspend(adev->ddev->dev);
885 		return r;
886 	}
887 
888 	/* switch to the specific se/sh/cu */
889 	mutex_lock(&adev->grbm_idx_mutex);
890 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
891 
892 	x = 0;
893 	if (adev->gfx.funcs->read_wave_data)
894 		adev->gfx.funcs->read_wave_data(adev, simd, wave, data, &x);
895 
896 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
897 	mutex_unlock(&adev->grbm_idx_mutex);
898 
899 	pm_runtime_mark_last_busy(adev->ddev->dev);
900 	pm_runtime_put_autosuspend(adev->ddev->dev);
901 
902 	if (!x) {
903 		amdgpu_virt_disable_access_debugfs(adev);
904 		return -EINVAL;
905 	}
906 
907 	while (size && (offset < x * 4)) {
908 		uint32_t value;
909 
910 		value = data[offset >> 2];
911 		r = put_user(value, (uint32_t *)buf);
912 		if (r) {
913 			amdgpu_virt_disable_access_debugfs(adev);
914 			return r;
915 		}
916 
917 		result += 4;
918 		buf += 4;
919 		offset += 4;
920 		size -= 4;
921 	}
922 
923 	amdgpu_virt_disable_access_debugfs(adev);
924 	return result;
925 }
926 
927 /** amdgpu_debugfs_gpr_read - Read wave gprs
928  *
929  * @f: open file handle
930  * @buf: User buffer to store read data in
931  * @size: Number of bytes to read
932  * @pos:  Offset to seek to
933  *
934  * The offset being sought changes which wave that the status data
935  * will be returned for.  The bits are used as follows:
936  *
937  * Bits 0..11:	Byte offset into data
938  * Bits 12..19:	SE selector
939  * Bits 20..27:	SH/SA selector
940  * Bits 28..35: CU/{WGP+SIMD} selector
941  * Bits 36..43: WAVE ID selector
942  * Bits 37..44: SIMD ID selector
943  * Bits 52..59: Thread selector
944  * Bits 60..61: Bank selector (VGPR=0,SGPR=1)
945  *
946  * The return data comes from the SGPR or VGPR register bank for
947  * the selected operational unit.
948  */
949 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
950 					size_t size, loff_t *pos)
951 {
952 	struct amdgpu_device *adev = f->f_inode->i_private;
953 	int r;
954 	ssize_t result = 0;
955 	uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
956 
957 	if (size > 4096 || size & 3 || *pos & 3)
958 		return -EINVAL;
959 
960 	/* decode offset */
961 	offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
962 	se = (*pos & GENMASK_ULL(19, 12)) >> 12;
963 	sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
964 	cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
965 	wave = (*pos & GENMASK_ULL(43, 36)) >> 36;
966 	simd = (*pos & GENMASK_ULL(51, 44)) >> 44;
967 	thread = (*pos & GENMASK_ULL(59, 52)) >> 52;
968 	bank = (*pos & GENMASK_ULL(61, 60)) >> 60;
969 
970 	data = kcalloc(1024, sizeof(*data), GFP_KERNEL);
971 	if (!data)
972 		return -ENOMEM;
973 
974 	r = pm_runtime_get_sync(adev->ddev->dev);
975 	if (r < 0)
976 		goto err;
977 
978 	r = amdgpu_virt_enable_access_debugfs(adev);
979 	if (r < 0)
980 		goto err;
981 
982 	/* switch to the specific se/sh/cu */
983 	mutex_lock(&adev->grbm_idx_mutex);
984 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
985 
986 	if (bank == 0) {
987 		if (adev->gfx.funcs->read_wave_vgprs)
988 			adev->gfx.funcs->read_wave_vgprs(adev, simd, wave, thread, offset, size>>2, data);
989 	} else {
990 		if (adev->gfx.funcs->read_wave_sgprs)
991 			adev->gfx.funcs->read_wave_sgprs(adev, simd, wave, offset, size>>2, data);
992 	}
993 
994 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
995 	mutex_unlock(&adev->grbm_idx_mutex);
996 
997 	pm_runtime_mark_last_busy(adev->ddev->dev);
998 	pm_runtime_put_autosuspend(adev->ddev->dev);
999 
1000 	while (size) {
1001 		uint32_t value;
1002 
1003 		value = data[result >> 2];
1004 		r = put_user(value, (uint32_t *)buf);
1005 		if (r) {
1006 			amdgpu_virt_disable_access_debugfs(adev);
1007 			goto err;
1008 		}
1009 
1010 		result += 4;
1011 		buf += 4;
1012 		size -= 4;
1013 	}
1014 
1015 	kfree(data);
1016 	amdgpu_virt_disable_access_debugfs(adev);
1017 	return result;
1018 
1019 err:
1020 	pm_runtime_put_autosuspend(adev->ddev->dev);
1021 	kfree(data);
1022 	return r;
1023 }
1024 
1025 /**
1026  * amdgpu_debugfs_regs_gfxoff_write - Enable/disable GFXOFF
1027  *
1028  * @f: open file handle
1029  * @buf: User buffer to write data from
1030  * @size: Number of bytes to write
1031  * @pos:  Offset to seek to
1032  *
1033  * Write a 32-bit zero to disable or a 32-bit non-zero to enable
1034  */
1035 static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf,
1036 					 size_t size, loff_t *pos)
1037 {
1038 	struct amdgpu_device *adev = file_inode(f)->i_private;
1039 	ssize_t result = 0;
1040 	int r;
1041 
1042 	if (size & 0x3 || *pos & 0x3)
1043 		return -EINVAL;
1044 
1045 	r = pm_runtime_get_sync(adev->ddev->dev);
1046 	if (r < 0) {
1047 		pm_runtime_put_autosuspend(adev->ddev->dev);
1048 		return r;
1049 	}
1050 
1051 	while (size) {
1052 		uint32_t value;
1053 
1054 		r = get_user(value, (uint32_t *)buf);
1055 		if (r) {
1056 			pm_runtime_mark_last_busy(adev->ddev->dev);
1057 			pm_runtime_put_autosuspend(adev->ddev->dev);
1058 			return r;
1059 		}
1060 
1061 		amdgpu_gfx_off_ctrl(adev, value ? true : false);
1062 
1063 		result += 4;
1064 		buf += 4;
1065 		*pos += 4;
1066 		size -= 4;
1067 	}
1068 
1069 	pm_runtime_mark_last_busy(adev->ddev->dev);
1070 	pm_runtime_put_autosuspend(adev->ddev->dev);
1071 
1072 	return result;
1073 }
1074 
1075 
1076 /**
1077  * amdgpu_debugfs_regs_gfxoff_status - read gfxoff status
1078  *
1079  * @f: open file handle
1080  * @buf: User buffer to store read data in
1081  * @size: Number of bytes to read
1082  * @pos:  Offset to seek to
1083  */
1084 static ssize_t amdgpu_debugfs_gfxoff_read(struct file *f, char __user *buf,
1085 					 size_t size, loff_t *pos)
1086 {
1087 	struct amdgpu_device *adev = file_inode(f)->i_private;
1088 	ssize_t result = 0;
1089 	int r;
1090 
1091 	if (size & 0x3 || *pos & 0x3)
1092 		return -EINVAL;
1093 
1094 	r = pm_runtime_get_sync(adev->ddev->dev);
1095 	if (r < 0)
1096 		return r;
1097 
1098 	while (size) {
1099 		uint32_t value;
1100 
1101 		r = amdgpu_get_gfx_off_status(adev, &value);
1102 		if (r) {
1103 			pm_runtime_mark_last_busy(adev->ddev->dev);
1104 			pm_runtime_put_autosuspend(adev->ddev->dev);
1105 			return r;
1106 		}
1107 
1108 		r = put_user(value, (uint32_t *)buf);
1109 		if (r) {
1110 			pm_runtime_mark_last_busy(adev->ddev->dev);
1111 			pm_runtime_put_autosuspend(adev->ddev->dev);
1112 			return r;
1113 		}
1114 
1115 		result += 4;
1116 		buf += 4;
1117 		*pos += 4;
1118 		size -= 4;
1119 	}
1120 
1121 	pm_runtime_mark_last_busy(adev->ddev->dev);
1122 	pm_runtime_put_autosuspend(adev->ddev->dev);
1123 
1124 	return result;
1125 }
1126 
1127 static const struct file_operations amdgpu_debugfs_regs_fops = {
1128 	.owner = THIS_MODULE,
1129 	.read = amdgpu_debugfs_regs_read,
1130 	.write = amdgpu_debugfs_regs_write,
1131 	.llseek = default_llseek
1132 };
1133 static const struct file_operations amdgpu_debugfs_regs_didt_fops = {
1134 	.owner = THIS_MODULE,
1135 	.read = amdgpu_debugfs_regs_didt_read,
1136 	.write = amdgpu_debugfs_regs_didt_write,
1137 	.llseek = default_llseek
1138 };
1139 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = {
1140 	.owner = THIS_MODULE,
1141 	.read = amdgpu_debugfs_regs_pcie_read,
1142 	.write = amdgpu_debugfs_regs_pcie_write,
1143 	.llseek = default_llseek
1144 };
1145 static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
1146 	.owner = THIS_MODULE,
1147 	.read = amdgpu_debugfs_regs_smc_read,
1148 	.write = amdgpu_debugfs_regs_smc_write,
1149 	.llseek = default_llseek
1150 };
1151 
1152 static const struct file_operations amdgpu_debugfs_gca_config_fops = {
1153 	.owner = THIS_MODULE,
1154 	.read = amdgpu_debugfs_gca_config_read,
1155 	.llseek = default_llseek
1156 };
1157 
1158 static const struct file_operations amdgpu_debugfs_sensors_fops = {
1159 	.owner = THIS_MODULE,
1160 	.read = amdgpu_debugfs_sensor_read,
1161 	.llseek = default_llseek
1162 };
1163 
1164 static const struct file_operations amdgpu_debugfs_wave_fops = {
1165 	.owner = THIS_MODULE,
1166 	.read = amdgpu_debugfs_wave_read,
1167 	.llseek = default_llseek
1168 };
1169 static const struct file_operations amdgpu_debugfs_gpr_fops = {
1170 	.owner = THIS_MODULE,
1171 	.read = amdgpu_debugfs_gpr_read,
1172 	.llseek = default_llseek
1173 };
1174 
1175 static const struct file_operations amdgpu_debugfs_gfxoff_fops = {
1176 	.owner = THIS_MODULE,
1177 	.read = amdgpu_debugfs_gfxoff_read,
1178 	.write = amdgpu_debugfs_gfxoff_write,
1179 	.llseek = default_llseek
1180 };
1181 
1182 static const struct file_operations *debugfs_regs[] = {
1183 	&amdgpu_debugfs_regs_fops,
1184 	&amdgpu_debugfs_regs_didt_fops,
1185 	&amdgpu_debugfs_regs_pcie_fops,
1186 	&amdgpu_debugfs_regs_smc_fops,
1187 	&amdgpu_debugfs_gca_config_fops,
1188 	&amdgpu_debugfs_sensors_fops,
1189 	&amdgpu_debugfs_wave_fops,
1190 	&amdgpu_debugfs_gpr_fops,
1191 	&amdgpu_debugfs_gfxoff_fops,
1192 };
1193 
1194 static const char *debugfs_regs_names[] = {
1195 	"amdgpu_regs",
1196 	"amdgpu_regs_didt",
1197 	"amdgpu_regs_pcie",
1198 	"amdgpu_regs_smc",
1199 	"amdgpu_gca_config",
1200 	"amdgpu_sensors",
1201 	"amdgpu_wave",
1202 	"amdgpu_gpr",
1203 	"amdgpu_gfxoff",
1204 };
1205 
1206 /**
1207  * amdgpu_debugfs_regs_init -	Initialize debugfs entries that provide
1208  * 								register access.
1209  *
1210  * @adev: The device to attach the debugfs entries to
1211  */
1212 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1213 {
1214 	struct drm_minor *minor = adev->ddev->primary;
1215 	struct dentry *ent, *root = minor->debugfs_root;
1216 	unsigned int i;
1217 
1218 	for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) {
1219 		ent = debugfs_create_file(debugfs_regs_names[i],
1220 					  S_IFREG | S_IRUGO, root,
1221 					  adev, debugfs_regs[i]);
1222 		if (!i && !IS_ERR_OR_NULL(ent))
1223 			i_size_write(ent->d_inode, adev->rmmio_size);
1224 		adev->debugfs_regs[i] = ent;
1225 	}
1226 
1227 	return 0;
1228 }
1229 
1230 static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data)
1231 {
1232 	struct drm_info_node *node = (struct drm_info_node *) m->private;
1233 	struct drm_device *dev = node->minor->dev;
1234 	struct amdgpu_device *adev = dev->dev_private;
1235 	int r = 0, i;
1236 
1237 	r = pm_runtime_get_sync(dev->dev);
1238 	if (r < 0) {
1239 		pm_runtime_put_autosuspend(adev->ddev->dev);
1240 		return r;
1241 	}
1242 
1243 	/* Avoid accidently unparking the sched thread during GPU reset */
1244 	mutex_lock(&adev->lock_reset);
1245 
1246 	/* hold on the scheduler */
1247 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1248 		struct amdgpu_ring *ring = adev->rings[i];
1249 
1250 		if (!ring || !ring->sched.thread)
1251 			continue;
1252 		kthread_park(ring->sched.thread);
1253 	}
1254 
1255 	seq_printf(m, "run ib test:\n");
1256 	r = amdgpu_ib_ring_tests(adev);
1257 	if (r)
1258 		seq_printf(m, "ib ring tests failed (%d).\n", r);
1259 	else
1260 		seq_printf(m, "ib ring tests passed.\n");
1261 
1262 	/* go on the scheduler */
1263 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1264 		struct amdgpu_ring *ring = adev->rings[i];
1265 
1266 		if (!ring || !ring->sched.thread)
1267 			continue;
1268 		kthread_unpark(ring->sched.thread);
1269 	}
1270 
1271 	mutex_unlock(&adev->lock_reset);
1272 
1273 	pm_runtime_mark_last_busy(dev->dev);
1274 	pm_runtime_put_autosuspend(dev->dev);
1275 
1276 	return 0;
1277 }
1278 
1279 static int amdgpu_debugfs_get_vbios_dump(struct seq_file *m, void *data)
1280 {
1281 	struct drm_info_node *node = (struct drm_info_node *) m->private;
1282 	struct drm_device *dev = node->minor->dev;
1283 	struct amdgpu_device *adev = dev->dev_private;
1284 
1285 	seq_write(m, adev->bios, adev->bios_size);
1286 	return 0;
1287 }
1288 
1289 static int amdgpu_debugfs_evict_vram(struct seq_file *m, void *data)
1290 {
1291 	struct drm_info_node *node = (struct drm_info_node *)m->private;
1292 	struct drm_device *dev = node->minor->dev;
1293 	struct amdgpu_device *adev = dev->dev_private;
1294 	int r;
1295 
1296 	r = pm_runtime_get_sync(dev->dev);
1297 	if (r < 0) {
1298 		pm_runtime_put_autosuspend(adev->ddev->dev);
1299 		return r;
1300 	}
1301 
1302 	seq_printf(m, "(%d)\n", amdgpu_bo_evict_vram(adev));
1303 
1304 	pm_runtime_mark_last_busy(dev->dev);
1305 	pm_runtime_put_autosuspend(dev->dev);
1306 
1307 	return 0;
1308 }
1309 
1310 static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data)
1311 {
1312 	struct drm_info_node *node = (struct drm_info_node *)m->private;
1313 	struct drm_device *dev = node->minor->dev;
1314 	struct amdgpu_device *adev = dev->dev_private;
1315 	int r;
1316 
1317 	r = pm_runtime_get_sync(dev->dev);
1318 	if (r < 0) {
1319 		pm_runtime_put_autosuspend(adev->ddev->dev);
1320 		return r;
1321 	}
1322 
1323 	seq_printf(m, "(%d)\n", ttm_bo_evict_mm(&adev->mman.bdev, TTM_PL_TT));
1324 
1325 	pm_runtime_mark_last_busy(dev->dev);
1326 	pm_runtime_put_autosuspend(dev->dev);
1327 
1328 	return 0;
1329 }
1330 
1331 static const struct drm_info_list amdgpu_debugfs_list[] = {
1332 	{"amdgpu_vbios", amdgpu_debugfs_get_vbios_dump},
1333 	{"amdgpu_test_ib", &amdgpu_debugfs_test_ib},
1334 	{"amdgpu_evict_vram", &amdgpu_debugfs_evict_vram},
1335 	{"amdgpu_evict_gtt", &amdgpu_debugfs_evict_gtt},
1336 };
1337 
1338 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
1339 					  struct dma_fence **fences)
1340 {
1341 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1342 	uint32_t sync_seq, last_seq;
1343 
1344 	last_seq = atomic_read(&ring->fence_drv.last_seq);
1345 	sync_seq = ring->fence_drv.sync_seq;
1346 
1347 	last_seq &= drv->num_fences_mask;
1348 	sync_seq &= drv->num_fences_mask;
1349 
1350 	do {
1351 		struct dma_fence *fence, **ptr;
1352 
1353 		++last_seq;
1354 		last_seq &= drv->num_fences_mask;
1355 		ptr = &drv->fences[last_seq];
1356 
1357 		fence = rcu_dereference_protected(*ptr, 1);
1358 		RCU_INIT_POINTER(*ptr, NULL);
1359 
1360 		if (!fence)
1361 			continue;
1362 
1363 		fences[last_seq] = fence;
1364 
1365 	} while (last_seq != sync_seq);
1366 }
1367 
1368 static void amdgpu_ib_preempt_signal_fences(struct dma_fence **fences,
1369 					    int length)
1370 {
1371 	int i;
1372 	struct dma_fence *fence;
1373 
1374 	for (i = 0; i < length; i++) {
1375 		fence = fences[i];
1376 		if (!fence)
1377 			continue;
1378 		dma_fence_signal(fence);
1379 		dma_fence_put(fence);
1380 	}
1381 }
1382 
1383 static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched)
1384 {
1385 	struct drm_sched_job *s_job;
1386 	struct dma_fence *fence;
1387 
1388 	spin_lock(&sched->job_list_lock);
1389 	list_for_each_entry(s_job, &sched->ring_mirror_list, node) {
1390 		fence = sched->ops->run_job(s_job);
1391 		dma_fence_put(fence);
1392 	}
1393 	spin_unlock(&sched->job_list_lock);
1394 }
1395 
1396 static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring)
1397 {
1398 	struct amdgpu_job *job;
1399 	struct drm_sched_job *s_job, *tmp;
1400 	uint32_t preempt_seq;
1401 	struct dma_fence *fence, **ptr;
1402 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1403 	struct drm_gpu_scheduler *sched = &ring->sched;
1404 	bool preempted = true;
1405 
1406 	if (ring->funcs->type != AMDGPU_RING_TYPE_GFX)
1407 		return;
1408 
1409 	preempt_seq = le32_to_cpu(*(drv->cpu_addr + 2));
1410 	if (preempt_seq <= atomic_read(&drv->last_seq)) {
1411 		preempted = false;
1412 		goto no_preempt;
1413 	}
1414 
1415 	preempt_seq &= drv->num_fences_mask;
1416 	ptr = &drv->fences[preempt_seq];
1417 	fence = rcu_dereference_protected(*ptr, 1);
1418 
1419 no_preempt:
1420 	spin_lock(&sched->job_list_lock);
1421 	list_for_each_entry_safe(s_job, tmp, &sched->ring_mirror_list, node) {
1422 		if (dma_fence_is_signaled(&s_job->s_fence->finished)) {
1423 			/* remove job from ring_mirror_list */
1424 			list_del_init(&s_job->node);
1425 			sched->ops->free_job(s_job);
1426 			continue;
1427 		}
1428 		job = to_amdgpu_job(s_job);
1429 		if (preempted && job->fence == fence)
1430 			/* mark the job as preempted */
1431 			job->preemption_status |= AMDGPU_IB_PREEMPTED;
1432 	}
1433 	spin_unlock(&sched->job_list_lock);
1434 }
1435 
1436 static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
1437 {
1438 	int r, resched, length;
1439 	struct amdgpu_ring *ring;
1440 	struct dma_fence **fences = NULL;
1441 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1442 
1443 	if (val >= AMDGPU_MAX_RINGS)
1444 		return -EINVAL;
1445 
1446 	ring = adev->rings[val];
1447 
1448 	if (!ring || !ring->funcs->preempt_ib || !ring->sched.thread)
1449 		return -EINVAL;
1450 
1451 	/* the last preemption failed */
1452 	if (ring->trail_seq != le32_to_cpu(*ring->trail_fence_cpu_addr))
1453 		return -EBUSY;
1454 
1455 	length = ring->fence_drv.num_fences_mask + 1;
1456 	fences = kcalloc(length, sizeof(void *), GFP_KERNEL);
1457 	if (!fences)
1458 		return -ENOMEM;
1459 
1460 	/* Avoid accidently unparking the sched thread during GPU reset */
1461 	mutex_lock(&adev->lock_reset);
1462 
1463 	/* stop the scheduler */
1464 	kthread_park(ring->sched.thread);
1465 
1466 	resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
1467 
1468 	/* preempt the IB */
1469 	r = amdgpu_ring_preempt_ib(ring);
1470 	if (r) {
1471 		DRM_WARN("failed to preempt ring %d\n", ring->idx);
1472 		goto failure;
1473 	}
1474 
1475 	amdgpu_fence_process(ring);
1476 
1477 	if (atomic_read(&ring->fence_drv.last_seq) !=
1478 	    ring->fence_drv.sync_seq) {
1479 		DRM_INFO("ring %d was preempted\n", ring->idx);
1480 
1481 		amdgpu_ib_preempt_mark_partial_job(ring);
1482 
1483 		/* swap out the old fences */
1484 		amdgpu_ib_preempt_fences_swap(ring, fences);
1485 
1486 		amdgpu_fence_driver_force_completion(ring);
1487 
1488 		/* resubmit unfinished jobs */
1489 		amdgpu_ib_preempt_job_recovery(&ring->sched);
1490 
1491 		/* wait for jobs finished */
1492 		amdgpu_fence_wait_empty(ring);
1493 
1494 		/* signal the old fences */
1495 		amdgpu_ib_preempt_signal_fences(fences, length);
1496 	}
1497 
1498 failure:
1499 	/* restart the scheduler */
1500 	kthread_unpark(ring->sched.thread);
1501 
1502 	mutex_unlock(&adev->lock_reset);
1503 
1504 	ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched);
1505 
1506 	kfree(fences);
1507 
1508 	return 0;
1509 }
1510 
1511 static int amdgpu_debugfs_sclk_set(void *data, u64 val)
1512 {
1513 	int ret = 0;
1514 	uint32_t max_freq, min_freq;
1515 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1516 
1517 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
1518 		return -EINVAL;
1519 
1520 	ret = pm_runtime_get_sync(adev->ddev->dev);
1521 	if (ret < 0) {
1522 		pm_runtime_put_autosuspend(adev->ddev->dev);
1523 		return ret;
1524 	}
1525 
1526 	if (is_support_sw_smu(adev)) {
1527 		ret = smu_get_dpm_freq_range(&adev->smu, SMU_SCLK, &min_freq, &max_freq);
1528 		if (ret || val > max_freq || val < min_freq)
1529 			return -EINVAL;
1530 		ret = smu_set_soft_freq_range(&adev->smu, SMU_SCLK, (uint32_t)val, (uint32_t)val);
1531 	} else {
1532 		return 0;
1533 	}
1534 
1535 	pm_runtime_mark_last_busy(adev->ddev->dev);
1536 	pm_runtime_put_autosuspend(adev->ddev->dev);
1537 
1538 	if (ret)
1539 		return -EINVAL;
1540 
1541 	return 0;
1542 }
1543 
1544 DEFINE_SIMPLE_ATTRIBUTE(fops_ib_preempt, NULL,
1545 			amdgpu_debugfs_ib_preempt, "%llu\n");
1546 
1547 DEFINE_SIMPLE_ATTRIBUTE(fops_sclk_set, NULL,
1548 			amdgpu_debugfs_sclk_set, "%llu\n");
1549 
1550 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1551 {
1552 	int r, i;
1553 
1554 	adev->debugfs_preempt =
1555 		debugfs_create_file("amdgpu_preempt_ib", 0600,
1556 				    adev->ddev->primary->debugfs_root, adev,
1557 				    &fops_ib_preempt);
1558 	if (!(adev->debugfs_preempt)) {
1559 		DRM_ERROR("unable to create amdgpu_preempt_ib debugsfs file\n");
1560 		return -EIO;
1561 	}
1562 
1563 	adev->smu.debugfs_sclk =
1564 		debugfs_create_file("amdgpu_force_sclk", 0200,
1565 				    adev->ddev->primary->debugfs_root, adev,
1566 				    &fops_sclk_set);
1567 	if (!(adev->smu.debugfs_sclk)) {
1568 		DRM_ERROR("unable to create amdgpu_set_sclk debugsfs file\n");
1569 		return -EIO;
1570 	}
1571 
1572 	/* Register debugfs entries for amdgpu_ttm */
1573 	r = amdgpu_ttm_debugfs_init(adev);
1574 	if (r) {
1575 		DRM_ERROR("Failed to init debugfs\n");
1576 		return r;
1577 	}
1578 
1579 	r = amdgpu_debugfs_pm_init(adev);
1580 	if (r) {
1581 		DRM_ERROR("Failed to register debugfs file for dpm!\n");
1582 		return r;
1583 	}
1584 
1585 	if (amdgpu_debugfs_sa_init(adev)) {
1586 		dev_err(adev->dev, "failed to register debugfs file for SA\n");
1587 	}
1588 
1589 	if (amdgpu_debugfs_fence_init(adev))
1590 		dev_err(adev->dev, "fence debugfs file creation failed\n");
1591 
1592 	r = amdgpu_debugfs_gem_init(adev);
1593 	if (r)
1594 		DRM_ERROR("registering gem debugfs failed (%d).\n", r);
1595 
1596 	r = amdgpu_debugfs_regs_init(adev);
1597 	if (r)
1598 		DRM_ERROR("registering register debugfs failed (%d).\n", r);
1599 
1600 	r = amdgpu_debugfs_firmware_init(adev);
1601 	if (r)
1602 		DRM_ERROR("registering firmware debugfs failed (%d).\n", r);
1603 
1604 #if defined(CONFIG_DRM_AMD_DC)
1605 	if (amdgpu_device_has_dc_support(adev)) {
1606 		if (dtn_debugfs_init(adev))
1607 			DRM_ERROR("amdgpu: failed initialize dtn debugfs support.\n");
1608 	}
1609 #endif
1610 
1611 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
1612 		struct amdgpu_ring *ring = adev->rings[i];
1613 
1614 		if (!ring)
1615 			continue;
1616 
1617 		if (amdgpu_debugfs_ring_init(adev, ring)) {
1618 			DRM_ERROR("Failed to register debugfs file for rings !\n");
1619 		}
1620 	}
1621 
1622 	amdgpu_ras_debugfs_create_all(adev);
1623 
1624 	amdgpu_debugfs_autodump_init(adev);
1625 
1626 	return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_list,
1627 					ARRAY_SIZE(amdgpu_debugfs_list));
1628 }
1629 
1630 #else
1631 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1632 {
1633 	return 0;
1634 }
1635 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1636 {
1637 	return 0;
1638 }
1639 #endif
1640