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 
32 #include "amdgpu.h"
33 #include "amdgpu_pm.h"
34 #include "amdgpu_dm_debugfs.h"
35 #include "amdgpu_ras.h"
36 #include "amdgpu_rap.h"
37 #include "amdgpu_securedisplay.h"
38 #include "amdgpu_fw_attestation.h"
39 #include "amdgpu_umr.h"
40 
41 int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev)
42 {
43 #if defined(CONFIG_DEBUG_FS)
44 	unsigned long timeout = 600 * HZ;
45 	int ret;
46 
47 	wake_up_interruptible(&adev->autodump.gpu_hang);
48 
49 	ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout);
50 	if (ret == 0) {
51 		pr_err("autodump: timeout, move on to gpu recovery\n");
52 		return -ETIMEDOUT;
53 	}
54 #endif
55 	return 0;
56 }
57 
58 #if defined(CONFIG_DEBUG_FS)
59 
60 static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file)
61 {
62 	struct amdgpu_device *adev = inode->i_private;
63 	int ret;
64 
65 	file->private_data = adev;
66 
67 	ret = down_read_killable(&adev->reset_sem);
68 	if (ret)
69 		return ret;
70 
71 	if (adev->autodump.dumping.done) {
72 		reinit_completion(&adev->autodump.dumping);
73 		ret = 0;
74 	} else {
75 		ret = -EBUSY;
76 	}
77 
78 	up_read(&adev->reset_sem);
79 
80 	return ret;
81 }
82 
83 static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file)
84 {
85 	struct amdgpu_device *adev = file->private_data;
86 
87 	complete_all(&adev->autodump.dumping);
88 	return 0;
89 }
90 
91 static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table)
92 {
93 	struct amdgpu_device *adev = file->private_data;
94 
95 	poll_wait(file, &adev->autodump.gpu_hang, poll_table);
96 
97 	if (amdgpu_in_reset(adev))
98 		return POLLIN | POLLRDNORM | POLLWRNORM;
99 
100 	return 0;
101 }
102 
103 static const struct file_operations autodump_debug_fops = {
104 	.owner = THIS_MODULE,
105 	.open = amdgpu_debugfs_autodump_open,
106 	.poll = amdgpu_debugfs_autodump_poll,
107 	.release = amdgpu_debugfs_autodump_release,
108 };
109 
110 static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev)
111 {
112 	init_completion(&adev->autodump.dumping);
113 	complete_all(&adev->autodump.dumping);
114 	init_waitqueue_head(&adev->autodump.gpu_hang);
115 
116 	debugfs_create_file("amdgpu_autodump", 0600,
117 		adev_to_drm(adev)->primary->debugfs_root,
118 		adev, &autodump_debug_fops);
119 }
120 
121 /**
122  * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes
123  *
124  * @read: True if reading
125  * @f: open file handle
126  * @buf: User buffer to write/read to
127  * @size: Number of bytes to write/read
128  * @pos:  Offset to seek to
129  *
130  * This debugfs entry has special meaning on the offset being sought.
131  * Various bits have different meanings:
132  *
133  * Bit 62:  Indicates a GRBM bank switch is needed
134  * Bit 61:  Indicates a SRBM bank switch is needed (implies bit 62 is
135  * 	    zero)
136  * Bits 24..33: The SE or ME selector if needed
137  * Bits 34..43: The SH (or SA) or PIPE selector if needed
138  * Bits 44..53: The INSTANCE (or CU/WGP) or QUEUE selector if needed
139  *
140  * Bit 23:  Indicates that the PM power gating lock should be held
141  * 	    This is necessary to read registers that might be
142  * 	    unreliable during a power gating transistion.
143  *
144  * The lower bits are the BYTE offset of the register to read.  This
145  * allows reading multiple registers in a single call and having
146  * the returned size reflect that.
147  */
148 static int  amdgpu_debugfs_process_reg_op(bool read, struct file *f,
149 		char __user *buf, size_t size, loff_t *pos)
150 {
151 	struct amdgpu_device *adev = file_inode(f)->i_private;
152 	ssize_t result = 0;
153 	int r;
154 	bool pm_pg_lock, use_bank, use_ring;
155 	unsigned instance_bank, sh_bank, se_bank, me, pipe, queue, vmid;
156 
157 	pm_pg_lock = use_bank = use_ring = false;
158 	instance_bank = sh_bank = se_bank = me = pipe = queue = vmid = 0;
159 
160 	if (size & 0x3 || *pos & 0x3 ||
161 			((*pos & (1ULL << 62)) && (*pos & (1ULL << 61))))
162 		return -EINVAL;
163 
164 	/* are we reading registers for which a PG lock is necessary? */
165 	pm_pg_lock = (*pos >> 23) & 1;
166 
167 	if (*pos & (1ULL << 62)) {
168 		se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24;
169 		sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34;
170 		instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44;
171 
172 		if (se_bank == 0x3FF)
173 			se_bank = 0xFFFFFFFF;
174 		if (sh_bank == 0x3FF)
175 			sh_bank = 0xFFFFFFFF;
176 		if (instance_bank == 0x3FF)
177 			instance_bank = 0xFFFFFFFF;
178 		use_bank = true;
179 	} else if (*pos & (1ULL << 61)) {
180 
181 		me = (*pos & GENMASK_ULL(33, 24)) >> 24;
182 		pipe = (*pos & GENMASK_ULL(43, 34)) >> 34;
183 		queue = (*pos & GENMASK_ULL(53, 44)) >> 44;
184 		vmid = (*pos & GENMASK_ULL(58, 54)) >> 54;
185 
186 		use_ring = true;
187 	} else {
188 		use_bank = use_ring = false;
189 	}
190 
191 	*pos &= (1UL << 22) - 1;
192 
193 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
194 	if (r < 0) {
195 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
196 		return r;
197 	}
198 
199 	r = amdgpu_virt_enable_access_debugfs(adev);
200 	if (r < 0) {
201 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
202 		return r;
203 	}
204 
205 	if (use_bank) {
206 		if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) ||
207 		    (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) {
208 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
209 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
210 			amdgpu_virt_disable_access_debugfs(adev);
211 			return -EINVAL;
212 		}
213 		mutex_lock(&adev->grbm_idx_mutex);
214 		amdgpu_gfx_select_se_sh(adev, se_bank,
215 					sh_bank, instance_bank);
216 	} else if (use_ring) {
217 		mutex_lock(&adev->srbm_mutex);
218 		amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue, vmid);
219 	}
220 
221 	if (pm_pg_lock)
222 		mutex_lock(&adev->pm.mutex);
223 
224 	while (size) {
225 		uint32_t value;
226 
227 		if (read) {
228 			value = RREG32(*pos >> 2);
229 			r = put_user(value, (uint32_t *)buf);
230 		} else {
231 			r = get_user(value, (uint32_t *)buf);
232 			if (!r)
233 				amdgpu_mm_wreg_mmio_rlc(adev, *pos >> 2, value);
234 		}
235 		if (r) {
236 			result = r;
237 			goto end;
238 		}
239 
240 		result += 4;
241 		buf += 4;
242 		*pos += 4;
243 		size -= 4;
244 	}
245 
246 end:
247 	if (use_bank) {
248 		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
249 		mutex_unlock(&adev->grbm_idx_mutex);
250 	} else if (use_ring) {
251 		amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0);
252 		mutex_unlock(&adev->srbm_mutex);
253 	}
254 
255 	if (pm_pg_lock)
256 		mutex_unlock(&adev->pm.mutex);
257 
258 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
259 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
260 
261 	amdgpu_virt_disable_access_debugfs(adev);
262 	return result;
263 }
264 
265 /*
266  * amdgpu_debugfs_regs_read - Callback for reading MMIO registers
267  */
268 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
269 					size_t size, loff_t *pos)
270 {
271 	return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos);
272 }
273 
274 /*
275  * amdgpu_debugfs_regs_write - Callback for writing MMIO registers
276  */
277 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
278 					 size_t size, loff_t *pos)
279 {
280 	return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos);
281 }
282 
283 static int amdgpu_debugfs_regs2_open(struct inode *inode, struct file *file)
284 {
285 	struct amdgpu_debugfs_regs2_data *rd;
286 
287 	rd = kzalloc(sizeof *rd, GFP_KERNEL);
288 	if (!rd)
289 		return -ENOMEM;
290 	rd->adev = file_inode(file)->i_private;
291 	file->private_data = rd;
292 	mutex_init(&rd->lock);
293 
294 	return 0;
295 }
296 
297 static int amdgpu_debugfs_regs2_release(struct inode *inode, struct file *file)
298 {
299 	struct amdgpu_debugfs_regs2_data *rd = file->private_data;
300 	mutex_destroy(&rd->lock);
301 	kfree(file->private_data);
302 	return 0;
303 }
304 
305 static ssize_t amdgpu_debugfs_regs2_op(struct file *f, char __user *buf, u32 offset, size_t size, int write_en)
306 {
307 	struct amdgpu_debugfs_regs2_data *rd = f->private_data;
308 	struct amdgpu_device *adev = rd->adev;
309 	ssize_t result = 0;
310 	int r;
311 	uint32_t value;
312 
313 	if (size & 0x3 || offset & 0x3)
314 		return -EINVAL;
315 
316 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
317 	if (r < 0) {
318 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
319 		return r;
320 	}
321 
322 	r = amdgpu_virt_enable_access_debugfs(adev);
323 	if (r < 0) {
324 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
325 		return r;
326 	}
327 
328 	mutex_lock(&rd->lock);
329 
330 	if (rd->id.use_grbm) {
331 		if ((rd->id.grbm.sh != 0xFFFFFFFF && rd->id.grbm.sh >= adev->gfx.config.max_sh_per_se) ||
332 		    (rd->id.grbm.se != 0xFFFFFFFF && rd->id.grbm.se >= adev->gfx.config.max_shader_engines)) {
333 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
334 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
335 			amdgpu_virt_disable_access_debugfs(adev);
336 			mutex_unlock(&rd->lock);
337 			return -EINVAL;
338 		}
339 		mutex_lock(&adev->grbm_idx_mutex);
340 		amdgpu_gfx_select_se_sh(adev, rd->id.grbm.se,
341 								rd->id.grbm.sh,
342 								rd->id.grbm.instance);
343 	}
344 
345 	if (rd->id.use_srbm) {
346 		mutex_lock(&adev->srbm_mutex);
347 		amdgpu_gfx_select_me_pipe_q(adev, rd->id.srbm.me, rd->id.srbm.pipe,
348 									rd->id.srbm.queue, rd->id.srbm.vmid);
349 	}
350 
351 	if (rd->id.pg_lock)
352 		mutex_lock(&adev->pm.mutex);
353 
354 	while (size) {
355 		if (!write_en) {
356 			value = RREG32(offset >> 2);
357 			r = put_user(value, (uint32_t *)buf);
358 		} else {
359 			r = get_user(value, (uint32_t *)buf);
360 			if (!r)
361 				amdgpu_mm_wreg_mmio_rlc(adev, offset >> 2, value);
362 		}
363 		if (r) {
364 			result = r;
365 			goto end;
366 		}
367 		offset += 4;
368 		size -= 4;
369 		result += 4;
370 		buf += 4;
371 	}
372 end:
373 	if (rd->id.use_grbm) {
374 		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
375 		mutex_unlock(&adev->grbm_idx_mutex);
376 	}
377 
378 	if (rd->id.use_srbm) {
379 		amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0);
380 		mutex_unlock(&adev->srbm_mutex);
381 	}
382 
383 	if (rd->id.pg_lock)
384 		mutex_unlock(&adev->pm.mutex);
385 
386 	mutex_unlock(&rd->lock);
387 
388 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
389 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
390 
391 	amdgpu_virt_disable_access_debugfs(adev);
392 	return result;
393 }
394 
395 static long amdgpu_debugfs_regs2_ioctl(struct file *f, unsigned int cmd, unsigned long data)
396 {
397 	struct amdgpu_debugfs_regs2_data *rd = f->private_data;
398 	int r;
399 
400 	switch (cmd) {
401 	case AMDGPU_DEBUGFS_REGS2_IOC_SET_STATE:
402 		mutex_lock(&rd->lock);
403 		r = copy_from_user(&rd->id, (struct amdgpu_debugfs_regs2_iocdata *)data, sizeof rd->id);
404 		mutex_unlock(&rd->lock);
405 		return r ? -EINVAL : 0;
406 	default:
407 		return -EINVAL;
408 	}
409 	return 0;
410 }
411 
412 static ssize_t amdgpu_debugfs_regs2_read(struct file *f, char __user *buf, size_t size, loff_t *pos)
413 {
414 	return amdgpu_debugfs_regs2_op(f, buf, *pos, size, 0);
415 }
416 
417 static ssize_t amdgpu_debugfs_regs2_write(struct file *f, const char __user *buf, size_t size, loff_t *pos)
418 {
419 	return amdgpu_debugfs_regs2_op(f, (char __user *)buf, *pos, size, 1);
420 }
421 
422 
423 /**
424  * amdgpu_debugfs_regs_pcie_read - Read from a PCIE 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_pcie_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_to_drm(adev)->dev);
446 	if (r < 0) {
447 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
448 		return r;
449 	}
450 
451 	r = amdgpu_virt_enable_access_debugfs(adev);
452 	if (r < 0) {
453 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
454 		return r;
455 	}
456 
457 	while (size) {
458 		uint32_t value;
459 
460 		value = RREG32_PCIE(*pos);
461 		r = put_user(value, (uint32_t *)buf);
462 		if (r) {
463 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
464 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
465 			amdgpu_virt_disable_access_debugfs(adev);
466 			return r;
467 		}
468 
469 		result += 4;
470 		buf += 4;
471 		*pos += 4;
472 		size -= 4;
473 	}
474 
475 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
476 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
477 
478 	amdgpu_virt_disable_access_debugfs(adev);
479 	return result;
480 }
481 
482 /**
483  * amdgpu_debugfs_regs_pcie_write - Write to a PCIE register
484  *
485  * @f: open file handle
486  * @buf: User buffer to write data from
487  * @size: Number of bytes to write
488  * @pos:  Offset to seek to
489  *
490  * The lower bits are the BYTE offset of the register to write.  This
491  * allows writing multiple registers in a single call and having
492  * the returned size reflect that.
493  */
494 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf,
495 					 size_t size, loff_t *pos)
496 {
497 	struct amdgpu_device *adev = file_inode(f)->i_private;
498 	ssize_t result = 0;
499 	int r;
500 
501 	if (size & 0x3 || *pos & 0x3)
502 		return -EINVAL;
503 
504 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
505 	if (r < 0) {
506 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
507 		return r;
508 	}
509 
510 	r = amdgpu_virt_enable_access_debugfs(adev);
511 	if (r < 0) {
512 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
513 		return r;
514 	}
515 
516 	while (size) {
517 		uint32_t value;
518 
519 		r = get_user(value, (uint32_t *)buf);
520 		if (r) {
521 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
522 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
523 			amdgpu_virt_disable_access_debugfs(adev);
524 			return r;
525 		}
526 
527 		WREG32_PCIE(*pos, value);
528 
529 		result += 4;
530 		buf += 4;
531 		*pos += 4;
532 		size -= 4;
533 	}
534 
535 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
536 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
537 
538 	amdgpu_virt_disable_access_debugfs(adev);
539 	return result;
540 }
541 
542 /**
543  * amdgpu_debugfs_regs_didt_read - Read from a DIDT register
544  *
545  * @f: open file handle
546  * @buf: User buffer to store read data in
547  * @size: Number of bytes to read
548  * @pos:  Offset to seek to
549  *
550  * The lower bits are the BYTE offset of the register to read.  This
551  * allows reading multiple registers in a single call and having
552  * the returned size reflect that.
553  */
554 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf,
555 					size_t size, loff_t *pos)
556 {
557 	struct amdgpu_device *adev = file_inode(f)->i_private;
558 	ssize_t result = 0;
559 	int r;
560 
561 	if (size & 0x3 || *pos & 0x3)
562 		return -EINVAL;
563 
564 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
565 	if (r < 0) {
566 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
567 		return r;
568 	}
569 
570 	r = amdgpu_virt_enable_access_debugfs(adev);
571 	if (r < 0) {
572 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
573 		return r;
574 	}
575 
576 	while (size) {
577 		uint32_t value;
578 
579 		value = RREG32_DIDT(*pos >> 2);
580 		r = put_user(value, (uint32_t *)buf);
581 		if (r) {
582 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
583 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
584 			amdgpu_virt_disable_access_debugfs(adev);
585 			return r;
586 		}
587 
588 		result += 4;
589 		buf += 4;
590 		*pos += 4;
591 		size -= 4;
592 	}
593 
594 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
595 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
596 
597 	amdgpu_virt_disable_access_debugfs(adev);
598 	return result;
599 }
600 
601 /**
602  * amdgpu_debugfs_regs_didt_write - Write to a DIDT register
603  *
604  * @f: open file handle
605  * @buf: User buffer to write data from
606  * @size: Number of bytes to write
607  * @pos:  Offset to seek to
608  *
609  * The lower bits are the BYTE offset of the register to write.  This
610  * allows writing multiple registers in a single call and having
611  * the returned size reflect that.
612  */
613 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf,
614 					 size_t size, loff_t *pos)
615 {
616 	struct amdgpu_device *adev = file_inode(f)->i_private;
617 	ssize_t result = 0;
618 	int r;
619 
620 	if (size & 0x3 || *pos & 0x3)
621 		return -EINVAL;
622 
623 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
624 	if (r < 0) {
625 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
626 		return r;
627 	}
628 
629 	r = amdgpu_virt_enable_access_debugfs(adev);
630 	if (r < 0) {
631 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
632 		return r;
633 	}
634 
635 	while (size) {
636 		uint32_t value;
637 
638 		r = get_user(value, (uint32_t *)buf);
639 		if (r) {
640 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
641 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
642 			amdgpu_virt_disable_access_debugfs(adev);
643 			return r;
644 		}
645 
646 		WREG32_DIDT(*pos >> 2, value);
647 
648 		result += 4;
649 		buf += 4;
650 		*pos += 4;
651 		size -= 4;
652 	}
653 
654 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
655 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
656 
657 	amdgpu_virt_disable_access_debugfs(adev);
658 	return result;
659 }
660 
661 /**
662  * amdgpu_debugfs_regs_smc_read - Read from a SMC register
663  *
664  * @f: open file handle
665  * @buf: User buffer to store read data in
666  * @size: Number of bytes to read
667  * @pos:  Offset to seek to
668  *
669  * The lower bits are the BYTE offset of the register to read.  This
670  * allows reading multiple registers in a single call and having
671  * the returned size reflect that.
672  */
673 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
674 					size_t size, loff_t *pos)
675 {
676 	struct amdgpu_device *adev = file_inode(f)->i_private;
677 	ssize_t result = 0;
678 	int r;
679 
680 	if (size & 0x3 || *pos & 0x3)
681 		return -EINVAL;
682 
683 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
684 	if (r < 0) {
685 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
686 		return r;
687 	}
688 
689 	r = amdgpu_virt_enable_access_debugfs(adev);
690 	if (r < 0) {
691 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
692 		return r;
693 	}
694 
695 	while (size) {
696 		uint32_t value;
697 
698 		value = RREG32_SMC(*pos);
699 		r = put_user(value, (uint32_t *)buf);
700 		if (r) {
701 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
702 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
703 			amdgpu_virt_disable_access_debugfs(adev);
704 			return r;
705 		}
706 
707 		result += 4;
708 		buf += 4;
709 		*pos += 4;
710 		size -= 4;
711 	}
712 
713 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
714 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
715 
716 	amdgpu_virt_disable_access_debugfs(adev);
717 	return result;
718 }
719 
720 /**
721  * amdgpu_debugfs_regs_smc_write - Write to a SMC register
722  *
723  * @f: open file handle
724  * @buf: User buffer to write data from
725  * @size: Number of bytes to write
726  * @pos:  Offset to seek to
727  *
728  * The lower bits are the BYTE offset of the register to write.  This
729  * allows writing multiple registers in a single call and having
730  * the returned size reflect that.
731  */
732 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf,
733 					 size_t size, loff_t *pos)
734 {
735 	struct amdgpu_device *adev = file_inode(f)->i_private;
736 	ssize_t result = 0;
737 	int r;
738 
739 	if (size & 0x3 || *pos & 0x3)
740 		return -EINVAL;
741 
742 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
743 	if (r < 0) {
744 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
745 		return r;
746 	}
747 
748 	r = amdgpu_virt_enable_access_debugfs(adev);
749 	if (r < 0) {
750 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
751 		return r;
752 	}
753 
754 	while (size) {
755 		uint32_t value;
756 
757 		r = get_user(value, (uint32_t *)buf);
758 		if (r) {
759 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
760 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
761 			amdgpu_virt_disable_access_debugfs(adev);
762 			return r;
763 		}
764 
765 		WREG32_SMC(*pos, value);
766 
767 		result += 4;
768 		buf += 4;
769 		*pos += 4;
770 		size -= 4;
771 	}
772 
773 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
774 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
775 
776 	amdgpu_virt_disable_access_debugfs(adev);
777 	return result;
778 }
779 
780 /**
781  * amdgpu_debugfs_gca_config_read - Read from gfx config data
782  *
783  * @f: open file handle
784  * @buf: User buffer to store read data in
785  * @size: Number of bytes to read
786  * @pos:  Offset to seek to
787  *
788  * This file is used to access configuration data in a somewhat
789  * stable fashion.  The format is a series of DWORDs with the first
790  * indicating which revision it is.  New content is appended to the
791  * end so that older software can still read the data.
792  */
793 
794 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf,
795 					size_t size, loff_t *pos)
796 {
797 	struct amdgpu_device *adev = file_inode(f)->i_private;
798 	ssize_t result = 0;
799 	int r;
800 	uint32_t *config, no_regs = 0;
801 
802 	if (size & 0x3 || *pos & 0x3)
803 		return -EINVAL;
804 
805 	config = kmalloc_array(256, sizeof(*config), GFP_KERNEL);
806 	if (!config)
807 		return -ENOMEM;
808 
809 	/* version, increment each time something is added */
810 	config[no_regs++] = 3;
811 	config[no_regs++] = adev->gfx.config.max_shader_engines;
812 	config[no_regs++] = adev->gfx.config.max_tile_pipes;
813 	config[no_regs++] = adev->gfx.config.max_cu_per_sh;
814 	config[no_regs++] = adev->gfx.config.max_sh_per_se;
815 	config[no_regs++] = adev->gfx.config.max_backends_per_se;
816 	config[no_regs++] = adev->gfx.config.max_texture_channel_caches;
817 	config[no_regs++] = adev->gfx.config.max_gprs;
818 	config[no_regs++] = adev->gfx.config.max_gs_threads;
819 	config[no_regs++] = adev->gfx.config.max_hw_contexts;
820 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend;
821 	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend;
822 	config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size;
823 	config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size;
824 	config[no_regs++] = adev->gfx.config.num_tile_pipes;
825 	config[no_regs++] = adev->gfx.config.backend_enable_mask;
826 	config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes;
827 	config[no_regs++] = adev->gfx.config.mem_row_size_in_kb;
828 	config[no_regs++] = adev->gfx.config.shader_engine_tile_size;
829 	config[no_regs++] = adev->gfx.config.num_gpus;
830 	config[no_regs++] = adev->gfx.config.multi_gpu_tile_size;
831 	config[no_regs++] = adev->gfx.config.mc_arb_ramcfg;
832 	config[no_regs++] = adev->gfx.config.gb_addr_config;
833 	config[no_regs++] = adev->gfx.config.num_rbs;
834 
835 	/* rev==1 */
836 	config[no_regs++] = adev->rev_id;
837 	config[no_regs++] = adev->pg_flags;
838 	config[no_regs++] = adev->cg_flags;
839 
840 	/* rev==2 */
841 	config[no_regs++] = adev->family;
842 	config[no_regs++] = adev->external_rev_id;
843 
844 	/* rev==3 */
845 	config[no_regs++] = adev->pdev->device;
846 	config[no_regs++] = adev->pdev->revision;
847 	config[no_regs++] = adev->pdev->subsystem_device;
848 	config[no_regs++] = adev->pdev->subsystem_vendor;
849 
850 	while (size && (*pos < no_regs * 4)) {
851 		uint32_t value;
852 
853 		value = config[*pos >> 2];
854 		r = put_user(value, (uint32_t *)buf);
855 		if (r) {
856 			kfree(config);
857 			return r;
858 		}
859 
860 		result += 4;
861 		buf += 4;
862 		*pos += 4;
863 		size -= 4;
864 	}
865 
866 	kfree(config);
867 	return result;
868 }
869 
870 /**
871  * amdgpu_debugfs_sensor_read - Read from the powerplay sensors
872  *
873  * @f: open file handle
874  * @buf: User buffer to store read data in
875  * @size: Number of bytes to read
876  * @pos:  Offset to seek to
877  *
878  * The offset is treated as the BYTE address of one of the sensors
879  * enumerated in amd/include/kgd_pp_interface.h under the
880  * 'amd_pp_sensors' enumeration.  For instance to read the UVD VCLK
881  * you would use the offset 3 * 4 = 12.
882  */
883 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf,
884 					size_t size, loff_t *pos)
885 {
886 	struct amdgpu_device *adev = file_inode(f)->i_private;
887 	int idx, x, outsize, r, valuesize;
888 	uint32_t values[16];
889 
890 	if (size & 3 || *pos & 0x3)
891 		return -EINVAL;
892 
893 	if (!adev->pm.dpm_enabled)
894 		return -EINVAL;
895 
896 	/* convert offset to sensor number */
897 	idx = *pos >> 2;
898 
899 	valuesize = sizeof(values);
900 
901 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
902 	if (r < 0) {
903 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
904 		return r;
905 	}
906 
907 	r = amdgpu_virt_enable_access_debugfs(adev);
908 	if (r < 0) {
909 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
910 		return r;
911 	}
912 
913 	r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize);
914 
915 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
916 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
917 
918 	if (r) {
919 		amdgpu_virt_disable_access_debugfs(adev);
920 		return r;
921 	}
922 
923 	if (size > valuesize) {
924 		amdgpu_virt_disable_access_debugfs(adev);
925 		return -EINVAL;
926 	}
927 
928 	outsize = 0;
929 	x = 0;
930 	if (!r) {
931 		while (size) {
932 			r = put_user(values[x++], (int32_t *)buf);
933 			buf += 4;
934 			size -= 4;
935 			outsize += 4;
936 		}
937 	}
938 
939 	amdgpu_virt_disable_access_debugfs(adev);
940 	return !r ? outsize : r;
941 }
942 
943 /** amdgpu_debugfs_wave_read - Read WAVE STATUS data
944  *
945  * @f: open file handle
946  * @buf: User buffer to store read data in
947  * @size: Number of bytes to read
948  * @pos:  Offset to seek to
949  *
950  * The offset being sought changes which wave that the status data
951  * will be returned for.  The bits are used as follows:
952  *
953  * Bits 0..6: 	Byte offset into data
954  * Bits 7..14:	SE selector
955  * Bits 15..22:	SH/SA selector
956  * Bits 23..30: CU/{WGP+SIMD} selector
957  * Bits 31..36: WAVE ID selector
958  * Bits 37..44: SIMD ID selector
959  *
960  * The returned data begins with one DWORD of version information
961  * Followed by WAVE STATUS registers relevant to the GFX IP version
962  * being used.  See gfx_v8_0_read_wave_data() for an example output.
963  */
964 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
965 					size_t size, loff_t *pos)
966 {
967 	struct amdgpu_device *adev = f->f_inode->i_private;
968 	int r, x;
969 	ssize_t result = 0;
970 	uint32_t offset, se, sh, cu, wave, simd, data[32];
971 
972 	if (size & 3 || *pos & 3)
973 		return -EINVAL;
974 
975 	/* decode offset */
976 	offset = (*pos & GENMASK_ULL(6, 0));
977 	se = (*pos & GENMASK_ULL(14, 7)) >> 7;
978 	sh = (*pos & GENMASK_ULL(22, 15)) >> 15;
979 	cu = (*pos & GENMASK_ULL(30, 23)) >> 23;
980 	wave = (*pos & GENMASK_ULL(36, 31)) >> 31;
981 	simd = (*pos & GENMASK_ULL(44, 37)) >> 37;
982 
983 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
984 	if (r < 0) {
985 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
986 		return r;
987 	}
988 
989 	r = amdgpu_virt_enable_access_debugfs(adev);
990 	if (r < 0) {
991 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
992 		return r;
993 	}
994 
995 	/* switch to the specific se/sh/cu */
996 	mutex_lock(&adev->grbm_idx_mutex);
997 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
998 
999 	x = 0;
1000 	if (adev->gfx.funcs->read_wave_data)
1001 		adev->gfx.funcs->read_wave_data(adev, simd, wave, data, &x);
1002 
1003 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
1004 	mutex_unlock(&adev->grbm_idx_mutex);
1005 
1006 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1007 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1008 
1009 	if (!x) {
1010 		amdgpu_virt_disable_access_debugfs(adev);
1011 		return -EINVAL;
1012 	}
1013 
1014 	while (size && (offset < x * 4)) {
1015 		uint32_t value;
1016 
1017 		value = data[offset >> 2];
1018 		r = put_user(value, (uint32_t *)buf);
1019 		if (r) {
1020 			amdgpu_virt_disable_access_debugfs(adev);
1021 			return r;
1022 		}
1023 
1024 		result += 4;
1025 		buf += 4;
1026 		offset += 4;
1027 		size -= 4;
1028 	}
1029 
1030 	amdgpu_virt_disable_access_debugfs(adev);
1031 	return result;
1032 }
1033 
1034 /** amdgpu_debugfs_gpr_read - Read wave gprs
1035  *
1036  * @f: open file handle
1037  * @buf: User buffer to store read data in
1038  * @size: Number of bytes to read
1039  * @pos:  Offset to seek to
1040  *
1041  * The offset being sought changes which wave that the status data
1042  * will be returned for.  The bits are used as follows:
1043  *
1044  * Bits 0..11:	Byte offset into data
1045  * Bits 12..19:	SE selector
1046  * Bits 20..27:	SH/SA selector
1047  * Bits 28..35: CU/{WGP+SIMD} selector
1048  * Bits 36..43: WAVE ID selector
1049  * Bits 37..44: SIMD ID selector
1050  * Bits 52..59: Thread selector
1051  * Bits 60..61: Bank selector (VGPR=0,SGPR=1)
1052  *
1053  * The return data comes from the SGPR or VGPR register bank for
1054  * the selected operational unit.
1055  */
1056 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
1057 					size_t size, loff_t *pos)
1058 {
1059 	struct amdgpu_device *adev = f->f_inode->i_private;
1060 	int r;
1061 	ssize_t result = 0;
1062 	uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
1063 
1064 	if (size > 4096 || size & 3 || *pos & 3)
1065 		return -EINVAL;
1066 
1067 	/* decode offset */
1068 	offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
1069 	se = (*pos & GENMASK_ULL(19, 12)) >> 12;
1070 	sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
1071 	cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
1072 	wave = (*pos & GENMASK_ULL(43, 36)) >> 36;
1073 	simd = (*pos & GENMASK_ULL(51, 44)) >> 44;
1074 	thread = (*pos & GENMASK_ULL(59, 52)) >> 52;
1075 	bank = (*pos & GENMASK_ULL(61, 60)) >> 60;
1076 
1077 	data = kcalloc(1024, sizeof(*data), GFP_KERNEL);
1078 	if (!data)
1079 		return -ENOMEM;
1080 
1081 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1082 	if (r < 0)
1083 		goto err;
1084 
1085 	r = amdgpu_virt_enable_access_debugfs(adev);
1086 	if (r < 0)
1087 		goto err;
1088 
1089 	/* switch to the specific se/sh/cu */
1090 	mutex_lock(&adev->grbm_idx_mutex);
1091 	amdgpu_gfx_select_se_sh(adev, se, sh, cu);
1092 
1093 	if (bank == 0) {
1094 		if (adev->gfx.funcs->read_wave_vgprs)
1095 			adev->gfx.funcs->read_wave_vgprs(adev, simd, wave, thread, offset, size>>2, data);
1096 	} else {
1097 		if (adev->gfx.funcs->read_wave_sgprs)
1098 			adev->gfx.funcs->read_wave_sgprs(adev, simd, wave, offset, size>>2, data);
1099 	}
1100 
1101 	amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
1102 	mutex_unlock(&adev->grbm_idx_mutex);
1103 
1104 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1105 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1106 
1107 	while (size) {
1108 		uint32_t value;
1109 
1110 		value = data[result >> 2];
1111 		r = put_user(value, (uint32_t *)buf);
1112 		if (r) {
1113 			amdgpu_virt_disable_access_debugfs(adev);
1114 			goto err;
1115 		}
1116 
1117 		result += 4;
1118 		buf += 4;
1119 		size -= 4;
1120 	}
1121 
1122 	kfree(data);
1123 	amdgpu_virt_disable_access_debugfs(adev);
1124 	return result;
1125 
1126 err:
1127 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1128 	kfree(data);
1129 	return r;
1130 }
1131 
1132 /**
1133  * amdgpu_debugfs_gfxoff_write - Enable/disable GFXOFF
1134  *
1135  * @f: open file handle
1136  * @buf: User buffer to write data from
1137  * @size: Number of bytes to write
1138  * @pos:  Offset to seek to
1139  *
1140  * Write a 32-bit zero to disable or a 32-bit non-zero to enable
1141  */
1142 static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf,
1143 					 size_t size, loff_t *pos)
1144 {
1145 	struct amdgpu_device *adev = file_inode(f)->i_private;
1146 	ssize_t result = 0;
1147 	int r;
1148 
1149 	if (size & 0x3 || *pos & 0x3)
1150 		return -EINVAL;
1151 
1152 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1153 	if (r < 0) {
1154 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1155 		return r;
1156 	}
1157 
1158 	while (size) {
1159 		uint32_t value;
1160 
1161 		r = get_user(value, (uint32_t *)buf);
1162 		if (r) {
1163 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1164 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1165 			return r;
1166 		}
1167 
1168 		amdgpu_gfx_off_ctrl(adev, value ? true : false);
1169 
1170 		result += 4;
1171 		buf += 4;
1172 		*pos += 4;
1173 		size -= 4;
1174 	}
1175 
1176 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1177 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1178 
1179 	return result;
1180 }
1181 
1182 
1183 /**
1184  * amdgpu_debugfs_gfxoff_read - read gfxoff status
1185  *
1186  * @f: open file handle
1187  * @buf: User buffer to store read data in
1188  * @size: Number of bytes to read
1189  * @pos:  Offset to seek to
1190  */
1191 static ssize_t amdgpu_debugfs_gfxoff_read(struct file *f, char __user *buf,
1192 					 size_t size, loff_t *pos)
1193 {
1194 	struct amdgpu_device *adev = file_inode(f)->i_private;
1195 	ssize_t result = 0;
1196 	int r;
1197 
1198 	if (size & 0x3 || *pos & 0x3)
1199 		return -EINVAL;
1200 
1201 	r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1202 	if (r < 0)
1203 		return r;
1204 
1205 	while (size) {
1206 		uint32_t value;
1207 
1208 		r = amdgpu_get_gfx_off_status(adev, &value);
1209 		if (r) {
1210 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1211 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1212 			return r;
1213 		}
1214 
1215 		r = put_user(value, (uint32_t *)buf);
1216 		if (r) {
1217 			pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1218 			pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1219 			return r;
1220 		}
1221 
1222 		result += 4;
1223 		buf += 4;
1224 		*pos += 4;
1225 		size -= 4;
1226 	}
1227 
1228 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1229 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1230 
1231 	return result;
1232 }
1233 
1234 static const struct file_operations amdgpu_debugfs_regs2_fops = {
1235 	.owner = THIS_MODULE,
1236 	.unlocked_ioctl = amdgpu_debugfs_regs2_ioctl,
1237 	.read = amdgpu_debugfs_regs2_read,
1238 	.write = amdgpu_debugfs_regs2_write,
1239 	.open = amdgpu_debugfs_regs2_open,
1240 	.release = amdgpu_debugfs_regs2_release,
1241 	.llseek = default_llseek
1242 };
1243 
1244 static const struct file_operations amdgpu_debugfs_regs_fops = {
1245 	.owner = THIS_MODULE,
1246 	.read = amdgpu_debugfs_regs_read,
1247 	.write = amdgpu_debugfs_regs_write,
1248 	.llseek = default_llseek
1249 };
1250 static const struct file_operations amdgpu_debugfs_regs_didt_fops = {
1251 	.owner = THIS_MODULE,
1252 	.read = amdgpu_debugfs_regs_didt_read,
1253 	.write = amdgpu_debugfs_regs_didt_write,
1254 	.llseek = default_llseek
1255 };
1256 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = {
1257 	.owner = THIS_MODULE,
1258 	.read = amdgpu_debugfs_regs_pcie_read,
1259 	.write = amdgpu_debugfs_regs_pcie_write,
1260 	.llseek = default_llseek
1261 };
1262 static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
1263 	.owner = THIS_MODULE,
1264 	.read = amdgpu_debugfs_regs_smc_read,
1265 	.write = amdgpu_debugfs_regs_smc_write,
1266 	.llseek = default_llseek
1267 };
1268 
1269 static const struct file_operations amdgpu_debugfs_gca_config_fops = {
1270 	.owner = THIS_MODULE,
1271 	.read = amdgpu_debugfs_gca_config_read,
1272 	.llseek = default_llseek
1273 };
1274 
1275 static const struct file_operations amdgpu_debugfs_sensors_fops = {
1276 	.owner = THIS_MODULE,
1277 	.read = amdgpu_debugfs_sensor_read,
1278 	.llseek = default_llseek
1279 };
1280 
1281 static const struct file_operations amdgpu_debugfs_wave_fops = {
1282 	.owner = THIS_MODULE,
1283 	.read = amdgpu_debugfs_wave_read,
1284 	.llseek = default_llseek
1285 };
1286 static const struct file_operations amdgpu_debugfs_gpr_fops = {
1287 	.owner = THIS_MODULE,
1288 	.read = amdgpu_debugfs_gpr_read,
1289 	.llseek = default_llseek
1290 };
1291 
1292 static const struct file_operations amdgpu_debugfs_gfxoff_fops = {
1293 	.owner = THIS_MODULE,
1294 	.read = amdgpu_debugfs_gfxoff_read,
1295 	.write = amdgpu_debugfs_gfxoff_write,
1296 	.llseek = default_llseek
1297 };
1298 
1299 static const struct file_operations *debugfs_regs[] = {
1300 	&amdgpu_debugfs_regs_fops,
1301 	&amdgpu_debugfs_regs2_fops,
1302 	&amdgpu_debugfs_regs_didt_fops,
1303 	&amdgpu_debugfs_regs_pcie_fops,
1304 	&amdgpu_debugfs_regs_smc_fops,
1305 	&amdgpu_debugfs_gca_config_fops,
1306 	&amdgpu_debugfs_sensors_fops,
1307 	&amdgpu_debugfs_wave_fops,
1308 	&amdgpu_debugfs_gpr_fops,
1309 	&amdgpu_debugfs_gfxoff_fops,
1310 };
1311 
1312 static const char *debugfs_regs_names[] = {
1313 	"amdgpu_regs",
1314 	"amdgpu_regs2",
1315 	"amdgpu_regs_didt",
1316 	"amdgpu_regs_pcie",
1317 	"amdgpu_regs_smc",
1318 	"amdgpu_gca_config",
1319 	"amdgpu_sensors",
1320 	"amdgpu_wave",
1321 	"amdgpu_gpr",
1322 	"amdgpu_gfxoff",
1323 };
1324 
1325 /**
1326  * amdgpu_debugfs_regs_init -	Initialize debugfs entries that provide
1327  * 				register access.
1328  *
1329  * @adev: The device to attach the debugfs entries to
1330  */
1331 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1332 {
1333 	struct drm_minor *minor = adev_to_drm(adev)->primary;
1334 	struct dentry *ent, *root = minor->debugfs_root;
1335 	unsigned int i;
1336 
1337 	for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) {
1338 		ent = debugfs_create_file(debugfs_regs_names[i],
1339 					  S_IFREG | S_IRUGO, root,
1340 					  adev, debugfs_regs[i]);
1341 		if (!i && !IS_ERR_OR_NULL(ent))
1342 			i_size_write(ent->d_inode, adev->rmmio_size);
1343 	}
1344 
1345 	return 0;
1346 }
1347 
1348 static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
1349 {
1350 	struct amdgpu_device *adev = (struct amdgpu_device *)m->private;
1351 	struct drm_device *dev = adev_to_drm(adev);
1352 	int r = 0, i;
1353 
1354 	r = pm_runtime_get_sync(dev->dev);
1355 	if (r < 0) {
1356 		pm_runtime_put_autosuspend(dev->dev);
1357 		return r;
1358 	}
1359 
1360 	/* Avoid accidently unparking the sched thread during GPU reset */
1361 	r = down_write_killable(&adev->reset_sem);
1362 	if (r)
1363 		return r;
1364 
1365 	/* hold on the scheduler */
1366 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1367 		struct amdgpu_ring *ring = adev->rings[i];
1368 
1369 		if (!ring || !ring->sched.thread)
1370 			continue;
1371 		kthread_park(ring->sched.thread);
1372 	}
1373 
1374 	seq_printf(m, "run ib test:\n");
1375 	r = amdgpu_ib_ring_tests(adev);
1376 	if (r)
1377 		seq_printf(m, "ib ring tests failed (%d).\n", r);
1378 	else
1379 		seq_printf(m, "ib ring tests passed.\n");
1380 
1381 	/* go on the scheduler */
1382 	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1383 		struct amdgpu_ring *ring = adev->rings[i];
1384 
1385 		if (!ring || !ring->sched.thread)
1386 			continue;
1387 		kthread_unpark(ring->sched.thread);
1388 	}
1389 
1390 	up_write(&adev->reset_sem);
1391 
1392 	pm_runtime_mark_last_busy(dev->dev);
1393 	pm_runtime_put_autosuspend(dev->dev);
1394 
1395 	return 0;
1396 }
1397 
1398 static int amdgpu_debugfs_evict_vram(void *data, u64 *val)
1399 {
1400 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1401 	struct drm_device *dev = adev_to_drm(adev);
1402 	int r;
1403 
1404 	r = pm_runtime_get_sync(dev->dev);
1405 	if (r < 0) {
1406 		pm_runtime_put_autosuspend(dev->dev);
1407 		return r;
1408 	}
1409 
1410 	*val = amdgpu_bo_evict_vram(adev);
1411 
1412 	pm_runtime_mark_last_busy(dev->dev);
1413 	pm_runtime_put_autosuspend(dev->dev);
1414 
1415 	return 0;
1416 }
1417 
1418 
1419 static int amdgpu_debugfs_evict_gtt(void *data, u64 *val)
1420 {
1421 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1422 	struct drm_device *dev = adev_to_drm(adev);
1423 	struct ttm_resource_manager *man;
1424 	int r;
1425 
1426 	r = pm_runtime_get_sync(dev->dev);
1427 	if (r < 0) {
1428 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1429 		return r;
1430 	}
1431 
1432 	man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
1433 	*val = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
1434 
1435 	pm_runtime_mark_last_busy(dev->dev);
1436 	pm_runtime_put_autosuspend(dev->dev);
1437 
1438 	return 0;
1439 }
1440 
1441 
1442 static int amdgpu_debugfs_vm_info_show(struct seq_file *m, void *unused)
1443 {
1444 	struct amdgpu_device *adev = (struct amdgpu_device *)m->private;
1445 	struct drm_device *dev = adev_to_drm(adev);
1446 	struct drm_file *file;
1447 	int r;
1448 
1449 	r = mutex_lock_interruptible(&dev->filelist_mutex);
1450 	if (r)
1451 		return r;
1452 
1453 	list_for_each_entry(file, &dev->filelist, lhead) {
1454 		struct amdgpu_fpriv *fpriv = file->driver_priv;
1455 		struct amdgpu_vm *vm = &fpriv->vm;
1456 
1457 		seq_printf(m, "pid:%d\tProcess:%s ----------\n",
1458 				vm->task_info.pid, vm->task_info.process_name);
1459 		r = amdgpu_bo_reserve(vm->root.bo, true);
1460 		if (r)
1461 			break;
1462 		amdgpu_debugfs_vm_bo_info(vm, m);
1463 		amdgpu_bo_unreserve(vm->root.bo);
1464 	}
1465 
1466 	mutex_unlock(&dev->filelist_mutex);
1467 
1468 	return r;
1469 }
1470 
1471 DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_test_ib);
1472 DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_vm_info);
1473 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_vram_fops, amdgpu_debugfs_evict_vram,
1474 			 NULL, "%lld\n");
1475 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_gtt_fops, amdgpu_debugfs_evict_gtt,
1476 			 NULL, "%lld\n");
1477 
1478 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
1479 					  struct dma_fence **fences)
1480 {
1481 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1482 	uint32_t sync_seq, last_seq;
1483 
1484 	last_seq = atomic_read(&ring->fence_drv.last_seq);
1485 	sync_seq = ring->fence_drv.sync_seq;
1486 
1487 	last_seq &= drv->num_fences_mask;
1488 	sync_seq &= drv->num_fences_mask;
1489 
1490 	do {
1491 		struct dma_fence *fence, **ptr;
1492 
1493 		++last_seq;
1494 		last_seq &= drv->num_fences_mask;
1495 		ptr = &drv->fences[last_seq];
1496 
1497 		fence = rcu_dereference_protected(*ptr, 1);
1498 		RCU_INIT_POINTER(*ptr, NULL);
1499 
1500 		if (!fence)
1501 			continue;
1502 
1503 		fences[last_seq] = fence;
1504 
1505 	} while (last_seq != sync_seq);
1506 }
1507 
1508 static void amdgpu_ib_preempt_signal_fences(struct dma_fence **fences,
1509 					    int length)
1510 {
1511 	int i;
1512 	struct dma_fence *fence;
1513 
1514 	for (i = 0; i < length; i++) {
1515 		fence = fences[i];
1516 		if (!fence)
1517 			continue;
1518 		dma_fence_signal(fence);
1519 		dma_fence_put(fence);
1520 	}
1521 }
1522 
1523 static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched)
1524 {
1525 	struct drm_sched_job *s_job;
1526 	struct dma_fence *fence;
1527 
1528 	spin_lock(&sched->job_list_lock);
1529 	list_for_each_entry(s_job, &sched->pending_list, list) {
1530 		fence = sched->ops->run_job(s_job);
1531 		dma_fence_put(fence);
1532 	}
1533 	spin_unlock(&sched->job_list_lock);
1534 }
1535 
1536 static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring)
1537 {
1538 	struct amdgpu_job *job;
1539 	struct drm_sched_job *s_job, *tmp;
1540 	uint32_t preempt_seq;
1541 	struct dma_fence *fence, **ptr;
1542 	struct amdgpu_fence_driver *drv = &ring->fence_drv;
1543 	struct drm_gpu_scheduler *sched = &ring->sched;
1544 	bool preempted = true;
1545 
1546 	if (ring->funcs->type != AMDGPU_RING_TYPE_GFX)
1547 		return;
1548 
1549 	preempt_seq = le32_to_cpu(*(drv->cpu_addr + 2));
1550 	if (preempt_seq <= atomic_read(&drv->last_seq)) {
1551 		preempted = false;
1552 		goto no_preempt;
1553 	}
1554 
1555 	preempt_seq &= drv->num_fences_mask;
1556 	ptr = &drv->fences[preempt_seq];
1557 	fence = rcu_dereference_protected(*ptr, 1);
1558 
1559 no_preempt:
1560 	spin_lock(&sched->job_list_lock);
1561 	list_for_each_entry_safe(s_job, tmp, &sched->pending_list, list) {
1562 		if (dma_fence_is_signaled(&s_job->s_fence->finished)) {
1563 			/* remove job from ring_mirror_list */
1564 			list_del_init(&s_job->list);
1565 			sched->ops->free_job(s_job);
1566 			continue;
1567 		}
1568 		job = to_amdgpu_job(s_job);
1569 		if (preempted && (&job->hw_fence) == fence)
1570 			/* mark the job as preempted */
1571 			job->preemption_status |= AMDGPU_IB_PREEMPTED;
1572 	}
1573 	spin_unlock(&sched->job_list_lock);
1574 }
1575 
1576 static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
1577 {
1578 	int r, resched, length;
1579 	struct amdgpu_ring *ring;
1580 	struct dma_fence **fences = NULL;
1581 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1582 
1583 	if (val >= AMDGPU_MAX_RINGS)
1584 		return -EINVAL;
1585 
1586 	ring = adev->rings[val];
1587 
1588 	if (!ring || !ring->funcs->preempt_ib || !ring->sched.thread)
1589 		return -EINVAL;
1590 
1591 	/* the last preemption failed */
1592 	if (ring->trail_seq != le32_to_cpu(*ring->trail_fence_cpu_addr))
1593 		return -EBUSY;
1594 
1595 	length = ring->fence_drv.num_fences_mask + 1;
1596 	fences = kcalloc(length, sizeof(void *), GFP_KERNEL);
1597 	if (!fences)
1598 		return -ENOMEM;
1599 
1600 	/* Avoid accidently unparking the sched thread during GPU reset */
1601 	r = down_read_killable(&adev->reset_sem);
1602 	if (r)
1603 		goto pro_end;
1604 
1605 	/* stop the scheduler */
1606 	kthread_park(ring->sched.thread);
1607 
1608 	resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
1609 
1610 	/* preempt the IB */
1611 	r = amdgpu_ring_preempt_ib(ring);
1612 	if (r) {
1613 		DRM_WARN("failed to preempt ring %d\n", ring->idx);
1614 		goto failure;
1615 	}
1616 
1617 	amdgpu_fence_process(ring);
1618 
1619 	if (atomic_read(&ring->fence_drv.last_seq) !=
1620 	    ring->fence_drv.sync_seq) {
1621 		DRM_INFO("ring %d was preempted\n", ring->idx);
1622 
1623 		amdgpu_ib_preempt_mark_partial_job(ring);
1624 
1625 		/* swap out the old fences */
1626 		amdgpu_ib_preempt_fences_swap(ring, fences);
1627 
1628 		amdgpu_fence_driver_force_completion(ring);
1629 
1630 		/* resubmit unfinished jobs */
1631 		amdgpu_ib_preempt_job_recovery(&ring->sched);
1632 
1633 		/* wait for jobs finished */
1634 		amdgpu_fence_wait_empty(ring);
1635 
1636 		/* signal the old fences */
1637 		amdgpu_ib_preempt_signal_fences(fences, length);
1638 	}
1639 
1640 failure:
1641 	/* restart the scheduler */
1642 	kthread_unpark(ring->sched.thread);
1643 
1644 	up_read(&adev->reset_sem);
1645 
1646 	ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched);
1647 
1648 pro_end:
1649 	kfree(fences);
1650 
1651 	return r;
1652 }
1653 
1654 static int amdgpu_debugfs_sclk_set(void *data, u64 val)
1655 {
1656 	int ret = 0;
1657 	uint32_t max_freq, min_freq;
1658 	struct amdgpu_device *adev = (struct amdgpu_device *)data;
1659 
1660 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
1661 		return -EINVAL;
1662 
1663 	ret = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1664 	if (ret < 0) {
1665 		pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1666 		return ret;
1667 	}
1668 
1669 	if (is_support_sw_smu(adev)) {
1670 		ret = smu_get_dpm_freq_range(&adev->smu, SMU_SCLK, &min_freq, &max_freq);
1671 		if (ret || val > max_freq || val < min_freq)
1672 			return -EINVAL;
1673 		ret = smu_set_soft_freq_range(&adev->smu, SMU_SCLK, (uint32_t)val, (uint32_t)val);
1674 	} else {
1675 		return 0;
1676 	}
1677 
1678 	pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
1679 	pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1680 
1681 	if (ret)
1682 		return -EINVAL;
1683 
1684 	return 0;
1685 }
1686 
1687 DEFINE_DEBUGFS_ATTRIBUTE(fops_ib_preempt, NULL,
1688 			amdgpu_debugfs_ib_preempt, "%llu\n");
1689 
1690 DEFINE_DEBUGFS_ATTRIBUTE(fops_sclk_set, NULL,
1691 			amdgpu_debugfs_sclk_set, "%llu\n");
1692 
1693 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1694 {
1695 	struct dentry *root = adev_to_drm(adev)->primary->debugfs_root;
1696 	struct dentry *ent;
1697 	int r, i;
1698 
1699 	ent = debugfs_create_file("amdgpu_preempt_ib", 0600, root, adev,
1700 				  &fops_ib_preempt);
1701 	if (IS_ERR(ent)) {
1702 		DRM_ERROR("unable to create amdgpu_preempt_ib debugsfs file\n");
1703 		return PTR_ERR(ent);
1704 	}
1705 
1706 	ent = debugfs_create_file("amdgpu_force_sclk", 0200, root, adev,
1707 				  &fops_sclk_set);
1708 	if (IS_ERR(ent)) {
1709 		DRM_ERROR("unable to create amdgpu_set_sclk debugsfs file\n");
1710 		return PTR_ERR(ent);
1711 	}
1712 
1713 	/* Register debugfs entries for amdgpu_ttm */
1714 	amdgpu_ttm_debugfs_init(adev);
1715 	amdgpu_debugfs_pm_init(adev);
1716 	amdgpu_debugfs_sa_init(adev);
1717 	amdgpu_debugfs_fence_init(adev);
1718 	amdgpu_debugfs_gem_init(adev);
1719 
1720 	r = amdgpu_debugfs_regs_init(adev);
1721 	if (r)
1722 		DRM_ERROR("registering register debugfs failed (%d).\n", r);
1723 
1724 	amdgpu_debugfs_firmware_init(adev);
1725 
1726 #if defined(CONFIG_DRM_AMD_DC)
1727 	if (amdgpu_device_has_dc_support(adev))
1728 		dtn_debugfs_init(adev);
1729 #endif
1730 
1731 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
1732 		struct amdgpu_ring *ring = adev->rings[i];
1733 
1734 		if (!ring)
1735 			continue;
1736 
1737 		amdgpu_debugfs_ring_init(adev, ring);
1738 	}
1739 
1740 	amdgpu_ras_debugfs_create_all(adev);
1741 	amdgpu_debugfs_autodump_init(adev);
1742 	amdgpu_rap_debugfs_init(adev);
1743 	amdgpu_securedisplay_debugfs_init(adev);
1744 	amdgpu_fw_attestation_debugfs_init(adev);
1745 
1746 	debugfs_create_file("amdgpu_evict_vram", 0444, root, adev,
1747 			    &amdgpu_evict_vram_fops);
1748 	debugfs_create_file("amdgpu_evict_gtt", 0444, root, adev,
1749 			    &amdgpu_evict_gtt_fops);
1750 	debugfs_create_file("amdgpu_test_ib", 0444, root, adev,
1751 			    &amdgpu_debugfs_test_ib_fops);
1752 	debugfs_create_file("amdgpu_vm_info", 0444, root, adev,
1753 			    &amdgpu_debugfs_vm_info_fops);
1754 
1755 	adev->debugfs_vbios_blob.data = adev->bios;
1756 	adev->debugfs_vbios_blob.size = adev->bios_size;
1757 	debugfs_create_blob("amdgpu_vbios", 0444, root,
1758 			    &adev->debugfs_vbios_blob);
1759 
1760 	return 0;
1761 }
1762 
1763 #else
1764 int amdgpu_debugfs_init(struct amdgpu_device *adev)
1765 {
1766 	return 0;
1767 }
1768 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1769 {
1770 	return 0;
1771 }
1772 #endif
1773