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