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