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/security.h>
30 #include <linux/pm_runtime.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 #include "amdgpu_reset.h"
42 #include "amdgpu_psp_ta.h"
43 #include "amdgpu_userq.h"
44
45 #if defined(CONFIG_DEBUG_FS)
46
47 /* Encode milliwatts in the raw Q24.8 sensor report format used by UMR. */
48 #define AMDGPU_DEBUGFS_PWR_MW_TO_Q24_8(power_mw) \
49 DIV_ROUND_CLOSEST_ULL((u64)(power_mw) * BIT(8), \
50 MILLIWATT_PER_WATT)
51
52 /**
53 * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes
54 *
55 * @read: True if reading
56 * @f: open file handle
57 * @buf: User buffer to write/read to
58 * @size: Number of bytes to write/read
59 * @pos: Offset to seek to
60 *
61 * This debugfs entry has special meaning on the offset being sought.
62 * Various bits have different meanings:
63 *
64 * Bit 62: Indicates a GRBM bank switch is needed
65 * Bit 61: Indicates a SRBM bank switch is needed (implies bit 62 is
66 * zero)
67 * Bits 24..33: The SE or ME selector if needed
68 * Bits 34..43: The SH (or SA) or PIPE selector if needed
69 * Bits 44..53: The INSTANCE (or CU/WGP) or QUEUE selector if needed
70 *
71 * Bit 23: Indicates that the PM power gating lock should be held
72 * This is necessary to read registers that might be
73 * unreliable during a power gating transistion.
74 *
75 * The lower bits are the BYTE offset of the register to read. This
76 * allows reading multiple registers in a single call and having
77 * the returned size reflect that.
78 */
amdgpu_debugfs_process_reg_op(bool read,struct file * f,char __user * buf,size_t size,loff_t * pos)79 static int amdgpu_debugfs_process_reg_op(bool read, struct file *f,
80 char __user *buf, size_t size, loff_t *pos)
81 {
82 struct amdgpu_device *adev = file_inode(f)->i_private;
83 ssize_t result = 0;
84 int r;
85 bool pm_pg_lock, use_bank, use_ring;
86 unsigned int instance_bank, sh_bank, se_bank, me, pipe, queue, vmid;
87
88 pm_pg_lock = use_bank = use_ring = false;
89 instance_bank = sh_bank = se_bank = me = pipe = queue = vmid = 0;
90
91 if (size & 0x3 || *pos & 0x3 ||
92 ((*pos & (1ULL << 62)) && (*pos & (1ULL << 61))))
93 return -EINVAL;
94
95 /* are we reading registers for which a PG lock is necessary? */
96 pm_pg_lock = (*pos >> 23) & 1;
97
98 if (*pos & (1ULL << 62)) {
99 se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24;
100 sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34;
101 instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44;
102
103 if (se_bank == 0x3FF)
104 se_bank = 0xFFFFFFFF;
105 if (sh_bank == 0x3FF)
106 sh_bank = 0xFFFFFFFF;
107 if (instance_bank == 0x3FF)
108 instance_bank = 0xFFFFFFFF;
109 use_bank = true;
110 } else if (*pos & (1ULL << 61)) {
111
112 me = (*pos & GENMASK_ULL(33, 24)) >> 24;
113 pipe = (*pos & GENMASK_ULL(43, 34)) >> 34;
114 queue = (*pos & GENMASK_ULL(53, 44)) >> 44;
115 vmid = (*pos & GENMASK_ULL(58, 54)) >> 54;
116
117 use_ring = true;
118 } else {
119 use_bank = use_ring = false;
120 }
121
122 *pos &= (1UL << 22) - 1;
123
124 if (size > PAGE_SIZE)
125 return -EINVAL;
126
127 /*
128 * Access the user buffer only while none of the locks below are held:
129 * a fault takes mmap_lock, and grbm_idx_mutex and srbm_mutex nest
130 * inside it.
131 */
132 u32 *data __free(kfree) = kmalloc(size, GFP_KERNEL);
133 if (!data)
134 return -ENOMEM;
135 if (!read && copy_from_user(data, buf, size))
136 return -EFAULT;
137
138 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
139 if (r < 0) {
140 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
141 return r;
142 }
143
144 r = amdgpu_virt_enable_access_debugfs(adev);
145 if (r < 0) {
146 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
147 return r;
148 }
149
150 if (use_bank) {
151 if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) ||
152 (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) {
153 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
154 amdgpu_virt_disable_access_debugfs(adev);
155 return -EINVAL;
156 }
157 mutex_lock(&adev->grbm_idx_mutex);
158 amdgpu_gfx_select_se_sh(adev, se_bank,
159 sh_bank, instance_bank, 0);
160 } else if (use_ring) {
161 mutex_lock(&adev->srbm_mutex);
162 amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue, vmid, 0);
163 }
164
165 if (pm_pg_lock)
166 mutex_lock(&adev->pm.mutex);
167
168 while (size) {
169 if (read)
170 data[result >> 2] = RREG32(*pos >> 2);
171 else
172 amdgpu_mm_wreg_mmio_rlc(adev, *pos >> 2, data[result >> 2], 0);
173
174 result += 4;
175 *pos += 4;
176 size -= 4;
177 }
178
179 if (use_bank) {
180 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff, 0);
181 mutex_unlock(&adev->grbm_idx_mutex);
182 } else if (use_ring) {
183 amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0, 0);
184 mutex_unlock(&adev->srbm_mutex);
185 }
186
187 if (pm_pg_lock)
188 mutex_unlock(&adev->pm.mutex);
189
190 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
191
192 amdgpu_virt_disable_access_debugfs(adev);
193
194 if (read && copy_to_user(buf, data, result))
195 return -EFAULT;
196
197 return result;
198 }
199
200 /*
201 * amdgpu_debugfs_regs_read - Callback for reading MMIO registers
202 */
amdgpu_debugfs_regs_read(struct file * f,char __user * buf,size_t size,loff_t * pos)203 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
204 size_t size, loff_t *pos)
205 {
206 return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos);
207 }
208
209 /*
210 * amdgpu_debugfs_regs_write - Callback for writing MMIO registers
211 */
amdgpu_debugfs_regs_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)212 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
213 size_t size, loff_t *pos)
214 {
215 return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos);
216 }
217
amdgpu_debugfs_regs2_open(struct inode * inode,struct file * file)218 static int amdgpu_debugfs_regs2_open(struct inode *inode, struct file *file)
219 {
220 struct amdgpu_debugfs_regs2_data *rd;
221
222 rd = kzalloc_obj(*rd);
223 if (!rd)
224 return -ENOMEM;
225 rd->adev = file_inode(file)->i_private;
226 file->private_data = rd;
227 mutex_init(&rd->lock);
228
229 return 0;
230 }
231
amdgpu_debugfs_regs2_release(struct inode * inode,struct file * file)232 static int amdgpu_debugfs_regs2_release(struct inode *inode, struct file *file)
233 {
234 struct amdgpu_debugfs_regs2_data *rd = file->private_data;
235
236 mutex_destroy(&rd->lock);
237 kfree(file->private_data);
238 return 0;
239 }
240
amdgpu_debugfs_regs2_op(struct file * f,char __user * buf,u32 offset,size_t size,int write_en)241 static ssize_t amdgpu_debugfs_regs2_op(struct file *f, char __user *buf, u32 offset, size_t size, int write_en)
242 {
243 struct amdgpu_debugfs_regs2_data *rd = f->private_data;
244 struct amdgpu_device *adev = rd->adev;
245 ssize_t result = 0;
246 int r;
247
248 if (size & 0x3 || offset & 0x3)
249 return -EINVAL;
250
251 if (size > PAGE_SIZE)
252 return -EINVAL;
253
254 /*
255 * Access the user buffer only while none of the locks below are held:
256 * a fault takes mmap_lock, and grbm_idx_mutex and srbm_mutex nest
257 * inside it.
258 */
259 u32 *data __free(kfree) = kmalloc(size, GFP_KERNEL);
260 if (!data)
261 return -ENOMEM;
262 if (write_en && copy_from_user(data, buf, size))
263 return -EFAULT;
264
265 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
266 if (r < 0) {
267 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
268 return r;
269 }
270
271 r = amdgpu_virt_enable_access_debugfs(adev);
272 if (r < 0) {
273 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
274 return r;
275 }
276
277 mutex_lock(&rd->lock);
278
279 if (rd->id.use_grbm) {
280 if ((rd->id.grbm.sh != 0xFFFFFFFF && rd->id.grbm.sh >= adev->gfx.config.max_sh_per_se) ||
281 (rd->id.grbm.se != 0xFFFFFFFF && rd->id.grbm.se >= adev->gfx.config.max_shader_engines)) {
282 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
283 amdgpu_virt_disable_access_debugfs(adev);
284 mutex_unlock(&rd->lock);
285 return -EINVAL;
286 }
287 mutex_lock(&adev->grbm_idx_mutex);
288 amdgpu_gfx_select_se_sh(adev, rd->id.grbm.se,
289 rd->id.grbm.sh,
290 rd->id.grbm.instance, rd->id.xcc_id);
291 }
292
293 if (rd->id.use_srbm) {
294 mutex_lock(&adev->srbm_mutex);
295 amdgpu_gfx_select_me_pipe_q(adev, rd->id.srbm.me, rd->id.srbm.pipe,
296 rd->id.srbm.queue, rd->id.srbm.vmid, rd->id.xcc_id);
297 }
298
299 if (rd->id.pg_lock)
300 mutex_lock(&adev->pm.mutex);
301
302 while (size) {
303 if (!write_en)
304 data[result >> 2] = RREG32(offset >> 2);
305 else
306 amdgpu_mm_wreg_mmio_rlc(adev, offset >> 2, data[result >> 2],
307 rd->id.xcc_id);
308 offset += 4;
309 size -= 4;
310 result += 4;
311 }
312
313 if (rd->id.use_grbm) {
314 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff, rd->id.xcc_id);
315 mutex_unlock(&adev->grbm_idx_mutex);
316 }
317
318 if (rd->id.use_srbm) {
319 amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0, rd->id.xcc_id);
320 mutex_unlock(&adev->srbm_mutex);
321 }
322
323 if (rd->id.pg_lock)
324 mutex_unlock(&adev->pm.mutex);
325
326 mutex_unlock(&rd->lock);
327
328 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
329
330 amdgpu_virt_disable_access_debugfs(adev);
331
332 if (!write_en && copy_to_user(buf, data, result))
333 return -EFAULT;
334
335 return result;
336 }
337
amdgpu_debugfs_regs2_ioctl(struct file * f,unsigned int cmd,unsigned long data)338 static long amdgpu_debugfs_regs2_ioctl(struct file *f, unsigned int cmd, unsigned long data)
339 {
340 struct amdgpu_debugfs_regs2_data *rd = f->private_data;
341 struct amdgpu_debugfs_regs2_iocdata v1_data;
342 int r;
343
344 mutex_lock(&rd->lock);
345
346 switch (cmd) {
347 case AMDGPU_DEBUGFS_REGS2_IOC_SET_STATE_V2:
348 r = copy_from_user(&rd->id, (struct amdgpu_debugfs_regs2_iocdata_v2 *)data,
349 sizeof(rd->id));
350 if (r)
351 r = -EINVAL;
352 goto done;
353 case AMDGPU_DEBUGFS_REGS2_IOC_SET_STATE:
354 r = copy_from_user(&v1_data, (struct amdgpu_debugfs_regs2_iocdata *)data,
355 sizeof(v1_data));
356 if (r) {
357 r = -EINVAL;
358 goto done;
359 }
360 goto v1_copy;
361 default:
362 r = -EINVAL;
363 goto done;
364 }
365
366 v1_copy:
367 rd->id.use_srbm = v1_data.use_srbm;
368 rd->id.use_grbm = v1_data.use_grbm;
369 rd->id.pg_lock = v1_data.pg_lock;
370 rd->id.grbm.se = v1_data.grbm.se;
371 rd->id.grbm.sh = v1_data.grbm.sh;
372 rd->id.grbm.instance = v1_data.grbm.instance;
373 rd->id.srbm.me = v1_data.srbm.me;
374 rd->id.srbm.pipe = v1_data.srbm.pipe;
375 rd->id.srbm.queue = v1_data.srbm.queue;
376 rd->id.xcc_id = 0;
377 done:
378 mutex_unlock(&rd->lock);
379 return r;
380 }
381
amdgpu_debugfs_regs2_read(struct file * f,char __user * buf,size_t size,loff_t * pos)382 static ssize_t amdgpu_debugfs_regs2_read(struct file *f, char __user *buf, size_t size, loff_t *pos)
383 {
384 return amdgpu_debugfs_regs2_op(f, buf, *pos, size, 0);
385 }
386
amdgpu_debugfs_regs2_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)387 static ssize_t amdgpu_debugfs_regs2_write(struct file *f, const char __user *buf, size_t size, loff_t *pos)
388 {
389 return amdgpu_debugfs_regs2_op(f, (char __user *)buf, *pos, size, 1);
390 }
391
amdgpu_debugfs_gprwave_open(struct inode * inode,struct file * file)392 static int amdgpu_debugfs_gprwave_open(struct inode *inode, struct file *file)
393 {
394 struct amdgpu_debugfs_gprwave_data *rd;
395
396 rd = kzalloc_obj(*rd);
397 if (!rd)
398 return -ENOMEM;
399 rd->adev = file_inode(file)->i_private;
400 file->private_data = rd;
401 mutex_init(&rd->lock);
402
403 return 0;
404 }
405
amdgpu_debugfs_gprwave_release(struct inode * inode,struct file * file)406 static int amdgpu_debugfs_gprwave_release(struct inode *inode, struct file *file)
407 {
408 struct amdgpu_debugfs_gprwave_data *rd = file->private_data;
409
410 mutex_destroy(&rd->lock);
411 kfree(file->private_data);
412 return 0;
413 }
414
amdgpu_debugfs_gprwave_read(struct file * f,char __user * buf,size_t size,loff_t * pos)415 static ssize_t amdgpu_debugfs_gprwave_read(struct file *f, char __user *buf, size_t size, loff_t *pos)
416 {
417 struct amdgpu_debugfs_gprwave_data *rd = f->private_data;
418 struct amdgpu_device *adev = rd->adev;
419 ssize_t result = 0;
420 int r;
421 uint32_t *data, x;
422
423 if (size > 4096 || size & 0x3 || *pos & 0x3)
424 return -EINVAL;
425
426 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
427 if (r < 0) {
428 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
429 return r;
430 }
431
432 r = amdgpu_virt_enable_access_debugfs(adev);
433 if (r < 0) {
434 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
435 return r;
436 }
437
438 data = kcalloc(1024, sizeof(*data), GFP_KERNEL);
439 if (!data) {
440 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
441 amdgpu_virt_disable_access_debugfs(adev);
442 return -ENOMEM;
443 }
444
445 /* switch to the specific se/sh/cu */
446 mutex_lock(&adev->grbm_idx_mutex);
447 amdgpu_gfx_select_se_sh(adev, rd->id.se, rd->id.sh, rd->id.cu, rd->id.xcc_id);
448
449 if (!rd->id.gpr_or_wave) {
450 x = 0;
451 if (adev->gfx.funcs->read_wave_data)
452 adev->gfx.funcs->read_wave_data(adev, rd->id.xcc_id, rd->id.simd, rd->id.wave, data, &x);
453 } else {
454 x = size >> 2;
455 if (rd->id.gpr.vpgr_or_sgpr) {
456 if (adev->gfx.funcs->read_wave_vgprs)
457 adev->gfx.funcs->read_wave_vgprs(adev, rd->id.xcc_id, rd->id.simd, rd->id.wave, rd->id.gpr.thread, *pos, size>>2, data);
458 } else {
459 if (adev->gfx.funcs->read_wave_sgprs)
460 adev->gfx.funcs->read_wave_sgprs(adev, rd->id.xcc_id, rd->id.simd, rd->id.wave, *pos, size>>2, data);
461 }
462 }
463
464 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, rd->id.xcc_id);
465 mutex_unlock(&adev->grbm_idx_mutex);
466
467 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
468
469 if (!x) {
470 result = -EINVAL;
471 goto done;
472 }
473
474 while (size && (*pos < x * 4)) {
475 uint32_t value;
476
477 value = data[*pos >> 2];
478 r = put_user(value, (uint32_t *)buf);
479 if (r) {
480 result = r;
481 goto done;
482 }
483
484 result += 4;
485 buf += 4;
486 *pos += 4;
487 size -= 4;
488 }
489
490 done:
491 amdgpu_virt_disable_access_debugfs(adev);
492 kfree(data);
493 return result;
494 }
495
amdgpu_debugfs_gprwave_ioctl(struct file * f,unsigned int cmd,unsigned long data)496 static long amdgpu_debugfs_gprwave_ioctl(struct file *f, unsigned int cmd, unsigned long data)
497 {
498 struct amdgpu_debugfs_gprwave_data *rd = f->private_data;
499 int r = 0;
500
501 mutex_lock(&rd->lock);
502
503 switch (cmd) {
504 case AMDGPU_DEBUGFS_GPRWAVE_IOC_SET_STATE:
505 if (copy_from_user(&rd->id,
506 (struct amdgpu_debugfs_gprwave_iocdata *)data,
507 sizeof(rd->id)))
508 r = -EFAULT;
509 goto done;
510 default:
511 r = -EINVAL;
512 goto done;
513 }
514
515 done:
516 mutex_unlock(&rd->lock);
517 return r;
518 }
519
520
521
522
523 /**
524 * amdgpu_debugfs_regs_pcie_read - Read from a PCIE register
525 *
526 * @f: open file handle
527 * @buf: User buffer to store read data in
528 * @size: Number of bytes to read
529 * @pos: Offset to seek to
530 *
531 * The lower bits are the BYTE offset of the register to read. This
532 * allows reading multiple registers in a single call and having
533 * the returned size reflect that.
534 */
amdgpu_debugfs_regs_pcie_read(struct file * f,char __user * buf,size_t size,loff_t * pos)535 static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf,
536 size_t size, loff_t *pos)
537 {
538 struct amdgpu_device *adev = file_inode(f)->i_private;
539 ssize_t result = 0;
540 int r;
541
542 if (size & 0x3 || *pos & 0x3)
543 return -EINVAL;
544
545 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
546 if (r < 0) {
547 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
548 return r;
549 }
550
551 r = amdgpu_virt_enable_access_debugfs(adev);
552 if (r < 0) {
553 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
554 return r;
555 }
556
557 while (size) {
558 uint32_t value;
559
560 if (upper_32_bits(*pos))
561 value = RREG32_PCIE_EXT(*pos);
562 else
563 value = RREG32_PCIE(*pos);
564
565 r = put_user(value, (uint32_t *)buf);
566 if (r)
567 goto out;
568
569 result += 4;
570 buf += 4;
571 *pos += 4;
572 size -= 4;
573 }
574
575 r = result;
576 out:
577 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
578 amdgpu_virt_disable_access_debugfs(adev);
579 return r;
580 }
581
582 /**
583 * amdgpu_debugfs_regs_pcie_write - Write to a PCIE register
584 *
585 * @f: open file handle
586 * @buf: User buffer to write data from
587 * @size: Number of bytes to write
588 * @pos: Offset to seek to
589 *
590 * The lower bits are the BYTE offset of the register to write. This
591 * allows writing multiple registers in a single call and having
592 * the returned size reflect that.
593 */
amdgpu_debugfs_regs_pcie_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)594 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf,
595 size_t size, loff_t *pos)
596 {
597 struct amdgpu_device *adev = file_inode(f)->i_private;
598 ssize_t result = 0;
599 int r;
600
601 if (size & 0x3 || *pos & 0x3)
602 return -EINVAL;
603
604 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
605 if (r < 0) {
606 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
607 return r;
608 }
609
610 r = amdgpu_virt_enable_access_debugfs(adev);
611 if (r < 0) {
612 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
613 return r;
614 }
615
616 while (size) {
617 uint32_t value;
618
619 r = get_user(value, (uint32_t *)buf);
620 if (r)
621 goto out;
622
623 if (upper_32_bits(*pos))
624 WREG32_PCIE_EXT(*pos, value);
625 else
626 WREG32_PCIE(*pos, value);
627
628 result += 4;
629 buf += 4;
630 *pos += 4;
631 size -= 4;
632 }
633
634 r = result;
635 out:
636 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
637 amdgpu_virt_disable_access_debugfs(adev);
638 return r;
639 }
640
641 /**
642 * amdgpu_debugfs_regs_pcie64_read - Read from a 64-bit PCIE register
643 *
644 * @f: open file handle
645 * @buf: User buffer to store read data in
646 * @size: Number of bytes to read
647 * @pos: Offset to seek to
648 */
amdgpu_debugfs_regs_pcie64_read(struct file * f,char __user * buf,size_t size,loff_t * pos)649 static ssize_t amdgpu_debugfs_regs_pcie64_read(struct file *f, char __user *buf,
650 size_t size, loff_t *pos)
651 {
652 struct amdgpu_device *adev = file_inode(f)->i_private;
653 ssize_t result = 0;
654 int r;
655
656 if (size & 0x7 || *pos & 0x7)
657 return -EINVAL;
658
659 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
660 if (r < 0) {
661 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
662 return r;
663 }
664
665 r = amdgpu_virt_enable_access_debugfs(adev);
666 if (r < 0) {
667 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
668 return r;
669 }
670
671 while (size) {
672 uint64_t value;
673
674 value = RREG64_PCIE_EXT(*pos);
675
676 r = put_user(value, (uint64_t *)buf);
677 if (r)
678 goto out;
679
680 result += 8;
681 buf += 8;
682 *pos += 8;
683 size -= 8;
684 }
685
686 r = result;
687 out:
688 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
689 amdgpu_virt_disable_access_debugfs(adev);
690 return r;
691 }
692
693 /**
694 * amdgpu_debugfs_regs_pcie64_write - Write to a 64-bit PCIE register
695 *
696 * @f: open file handle
697 * @buf: User buffer to write data from
698 * @size: Number of bytes to write
699 * @pos: Offset to seek to
700 */
amdgpu_debugfs_regs_pcie64_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)701 static ssize_t amdgpu_debugfs_regs_pcie64_write(struct file *f, const char __user *buf,
702 size_t size, loff_t *pos)
703 {
704 struct amdgpu_device *adev = file_inode(f)->i_private;
705 ssize_t result = 0;
706 int r;
707
708 if (size & 0x7 || *pos & 0x7)
709 return -EINVAL;
710
711 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
712 if (r < 0) {
713 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
714 return r;
715 }
716
717 r = amdgpu_virt_enable_access_debugfs(adev);
718 if (r < 0) {
719 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
720 return r;
721 }
722
723 while (size) {
724 uint64_t value;
725
726 r = get_user(value, (uint64_t *)buf);
727 if (r)
728 goto out;
729
730 WREG64_PCIE_EXT(*pos, value);
731
732 result += 8;
733 buf += 8;
734 *pos += 8;
735 size -= 8;
736 }
737
738 r = result;
739 out:
740 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
741 amdgpu_virt_disable_access_debugfs(adev);
742 return r;
743 }
744
745 /**
746 * amdgpu_debugfs_regs_didt_read - Read from a DIDT register
747 *
748 * @f: open file handle
749 * @buf: User buffer to store read data in
750 * @size: Number of bytes to read
751 * @pos: Offset to seek to
752 *
753 * The lower bits are the BYTE offset of the register to read. This
754 * allows reading multiple registers in a single call and having
755 * the returned size reflect that.
756 */
amdgpu_debugfs_regs_didt_read(struct file * f,char __user * buf,size_t size,loff_t * pos)757 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf,
758 size_t size, loff_t *pos)
759 {
760 struct amdgpu_device *adev = file_inode(f)->i_private;
761 ssize_t result = 0;
762 int r;
763
764 if (size & 0x3 || *pos & 0x3)
765 return -EINVAL;
766
767 if (!adev->reg.didt.rreg)
768 return -EOPNOTSUPP;
769
770 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
771 if (r < 0) {
772 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
773 return r;
774 }
775
776 r = amdgpu_virt_enable_access_debugfs(adev);
777 if (r < 0) {
778 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
779 return r;
780 }
781
782 while (size) {
783 uint32_t value;
784
785 value = RREG32_DIDT(*pos >> 2);
786 r = put_user(value, (uint32_t *)buf);
787 if (r)
788 goto out;
789
790 result += 4;
791 buf += 4;
792 *pos += 4;
793 size -= 4;
794 }
795
796 r = result;
797 out:
798 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
799 amdgpu_virt_disable_access_debugfs(adev);
800 return r;
801 }
802
803 /**
804 * amdgpu_debugfs_regs_didt_write - Write to a DIDT register
805 *
806 * @f: open file handle
807 * @buf: User buffer to write data from
808 * @size: Number of bytes to write
809 * @pos: Offset to seek to
810 *
811 * The lower bits are the BYTE offset of the register to write. This
812 * allows writing multiple registers in a single call and having
813 * the returned size reflect that.
814 */
amdgpu_debugfs_regs_didt_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)815 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf,
816 size_t size, loff_t *pos)
817 {
818 struct amdgpu_device *adev = file_inode(f)->i_private;
819 ssize_t result = 0;
820 int r;
821
822 if (size & 0x3 || *pos & 0x3)
823 return -EINVAL;
824
825 if (!adev->reg.didt.wreg)
826 return -EOPNOTSUPP;
827
828 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
829 if (r < 0) {
830 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
831 return r;
832 }
833
834 r = amdgpu_virt_enable_access_debugfs(adev);
835 if (r < 0) {
836 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
837 return r;
838 }
839
840 while (size) {
841 uint32_t value;
842
843 r = get_user(value, (uint32_t *)buf);
844 if (r)
845 goto out;
846
847 WREG32_DIDT(*pos >> 2, value);
848
849 result += 4;
850 buf += 4;
851 *pos += 4;
852 size -= 4;
853 }
854
855 r = result;
856 out:
857 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
858 amdgpu_virt_disable_access_debugfs(adev);
859 return r;
860 }
861
862 /**
863 * amdgpu_debugfs_regs_smc_read - Read from a SMC register
864 *
865 * @f: open file handle
866 * @buf: User buffer to store read data in
867 * @size: Number of bytes to read
868 * @pos: Offset to seek to
869 *
870 * The lower bits are the BYTE offset of the register to read. This
871 * allows reading multiple registers in a single call and having
872 * the returned size reflect that.
873 */
amdgpu_debugfs_regs_smc_read(struct file * f,char __user * buf,size_t size,loff_t * pos)874 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
875 size_t size, loff_t *pos)
876 {
877 struct amdgpu_device *adev = file_inode(f)->i_private;
878 ssize_t result = 0;
879 int r;
880
881 if (!adev->reg.smc.rreg)
882 return -EOPNOTSUPP;
883
884 if (size & 0x3 || *pos & 0x3)
885 return -EINVAL;
886
887 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
888 if (r < 0) {
889 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
890 return r;
891 }
892
893 r = amdgpu_virt_enable_access_debugfs(adev);
894 if (r < 0) {
895 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
896 return r;
897 }
898
899 while (size) {
900 uint32_t value;
901
902 value = RREG32_SMC(*pos);
903 r = put_user(value, (uint32_t *)buf);
904 if (r)
905 goto out;
906
907 result += 4;
908 buf += 4;
909 *pos += 4;
910 size -= 4;
911 }
912
913 r = result;
914 out:
915 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
916 amdgpu_virt_disable_access_debugfs(adev);
917 return r;
918 }
919
920 /**
921 * amdgpu_debugfs_regs_smc_write - Write to a SMC register
922 *
923 * @f: open file handle
924 * @buf: User buffer to write data from
925 * @size: Number of bytes to write
926 * @pos: Offset to seek to
927 *
928 * The lower bits are the BYTE offset of the register to write. This
929 * allows writing multiple registers in a single call and having
930 * the returned size reflect that.
931 */
amdgpu_debugfs_regs_smc_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)932 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf,
933 size_t size, loff_t *pos)
934 {
935 struct amdgpu_device *adev = file_inode(f)->i_private;
936 ssize_t result = 0;
937 int r;
938
939 if (!adev->reg.smc.wreg)
940 return -EOPNOTSUPP;
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 r = amdgpu_virt_enable_access_debugfs(adev);
952 if (r < 0) {
953 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
954 return r;
955 }
956
957 while (size) {
958 uint32_t value;
959
960 r = get_user(value, (uint32_t *)buf);
961 if (r)
962 goto out;
963
964 WREG32_SMC(*pos, value);
965
966 result += 4;
967 buf += 4;
968 *pos += 4;
969 size -= 4;
970 }
971
972 r = result;
973 out:
974 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
975 amdgpu_virt_disable_access_debugfs(adev);
976 return r;
977 }
978
979 /**
980 * amdgpu_debugfs_gca_config_read - Read from gfx config data
981 *
982 * @f: open file handle
983 * @buf: User buffer to store read data in
984 * @size: Number of bytes to read
985 * @pos: Offset to seek to
986 *
987 * This file is used to access configuration data in a somewhat
988 * stable fashion. The format is a series of DWORDs with the first
989 * indicating which revision it is. New content is appended to the
990 * end so that older software can still read the data.
991 */
992
amdgpu_debugfs_gca_config_read(struct file * f,char __user * buf,size_t size,loff_t * pos)993 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf,
994 size_t size, loff_t *pos)
995 {
996 struct amdgpu_device *adev = file_inode(f)->i_private;
997 ssize_t result = 0;
998 int r;
999 uint32_t *config, no_regs = 0;
1000
1001 if (size & 0x3 || *pos & 0x3)
1002 return -EINVAL;
1003
1004 config = kmalloc_array(256, sizeof(*config), GFP_KERNEL);
1005 if (!config)
1006 return -ENOMEM;
1007
1008 /* version, increment each time something is added */
1009 config[no_regs++] = 5;
1010 config[no_regs++] = adev->gfx.config.max_shader_engines;
1011 config[no_regs++] = adev->gfx.config.max_tile_pipes;
1012 config[no_regs++] = adev->gfx.config.max_cu_per_sh;
1013 config[no_regs++] = adev->gfx.config.max_sh_per_se;
1014 config[no_regs++] = adev->gfx.config.max_backends_per_se;
1015 config[no_regs++] = adev->gfx.config.max_texture_channel_caches;
1016 config[no_regs++] = adev->gfx.config.max_gprs;
1017 config[no_regs++] = adev->gfx.config.max_gs_threads;
1018 config[no_regs++] = adev->gfx.config.max_hw_contexts;
1019 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend;
1020 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend;
1021 config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size;
1022 config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size;
1023 config[no_regs++] = adev->gfx.config.num_tile_pipes;
1024 config[no_regs++] = adev->gfx.config.backend_enable_mask;
1025 config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes;
1026 config[no_regs++] = adev->gfx.config.mem_row_size_in_kb;
1027 config[no_regs++] = adev->gfx.config.shader_engine_tile_size;
1028 config[no_regs++] = adev->gfx.config.num_gpus;
1029 config[no_regs++] = adev->gfx.config.multi_gpu_tile_size;
1030 config[no_regs++] = adev->gfx.config.mc_arb_ramcfg;
1031 config[no_regs++] = adev->gfx.config.gb_addr_config;
1032 config[no_regs++] = adev->gfx.config.num_rbs;
1033
1034 /* rev==1 */
1035 config[no_regs++] = adev->rev_id;
1036 config[no_regs++] = adev->pg_flags;
1037 config[no_regs++] = lower_32_bits(adev->cg_flags);
1038
1039 /* rev==2 */
1040 config[no_regs++] = adev->family;
1041 config[no_regs++] = adev->external_rev_id;
1042
1043 /* rev==3 */
1044 config[no_regs++] = adev->pdev->device;
1045 config[no_regs++] = adev->pdev->revision;
1046 config[no_regs++] = adev->pdev->subsystem_device;
1047 config[no_regs++] = adev->pdev->subsystem_vendor;
1048
1049 /* rev==4 APU flag */
1050 config[no_regs++] = adev->flags & AMD_IS_APU ? 1 : 0;
1051
1052 /* rev==5 PG/CG flag upper 32bit */
1053 config[no_regs++] = 0;
1054 config[no_regs++] = upper_32_bits(adev->cg_flags);
1055
1056 while (size && (*pos < no_regs * 4)) {
1057 uint32_t value;
1058
1059 value = config[*pos >> 2];
1060 r = put_user(value, (uint32_t *)buf);
1061 if (r) {
1062 kfree(config);
1063 return r;
1064 }
1065
1066 result += 4;
1067 buf += 4;
1068 *pos += 4;
1069 size -= 4;
1070 }
1071
1072 kfree(config);
1073 return result;
1074 }
1075
1076 /**
1077 * amdgpu_debugfs_sensor_read - Read from the powerplay sensors
1078 *
1079 * @f: open file handle
1080 * @buf: User buffer to store read data in
1081 * @size: Number of bytes to read
1082 * @pos: Offset to seek to
1083 *
1084 * The offset is treated as the BYTE address of one of the sensors
1085 * enumerated in amd/include/kgd_pp_interface.h under the
1086 * 'amd_pp_sensors' enumeration. For instance to read the UVD VCLK
1087 * you would use the offset 3 * 4 = 12.
1088 */
amdgpu_debugfs_sensor_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1089 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf,
1090 size_t size, loff_t *pos)
1091 {
1092 struct amdgpu_device *adev = file_inode(f)->i_private;
1093 int idx, x, outsize, r, valuesize;
1094 uint32_t values[16];
1095
1096 if (size & 3 || *pos & 0x3)
1097 return -EINVAL;
1098
1099 if (!adev->pm.dpm_enabled)
1100 return -EINVAL;
1101
1102 /* convert offset to sensor number */
1103 idx = *pos >> 2;
1104
1105 valuesize = sizeof(values);
1106
1107 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1108 if (r < 0) {
1109 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1110 return r;
1111 }
1112
1113 r = amdgpu_virt_enable_access_debugfs(adev);
1114 if (r < 0) {
1115 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1116 return r;
1117 }
1118
1119 r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize);
1120
1121 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1122
1123 if (r) {
1124 amdgpu_virt_disable_access_debugfs(adev);
1125 return r;
1126 }
1127
1128 if (idx == AMDGPU_PP_SENSOR_GPU_AVG_POWER ||
1129 idx == AMDGPU_PP_SENSOR_GPU_INPUT_POWER)
1130 values[0] = AMDGPU_DEBUGFS_PWR_MW_TO_Q24_8(values[0]);
1131
1132 if (size > valuesize) {
1133 amdgpu_virt_disable_access_debugfs(adev);
1134 return -EINVAL;
1135 }
1136
1137 outsize = 0;
1138 x = 0;
1139 if (!r) {
1140 while (size) {
1141 r = put_user(values[x++], (int32_t *)buf);
1142 buf += 4;
1143 size -= 4;
1144 outsize += 4;
1145 }
1146 }
1147
1148 amdgpu_virt_disable_access_debugfs(adev);
1149 return !r ? outsize : r;
1150 }
1151
1152 /** amdgpu_debugfs_wave_read - Read WAVE STATUS data
1153 *
1154 * @f: open file handle
1155 * @buf: User buffer to store read data in
1156 * @size: Number of bytes to read
1157 * @pos: Offset to seek to
1158 *
1159 * The offset being sought changes which wave that the status data
1160 * will be returned for. The bits are used as follows:
1161 *
1162 * Bits 0..6: Byte offset into data
1163 * Bits 7..14: SE selector
1164 * Bits 15..22: SH/SA selector
1165 * Bits 23..30: CU/{WGP+SIMD} selector
1166 * Bits 31..36: WAVE ID selector
1167 * Bits 37..44: SIMD ID selector
1168 *
1169 * The returned data begins with one DWORD of version information
1170 * Followed by WAVE STATUS registers relevant to the GFX IP version
1171 * being used. See gfx_v8_0_read_wave_data() for an example output.
1172 */
amdgpu_debugfs_wave_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1173 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
1174 size_t size, loff_t *pos)
1175 {
1176 struct amdgpu_device *adev = f->f_inode->i_private;
1177 int r, x;
1178 ssize_t result = 0;
1179 uint32_t offset, se, sh, cu, wave, simd, data[32];
1180
1181 if (size & 3 || *pos & 3)
1182 return -EINVAL;
1183
1184 /* decode offset */
1185 offset = (*pos & GENMASK_ULL(6, 0));
1186 se = (*pos & GENMASK_ULL(14, 7)) >> 7;
1187 sh = (*pos & GENMASK_ULL(22, 15)) >> 15;
1188 cu = (*pos & GENMASK_ULL(30, 23)) >> 23;
1189 wave = (*pos & GENMASK_ULL(36, 31)) >> 31;
1190 simd = (*pos & GENMASK_ULL(44, 37)) >> 37;
1191
1192 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1193 if (r < 0) {
1194 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1195 return r;
1196 }
1197
1198 r = amdgpu_virt_enable_access_debugfs(adev);
1199 if (r < 0) {
1200 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1201 return r;
1202 }
1203
1204 /* switch to the specific se/sh/cu */
1205 mutex_lock(&adev->grbm_idx_mutex);
1206 amdgpu_gfx_select_se_sh(adev, se, sh, cu, 0);
1207
1208 x = 0;
1209 if (adev->gfx.funcs->read_wave_data)
1210 adev->gfx.funcs->read_wave_data(adev, 0, simd, wave, data, &x);
1211
1212 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0);
1213 mutex_unlock(&adev->grbm_idx_mutex);
1214
1215 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1216
1217 if (!x) {
1218 amdgpu_virt_disable_access_debugfs(adev);
1219 return -EINVAL;
1220 }
1221
1222 while (size && (offset < x * 4)) {
1223 uint32_t value;
1224
1225 value = data[offset >> 2];
1226 r = put_user(value, (uint32_t *)buf);
1227 if (r) {
1228 amdgpu_virt_disable_access_debugfs(adev);
1229 return r;
1230 }
1231
1232 result += 4;
1233 buf += 4;
1234 offset += 4;
1235 size -= 4;
1236 }
1237
1238 amdgpu_virt_disable_access_debugfs(adev);
1239 return result;
1240 }
1241
1242 /** amdgpu_debugfs_gpr_read - Read wave gprs
1243 *
1244 * @f: open file handle
1245 * @buf: User buffer to store read data in
1246 * @size: Number of bytes to read
1247 * @pos: Offset to seek to
1248 *
1249 * The offset being sought changes which wave that the status data
1250 * will be returned for. The bits are used as follows:
1251 *
1252 * Bits 0..11: Byte offset into data
1253 * Bits 12..19: SE selector
1254 * Bits 20..27: SH/SA selector
1255 * Bits 28..35: CU/{WGP+SIMD} selector
1256 * Bits 36..43: WAVE ID selector
1257 * Bits 37..44: SIMD ID selector
1258 * Bits 52..59: Thread selector
1259 * Bits 60..61: Bank selector (VGPR=0,SGPR=1)
1260 *
1261 * The return data comes from the SGPR or VGPR register bank for
1262 * the selected operational unit.
1263 */
amdgpu_debugfs_gpr_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1264 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
1265 size_t size, loff_t *pos)
1266 {
1267 struct amdgpu_device *adev = f->f_inode->i_private;
1268 int r;
1269 uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
1270
1271 if (size > 4096 || size & 3 || *pos & 3)
1272 return -EINVAL;
1273
1274 /* decode offset */
1275 offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
1276 se = (*pos & GENMASK_ULL(19, 12)) >> 12;
1277 sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
1278 cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
1279 wave = (*pos & GENMASK_ULL(43, 36)) >> 36;
1280 simd = (*pos & GENMASK_ULL(51, 44)) >> 44;
1281 thread = (*pos & GENMASK_ULL(59, 52)) >> 52;
1282 bank = (*pos & GENMASK_ULL(61, 60)) >> 60;
1283
1284 data = kcalloc(1024, sizeof(*data), GFP_KERNEL);
1285 if (!data)
1286 return -ENOMEM;
1287
1288 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1289 if (r < 0)
1290 goto err;
1291
1292 r = amdgpu_virt_enable_access_debugfs(adev);
1293 if (r < 0)
1294 goto err;
1295
1296 /* switch to the specific se/sh/cu */
1297 mutex_lock(&adev->grbm_idx_mutex);
1298 amdgpu_gfx_select_se_sh(adev, se, sh, cu, 0);
1299
1300 if (bank == 0) {
1301 if (adev->gfx.funcs->read_wave_vgprs)
1302 adev->gfx.funcs->read_wave_vgprs(adev, 0, simd, wave, thread, offset, size>>2, data);
1303 } else {
1304 if (adev->gfx.funcs->read_wave_sgprs)
1305 adev->gfx.funcs->read_wave_sgprs(adev, 0, simd, wave, offset, size>>2, data);
1306 }
1307
1308 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0);
1309 mutex_unlock(&adev->grbm_idx_mutex);
1310
1311 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1312 amdgpu_virt_disable_access_debugfs(adev);
1313
1314 r = copy_to_user(buf, data, size) ? -EFAULT : size;
1315 kfree(data);
1316 return r;
1317
1318 err:
1319 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1320 kfree(data);
1321 return r;
1322 }
1323
1324 /**
1325 * amdgpu_debugfs_gfxoff_residency_read - Read GFXOFF residency
1326 *
1327 * @f: open file handle
1328 * @buf: User buffer to store read data in
1329 * @size: Number of bytes to read
1330 * @pos: Offset to seek to
1331 *
1332 * Read a live GFXOFF residency sample from firmware. One needs to start logging
1333 * before getting the current value.
1334 */
amdgpu_debugfs_gfxoff_residency_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1335 static ssize_t amdgpu_debugfs_gfxoff_residency_read(struct file *f, char __user *buf,
1336 size_t size, loff_t *pos)
1337 {
1338 struct amdgpu_device *adev = file_inode(f)->i_private;
1339 ssize_t result = 0;
1340 int r;
1341
1342 if (size & 0x3 || *pos & 0x3)
1343 return -EINVAL;
1344
1345 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1346 if (r < 0) {
1347 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1348 return r;
1349 }
1350
1351 while (size) {
1352 uint32_t value;
1353
1354 r = amdgpu_get_gfx_off_residency(adev, &value);
1355 if (r)
1356 goto out;
1357
1358 r = put_user(value, (uint32_t *)buf);
1359 if (r)
1360 goto out;
1361
1362 result += 4;
1363 buf += 4;
1364 *pos += 4;
1365 size -= 4;
1366 }
1367
1368 r = result;
1369 out:
1370 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1371
1372 return r;
1373 }
1374
1375 /**
1376 * amdgpu_debugfs_gfxoff_residency_write - Log GFXOFF Residency
1377 *
1378 * @f: open file handle
1379 * @buf: User buffer to write data from
1380 * @size: Number of bytes to write
1381 * @pos: Offset to seek to
1382 *
1383 * Write a 32-bit non-zero to start logging; write a 32-bit zero to stop
1384 */
amdgpu_debugfs_gfxoff_residency_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)1385 static ssize_t amdgpu_debugfs_gfxoff_residency_write(struct file *f, const char __user *buf,
1386 size_t size, loff_t *pos)
1387 {
1388 struct amdgpu_device *adev = file_inode(f)->i_private;
1389 ssize_t result = 0;
1390 int r;
1391
1392 if (size & 0x3 || *pos & 0x3)
1393 return -EINVAL;
1394
1395 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1396 if (r < 0) {
1397 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1398 return r;
1399 }
1400
1401 while (size) {
1402 u32 value;
1403
1404 r = get_user(value, (uint32_t *)buf);
1405 if (r)
1406 goto out;
1407
1408 amdgpu_set_gfx_off_residency(adev, value ? true : false);
1409
1410 result += 4;
1411 buf += 4;
1412 *pos += 4;
1413 size -= 4;
1414 }
1415
1416 r = result;
1417 out:
1418 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1419
1420 return r;
1421 }
1422
1423
1424 /**
1425 * amdgpu_debugfs_gfxoff_count_read - Read GFXOFF entry count
1426 *
1427 * @f: open file handle
1428 * @buf: User buffer to store read data in
1429 * @size: Number of bytes to read
1430 * @pos: Offset to seek to
1431 */
amdgpu_debugfs_gfxoff_count_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1432 static ssize_t amdgpu_debugfs_gfxoff_count_read(struct file *f, char __user *buf,
1433 size_t size, loff_t *pos)
1434 {
1435 struct amdgpu_device *adev = file_inode(f)->i_private;
1436 ssize_t result = 0;
1437 int r;
1438
1439 if (size & 0x3 || *pos & 0x3)
1440 return -EINVAL;
1441
1442 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1443 if (r < 0) {
1444 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1445 return r;
1446 }
1447
1448 while (size) {
1449 u64 value = 0;
1450
1451 r = amdgpu_get_gfx_off_entrycount(adev, &value);
1452 if (r)
1453 goto out;
1454
1455 r = put_user(value, (u64 *)buf);
1456 if (r)
1457 goto out;
1458
1459 result += 4;
1460 buf += 4;
1461 *pos += 4;
1462 size -= 4;
1463 }
1464
1465 r = result;
1466 out:
1467 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1468
1469 return r;
1470 }
1471
1472 /**
1473 * amdgpu_debugfs_gfxoff_write - Enable/disable GFXOFF
1474 *
1475 * @f: open file handle
1476 * @buf: User buffer to write data from
1477 * @size: Number of bytes to write
1478 * @pos: Offset to seek to
1479 *
1480 * Write a 32-bit zero to disable or a 32-bit non-zero to enable
1481 */
amdgpu_debugfs_gfxoff_write(struct file * f,const char __user * buf,size_t size,loff_t * pos)1482 static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf,
1483 size_t size, loff_t *pos)
1484 {
1485 struct amdgpu_device *adev = file_inode(f)->i_private;
1486 ssize_t result = 0;
1487 int r;
1488
1489 if (size & 0x3 || *pos & 0x3)
1490 return -EINVAL;
1491
1492 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1493 if (r < 0) {
1494 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1495 return r;
1496 }
1497
1498 while (size) {
1499 uint32_t value;
1500
1501 r = get_user(value, (uint32_t *)buf);
1502 if (r)
1503 goto out;
1504
1505 amdgpu_gfx_off_ctrl(adev, value ? true : false);
1506
1507 result += 4;
1508 buf += 4;
1509 *pos += 4;
1510 size -= 4;
1511 }
1512
1513 r = result;
1514 out:
1515 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1516
1517 return r;
1518 }
1519
1520
1521 /**
1522 * amdgpu_debugfs_gfxoff_read - read gfxoff status
1523 *
1524 * @f: open file handle
1525 * @buf: User buffer to store read data in
1526 * @size: Number of bytes to read
1527 * @pos: Offset to seek to
1528 */
amdgpu_debugfs_gfxoff_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1529 static ssize_t amdgpu_debugfs_gfxoff_read(struct file *f, char __user *buf,
1530 size_t size, loff_t *pos)
1531 {
1532 struct amdgpu_device *adev = file_inode(f)->i_private;
1533 ssize_t result = 0;
1534 int r;
1535
1536 if (size & 0x3 || *pos & 0x3)
1537 return -EINVAL;
1538
1539 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1540 if (r < 0) {
1541 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1542 return r;
1543 }
1544
1545 while (size) {
1546 u32 value = adev->gfx.gfx_off_state;
1547
1548 r = put_user(value, (u32 *)buf);
1549 if (r)
1550 goto out;
1551
1552 result += 4;
1553 buf += 4;
1554 *pos += 4;
1555 size -= 4;
1556 }
1557
1558 r = result;
1559 out:
1560 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1561
1562 return r;
1563 }
1564
amdgpu_debugfs_gfxoff_status_read(struct file * f,char __user * buf,size_t size,loff_t * pos)1565 static ssize_t amdgpu_debugfs_gfxoff_status_read(struct file *f, char __user *buf,
1566 size_t size, loff_t *pos)
1567 {
1568 struct amdgpu_device *adev = file_inode(f)->i_private;
1569 ssize_t result = 0;
1570 int r;
1571
1572 if (size & 0x3 || *pos & 0x3)
1573 return -EINVAL;
1574
1575 r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
1576 if (r < 0) {
1577 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1578 return r;
1579 }
1580
1581 while (size) {
1582 u32 value;
1583
1584 r = amdgpu_get_gfx_off_status(adev, &value);
1585 if (r)
1586 goto out;
1587
1588 r = put_user(value, (u32 *)buf);
1589 if (r)
1590 goto out;
1591
1592 result += 4;
1593 buf += 4;
1594 *pos += 4;
1595 size -= 4;
1596 }
1597
1598 r = result;
1599 out:
1600 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
1601
1602 return r;
1603 }
1604
1605 static const struct file_operations amdgpu_debugfs_regs2_fops = {
1606 .owner = THIS_MODULE,
1607 .unlocked_ioctl = amdgpu_debugfs_regs2_ioctl,
1608 .read = amdgpu_debugfs_regs2_read,
1609 .write = amdgpu_debugfs_regs2_write,
1610 .open = amdgpu_debugfs_regs2_open,
1611 .release = amdgpu_debugfs_regs2_release,
1612 .llseek = default_llseek
1613 };
1614
1615 static const struct file_operations amdgpu_debugfs_gprwave_fops = {
1616 .owner = THIS_MODULE,
1617 .unlocked_ioctl = amdgpu_debugfs_gprwave_ioctl,
1618 .read = amdgpu_debugfs_gprwave_read,
1619 .open = amdgpu_debugfs_gprwave_open,
1620 .release = amdgpu_debugfs_gprwave_release,
1621 .llseek = default_llseek
1622 };
1623
1624 static const struct file_operations amdgpu_debugfs_regs_fops = {
1625 .owner = THIS_MODULE,
1626 .read = amdgpu_debugfs_regs_read,
1627 .write = amdgpu_debugfs_regs_write,
1628 .llseek = default_llseek
1629 };
1630 static const struct file_operations amdgpu_debugfs_regs_didt_fops = {
1631 .owner = THIS_MODULE,
1632 .read = amdgpu_debugfs_regs_didt_read,
1633 .write = amdgpu_debugfs_regs_didt_write,
1634 .llseek = default_llseek
1635 };
1636 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = {
1637 .owner = THIS_MODULE,
1638 .read = amdgpu_debugfs_regs_pcie_read,
1639 .write = amdgpu_debugfs_regs_pcie_write,
1640 .llseek = default_llseek
1641 };
1642 static const struct file_operations amdgpu_debugfs_regs_pcie64_fops = {
1643 .owner = THIS_MODULE,
1644 .read = amdgpu_debugfs_regs_pcie64_read,
1645 .write = amdgpu_debugfs_regs_pcie64_write,
1646 .llseek = default_llseek
1647 };
1648 static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
1649 .owner = THIS_MODULE,
1650 .read = amdgpu_debugfs_regs_smc_read,
1651 .write = amdgpu_debugfs_regs_smc_write,
1652 .llseek = default_llseek
1653 };
1654
1655 static const struct file_operations amdgpu_debugfs_gca_config_fops = {
1656 .owner = THIS_MODULE,
1657 .read = amdgpu_debugfs_gca_config_read,
1658 .llseek = default_llseek
1659 };
1660
1661 static const struct file_operations amdgpu_debugfs_sensors_fops = {
1662 .owner = THIS_MODULE,
1663 .read = amdgpu_debugfs_sensor_read,
1664 .llseek = default_llseek
1665 };
1666
1667 static const struct file_operations amdgpu_debugfs_wave_fops = {
1668 .owner = THIS_MODULE,
1669 .read = amdgpu_debugfs_wave_read,
1670 .llseek = default_llseek
1671 };
1672 static const struct file_operations amdgpu_debugfs_gpr_fops = {
1673 .owner = THIS_MODULE,
1674 .read = amdgpu_debugfs_gpr_read,
1675 .llseek = default_llseek
1676 };
1677
1678 static const struct file_operations amdgpu_debugfs_gfxoff_fops = {
1679 .owner = THIS_MODULE,
1680 .read = amdgpu_debugfs_gfxoff_read,
1681 .write = amdgpu_debugfs_gfxoff_write,
1682 .llseek = default_llseek
1683 };
1684
1685 static const struct file_operations amdgpu_debugfs_gfxoff_status_fops = {
1686 .owner = THIS_MODULE,
1687 .read = amdgpu_debugfs_gfxoff_status_read,
1688 .llseek = default_llseek
1689 };
1690
1691 static const struct file_operations amdgpu_debugfs_gfxoff_count_fops = {
1692 .owner = THIS_MODULE,
1693 .read = amdgpu_debugfs_gfxoff_count_read,
1694 .llseek = default_llseek
1695 };
1696
1697 static const struct file_operations amdgpu_debugfs_gfxoff_residency_fops = {
1698 .owner = THIS_MODULE,
1699 .read = amdgpu_debugfs_gfxoff_residency_read,
1700 .write = amdgpu_debugfs_gfxoff_residency_write,
1701 .llseek = default_llseek
1702 };
1703
1704 static const struct file_operations *debugfs_regs[] = {
1705 &amdgpu_debugfs_regs_fops,
1706 &amdgpu_debugfs_regs2_fops,
1707 &amdgpu_debugfs_gprwave_fops,
1708 &amdgpu_debugfs_regs_didt_fops,
1709 &amdgpu_debugfs_regs_pcie_fops,
1710 &amdgpu_debugfs_regs_pcie64_fops,
1711 &amdgpu_debugfs_regs_smc_fops,
1712 &amdgpu_debugfs_gca_config_fops,
1713 &amdgpu_debugfs_sensors_fops,
1714 &amdgpu_debugfs_wave_fops,
1715 &amdgpu_debugfs_gpr_fops,
1716 &amdgpu_debugfs_gfxoff_fops,
1717 &amdgpu_debugfs_gfxoff_status_fops,
1718 &amdgpu_debugfs_gfxoff_count_fops,
1719 &amdgpu_debugfs_gfxoff_residency_fops,
1720 };
1721
1722 static const char * const debugfs_regs_names[] = {
1723 "amdgpu_regs",
1724 "amdgpu_regs2",
1725 "amdgpu_gprwave",
1726 "amdgpu_regs_didt",
1727 "amdgpu_regs_pcie",
1728 "amdgpu_regs_pcie64",
1729 "amdgpu_regs_smc",
1730 "amdgpu_gca_config",
1731 "amdgpu_sensors",
1732 "amdgpu_wave",
1733 "amdgpu_gpr",
1734 "amdgpu_gfxoff",
1735 "amdgpu_gfxoff_status",
1736 "amdgpu_gfxoff_count",
1737 "amdgpu_gfxoff_residency",
1738 };
1739
1740 /**
1741 * amdgpu_debugfs_regs_init - Initialize debugfs entries that provide
1742 * register access.
1743 *
1744 * @adev: The device to attach the debugfs entries to
1745 */
amdgpu_debugfs_regs_init(struct amdgpu_device * adev)1746 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
1747 {
1748 struct drm_minor *minor = adev_to_drm(adev)->primary;
1749 struct dentry *ent, *root = minor->debugfs_root;
1750 unsigned int i;
1751
1752 if (security_locked_down(LOCKDOWN_PCI_ACCESS)) {
1753 drm_info(adev_to_drm(adev),
1754 "amdgpu: HW debugfs nodes disabled (kernel lockdown)\n");
1755 return 0;
1756 }
1757
1758 for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) {
1759 ent = debugfs_create_file(debugfs_regs_names[i],
1760 S_IFREG | 0400, root,
1761 adev, debugfs_regs[i]);
1762 if (!i && !IS_ERR_OR_NULL(ent))
1763 i_size_write(ent->d_inode, adev->rmmio_size);
1764 }
1765
1766 return 0;
1767 }
1768
amdgpu_debugfs_test_ib_show(struct seq_file * m,void * unused)1769 static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
1770 {
1771 struct amdgpu_device *adev = m->private;
1772 struct drm_device *dev = adev_to_drm(adev);
1773 int r = 0, i;
1774
1775 r = pm_runtime_get_sync(dev->dev);
1776 if (r < 0) {
1777 pm_runtime_put_autosuspend(dev->dev);
1778 return r;
1779 }
1780
1781 /* Avoid accidently unparking the sched thread during GPU reset */
1782 r = down_write_killable(&adev->reset_domain->sem);
1783 if (r) {
1784 pm_runtime_put_autosuspend(dev->dev);
1785 return r;
1786 }
1787
1788 /* hold on the scheduler */
1789 for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1790 struct amdgpu_ring *ring = adev->rings[i];
1791
1792 if (!amdgpu_ring_sched_ready(ring))
1793 continue;
1794 drm_sched_wqueue_stop(&ring->sched);
1795 }
1796
1797 seq_puts(m, "run ib test:\n");
1798 r = amdgpu_ib_ring_tests(adev);
1799 if (r)
1800 seq_printf(m, "ib ring tests failed (%d).\n", r);
1801 else
1802 seq_puts(m, "ib ring tests passed.\n");
1803
1804 /* go on the scheduler */
1805 for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1806 struct amdgpu_ring *ring = adev->rings[i];
1807
1808 if (!amdgpu_ring_sched_ready(ring))
1809 continue;
1810 drm_sched_wqueue_start(&ring->sched);
1811 }
1812
1813 up_write(&adev->reset_domain->sem);
1814
1815 pm_runtime_put_autosuspend(dev->dev);
1816
1817 return 0;
1818 }
1819
amdgpu_debugfs_evict_vram(void * data,u64 * val)1820 static int amdgpu_debugfs_evict_vram(void *data, u64 *val)
1821 {
1822 struct amdgpu_device *adev = (struct amdgpu_device *)data;
1823 struct drm_device *dev = adev_to_drm(adev);
1824 int r;
1825
1826 r = pm_runtime_get_sync(dev->dev);
1827 if (r < 0) {
1828 pm_runtime_put_autosuspend(dev->dev);
1829 return r;
1830 }
1831
1832 *val = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM);
1833
1834 pm_runtime_put_autosuspend(dev->dev);
1835
1836 return 0;
1837 }
1838
1839
amdgpu_debugfs_evict_gtt(void * data,u64 * val)1840 static int amdgpu_debugfs_evict_gtt(void *data, u64 *val)
1841 {
1842 struct amdgpu_device *adev = (struct amdgpu_device *)data;
1843 struct drm_device *dev = adev_to_drm(adev);
1844 int r;
1845
1846 r = pm_runtime_get_sync(dev->dev);
1847 if (r < 0) {
1848 pm_runtime_put_autosuspend(dev->dev);
1849 return r;
1850 }
1851
1852 *val = amdgpu_ttm_evict_resources(adev, TTM_PL_TT);
1853
1854 pm_runtime_put_autosuspend(dev->dev);
1855
1856 return 0;
1857 }
1858
amdgpu_debugfs_benchmark(void * data,u64 val)1859 static int amdgpu_debugfs_benchmark(void *data, u64 val)
1860 {
1861 struct amdgpu_device *adev = (struct amdgpu_device *)data;
1862 struct drm_device *dev = adev_to_drm(adev);
1863 int r;
1864
1865 r = pm_runtime_get_sync(dev->dev);
1866 if (r < 0) {
1867 pm_runtime_put_autosuspend(dev->dev);
1868 return r;
1869 }
1870
1871 r = amdgpu_benchmark(adev, val);
1872
1873 pm_runtime_put_autosuspend(dev->dev);
1874
1875 return r;
1876 }
1877
amdgpu_debugfs_vm_info_show(struct seq_file * m,void * unused)1878 static int amdgpu_debugfs_vm_info_show(struct seq_file *m, void *unused)
1879 {
1880 struct amdgpu_device *adev = m->private;
1881 struct drm_device *dev = adev_to_drm(adev);
1882 struct drm_file *file;
1883 int r;
1884
1885 r = mutex_lock_interruptible(&dev->filelist_mutex);
1886 if (r)
1887 return r;
1888
1889 list_for_each_entry(file, &dev->filelist, lhead) {
1890 struct amdgpu_fpriv *fpriv = file->driver_priv;
1891 struct amdgpu_vm *vm = &fpriv->vm;
1892 struct amdgpu_task_info *ti;
1893
1894 ti = amdgpu_vm_get_task_info_vm(vm);
1895 if (ti) {
1896 seq_printf(m, "pid:%d\tProcess:%s ----------\n", ti->task.pid, ti->process_name);
1897 amdgpu_vm_put_task_info(ti);
1898 }
1899
1900 r = amdgpu_bo_reserve(vm->root.bo, true);
1901 if (r)
1902 break;
1903 amdgpu_debugfs_vm_bo_info(vm, m);
1904 amdgpu_bo_unreserve(vm->root.bo);
1905 }
1906
1907 mutex_unlock(&dev->filelist_mutex);
1908
1909 return r;
1910 }
1911
1912 DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_test_ib);
1913 DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_vm_info);
1914 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_vram_fops, amdgpu_debugfs_evict_vram,
1915 NULL, "%lld\n");
1916 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_gtt_fops, amdgpu_debugfs_evict_gtt,
1917 NULL, "%lld\n");
1918 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_benchmark_fops, NULL, amdgpu_debugfs_benchmark,
1919 "%lld\n");
1920
amdgpu_ib_preempt_fences_swap(struct amdgpu_ring * ring,struct dma_fence ** fences)1921 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
1922 struct dma_fence **fences)
1923 {
1924 struct amdgpu_fence_driver *drv = &ring->fence_drv;
1925 uint32_t sync_seq, last_seq;
1926
1927 last_seq = atomic_read(&ring->fence_drv.last_seq);
1928 sync_seq = ring->fence_drv.sync_seq;
1929
1930 last_seq &= drv->num_fences_mask;
1931 sync_seq &= drv->num_fences_mask;
1932
1933 do {
1934 struct dma_fence *fence, **ptr;
1935
1936 ++last_seq;
1937 last_seq &= drv->num_fences_mask;
1938 ptr = &drv->fences[last_seq];
1939
1940 fence = rcu_dereference_protected(*ptr, 1);
1941 RCU_INIT_POINTER(*ptr, NULL);
1942
1943 if (!fence)
1944 continue;
1945
1946 fences[last_seq] = fence;
1947
1948 } while (last_seq != sync_seq);
1949 }
1950
amdgpu_ib_preempt_signal_fences(struct dma_fence ** fences,int length)1951 static void amdgpu_ib_preempt_signal_fences(struct dma_fence **fences,
1952 int length)
1953 {
1954 int i;
1955 struct dma_fence *fence;
1956
1957 for (i = 0; i < length; i++) {
1958 fence = fences[i];
1959 if (!fence)
1960 continue;
1961 dma_fence_signal(fence);
1962 dma_fence_put(fence);
1963 }
1964 }
1965
amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler * sched)1966 static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched)
1967 {
1968 struct drm_sched_job *s_job;
1969 struct dma_fence *fence;
1970
1971 spin_lock(&sched->job_list_lock);
1972 list_for_each_entry(s_job, &sched->pending_list, list) {
1973 fence = sched->ops->run_job(s_job);
1974 dma_fence_put(fence);
1975 }
1976 spin_unlock(&sched->job_list_lock);
1977 }
1978
amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring * ring)1979 static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring)
1980 {
1981 struct amdgpu_job *job;
1982 struct drm_sched_job *s_job, *tmp;
1983 uint32_t preempt_seq;
1984 struct dma_fence *fence, **ptr;
1985 struct amdgpu_fence_driver *drv = &ring->fence_drv;
1986 struct drm_gpu_scheduler *sched = &ring->sched;
1987 bool preempted = true;
1988
1989 if (ring->funcs->type != AMDGPU_RING_TYPE_GFX)
1990 return;
1991
1992 preempt_seq = le32_to_cpu(*(drv->cpu_addr + 2));
1993 if (preempt_seq <= atomic_read(&drv->last_seq)) {
1994 preempted = false;
1995 goto no_preempt;
1996 }
1997
1998 preempt_seq &= drv->num_fences_mask;
1999 ptr = &drv->fences[preempt_seq];
2000 fence = rcu_dereference_protected(*ptr, 1);
2001
2002 no_preempt:
2003 spin_lock(&sched->job_list_lock);
2004 list_for_each_entry_safe(s_job, tmp, &sched->pending_list, list) {
2005 if (dma_fence_is_signaled(&s_job->s_fence->finished)) {
2006 /* remove job from ring_mirror_list */
2007 list_del_init(&s_job->list);
2008 sched->ops->free_job(s_job);
2009 continue;
2010 }
2011 job = to_amdgpu_job(s_job);
2012 if (preempted && (&job->hw_fence->base) == fence)
2013 /* mark the job as preempted */
2014 job->preemption_status |= AMDGPU_IB_PREEMPTED;
2015 }
2016 spin_unlock(&sched->job_list_lock);
2017 }
2018
amdgpu_debugfs_ib_preempt(void * data,u64 val)2019 static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
2020 {
2021 int r, length;
2022 struct amdgpu_ring *ring;
2023 struct dma_fence **fences = NULL;
2024 struct amdgpu_device *adev = (struct amdgpu_device *)data;
2025
2026 if (val >= AMDGPU_MAX_RINGS)
2027 return -EINVAL;
2028
2029 ring = adev->rings[val];
2030
2031 if (!amdgpu_ring_sched_ready(ring) ||
2032 !ring->funcs->preempt_ib)
2033 return -EINVAL;
2034
2035 /* the last preemption failed */
2036 if (ring->trail_seq != le32_to_cpu(*ring->trail_fence_cpu_addr))
2037 return -EBUSY;
2038
2039 length = ring->fence_drv.num_fences_mask + 1;
2040 fences = kcalloc(length, sizeof(void *), GFP_KERNEL);
2041 if (!fences)
2042 return -ENOMEM;
2043
2044 /* Avoid accidently unparking the sched thread during GPU reset */
2045 r = down_read_killable(&adev->reset_domain->sem);
2046 if (r)
2047 goto pro_end;
2048
2049 /* stop the scheduler */
2050 drm_sched_wqueue_stop(&ring->sched);
2051
2052 /* preempt the IB */
2053 r = amdgpu_ring_preempt_ib(ring);
2054 if (r) {
2055 drm_warn(adev_to_drm(adev), "failed to preempt ring %d\n", ring->idx);
2056 goto failure;
2057 }
2058
2059 amdgpu_fence_process(ring);
2060
2061 if (atomic_read(&ring->fence_drv.last_seq) !=
2062 ring->fence_drv.sync_seq) {
2063 drm_info(adev_to_drm(adev), "ring %d was preempted\n", ring->idx);
2064
2065 amdgpu_ib_preempt_mark_partial_job(ring);
2066
2067 /* swap out the old fences */
2068 amdgpu_ib_preempt_fences_swap(ring, fences);
2069
2070 amdgpu_fence_driver_force_completion(ring, NULL);
2071
2072 /* resubmit unfinished jobs */
2073 amdgpu_ib_preempt_job_recovery(&ring->sched);
2074
2075 /* wait for jobs finished */
2076 amdgpu_fence_wait_empty(ring);
2077
2078 /* signal the old fences */
2079 amdgpu_ib_preempt_signal_fences(fences, length);
2080 }
2081
2082 failure:
2083 /* restart the scheduler */
2084 drm_sched_wqueue_start(&ring->sched);
2085
2086 up_read(&adev->reset_domain->sem);
2087
2088 pro_end:
2089 kfree(fences);
2090
2091 return r;
2092 }
2093
amdgpu_debugfs_sclk_set(void * data,u64 val)2094 static int amdgpu_debugfs_sclk_set(void *data, u64 val)
2095 {
2096 int ret = 0;
2097 uint32_t max_freq, min_freq;
2098 struct amdgpu_device *adev = (struct amdgpu_device *)data;
2099
2100 if (amdgpu_sriov_multi_vf_mode(adev))
2101 return -EINVAL;
2102
2103 ret = pm_runtime_get_sync(adev_to_drm(adev)->dev);
2104 if (ret < 0) {
2105 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
2106 return ret;
2107 }
2108
2109 ret = amdgpu_dpm_get_dpm_freq_range(adev, PP_SCLK, &min_freq, &max_freq);
2110 if (ret == -EOPNOTSUPP) {
2111 ret = 0;
2112 goto out;
2113 }
2114 if (ret || val > max_freq || val < min_freq) {
2115 ret = -EINVAL;
2116 goto out;
2117 }
2118
2119 ret = amdgpu_dpm_set_soft_freq_range(adev, PP_SCLK, (uint32_t)val, (uint32_t)val);
2120 if (ret)
2121 ret = -EINVAL;
2122
2123 out:
2124 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
2125
2126 return ret;
2127 }
2128
2129 DEFINE_DEBUGFS_ATTRIBUTE(fops_ib_preempt, NULL,
2130 amdgpu_debugfs_ib_preempt, "%llu\n");
2131
2132 DEFINE_DEBUGFS_ATTRIBUTE(fops_sclk_set, NULL,
2133 amdgpu_debugfs_sclk_set, "%llu\n");
2134
amdgpu_debugfs_init(struct amdgpu_device * adev)2135 int amdgpu_debugfs_init(struct amdgpu_device *adev)
2136 {
2137 struct dentry *root = adev_to_drm(adev)->primary->debugfs_root;
2138 struct dentry *ent;
2139 int r, i;
2140
2141 if (!debugfs_initialized())
2142 return 0;
2143
2144 debugfs_create_x32("amdgpu_smu_debug", 0600, root,
2145 &adev->pm.smu_debug_mask);
2146
2147 debugfs_create_x64("unique_id", 0444, root, &adev->unique_id);
2148 debugfs_create_x8("unitid", 0444, root, &adev->unitid);
2149
2150 ent = debugfs_create_file("amdgpu_preempt_ib", 0600, root, adev,
2151 &fops_ib_preempt);
2152 if (IS_ERR(ent)) {
2153 drm_err(adev_to_drm(adev),
2154 "unable to create amdgpu_preempt_ib debugsfs file\n");
2155 return PTR_ERR(ent);
2156 }
2157
2158 ent = debugfs_create_file("amdgpu_force_sclk", 0200, root, adev,
2159 &fops_sclk_set);
2160 if (IS_ERR(ent)) {
2161 drm_err(adev_to_drm(adev),
2162 "unable to create amdgpu_set_sclk debugsfs file\n");
2163 return PTR_ERR(ent);
2164 }
2165
2166 /* Register debugfs entries for amdgpu_ttm */
2167 amdgpu_ttm_debugfs_init(adev);
2168 amdgpu_debugfs_pm_init(adev);
2169 amdgpu_debugfs_sa_init(adev);
2170 amdgpu_debugfs_fence_init(adev);
2171 amdgpu_debugfs_gem_init(adev);
2172
2173 r = amdgpu_debugfs_regs_init(adev);
2174 if (r)
2175 drm_err(adev_to_drm(adev), "registering register debugfs failed (%d).\n", r);
2176
2177 amdgpu_debugfs_firmware_init(adev);
2178 amdgpu_ta_if_debugfs_init(adev);
2179
2180 amdgpu_debugfs_mes_event_log_init(adev);
2181
2182 #if defined(CONFIG_DRM_AMD_DC)
2183 if (adev->dc_enabled)
2184 dtn_debugfs_init(adev);
2185 #endif
2186
2187 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
2188 struct amdgpu_ring *ring = adev->rings[i];
2189
2190 if (!ring)
2191 continue;
2192 if (ring == &adev->cper.ring_buf && !adev->cper.enabled)
2193 continue;
2194
2195 amdgpu_debugfs_ring_init(adev, ring);
2196 }
2197
2198 for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
2199 if (!amdgpu_vcnfw_log)
2200 break;
2201
2202 if (adev->vcn.harvest_config & (1 << i))
2203 continue;
2204
2205 amdgpu_debugfs_vcn_fwlog_init(adev, i, &adev->vcn.inst[i]);
2206 }
2207
2208 if (amdgpu_umsch_mm & amdgpu_umsch_mm_fwlog)
2209 amdgpu_debugfs_umsch_fwlog_init(adev, &adev->umsch_mm);
2210
2211 amdgpu_debugfs_vcn_sched_mask_init(adev);
2212 amdgpu_debugfs_jpeg_sched_mask_init(adev);
2213 amdgpu_debugfs_gfx_sched_mask_init(adev);
2214 amdgpu_debugfs_compute_sched_mask_init(adev);
2215 amdgpu_debugfs_sdma_sched_mask_init(adev);
2216
2217 amdgpu_ras_debugfs_create_all(adev);
2218 amdgpu_rap_debugfs_init(adev);
2219 amdgpu_securedisplay_debugfs_init(adev);
2220 amdgpu_fw_attestation_debugfs_init(adev);
2221 amdgpu_psp_debugfs_init(adev);
2222
2223 debugfs_create_file("amdgpu_evict_vram", 0400, root, adev,
2224 &amdgpu_evict_vram_fops);
2225 debugfs_create_file("amdgpu_evict_gtt", 0400, root, adev,
2226 &amdgpu_evict_gtt_fops);
2227 debugfs_create_file("amdgpu_test_ib", 0400, root, adev,
2228 &amdgpu_debugfs_test_ib_fops);
2229 debugfs_create_file("amdgpu_vm_info", 0444, root, adev,
2230 &amdgpu_debugfs_vm_info_fops);
2231 debugfs_create_file("amdgpu_benchmark", 0200, root, adev,
2232 &amdgpu_benchmark_fops);
2233
2234 adev->debugfs_vbios_blob.data = adev->bios;
2235 adev->debugfs_vbios_blob.size = adev->bios_size;
2236 debugfs_create_blob("amdgpu_vbios", 0444, root,
2237 &adev->debugfs_vbios_blob);
2238
2239 if (adev->discovery.debugfs_blob.size)
2240 debugfs_create_blob("amdgpu_discovery", 0444, root,
2241 &adev->discovery.debugfs_blob);
2242
2243 return 0;
2244 }
2245
amdgpu_pt_info_read(struct seq_file * m,void * unused)2246 static int amdgpu_pt_info_read(struct seq_file *m, void *unused)
2247 {
2248 struct drm_file *file;
2249 struct amdgpu_fpriv *fpriv;
2250 struct amdgpu_bo *root_bo;
2251 struct amdgpu_device *adev;
2252 int r;
2253
2254 file = m->private;
2255 if (!file)
2256 return -EINVAL;
2257
2258 adev = drm_to_adev(file->minor->dev);
2259 fpriv = file->driver_priv;
2260 if (!fpriv || !fpriv->vm.root.bo)
2261 return -ENODEV;
2262
2263 root_bo = amdgpu_bo_ref(fpriv->vm.root.bo);
2264 r = amdgpu_bo_reserve(root_bo, true);
2265 if (r) {
2266 amdgpu_bo_unref(&root_bo);
2267 return -EINVAL;
2268 }
2269
2270 seq_printf(m, "pd_address: 0x%llx\n", amdgpu_gmc_pd_addr(fpriv->vm.root.bo));
2271 seq_printf(m, "max_pfn: 0x%llx\n", adev->vm_manager.max_pfn);
2272 seq_printf(m, "num_level: 0x%x\n", adev->vm_manager.num_level);
2273 seq_printf(m, "block_size: 0x%x\n", adev->vm_manager.block_size);
2274 seq_printf(m, "fragment_size: 0x%x\n", adev->vm_manager.fragment_size);
2275
2276 amdgpu_bo_unreserve(root_bo);
2277 amdgpu_bo_unref(&root_bo);
2278
2279 return 0;
2280 }
2281
amdgpu_pt_info_open(struct inode * inode,struct file * file)2282 static int amdgpu_pt_info_open(struct inode *inode, struct file *file)
2283 {
2284 return single_open(file, amdgpu_pt_info_read, inode->i_private);
2285 }
2286
2287 static const struct file_operations amdgpu_pt_info_fops = {
2288 .owner = THIS_MODULE,
2289 .open = amdgpu_pt_info_open,
2290 .read = seq_read,
2291 .llseek = seq_lseek,
2292 .release = single_release,
2293 };
2294
amdgpu_mqd_info_read(struct seq_file * m,void * unused)2295 static int amdgpu_mqd_info_read(struct seq_file *m, void *unused)
2296 {
2297 struct amdgpu_usermode_queue *queue = m->private;
2298 struct amdgpu_bo *bo;
2299 int r;
2300
2301 if (!queue || !queue->mqd.obj)
2302 return -EINVAL;
2303
2304 bo = amdgpu_bo_ref(queue->mqd.obj);
2305 r = amdgpu_bo_reserve(bo, true);
2306 if (r) {
2307 amdgpu_bo_unref(&bo);
2308 return -EINVAL;
2309 }
2310
2311 seq_printf(m, "queue_type: %d\n", queue->queue_type);
2312 seq_printf(m, "mqd_gpu_address: 0x%llx\n", amdgpu_bo_gpu_offset(queue->mqd.obj));
2313
2314 amdgpu_bo_unreserve(bo);
2315 amdgpu_bo_unref(&bo);
2316
2317 return 0;
2318 }
2319
amdgpu_mqd_info_open(struct inode * inode,struct file * file)2320 static int amdgpu_mqd_info_open(struct inode *inode, struct file *file)
2321 {
2322 return single_open(file, amdgpu_mqd_info_read, inode->i_private);
2323 }
2324
2325 static const struct file_operations amdgpu_mqd_info_fops = {
2326 .owner = THIS_MODULE,
2327 .open = amdgpu_mqd_info_open,
2328 .read = seq_read,
2329 .llseek = seq_lseek,
2330 .release = single_release,
2331 };
2332
amdgpu_debugfs_userq_init(struct drm_file * file,struct amdgpu_usermode_queue * queue,int qid)2333 void amdgpu_debugfs_userq_init(struct drm_file *file, struct amdgpu_usermode_queue *queue, int qid)
2334 {
2335 char queue_name[32];
2336
2337 scnprintf(queue_name, sizeof(queue_name), "queue_%d", qid);
2338 queue->debugfs_queue = debugfs_create_dir(queue_name, file->debugfs_client);
2339 debugfs_create_file("mqd_info", 0444, queue->debugfs_queue, queue, &amdgpu_mqd_info_fops);
2340 }
2341
amdgpu_debugfs_vm_init(struct drm_file * file)2342 void amdgpu_debugfs_vm_init(struct drm_file *file)
2343 {
2344 debugfs_create_file("vm_pagetable_info", 0444, file->debugfs_client, file,
2345 &amdgpu_pt_info_fops);
2346 }
2347
2348 #else
amdgpu_debugfs_init(struct amdgpu_device * adev)2349 int amdgpu_debugfs_init(struct amdgpu_device *adev)
2350 {
2351 return 0;
2352 }
amdgpu_debugfs_regs_init(struct amdgpu_device * adev)2353 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
2354 {
2355 return 0;
2356 }
amdgpu_debugfs_vm_init(struct drm_file * file)2357 void amdgpu_debugfs_vm_init(struct drm_file *file)
2358 {
2359 }
amdgpu_debugfs_userq_init(struct drm_file * file,struct amdgpu_usermode_queue * queue,int qid)2360 void amdgpu_debugfs_userq_init(struct drm_file *file,
2361 struct amdgpu_usermode_queue *queue,
2362 int qid)
2363 {
2364 }
2365 #endif
2366