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