]> Git Repo - linux.git/blob - drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Merge tag 'tag-chrome-platform-for-v5.10' of git://git.kernel.org/pub/scm/linux/kerne...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_device.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  * Authors: Dave Airlie
25  *          Alex Deucher
26  *          Jerome Glisse
27  */
28 #include <linux/power_supply.h>
29 #include <linux/kthread.h>
30 #include <linux/module.h>
31 #include <linux/console.h>
32 #include <linux/slab.h>
33
34 #include <drm/drm_atomic_helper.h>
35 #include <drm/drm_probe_helper.h>
36 #include <drm/amdgpu_drm.h>
37 #include <linux/vgaarb.h>
38 #include <linux/vga_switcheroo.h>
39 #include <linux/efi.h>
40 #include "amdgpu.h"
41 #include "amdgpu_trace.h"
42 #include "amdgpu_i2c.h"
43 #include "atom.h"
44 #include "amdgpu_atombios.h"
45 #include "amdgpu_atomfirmware.h"
46 #include "amd_pcie.h"
47 #ifdef CONFIG_DRM_AMDGPU_SI
48 #include "si.h"
49 #endif
50 #ifdef CONFIG_DRM_AMDGPU_CIK
51 #include "cik.h"
52 #endif
53 #include "vi.h"
54 #include "soc15.h"
55 #include "nv.h"
56 #include "bif/bif_4_1_d.h"
57 #include <linux/pci.h>
58 #include <linux/firmware.h>
59 #include "amdgpu_vf_error.h"
60
61 #include "amdgpu_amdkfd.h"
62 #include "amdgpu_pm.h"
63
64 #include "amdgpu_xgmi.h"
65 #include "amdgpu_ras.h"
66 #include "amdgpu_pmu.h"
67 #include "amdgpu_fru_eeprom.h"
68
69 #include <linux/suspend.h>
70 #include <drm/task_barrier.h>
71 #include <linux/pm_runtime.h>
72
73 MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin");
74 MODULE_FIRMWARE("amdgpu/vega12_gpu_info.bin");
75 MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin");
76 MODULE_FIRMWARE("amdgpu/picasso_gpu_info.bin");
77 MODULE_FIRMWARE("amdgpu/raven2_gpu_info.bin");
78 MODULE_FIRMWARE("amdgpu/arcturus_gpu_info.bin");
79 MODULE_FIRMWARE("amdgpu/renoir_gpu_info.bin");
80 MODULE_FIRMWARE("amdgpu/navi10_gpu_info.bin");
81 MODULE_FIRMWARE("amdgpu/navi14_gpu_info.bin");
82 MODULE_FIRMWARE("amdgpu/navi12_gpu_info.bin");
83
84 #define AMDGPU_RESUME_MS                2000
85
86 const char *amdgpu_asic_name[] = {
87         "TAHITI",
88         "PITCAIRN",
89         "VERDE",
90         "OLAND",
91         "HAINAN",
92         "BONAIRE",
93         "KAVERI",
94         "KABINI",
95         "HAWAII",
96         "MULLINS",
97         "TOPAZ",
98         "TONGA",
99         "FIJI",
100         "CARRIZO",
101         "STONEY",
102         "POLARIS10",
103         "POLARIS11",
104         "POLARIS12",
105         "VEGAM",
106         "VEGA10",
107         "VEGA12",
108         "VEGA20",
109         "RAVEN",
110         "ARCTURUS",
111         "RENOIR",
112         "NAVI10",
113         "NAVI14",
114         "NAVI12",
115         "SIENNA_CICHLID",
116         "NAVY_FLOUNDER",
117         "LAST",
118 };
119
120 /**
121  * DOC: pcie_replay_count
122  *
123  * The amdgpu driver provides a sysfs API for reporting the total number
124  * of PCIe replays (NAKs)
125  * The file pcie_replay_count is used for this and returns the total
126  * number of replays as a sum of the NAKs generated and NAKs received
127  */
128
129 static ssize_t amdgpu_device_get_pcie_replay_count(struct device *dev,
130                 struct device_attribute *attr, char *buf)
131 {
132         struct drm_device *ddev = dev_get_drvdata(dev);
133         struct amdgpu_device *adev = drm_to_adev(ddev);
134         uint64_t cnt = amdgpu_asic_get_pcie_replay_count(adev);
135
136         return snprintf(buf, PAGE_SIZE, "%llu\n", cnt);
137 }
138
139 static DEVICE_ATTR(pcie_replay_count, S_IRUGO,
140                 amdgpu_device_get_pcie_replay_count, NULL);
141
142 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev);
143
144 /**
145  * DOC: product_name
146  *
147  * The amdgpu driver provides a sysfs API for reporting the product name
148  * for the device
149  * The file serial_number is used for this and returns the product name
150  * as returned from the FRU.
151  * NOTE: This is only available for certain server cards
152  */
153
154 static ssize_t amdgpu_device_get_product_name(struct device *dev,
155                 struct device_attribute *attr, char *buf)
156 {
157         struct drm_device *ddev = dev_get_drvdata(dev);
158         struct amdgpu_device *adev = drm_to_adev(ddev);
159
160         return snprintf(buf, PAGE_SIZE, "%s\n", adev->product_name);
161 }
162
163 static DEVICE_ATTR(product_name, S_IRUGO,
164                 amdgpu_device_get_product_name, NULL);
165
166 /**
167  * DOC: product_number
168  *
169  * The amdgpu driver provides a sysfs API for reporting the part number
170  * for the device
171  * The file serial_number is used for this and returns the part number
172  * as returned from the FRU.
173  * NOTE: This is only available for certain server cards
174  */
175
176 static ssize_t amdgpu_device_get_product_number(struct device *dev,
177                 struct device_attribute *attr, char *buf)
178 {
179         struct drm_device *ddev = dev_get_drvdata(dev);
180         struct amdgpu_device *adev = drm_to_adev(ddev);
181
182         return snprintf(buf, PAGE_SIZE, "%s\n", adev->product_number);
183 }
184
185 static DEVICE_ATTR(product_number, S_IRUGO,
186                 amdgpu_device_get_product_number, NULL);
187
188 /**
189  * DOC: serial_number
190  *
191  * The amdgpu driver provides a sysfs API for reporting the serial number
192  * for the device
193  * The file serial_number is used for this and returns the serial number
194  * as returned from the FRU.
195  * NOTE: This is only available for certain server cards
196  */
197
198 static ssize_t amdgpu_device_get_serial_number(struct device *dev,
199                 struct device_attribute *attr, char *buf)
200 {
201         struct drm_device *ddev = dev_get_drvdata(dev);
202         struct amdgpu_device *adev = drm_to_adev(ddev);
203
204         return snprintf(buf, PAGE_SIZE, "%s\n", adev->serial);
205 }
206
207 static DEVICE_ATTR(serial_number, S_IRUGO,
208                 amdgpu_device_get_serial_number, NULL);
209
210 /**
211  * amdgpu_device_supports_boco - Is the device a dGPU with HG/PX power control
212  *
213  * @dev: drm_device pointer
214  *
215  * Returns true if the device is a dGPU with HG/PX power control,
216  * otherwise return false.
217  */
218 bool amdgpu_device_supports_boco(struct drm_device *dev)
219 {
220         struct amdgpu_device *adev = drm_to_adev(dev);
221
222         if (adev->flags & AMD_IS_PX)
223                 return true;
224         return false;
225 }
226
227 /**
228  * amdgpu_device_supports_baco - Does the device support BACO
229  *
230  * @dev: drm_device pointer
231  *
232  * Returns true if the device supporte BACO,
233  * otherwise return false.
234  */
235 bool amdgpu_device_supports_baco(struct drm_device *dev)
236 {
237         struct amdgpu_device *adev = drm_to_adev(dev);
238
239         return amdgpu_asic_supports_baco(adev);
240 }
241
242 /**
243  * VRAM access helper functions.
244  *
245  * amdgpu_device_vram_access - read/write a buffer in vram
246  *
247  * @adev: amdgpu_device pointer
248  * @pos: offset of the buffer in vram
249  * @buf: virtual address of the buffer in system memory
250  * @size: read/write size, sizeof(@buf) must > @size
251  * @write: true - write to vram, otherwise - read from vram
252  */
253 void amdgpu_device_vram_access(struct amdgpu_device *adev, loff_t pos,
254                                uint32_t *buf, size_t size, bool write)
255 {
256         unsigned long flags;
257         uint32_t hi = ~0;
258         uint64_t last;
259
260
261 #ifdef CONFIG_64BIT
262         last = min(pos + size, adev->gmc.visible_vram_size);
263         if (last > pos) {
264                 void __iomem *addr = adev->mman.aper_base_kaddr + pos;
265                 size_t count = last - pos;
266
267                 if (write) {
268                         memcpy_toio(addr, buf, count);
269                         mb();
270                         amdgpu_asic_flush_hdp(adev, NULL);
271                 } else {
272                         amdgpu_asic_invalidate_hdp(adev, NULL);
273                         mb();
274                         memcpy_fromio(buf, addr, count);
275                 }
276
277                 if (count == size)
278                         return;
279
280                 pos += count;
281                 buf += count / 4;
282                 size -= count;
283         }
284 #endif
285
286         spin_lock_irqsave(&adev->mmio_idx_lock, flags);
287         for (last = pos + size; pos < last; pos += 4) {
288                 uint32_t tmp = pos >> 31;
289
290                 WREG32_NO_KIQ(mmMM_INDEX, ((uint32_t)pos) | 0x80000000);
291                 if (tmp != hi) {
292                         WREG32_NO_KIQ(mmMM_INDEX_HI, tmp);
293                         hi = tmp;
294                 }
295                 if (write)
296                         WREG32_NO_KIQ(mmMM_DATA, *buf++);
297                 else
298                         *buf++ = RREG32_NO_KIQ(mmMM_DATA);
299         }
300         spin_unlock_irqrestore(&adev->mmio_idx_lock, flags);
301 }
302
303 /*
304  * register access helper functions.
305  */
306 /**
307  * amdgpu_device_rreg - read a memory mapped IO or indirect register
308  *
309  * @adev: amdgpu_device pointer
310  * @reg: dword aligned register offset
311  * @acc_flags: access flags which require special behavior
312  *
313  * Returns the 32 bit value from the offset specified.
314  */
315 uint32_t amdgpu_device_rreg(struct amdgpu_device *adev,
316                             uint32_t reg, uint32_t acc_flags)
317 {
318         uint32_t ret;
319
320         if (adev->in_pci_err_recovery)
321                 return 0;
322
323         if ((reg * 4) < adev->rmmio_size) {
324                 if (!(acc_flags & AMDGPU_REGS_NO_KIQ) &&
325                     amdgpu_sriov_runtime(adev) &&
326                     down_read_trylock(&adev->reset_sem)) {
327                         ret = amdgpu_kiq_rreg(adev, reg);
328                         up_read(&adev->reset_sem);
329                 } else {
330                         ret = readl(((void __iomem *)adev->rmmio) + (reg * 4));
331                 }
332         } else {
333                 ret = adev->pcie_rreg(adev, reg * 4);
334         }
335
336         trace_amdgpu_device_rreg(adev->pdev->device, reg, ret);
337
338         return ret;
339 }
340
341 /*
342  * MMIO register read with bytes helper functions
343  * @offset:bytes offset from MMIO start
344  *
345 */
346
347 /**
348  * amdgpu_mm_rreg8 - read a memory mapped IO register
349  *
350  * @adev: amdgpu_device pointer
351  * @offset: byte aligned register offset
352  *
353  * Returns the 8 bit value from the offset specified.
354  */
355 uint8_t amdgpu_mm_rreg8(struct amdgpu_device *adev, uint32_t offset)
356 {
357         if (adev->in_pci_err_recovery)
358                 return 0;
359
360         if (offset < adev->rmmio_size)
361                 return (readb(adev->rmmio + offset));
362         BUG();
363 }
364
365 /*
366  * MMIO register write with bytes helper functions
367  * @offset:bytes offset from MMIO start
368  * @value: the value want to be written to the register
369  *
370 */
371 /**
372  * amdgpu_mm_wreg8 - read a memory mapped IO register
373  *
374  * @adev: amdgpu_device pointer
375  * @offset: byte aligned register offset
376  * @value: 8 bit value to write
377  *
378  * Writes the value specified to the offset specified.
379  */
380 void amdgpu_mm_wreg8(struct amdgpu_device *adev, uint32_t offset, uint8_t value)
381 {
382         if (adev->in_pci_err_recovery)
383                 return;
384
385         if (offset < adev->rmmio_size)
386                 writeb(value, adev->rmmio + offset);
387         else
388                 BUG();
389 }
390
391 /**
392  * amdgpu_device_wreg - write to a memory mapped IO or indirect register
393  *
394  * @adev: amdgpu_device pointer
395  * @reg: dword aligned register offset
396  * @v: 32 bit value to write to the register
397  * @acc_flags: access flags which require special behavior
398  *
399  * Writes the value specified to the offset specified.
400  */
401 void amdgpu_device_wreg(struct amdgpu_device *adev,
402                         uint32_t reg, uint32_t v,
403                         uint32_t acc_flags)
404 {
405         if (adev->in_pci_err_recovery)
406                 return;
407
408         if ((reg * 4) < adev->rmmio_size) {
409                 if (!(acc_flags & AMDGPU_REGS_NO_KIQ) &&
410                     amdgpu_sriov_runtime(adev) &&
411                     down_read_trylock(&adev->reset_sem)) {
412                         amdgpu_kiq_wreg(adev, reg, v);
413                         up_read(&adev->reset_sem);
414                 } else {
415                         writel(v, ((void __iomem *)adev->rmmio) + (reg * 4));
416                 }
417         } else {
418                 adev->pcie_wreg(adev, reg * 4, v);
419         }
420
421         trace_amdgpu_device_wreg(adev->pdev->device, reg, v);
422 }
423
424 /*
425  * amdgpu_mm_wreg_mmio_rlc -  write register either with mmio or with RLC path if in range
426  *
427  * this function is invoked only the debugfs register access
428  * */
429 void amdgpu_mm_wreg_mmio_rlc(struct amdgpu_device *adev,
430                              uint32_t reg, uint32_t v)
431 {
432         if (adev->in_pci_err_recovery)
433                 return;
434
435         if (amdgpu_sriov_fullaccess(adev) &&
436             adev->gfx.rlc.funcs &&
437             adev->gfx.rlc.funcs->is_rlcg_access_range) {
438                 if (adev->gfx.rlc.funcs->is_rlcg_access_range(adev, reg))
439                         return adev->gfx.rlc.funcs->rlcg_wreg(adev, reg, v);
440         } else {
441                 writel(v, ((void __iomem *)adev->rmmio) + (reg * 4));
442         }
443 }
444
445 /**
446  * amdgpu_io_rreg - read an IO register
447  *
448  * @adev: amdgpu_device pointer
449  * @reg: dword aligned register offset
450  *
451  * Returns the 32 bit value from the offset specified.
452  */
453 u32 amdgpu_io_rreg(struct amdgpu_device *adev, u32 reg)
454 {
455         if (adev->in_pci_err_recovery)
456                 return 0;
457
458         if ((reg * 4) < adev->rio_mem_size)
459                 return ioread32(adev->rio_mem + (reg * 4));
460         else {
461                 iowrite32((reg * 4), adev->rio_mem + (mmMM_INDEX * 4));
462                 return ioread32(adev->rio_mem + (mmMM_DATA * 4));
463         }
464 }
465
466 /**
467  * amdgpu_io_wreg - write to an IO register
468  *
469  * @adev: amdgpu_device pointer
470  * @reg: dword aligned register offset
471  * @v: 32 bit value to write to the register
472  *
473  * Writes the value specified to the offset specified.
474  */
475 void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
476 {
477         if (adev->in_pci_err_recovery)
478                 return;
479
480         if ((reg * 4) < adev->rio_mem_size)
481                 iowrite32(v, adev->rio_mem + (reg * 4));
482         else {
483                 iowrite32((reg * 4), adev->rio_mem + (mmMM_INDEX * 4));
484                 iowrite32(v, adev->rio_mem + (mmMM_DATA * 4));
485         }
486 }
487
488 /**
489  * amdgpu_mm_rdoorbell - read a doorbell dword
490  *
491  * @adev: amdgpu_device pointer
492  * @index: doorbell index
493  *
494  * Returns the value in the doorbell aperture at the
495  * requested doorbell index (CIK).
496  */
497 u32 amdgpu_mm_rdoorbell(struct amdgpu_device *adev, u32 index)
498 {
499         if (adev->in_pci_err_recovery)
500                 return 0;
501
502         if (index < adev->doorbell.num_doorbells) {
503                 return readl(adev->doorbell.ptr + index);
504         } else {
505                 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index);
506                 return 0;
507         }
508 }
509
510 /**
511  * amdgpu_mm_wdoorbell - write a doorbell dword
512  *
513  * @adev: amdgpu_device pointer
514  * @index: doorbell index
515  * @v: value to write
516  *
517  * Writes @v to the doorbell aperture at the
518  * requested doorbell index (CIK).
519  */
520 void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v)
521 {
522         if (adev->in_pci_err_recovery)
523                 return;
524
525         if (index < adev->doorbell.num_doorbells) {
526                 writel(v, adev->doorbell.ptr + index);
527         } else {
528                 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index);
529         }
530 }
531
532 /**
533  * amdgpu_mm_rdoorbell64 - read a doorbell Qword
534  *
535  * @adev: amdgpu_device pointer
536  * @index: doorbell index
537  *
538  * Returns the value in the doorbell aperture at the
539  * requested doorbell index (VEGA10+).
540  */
541 u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index)
542 {
543         if (adev->in_pci_err_recovery)
544                 return 0;
545
546         if (index < adev->doorbell.num_doorbells) {
547                 return atomic64_read((atomic64_t *)(adev->doorbell.ptr + index));
548         } else {
549                 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index);
550                 return 0;
551         }
552 }
553
554 /**
555  * amdgpu_mm_wdoorbell64 - write a doorbell Qword
556  *
557  * @adev: amdgpu_device pointer
558  * @index: doorbell index
559  * @v: value to write
560  *
561  * Writes @v to the doorbell aperture at the
562  * requested doorbell index (VEGA10+).
563  */
564 void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v)
565 {
566         if (adev->in_pci_err_recovery)
567                 return;
568
569         if (index < adev->doorbell.num_doorbells) {
570                 atomic64_set((atomic64_t *)(adev->doorbell.ptr + index), v);
571         } else {
572                 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index);
573         }
574 }
575
576 /**
577  * amdgpu_device_indirect_rreg - read an indirect register
578  *
579  * @adev: amdgpu_device pointer
580  * @pcie_index: mmio register offset
581  * @pcie_data: mmio register offset
582  *
583  * Returns the value of indirect register @reg_addr
584  */
585 u32 amdgpu_device_indirect_rreg(struct amdgpu_device *adev,
586                                 u32 pcie_index, u32 pcie_data,
587                                 u32 reg_addr)
588 {
589         unsigned long flags;
590         u32 r;
591         void __iomem *pcie_index_offset;
592         void __iomem *pcie_data_offset;
593
594         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
595         pcie_index_offset = (void __iomem *)adev->rmmio + pcie_index * 4;
596         pcie_data_offset = (void __iomem *)adev->rmmio + pcie_data * 4;
597
598         writel(reg_addr, pcie_index_offset);
599         readl(pcie_index_offset);
600         r = readl(pcie_data_offset);
601         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
602
603         return r;
604 }
605
606 /**
607  * amdgpu_device_indirect_rreg64 - read a 64bits indirect register
608  *
609  * @adev: amdgpu_device pointer
610  * @pcie_index: mmio register offset
611  * @pcie_data: mmio register offset
612  *
613  * Returns the value of indirect register @reg_addr
614  */
615 u64 amdgpu_device_indirect_rreg64(struct amdgpu_device *adev,
616                                   u32 pcie_index, u32 pcie_data,
617                                   u32 reg_addr)
618 {
619         unsigned long flags;
620         u64 r;
621         void __iomem *pcie_index_offset;
622         void __iomem *pcie_data_offset;
623
624         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
625         pcie_index_offset = (void __iomem *)adev->rmmio + pcie_index * 4;
626         pcie_data_offset = (void __iomem *)adev->rmmio + pcie_data * 4;
627
628         /* read low 32 bits */
629         writel(reg_addr, pcie_index_offset);
630         readl(pcie_index_offset);
631         r = readl(pcie_data_offset);
632         /* read high 32 bits */
633         writel(reg_addr + 4, pcie_index_offset);
634         readl(pcie_index_offset);
635         r |= ((u64)readl(pcie_data_offset) << 32);
636         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
637
638         return r;
639 }
640
641 /**
642  * amdgpu_device_indirect_wreg - write an indirect register address
643  *
644  * @adev: amdgpu_device pointer
645  * @pcie_index: mmio register offset
646  * @pcie_data: mmio register offset
647  * @reg_addr: indirect register offset
648  * @reg_data: indirect register data
649  *
650  */
651 void amdgpu_device_indirect_wreg(struct amdgpu_device *adev,
652                                  u32 pcie_index, u32 pcie_data,
653                                  u32 reg_addr, u32 reg_data)
654 {
655         unsigned long flags;
656         void __iomem *pcie_index_offset;
657         void __iomem *pcie_data_offset;
658
659         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
660         pcie_index_offset = (void __iomem *)adev->rmmio + pcie_index * 4;
661         pcie_data_offset = (void __iomem *)adev->rmmio + pcie_data * 4;
662
663         writel(reg_addr, pcie_index_offset);
664         readl(pcie_index_offset);
665         writel(reg_data, pcie_data_offset);
666         readl(pcie_data_offset);
667         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
668 }
669
670 /**
671  * amdgpu_device_indirect_wreg64 - write a 64bits indirect register address
672  *
673  * @adev: amdgpu_device pointer
674  * @pcie_index: mmio register offset
675  * @pcie_data: mmio register offset
676  * @reg_addr: indirect register offset
677  * @reg_data: indirect register data
678  *
679  */
680 void amdgpu_device_indirect_wreg64(struct amdgpu_device *adev,
681                                    u32 pcie_index, u32 pcie_data,
682                                    u32 reg_addr, u64 reg_data)
683 {
684         unsigned long flags;
685         void __iomem *pcie_index_offset;
686         void __iomem *pcie_data_offset;
687
688         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
689         pcie_index_offset = (void __iomem *)adev->rmmio + pcie_index * 4;
690         pcie_data_offset = (void __iomem *)adev->rmmio + pcie_data * 4;
691
692         /* write low 32 bits */
693         writel(reg_addr, pcie_index_offset);
694         readl(pcie_index_offset);
695         writel((u32)(reg_data & 0xffffffffULL), pcie_data_offset);
696         readl(pcie_data_offset);
697         /* write high 32 bits */
698         writel(reg_addr + 4, pcie_index_offset);
699         readl(pcie_index_offset);
700         writel((u32)(reg_data >> 32), pcie_data_offset);
701         readl(pcie_data_offset);
702         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
703 }
704
705 /**
706  * amdgpu_invalid_rreg - dummy reg read function
707  *
708  * @adev: amdgpu device pointer
709  * @reg: offset of register
710  *
711  * Dummy register read function.  Used for register blocks
712  * that certain asics don't have (all asics).
713  * Returns the value in the register.
714  */
715 static uint32_t amdgpu_invalid_rreg(struct amdgpu_device *adev, uint32_t reg)
716 {
717         DRM_ERROR("Invalid callback to read register 0x%04X\n", reg);
718         BUG();
719         return 0;
720 }
721
722 /**
723  * amdgpu_invalid_wreg - dummy reg write function
724  *
725  * @adev: amdgpu device pointer
726  * @reg: offset of register
727  * @v: value to write to the register
728  *
729  * Dummy register read function.  Used for register blocks
730  * that certain asics don't have (all asics).
731  */
732 static void amdgpu_invalid_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v)
733 {
734         DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n",
735                   reg, v);
736         BUG();
737 }
738
739 /**
740  * amdgpu_invalid_rreg64 - dummy 64 bit reg read function
741  *
742  * @adev: amdgpu device pointer
743  * @reg: offset of register
744  *
745  * Dummy register read function.  Used for register blocks
746  * that certain asics don't have (all asics).
747  * Returns the value in the register.
748  */
749 static uint64_t amdgpu_invalid_rreg64(struct amdgpu_device *adev, uint32_t reg)
750 {
751         DRM_ERROR("Invalid callback to read 64 bit register 0x%04X\n", reg);
752         BUG();
753         return 0;
754 }
755
756 /**
757  * amdgpu_invalid_wreg64 - dummy reg write function
758  *
759  * @adev: amdgpu device pointer
760  * @reg: offset of register
761  * @v: value to write to the register
762  *
763  * Dummy register read function.  Used for register blocks
764  * that certain asics don't have (all asics).
765  */
766 static void amdgpu_invalid_wreg64(struct amdgpu_device *adev, uint32_t reg, uint64_t v)
767 {
768         DRM_ERROR("Invalid callback to write 64 bit register 0x%04X with 0x%08llX\n",
769                   reg, v);
770         BUG();
771 }
772
773 /**
774  * amdgpu_block_invalid_rreg - dummy reg read function
775  *
776  * @adev: amdgpu device pointer
777  * @block: offset of instance
778  * @reg: offset of register
779  *
780  * Dummy register read function.  Used for register blocks
781  * that certain asics don't have (all asics).
782  * Returns the value in the register.
783  */
784 static uint32_t amdgpu_block_invalid_rreg(struct amdgpu_device *adev,
785                                           uint32_t block, uint32_t reg)
786 {
787         DRM_ERROR("Invalid callback to read register 0x%04X in block 0x%04X\n",
788                   reg, block);
789         BUG();
790         return 0;
791 }
792
793 /**
794  * amdgpu_block_invalid_wreg - dummy reg write function
795  *
796  * @adev: amdgpu device pointer
797  * @block: offset of instance
798  * @reg: offset of register
799  * @v: value to write to the register
800  *
801  * Dummy register read function.  Used for register blocks
802  * that certain asics don't have (all asics).
803  */
804 static void amdgpu_block_invalid_wreg(struct amdgpu_device *adev,
805                                       uint32_t block,
806                                       uint32_t reg, uint32_t v)
807 {
808         DRM_ERROR("Invalid block callback to write register 0x%04X in block 0x%04X with 0x%08X\n",
809                   reg, block, v);
810         BUG();
811 }
812
813 /**
814  * amdgpu_device_asic_init - Wrapper for atom asic_init
815  *
816  * @dev: drm_device pointer
817  *
818  * Does any asic specific work and then calls atom asic init.
819  */
820 static int amdgpu_device_asic_init(struct amdgpu_device *adev)
821 {
822         amdgpu_asic_pre_asic_init(adev);
823
824         return amdgpu_atom_asic_init(adev->mode_info.atom_context);
825 }
826
827 /**
828  * amdgpu_device_vram_scratch_init - allocate the VRAM scratch page
829  *
830  * @adev: amdgpu device pointer
831  *
832  * Allocates a scratch page of VRAM for use by various things in the
833  * driver.
834  */
835 static int amdgpu_device_vram_scratch_init(struct amdgpu_device *adev)
836 {
837         return amdgpu_bo_create_kernel(adev, AMDGPU_GPU_PAGE_SIZE,
838                                        PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
839                                        &adev->vram_scratch.robj,
840                                        &adev->vram_scratch.gpu_addr,
841                                        (void **)&adev->vram_scratch.ptr);
842 }
843
844 /**
845  * amdgpu_device_vram_scratch_fini - Free the VRAM scratch page
846  *
847  * @adev: amdgpu device pointer
848  *
849  * Frees the VRAM scratch page.
850  */
851 static void amdgpu_device_vram_scratch_fini(struct amdgpu_device *adev)
852 {
853         amdgpu_bo_free_kernel(&adev->vram_scratch.robj, NULL, NULL);
854 }
855
856 /**
857  * amdgpu_device_program_register_sequence - program an array of registers.
858  *
859  * @adev: amdgpu_device pointer
860  * @registers: pointer to the register array
861  * @array_size: size of the register array
862  *
863  * Programs an array or registers with and and or masks.
864  * This is a helper for setting golden registers.
865  */
866 void amdgpu_device_program_register_sequence(struct amdgpu_device *adev,
867                                              const u32 *registers,
868                                              const u32 array_size)
869 {
870         u32 tmp, reg, and_mask, or_mask;
871         int i;
872
873         if (array_size % 3)
874                 return;
875
876         for (i = 0; i < array_size; i +=3) {
877                 reg = registers[i + 0];
878                 and_mask = registers[i + 1];
879                 or_mask = registers[i + 2];
880
881                 if (and_mask == 0xffffffff) {
882                         tmp = or_mask;
883                 } else {
884                         tmp = RREG32(reg);
885                         tmp &= ~and_mask;
886                         if (adev->family >= AMDGPU_FAMILY_AI)
887                                 tmp |= (or_mask & and_mask);
888                         else
889                                 tmp |= or_mask;
890                 }
891                 WREG32(reg, tmp);
892         }
893 }
894
895 /**
896  * amdgpu_device_pci_config_reset - reset the GPU
897  *
898  * @adev: amdgpu_device pointer
899  *
900  * Resets the GPU using the pci config reset sequence.
901  * Only applicable to asics prior to vega10.
902  */
903 void amdgpu_device_pci_config_reset(struct amdgpu_device *adev)
904 {
905         pci_write_config_dword(adev->pdev, 0x7c, AMDGPU_ASIC_RESET_DATA);
906 }
907
908 /*
909  * GPU doorbell aperture helpers function.
910  */
911 /**
912  * amdgpu_device_doorbell_init - Init doorbell driver information.
913  *
914  * @adev: amdgpu_device pointer
915  *
916  * Init doorbell driver information (CIK)
917  * Returns 0 on success, error on failure.
918  */
919 static int amdgpu_device_doorbell_init(struct amdgpu_device *adev)
920 {
921
922         /* No doorbell on SI hardware generation */
923         if (adev->asic_type < CHIP_BONAIRE) {
924                 adev->doorbell.base = 0;
925                 adev->doorbell.size = 0;
926                 adev->doorbell.num_doorbells = 0;
927                 adev->doorbell.ptr = NULL;
928                 return 0;
929         }
930
931         if (pci_resource_flags(adev->pdev, 2) & IORESOURCE_UNSET)
932                 return -EINVAL;
933
934         amdgpu_asic_init_doorbell_index(adev);
935
936         /* doorbell bar mapping */
937         adev->doorbell.base = pci_resource_start(adev->pdev, 2);
938         adev->doorbell.size = pci_resource_len(adev->pdev, 2);
939
940         adev->doorbell.num_doorbells = min_t(u32, adev->doorbell.size / sizeof(u32),
941                                              adev->doorbell_index.max_assignment+1);
942         if (adev->doorbell.num_doorbells == 0)
943                 return -EINVAL;
944
945         /* For Vega, reserve and map two pages on doorbell BAR since SDMA
946          * paging queue doorbell use the second page. The
947          * AMDGPU_DOORBELL64_MAX_ASSIGNMENT definition assumes all the
948          * doorbells are in the first page. So with paging queue enabled,
949          * the max num_doorbells should + 1 page (0x400 in dword)
950          */
951         if (adev->asic_type >= CHIP_VEGA10)
952                 adev->doorbell.num_doorbells += 0x400;
953
954         adev->doorbell.ptr = ioremap(adev->doorbell.base,
955                                      adev->doorbell.num_doorbells *
956                                      sizeof(u32));
957         if (adev->doorbell.ptr == NULL)
958                 return -ENOMEM;
959
960         return 0;
961 }
962
963 /**
964  * amdgpu_device_doorbell_fini - Tear down doorbell driver information.
965  *
966  * @adev: amdgpu_device pointer
967  *
968  * Tear down doorbell driver information (CIK)
969  */
970 static void amdgpu_device_doorbell_fini(struct amdgpu_device *adev)
971 {
972         iounmap(adev->doorbell.ptr);
973         adev->doorbell.ptr = NULL;
974 }
975
976
977
978 /*
979  * amdgpu_device_wb_*()
980  * Writeback is the method by which the GPU updates special pages in memory
981  * with the status of certain GPU events (fences, ring pointers,etc.).
982  */
983
984 /**
985  * amdgpu_device_wb_fini - Disable Writeback and free memory
986  *
987  * @adev: amdgpu_device pointer
988  *
989  * Disables Writeback and frees the Writeback memory (all asics).
990  * Used at driver shutdown.
991  */
992 static void amdgpu_device_wb_fini(struct amdgpu_device *adev)
993 {
994         if (adev->wb.wb_obj) {
995                 amdgpu_bo_free_kernel(&adev->wb.wb_obj,
996                                       &adev->wb.gpu_addr,
997                                       (void **)&adev->wb.wb);
998                 adev->wb.wb_obj = NULL;
999         }
1000 }
1001
1002 /**
1003  * amdgpu_device_wb_init- Init Writeback driver info and allocate memory
1004  *
1005  * @adev: amdgpu_device pointer
1006  *
1007  * Initializes writeback and allocates writeback memory (all asics).
1008  * Used at driver startup.
1009  * Returns 0 on success or an -error on failure.
1010  */
1011 static int amdgpu_device_wb_init(struct amdgpu_device *adev)
1012 {
1013         int r;
1014
1015         if (adev->wb.wb_obj == NULL) {
1016                 /* AMDGPU_MAX_WB * sizeof(uint32_t) * 8 = AMDGPU_MAX_WB 256bit slots */
1017                 r = amdgpu_bo_create_kernel(adev, AMDGPU_MAX_WB * sizeof(uint32_t) * 8,
1018                                             PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
1019                                             &adev->wb.wb_obj, &adev->wb.gpu_addr,
1020                                             (void **)&adev->wb.wb);
1021                 if (r) {
1022                         dev_warn(adev->dev, "(%d) create WB bo failed\n", r);
1023                         return r;
1024                 }
1025
1026                 adev->wb.num_wb = AMDGPU_MAX_WB;
1027                 memset(&adev->wb.used, 0, sizeof(adev->wb.used));
1028
1029                 /* clear wb memory */
1030                 memset((char *)adev->wb.wb, 0, AMDGPU_MAX_WB * sizeof(uint32_t) * 8);
1031         }
1032
1033         return 0;
1034 }
1035
1036 /**
1037  * amdgpu_device_wb_get - Allocate a wb entry
1038  *
1039  * @adev: amdgpu_device pointer
1040  * @wb: wb index
1041  *
1042  * Allocate a wb slot for use by the driver (all asics).
1043  * Returns 0 on success or -EINVAL on failure.
1044  */
1045 int amdgpu_device_wb_get(struct amdgpu_device *adev, u32 *wb)
1046 {
1047         unsigned long offset = find_first_zero_bit(adev->wb.used, adev->wb.num_wb);
1048
1049         if (offset < adev->wb.num_wb) {
1050                 __set_bit(offset, adev->wb.used);
1051                 *wb = offset << 3; /* convert to dw offset */
1052                 return 0;
1053         } else {
1054                 return -EINVAL;
1055         }
1056 }
1057
1058 /**
1059  * amdgpu_device_wb_free - Free a wb entry
1060  *
1061  * @adev: amdgpu_device pointer
1062  * @wb: wb index
1063  *
1064  * Free a wb slot allocated for use by the driver (all asics)
1065  */
1066 void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb)
1067 {
1068         wb >>= 3;
1069         if (wb < adev->wb.num_wb)
1070                 __clear_bit(wb, adev->wb.used);
1071 }
1072
1073 /**
1074  * amdgpu_device_resize_fb_bar - try to resize FB BAR
1075  *
1076  * @adev: amdgpu_device pointer
1077  *
1078  * Try to resize FB BAR to make all VRAM CPU accessible. We try very hard not
1079  * to fail, but if any of the BARs is not accessible after the size we abort
1080  * driver loading by returning -ENODEV.
1081  */
1082 int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev)
1083 {
1084         u64 space_needed = roundup_pow_of_two(adev->gmc.real_vram_size);
1085         u32 rbar_size = order_base_2(((space_needed >> 20) | 1)) - 1;
1086         struct pci_bus *root;
1087         struct resource *res;
1088         unsigned i;
1089         u16 cmd;
1090         int r;
1091
1092         /* Bypass for VF */
1093         if (amdgpu_sriov_vf(adev))
1094                 return 0;
1095
1096         /* skip if the bios has already enabled large BAR */
1097         if (adev->gmc.real_vram_size &&
1098             (pci_resource_len(adev->pdev, 0) >= adev->gmc.real_vram_size))
1099                 return 0;
1100
1101         /* Check if the root BUS has 64bit memory resources */
1102         root = adev->pdev->bus;
1103         while (root->parent)
1104                 root = root->parent;
1105
1106         pci_bus_for_each_resource(root, res, i) {
1107                 if (res && res->flags & (IORESOURCE_MEM | IORESOURCE_MEM_64) &&
1108                     res->start > 0x100000000ull)
1109                         break;
1110         }
1111
1112         /* Trying to resize is pointless without a root hub window above 4GB */
1113         if (!res)
1114                 return 0;
1115
1116         /* Disable memory decoding while we change the BAR addresses and size */
1117         pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd);
1118         pci_write_config_word(adev->pdev, PCI_COMMAND,
1119                               cmd & ~PCI_COMMAND_MEMORY);
1120
1121         /* Free the VRAM and doorbell BAR, we most likely need to move both. */
1122         amdgpu_device_doorbell_fini(adev);
1123         if (adev->asic_type >= CHIP_BONAIRE)
1124                 pci_release_resource(adev->pdev, 2);
1125
1126         pci_release_resource(adev->pdev, 0);
1127
1128         r = pci_resize_resource(adev->pdev, 0, rbar_size);
1129         if (r == -ENOSPC)
1130                 DRM_INFO("Not enough PCI address space for a large BAR.");
1131         else if (r && r != -ENOTSUPP)
1132                 DRM_ERROR("Problem resizing BAR0 (%d).", r);
1133
1134         pci_assign_unassigned_bus_resources(adev->pdev->bus);
1135
1136         /* When the doorbell or fb BAR isn't available we have no chance of
1137          * using the device.
1138          */
1139         r = amdgpu_device_doorbell_init(adev);
1140         if (r || (pci_resource_flags(adev->pdev, 0) & IORESOURCE_UNSET))
1141                 return -ENODEV;
1142
1143         pci_write_config_word(adev->pdev, PCI_COMMAND, cmd);
1144
1145         return 0;
1146 }
1147
1148 /*
1149  * GPU helpers function.
1150  */
1151 /**
1152  * amdgpu_device_need_post - check if the hw need post or not
1153  *
1154  * @adev: amdgpu_device pointer
1155  *
1156  * Check if the asic has been initialized (all asics) at driver startup
1157  * or post is needed if  hw reset is performed.
1158  * Returns true if need or false if not.
1159  */
1160 bool amdgpu_device_need_post(struct amdgpu_device *adev)
1161 {
1162         uint32_t reg;
1163
1164         if (amdgpu_sriov_vf(adev))
1165                 return false;
1166
1167         if (amdgpu_passthrough(adev)) {
1168                 /* for FIJI: In whole GPU pass-through virtualization case, after VM reboot
1169                  * some old smc fw still need driver do vPost otherwise gpu hang, while
1170                  * those smc fw version above 22.15 doesn't have this flaw, so we force
1171                  * vpost executed for smc version below 22.15
1172                  */
1173                 if (adev->asic_type == CHIP_FIJI) {
1174                         int err;
1175                         uint32_t fw_ver;
1176                         err = request_firmware(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev);
1177                         /* force vPost if error occured */
1178                         if (err)
1179                                 return true;
1180
1181                         fw_ver = *((uint32_t *)adev->pm.fw->data + 69);
1182                         if (fw_ver < 0x00160e00)
1183                                 return true;
1184                 }
1185         }
1186
1187         if (adev->has_hw_reset) {
1188                 adev->has_hw_reset = false;
1189                 return true;
1190         }
1191
1192         /* bios scratch used on CIK+ */
1193         if (adev->asic_type >= CHIP_BONAIRE)
1194                 return amdgpu_atombios_scratch_need_asic_init(adev);
1195
1196         /* check MEM_SIZE for older asics */
1197         reg = amdgpu_asic_get_config_memsize(adev);
1198
1199         if ((reg != 0) && (reg != 0xffffffff))
1200                 return false;
1201
1202         return true;
1203 }
1204
1205 /* if we get transitioned to only one device, take VGA back */
1206 /**
1207  * amdgpu_device_vga_set_decode - enable/disable vga decode
1208  *
1209  * @cookie: amdgpu_device pointer
1210  * @state: enable/disable vga decode
1211  *
1212  * Enable/disable vga decode (all asics).
1213  * Returns VGA resource flags.
1214  */
1215 static unsigned int amdgpu_device_vga_set_decode(void *cookie, bool state)
1216 {
1217         struct amdgpu_device *adev = cookie;
1218         amdgpu_asic_set_vga_state(adev, state);
1219         if (state)
1220                 return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
1221                        VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
1222         else
1223                 return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
1224 }
1225
1226 /**
1227  * amdgpu_device_check_block_size - validate the vm block size
1228  *
1229  * @adev: amdgpu_device pointer
1230  *
1231  * Validates the vm block size specified via module parameter.
1232  * The vm block size defines number of bits in page table versus page directory,
1233  * a page is 4KB so we have 12 bits offset, minimum 9 bits in the
1234  * page table and the remaining bits are in the page directory.
1235  */
1236 static void amdgpu_device_check_block_size(struct amdgpu_device *adev)
1237 {
1238         /* defines number of bits in page table versus page directory,
1239          * a page is 4KB so we have 12 bits offset, minimum 9 bits in the
1240          * page table and the remaining bits are in the page directory */
1241         if (amdgpu_vm_block_size == -1)
1242                 return;
1243
1244         if (amdgpu_vm_block_size < 9) {
1245                 dev_warn(adev->dev, "VM page table size (%d) too small\n",
1246                          amdgpu_vm_block_size);
1247                 amdgpu_vm_block_size = -1;
1248         }
1249 }
1250
1251 /**
1252  * amdgpu_device_check_vm_size - validate the vm size
1253  *
1254  * @adev: amdgpu_device pointer
1255  *
1256  * Validates the vm size in GB specified via module parameter.
1257  * The VM size is the size of the GPU virtual memory space in GB.
1258  */
1259 static void amdgpu_device_check_vm_size(struct amdgpu_device *adev)
1260 {
1261         /* no need to check the default value */
1262         if (amdgpu_vm_size == -1)
1263                 return;
1264
1265         if (amdgpu_vm_size < 1) {
1266                 dev_warn(adev->dev, "VM size (%d) too small, min is 1GB\n",
1267                          amdgpu_vm_size);
1268                 amdgpu_vm_size = -1;
1269         }
1270 }
1271
1272 static void amdgpu_device_check_smu_prv_buffer_size(struct amdgpu_device *adev)
1273 {
1274         struct sysinfo si;
1275         bool is_os_64 = (sizeof(void *) == 8);
1276         uint64_t total_memory;
1277         uint64_t dram_size_seven_GB = 0x1B8000000;
1278         uint64_t dram_size_three_GB = 0xB8000000;
1279
1280         if (amdgpu_smu_memory_pool_size == 0)
1281                 return;
1282
1283         if (!is_os_64) {
1284                 DRM_WARN("Not 64-bit OS, feature not supported\n");
1285                 goto def_value;
1286         }
1287         si_meminfo(&si);
1288         total_memory = (uint64_t)si.totalram * si.mem_unit;
1289
1290         if ((amdgpu_smu_memory_pool_size == 1) ||
1291                 (amdgpu_smu_memory_pool_size == 2)) {
1292                 if (total_memory < dram_size_three_GB)
1293                         goto def_value1;
1294         } else if ((amdgpu_smu_memory_pool_size == 4) ||
1295                 (amdgpu_smu_memory_pool_size == 8)) {
1296                 if (total_memory < dram_size_seven_GB)
1297                         goto def_value1;
1298         } else {
1299                 DRM_WARN("Smu memory pool size not supported\n");
1300                 goto def_value;
1301         }
1302         adev->pm.smu_prv_buffer_size = amdgpu_smu_memory_pool_size << 28;
1303
1304         return;
1305
1306 def_value1:
1307         DRM_WARN("No enough system memory\n");
1308 def_value:
1309         adev->pm.smu_prv_buffer_size = 0;
1310 }
1311
1312 /**
1313  * amdgpu_device_check_arguments - validate module params
1314  *
1315  * @adev: amdgpu_device pointer
1316  *
1317  * Validates certain module parameters and updates
1318  * the associated values used by the driver (all asics).
1319  */
1320 static int amdgpu_device_check_arguments(struct amdgpu_device *adev)
1321 {
1322         if (amdgpu_sched_jobs < 4) {
1323                 dev_warn(adev->dev, "sched jobs (%d) must be at least 4\n",
1324                          amdgpu_sched_jobs);
1325                 amdgpu_sched_jobs = 4;
1326         } else if (!is_power_of_2(amdgpu_sched_jobs)){
1327                 dev_warn(adev->dev, "sched jobs (%d) must be a power of 2\n",
1328                          amdgpu_sched_jobs);
1329                 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
1330         }
1331
1332         if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
1333                 /* gart size must be greater or equal to 32M */
1334                 dev_warn(adev->dev, "gart size (%d) too small\n",
1335                          amdgpu_gart_size);
1336                 amdgpu_gart_size = -1;
1337         }
1338
1339         if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
1340                 /* gtt size must be greater or equal to 32M */
1341                 dev_warn(adev->dev, "gtt size (%d) too small\n",
1342                                  amdgpu_gtt_size);
1343                 amdgpu_gtt_size = -1;
1344         }
1345
1346         /* valid range is between 4 and 9 inclusive */
1347         if (amdgpu_vm_fragment_size != -1 &&
1348             (amdgpu_vm_fragment_size > 9 || amdgpu_vm_fragment_size < 4)) {
1349                 dev_warn(adev->dev, "valid range is between 4 and 9\n");
1350                 amdgpu_vm_fragment_size = -1;
1351         }
1352
1353         if (amdgpu_sched_hw_submission < 2) {
1354                 dev_warn(adev->dev, "sched hw submission jobs (%d) must be at least 2\n",
1355                          amdgpu_sched_hw_submission);
1356                 amdgpu_sched_hw_submission = 2;
1357         } else if (!is_power_of_2(amdgpu_sched_hw_submission)) {
1358                 dev_warn(adev->dev, "sched hw submission jobs (%d) must be a power of 2\n",
1359                          amdgpu_sched_hw_submission);
1360                 amdgpu_sched_hw_submission = roundup_pow_of_two(amdgpu_sched_hw_submission);
1361         }
1362
1363         amdgpu_device_check_smu_prv_buffer_size(adev);
1364
1365         amdgpu_device_check_vm_size(adev);
1366
1367         amdgpu_device_check_block_size(adev);
1368
1369         adev->firmware.load_type = amdgpu_ucode_get_load_type(adev, amdgpu_fw_load_type);
1370
1371         amdgpu_gmc_tmz_set(adev);
1372
1373         if (amdgpu_num_kcq == -1) {
1374                 amdgpu_num_kcq = 8;
1375         } else if (amdgpu_num_kcq > 8 || amdgpu_num_kcq < 0) {
1376                 amdgpu_num_kcq = 8;
1377                 dev_warn(adev->dev, "set kernel compute queue number to 8 due to invalid parameter provided by user\n");
1378         }
1379
1380         amdgpu_gmc_noretry_set(adev);
1381
1382         return 0;
1383 }
1384
1385 /**
1386  * amdgpu_switcheroo_set_state - set switcheroo state
1387  *
1388  * @pdev: pci dev pointer
1389  * @state: vga_switcheroo state
1390  *
1391  * Callback for the switcheroo driver.  Suspends or resumes the
1392  * the asics before or after it is powered up using ACPI methods.
1393  */
1394 static void amdgpu_switcheroo_set_state(struct pci_dev *pdev,
1395                                         enum vga_switcheroo_state state)
1396 {
1397         struct drm_device *dev = pci_get_drvdata(pdev);
1398         int r;
1399
1400         if (amdgpu_device_supports_boco(dev) && state == VGA_SWITCHEROO_OFF)
1401                 return;
1402
1403         if (state == VGA_SWITCHEROO_ON) {
1404                 pr_info("switched on\n");
1405                 /* don't suspend or resume card normally */
1406                 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
1407
1408                 pci_set_power_state(dev->pdev, PCI_D0);
1409                 amdgpu_device_load_pci_state(dev->pdev);
1410                 r = pci_enable_device(dev->pdev);
1411                 if (r)
1412                         DRM_WARN("pci_enable_device failed (%d)\n", r);
1413                 amdgpu_device_resume(dev, true);
1414
1415                 dev->switch_power_state = DRM_SWITCH_POWER_ON;
1416                 drm_kms_helper_poll_enable(dev);
1417         } else {
1418                 pr_info("switched off\n");
1419                 drm_kms_helper_poll_disable(dev);
1420                 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
1421                 amdgpu_device_suspend(dev, true);
1422                 amdgpu_device_cache_pci_state(dev->pdev);
1423                 /* Shut down the device */
1424                 pci_disable_device(dev->pdev);
1425                 pci_set_power_state(dev->pdev, PCI_D3cold);
1426                 dev->switch_power_state = DRM_SWITCH_POWER_OFF;
1427         }
1428 }
1429
1430 /**
1431  * amdgpu_switcheroo_can_switch - see if switcheroo state can change
1432  *
1433  * @pdev: pci dev pointer
1434  *
1435  * Callback for the switcheroo driver.  Check of the switcheroo
1436  * state can be changed.
1437  * Returns true if the state can be changed, false if not.
1438  */
1439 static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
1440 {
1441         struct drm_device *dev = pci_get_drvdata(pdev);
1442
1443         /*
1444         * FIXME: open_count is protected by drm_global_mutex but that would lead to
1445         * locking inversion with the driver load path. And the access here is
1446         * completely racy anyway. So don't bother with locking for now.
1447         */
1448         return atomic_read(&dev->open_count) == 0;
1449 }
1450
1451 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
1452         .set_gpu_state = amdgpu_switcheroo_set_state,
1453         .reprobe = NULL,
1454         .can_switch = amdgpu_switcheroo_can_switch,
1455 };
1456
1457 /**
1458  * amdgpu_device_ip_set_clockgating_state - set the CG state
1459  *
1460  * @dev: amdgpu_device pointer
1461  * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
1462  * @state: clockgating state (gate or ungate)
1463  *
1464  * Sets the requested clockgating state for all instances of
1465  * the hardware IP specified.
1466  * Returns the error code from the last instance.
1467  */
1468 int amdgpu_device_ip_set_clockgating_state(void *dev,
1469                                            enum amd_ip_block_type block_type,
1470                                            enum amd_clockgating_state state)
1471 {
1472         struct amdgpu_device *adev = dev;
1473         int i, r = 0;
1474
1475         for (i = 0; i < adev->num_ip_blocks; i++) {
1476                 if (!adev->ip_blocks[i].status.valid)
1477                         continue;
1478                 if (adev->ip_blocks[i].version->type != block_type)
1479                         continue;
1480                 if (!adev->ip_blocks[i].version->funcs->set_clockgating_state)
1481                         continue;
1482                 r = adev->ip_blocks[i].version->funcs->set_clockgating_state(
1483                         (void *)adev, state);
1484                 if (r)
1485                         DRM_ERROR("set_clockgating_state of IP block <%s> failed %d\n",
1486                                   adev->ip_blocks[i].version->funcs->name, r);
1487         }
1488         return r;
1489 }
1490
1491 /**
1492  * amdgpu_device_ip_set_powergating_state - set the PG state
1493  *
1494  * @dev: amdgpu_device pointer
1495  * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
1496  * @state: powergating state (gate or ungate)
1497  *
1498  * Sets the requested powergating state for all instances of
1499  * the hardware IP specified.
1500  * Returns the error code from the last instance.
1501  */
1502 int amdgpu_device_ip_set_powergating_state(void *dev,
1503                                            enum amd_ip_block_type block_type,
1504                                            enum amd_powergating_state state)
1505 {
1506         struct amdgpu_device *adev = dev;
1507         int i, r = 0;
1508
1509         for (i = 0; i < adev->num_ip_blocks; i++) {
1510                 if (!adev->ip_blocks[i].status.valid)
1511                         continue;
1512                 if (adev->ip_blocks[i].version->type != block_type)
1513                         continue;
1514                 if (!adev->ip_blocks[i].version->funcs->set_powergating_state)
1515                         continue;
1516                 r = adev->ip_blocks[i].version->funcs->set_powergating_state(
1517                         (void *)adev, state);
1518                 if (r)
1519                         DRM_ERROR("set_powergating_state of IP block <%s> failed %d\n",
1520                                   adev->ip_blocks[i].version->funcs->name, r);
1521         }
1522         return r;
1523 }
1524
1525 /**
1526  * amdgpu_device_ip_get_clockgating_state - get the CG state
1527  *
1528  * @adev: amdgpu_device pointer
1529  * @flags: clockgating feature flags
1530  *
1531  * Walks the list of IPs on the device and updates the clockgating
1532  * flags for each IP.
1533  * Updates @flags with the feature flags for each hardware IP where
1534  * clockgating is enabled.
1535  */
1536 void amdgpu_device_ip_get_clockgating_state(struct amdgpu_device *adev,
1537                                             u32 *flags)
1538 {
1539         int i;
1540
1541         for (i = 0; i < adev->num_ip_blocks; i++) {
1542                 if (!adev->ip_blocks[i].status.valid)
1543                         continue;
1544                 if (adev->ip_blocks[i].version->funcs->get_clockgating_state)
1545                         adev->ip_blocks[i].version->funcs->get_clockgating_state((void *)adev, flags);
1546         }
1547 }
1548
1549 /**
1550  * amdgpu_device_ip_wait_for_idle - wait for idle
1551  *
1552  * @adev: amdgpu_device pointer
1553  * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
1554  *
1555  * Waits for the request hardware IP to be idle.
1556  * Returns 0 for success or a negative error code on failure.
1557  */
1558 int amdgpu_device_ip_wait_for_idle(struct amdgpu_device *adev,
1559                                    enum amd_ip_block_type block_type)
1560 {
1561         int i, r;
1562
1563         for (i = 0; i < adev->num_ip_blocks; i++) {
1564                 if (!adev->ip_blocks[i].status.valid)
1565                         continue;
1566                 if (adev->ip_blocks[i].version->type == block_type) {
1567                         r = adev->ip_blocks[i].version->funcs->wait_for_idle((void *)adev);
1568                         if (r)
1569                                 return r;
1570                         break;
1571                 }
1572         }
1573         return 0;
1574
1575 }
1576
1577 /**
1578  * amdgpu_device_ip_is_idle - is the hardware IP idle
1579  *
1580  * @adev: amdgpu_device pointer
1581  * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
1582  *
1583  * Check if the hardware IP is idle or not.
1584  * Returns true if it the IP is idle, false if not.
1585  */
1586 bool amdgpu_device_ip_is_idle(struct amdgpu_device *adev,
1587                               enum amd_ip_block_type block_type)
1588 {
1589         int i;
1590
1591         for (i = 0; i < adev->num_ip_blocks; i++) {
1592                 if (!adev->ip_blocks[i].status.valid)
1593                         continue;
1594                 if (adev->ip_blocks[i].version->type == block_type)
1595                         return adev->ip_blocks[i].version->funcs->is_idle((void *)adev);
1596         }
1597         return true;
1598
1599 }
1600
1601 /**
1602  * amdgpu_device_ip_get_ip_block - get a hw IP pointer
1603  *
1604  * @adev: amdgpu_device pointer
1605  * @type: Type of hardware IP (SMU, GFX, UVD, etc.)
1606  *
1607  * Returns a pointer to the hardware IP block structure
1608  * if it exists for the asic, otherwise NULL.
1609  */
1610 struct amdgpu_ip_block *
1611 amdgpu_device_ip_get_ip_block(struct amdgpu_device *adev,
1612                               enum amd_ip_block_type type)
1613 {
1614         int i;
1615
1616         for (i = 0; i < adev->num_ip_blocks; i++)
1617                 if (adev->ip_blocks[i].version->type == type)
1618                         return &adev->ip_blocks[i];
1619
1620         return NULL;
1621 }
1622
1623 /**
1624  * amdgpu_device_ip_block_version_cmp
1625  *
1626  * @adev: amdgpu_device pointer
1627  * @type: enum amd_ip_block_type
1628  * @major: major version
1629  * @minor: minor version
1630  *
1631  * return 0 if equal or greater
1632  * return 1 if smaller or the ip_block doesn't exist
1633  */
1634 int amdgpu_device_ip_block_version_cmp(struct amdgpu_device *adev,
1635                                        enum amd_ip_block_type type,
1636                                        u32 major, u32 minor)
1637 {
1638         struct amdgpu_ip_block *ip_block = amdgpu_device_ip_get_ip_block(adev, type);
1639
1640         if (ip_block && ((ip_block->version->major > major) ||
1641                         ((ip_block->version->major == major) &&
1642                         (ip_block->version->minor >= minor))))
1643                 return 0;
1644
1645         return 1;
1646 }
1647
1648 /**
1649  * amdgpu_device_ip_block_add
1650  *
1651  * @adev: amdgpu_device pointer
1652  * @ip_block_version: pointer to the IP to add
1653  *
1654  * Adds the IP block driver information to the collection of IPs
1655  * on the asic.
1656  */
1657 int amdgpu_device_ip_block_add(struct amdgpu_device *adev,
1658                                const struct amdgpu_ip_block_version *ip_block_version)
1659 {
1660         if (!ip_block_version)
1661                 return -EINVAL;
1662
1663         DRM_INFO("add ip block number %d <%s>\n", adev->num_ip_blocks,
1664                   ip_block_version->funcs->name);
1665
1666         adev->ip_blocks[adev->num_ip_blocks++].version = ip_block_version;
1667
1668         return 0;
1669 }
1670
1671 /**
1672  * amdgpu_device_enable_virtual_display - enable virtual display feature
1673  *
1674  * @adev: amdgpu_device pointer
1675  *
1676  * Enabled the virtual display feature if the user has enabled it via
1677  * the module parameter virtual_display.  This feature provides a virtual
1678  * display hardware on headless boards or in virtualized environments.
1679  * This function parses and validates the configuration string specified by
1680  * the user and configues the virtual display configuration (number of
1681  * virtual connectors, crtcs, etc.) specified.
1682  */
1683 static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev)
1684 {
1685         adev->enable_virtual_display = false;
1686
1687         if (amdgpu_virtual_display) {
1688                 struct drm_device *ddev = adev_to_drm(adev);
1689                 const char *pci_address_name = pci_name(ddev->pdev);
1690                 char *pciaddstr, *pciaddstr_tmp, *pciaddname_tmp, *pciaddname;
1691
1692                 pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL);
1693                 pciaddstr_tmp = pciaddstr;
1694                 while ((pciaddname_tmp = strsep(&pciaddstr_tmp, ";"))) {
1695                         pciaddname = strsep(&pciaddname_tmp, ",");
1696                         if (!strcmp("all", pciaddname)
1697                             || !strcmp(pci_address_name, pciaddname)) {
1698                                 long num_crtc;
1699                                 int res = -1;
1700
1701                                 adev->enable_virtual_display = true;
1702
1703                                 if (pciaddname_tmp)
1704                                         res = kstrtol(pciaddname_tmp, 10,
1705                                                       &num_crtc);
1706
1707                                 if (!res) {
1708                                         if (num_crtc < 1)
1709                                                 num_crtc = 1;
1710                                         if (num_crtc > 6)
1711                                                 num_crtc = 6;
1712                                         adev->mode_info.num_crtc = num_crtc;
1713                                 } else {
1714                                         adev->mode_info.num_crtc = 1;
1715                                 }
1716                                 break;
1717                         }
1718                 }
1719
1720                 DRM_INFO("virtual display string:%s, %s:virtual_display:%d, num_crtc:%d\n",
1721                          amdgpu_virtual_display, pci_address_name,
1722                          adev->enable_virtual_display, adev->mode_info.num_crtc);
1723
1724                 kfree(pciaddstr);
1725         }
1726 }
1727
1728 /**
1729  * amdgpu_device_parse_gpu_info_fw - parse gpu info firmware
1730  *
1731  * @adev: amdgpu_device pointer
1732  *
1733  * Parses the asic configuration parameters specified in the gpu info
1734  * firmware and makes them availale to the driver for use in configuring
1735  * the asic.
1736  * Returns 0 on success, -EINVAL on failure.
1737  */
1738 static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
1739 {
1740         const char *chip_name;
1741         char fw_name[40];
1742         int err;
1743         const struct gpu_info_firmware_header_v1_0 *hdr;
1744
1745         adev->firmware.gpu_info_fw = NULL;
1746
1747         if (adev->mman.discovery_bin) {
1748                 amdgpu_discovery_get_gfx_info(adev);
1749
1750                 /*
1751                  * FIXME: The bounding box is still needed by Navi12, so
1752                  * temporarily read it from gpu_info firmware. Should be droped
1753                  * when DAL no longer needs it.
1754                  */
1755                 if (adev->asic_type != CHIP_NAVI12)
1756                         return 0;
1757         }
1758
1759         switch (adev->asic_type) {
1760 #ifdef CONFIG_DRM_AMDGPU_SI
1761         case CHIP_VERDE:
1762         case CHIP_TAHITI:
1763         case CHIP_PITCAIRN:
1764         case CHIP_OLAND:
1765         case CHIP_HAINAN:
1766 #endif
1767 #ifdef CONFIG_DRM_AMDGPU_CIK
1768         case CHIP_BONAIRE:
1769         case CHIP_HAWAII:
1770         case CHIP_KAVERI:
1771         case CHIP_KABINI:
1772         case CHIP_MULLINS:
1773 #endif
1774         case CHIP_TOPAZ:
1775         case CHIP_TONGA:
1776         case CHIP_FIJI:
1777         case CHIP_POLARIS10:
1778         case CHIP_POLARIS11:
1779         case CHIP_POLARIS12:
1780         case CHIP_VEGAM:
1781         case CHIP_CARRIZO:
1782         case CHIP_STONEY:
1783         case CHIP_VEGA20:
1784         case CHIP_SIENNA_CICHLID:
1785         case CHIP_NAVY_FLOUNDER:
1786         default:
1787                 return 0;
1788         case CHIP_VEGA10:
1789                 chip_name = "vega10";
1790                 break;
1791         case CHIP_VEGA12:
1792                 chip_name = "vega12";
1793                 break;
1794         case CHIP_RAVEN:
1795                 if (adev->apu_flags & AMD_APU_IS_RAVEN2)
1796                         chip_name = "raven2";
1797                 else if (adev->apu_flags & AMD_APU_IS_PICASSO)
1798                         chip_name = "picasso";
1799                 else
1800                         chip_name = "raven";
1801                 break;
1802         case CHIP_ARCTURUS:
1803                 chip_name = "arcturus";
1804                 break;
1805         case CHIP_RENOIR:
1806                 chip_name = "renoir";
1807                 break;
1808         case CHIP_NAVI10:
1809                 chip_name = "navi10";
1810                 break;
1811         case CHIP_NAVI14:
1812                 chip_name = "navi14";
1813                 break;
1814         case CHIP_NAVI12:
1815                 chip_name = "navi12";
1816                 break;
1817         }
1818
1819         snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name);
1820         err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev);
1821         if (err) {
1822                 dev_err(adev->dev,
1823                         "Failed to load gpu_info firmware \"%s\"\n",
1824                         fw_name);
1825                 goto out;
1826         }
1827         err = amdgpu_ucode_validate(adev->firmware.gpu_info_fw);
1828         if (err) {
1829                 dev_err(adev->dev,
1830                         "Failed to validate gpu_info firmware \"%s\"\n",
1831                         fw_name);
1832                 goto out;
1833         }
1834
1835         hdr = (const struct gpu_info_firmware_header_v1_0 *)adev->firmware.gpu_info_fw->data;
1836         amdgpu_ucode_print_gpu_info_hdr(&hdr->header);
1837
1838         switch (hdr->version_major) {
1839         case 1:
1840         {
1841                 const struct gpu_info_firmware_v1_0 *gpu_info_fw =
1842                         (const struct gpu_info_firmware_v1_0 *)(adev->firmware.gpu_info_fw->data +
1843                                                                 le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1844
1845                 /*
1846                  * Should be droped when DAL no longer needs it.
1847                  */
1848                 if (adev->asic_type == CHIP_NAVI12)
1849                         goto parse_soc_bounding_box;
1850
1851                 adev->gfx.config.max_shader_engines = le32_to_cpu(gpu_info_fw->gc_num_se);
1852                 adev->gfx.config.max_cu_per_sh = le32_to_cpu(gpu_info_fw->gc_num_cu_per_sh);
1853                 adev->gfx.config.max_sh_per_se = le32_to_cpu(gpu_info_fw->gc_num_sh_per_se);
1854                 adev->gfx.config.max_backends_per_se = le32_to_cpu(gpu_info_fw->gc_num_rb_per_se);
1855                 adev->gfx.config.max_texture_channel_caches =
1856                         le32_to_cpu(gpu_info_fw->gc_num_tccs);
1857                 adev->gfx.config.max_gprs = le32_to_cpu(gpu_info_fw->gc_num_gprs);
1858                 adev->gfx.config.max_gs_threads = le32_to_cpu(gpu_info_fw->gc_num_max_gs_thds);
1859                 adev->gfx.config.gs_vgt_table_depth = le32_to_cpu(gpu_info_fw->gc_gs_table_depth);
1860                 adev->gfx.config.gs_prim_buffer_depth = le32_to_cpu(gpu_info_fw->gc_gsprim_buff_depth);
1861                 adev->gfx.config.double_offchip_lds_buf =
1862                         le32_to_cpu(gpu_info_fw->gc_double_offchip_lds_buffer);
1863                 adev->gfx.cu_info.wave_front_size = le32_to_cpu(gpu_info_fw->gc_wave_size);
1864                 adev->gfx.cu_info.max_waves_per_simd =
1865                         le32_to_cpu(gpu_info_fw->gc_max_waves_per_simd);
1866                 adev->gfx.cu_info.max_scratch_slots_per_cu =
1867                         le32_to_cpu(gpu_info_fw->gc_max_scratch_slots_per_cu);
1868                 adev->gfx.cu_info.lds_size = le32_to_cpu(gpu_info_fw->gc_lds_size);
1869                 if (hdr->version_minor >= 1) {
1870                         const struct gpu_info_firmware_v1_1 *gpu_info_fw =
1871                                 (const struct gpu_info_firmware_v1_1 *)(adev->firmware.gpu_info_fw->data +
1872                                                                         le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1873                         adev->gfx.config.num_sc_per_sh =
1874                                 le32_to_cpu(gpu_info_fw->num_sc_per_sh);
1875                         adev->gfx.config.num_packer_per_sc =
1876                                 le32_to_cpu(gpu_info_fw->num_packer_per_sc);
1877                 }
1878
1879 parse_soc_bounding_box:
1880                 /*
1881                  * soc bounding box info is not integrated in disocovery table,
1882                  * we always need to parse it from gpu info firmware if needed.
1883                  */
1884                 if (hdr->version_minor == 2) {
1885                         const struct gpu_info_firmware_v1_2 *gpu_info_fw =
1886                                 (const struct gpu_info_firmware_v1_2 *)(adev->firmware.gpu_info_fw->data +
1887                                                                         le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1888                         adev->dm.soc_bounding_box = &gpu_info_fw->soc_bounding_box;
1889                 }
1890                 break;
1891         }
1892         default:
1893                 dev_err(adev->dev,
1894                         "Unsupported gpu_info table %d\n", hdr->header.ucode_version);
1895                 err = -EINVAL;
1896                 goto out;
1897         }
1898 out:
1899         return err;
1900 }
1901
1902 /**
1903  * amdgpu_device_ip_early_init - run early init for hardware IPs
1904  *
1905  * @adev: amdgpu_device pointer
1906  *
1907  * Early initialization pass for hardware IPs.  The hardware IPs that make
1908  * up each asic are discovered each IP's early_init callback is run.  This
1909  * is the first stage in initializing the asic.
1910  * Returns 0 on success, negative error code on failure.
1911  */
1912 static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
1913 {
1914         int i, r;
1915
1916         amdgpu_device_enable_virtual_display(adev);
1917
1918         if (amdgpu_sriov_vf(adev)) {
1919                 r = amdgpu_virt_request_full_gpu(adev, true);
1920                 if (r)
1921                         return r;
1922         }
1923
1924         switch (adev->asic_type) {
1925 #ifdef CONFIG_DRM_AMDGPU_SI
1926         case CHIP_VERDE:
1927         case CHIP_TAHITI:
1928         case CHIP_PITCAIRN:
1929         case CHIP_OLAND:
1930         case CHIP_HAINAN:
1931                 adev->family = AMDGPU_FAMILY_SI;
1932                 r = si_set_ip_blocks(adev);
1933                 if (r)
1934                         return r;
1935                 break;
1936 #endif
1937 #ifdef CONFIG_DRM_AMDGPU_CIK
1938         case CHIP_BONAIRE:
1939         case CHIP_HAWAII:
1940         case CHIP_KAVERI:
1941         case CHIP_KABINI:
1942         case CHIP_MULLINS:
1943                 if (adev->flags & AMD_IS_APU)
1944                         adev->family = AMDGPU_FAMILY_KV;
1945                 else
1946                         adev->family = AMDGPU_FAMILY_CI;
1947
1948                 r = cik_set_ip_blocks(adev);
1949                 if (r)
1950                         return r;
1951                 break;
1952 #endif
1953         case CHIP_TOPAZ:
1954         case CHIP_TONGA:
1955         case CHIP_FIJI:
1956         case CHIP_POLARIS10:
1957         case CHIP_POLARIS11:
1958         case CHIP_POLARIS12:
1959         case CHIP_VEGAM:
1960         case CHIP_CARRIZO:
1961         case CHIP_STONEY:
1962                 if (adev->flags & AMD_IS_APU)
1963                         adev->family = AMDGPU_FAMILY_CZ;
1964                 else
1965                         adev->family = AMDGPU_FAMILY_VI;
1966
1967                 r = vi_set_ip_blocks(adev);
1968                 if (r)
1969                         return r;
1970                 break;
1971         case CHIP_VEGA10:
1972         case CHIP_VEGA12:
1973         case CHIP_VEGA20:
1974         case CHIP_RAVEN:
1975         case CHIP_ARCTURUS:
1976         case CHIP_RENOIR:
1977                 if (adev->flags & AMD_IS_APU)
1978                         adev->family = AMDGPU_FAMILY_RV;
1979                 else
1980                         adev->family = AMDGPU_FAMILY_AI;
1981
1982                 r = soc15_set_ip_blocks(adev);
1983                 if (r)
1984                         return r;
1985                 break;
1986         case  CHIP_NAVI10:
1987         case  CHIP_NAVI14:
1988         case  CHIP_NAVI12:
1989         case  CHIP_SIENNA_CICHLID:
1990         case  CHIP_NAVY_FLOUNDER:
1991                 adev->family = AMDGPU_FAMILY_NV;
1992
1993                 r = nv_set_ip_blocks(adev);
1994                 if (r)
1995                         return r;
1996                 break;
1997         default:
1998                 /* FIXME: not supported yet */
1999                 return -EINVAL;
2000         }
2001
2002         amdgpu_amdkfd_device_probe(adev);
2003
2004         adev->pm.pp_feature = amdgpu_pp_feature_mask;
2005         if (amdgpu_sriov_vf(adev) || sched_policy == KFD_SCHED_POLICY_NO_HWS)
2006                 adev->pm.pp_feature &= ~PP_GFXOFF_MASK;
2007
2008         for (i = 0; i < adev->num_ip_blocks; i++) {
2009                 if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
2010                         DRM_ERROR("disabled ip block: %d <%s>\n",
2011                                   i, adev->ip_blocks[i].version->funcs->name);
2012                         adev->ip_blocks[i].status.valid = false;
2013                 } else {
2014                         if (adev->ip_blocks[i].version->funcs->early_init) {
2015                                 r = adev->ip_blocks[i].version->funcs->early_init((void *)adev);
2016                                 if (r == -ENOENT) {
2017                                         adev->ip_blocks[i].status.valid = false;
2018                                 } else if (r) {
2019                                         DRM_ERROR("early_init of IP block <%s> failed %d\n",
2020                                                   adev->ip_blocks[i].version->funcs->name, r);
2021                                         return r;
2022                                 } else {
2023                                         adev->ip_blocks[i].status.valid = true;
2024                                 }
2025                         } else {
2026                                 adev->ip_blocks[i].status.valid = true;
2027                         }
2028                 }
2029                 /* get the vbios after the asic_funcs are set up */
2030                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) {
2031                         r = amdgpu_device_parse_gpu_info_fw(adev);
2032                         if (r)
2033                                 return r;
2034
2035                         /* Read BIOS */
2036                         if (!amdgpu_get_bios(adev))
2037                                 return -EINVAL;
2038
2039                         r = amdgpu_atombios_init(adev);
2040                         if (r) {
2041                                 dev_err(adev->dev, "amdgpu_atombios_init failed\n");
2042                                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_INIT_FAIL, 0, 0);
2043                                 return r;
2044                         }
2045                 }
2046         }
2047
2048         adev->cg_flags &= amdgpu_cg_mask;
2049         adev->pg_flags &= amdgpu_pg_mask;
2050
2051         return 0;
2052 }
2053
2054 static int amdgpu_device_ip_hw_init_phase1(struct amdgpu_device *adev)
2055 {
2056         int i, r;
2057
2058         for (i = 0; i < adev->num_ip_blocks; i++) {
2059                 if (!adev->ip_blocks[i].status.sw)
2060                         continue;
2061                 if (adev->ip_blocks[i].status.hw)
2062                         continue;
2063                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
2064                     (amdgpu_sriov_vf(adev) && (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)) ||
2065                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH) {
2066                         r = adev->ip_blocks[i].version->funcs->hw_init(adev);
2067                         if (r) {
2068                                 DRM_ERROR("hw_init of IP block <%s> failed %d\n",
2069                                           adev->ip_blocks[i].version->funcs->name, r);
2070                                 return r;
2071                         }
2072                         adev->ip_blocks[i].status.hw = true;
2073                 }
2074         }
2075
2076         return 0;
2077 }
2078
2079 static int amdgpu_device_ip_hw_init_phase2(struct amdgpu_device *adev)
2080 {
2081         int i, r;
2082
2083         for (i = 0; i < adev->num_ip_blocks; i++) {
2084                 if (!adev->ip_blocks[i].status.sw)
2085                         continue;
2086                 if (adev->ip_blocks[i].status.hw)
2087                         continue;
2088                 r = adev->ip_blocks[i].version->funcs->hw_init(adev);
2089                 if (r) {
2090                         DRM_ERROR("hw_init of IP block <%s> failed %d\n",
2091                                   adev->ip_blocks[i].version->funcs->name, r);
2092                         return r;
2093                 }
2094                 adev->ip_blocks[i].status.hw = true;
2095         }
2096
2097         return 0;
2098 }
2099
2100 static int amdgpu_device_fw_loading(struct amdgpu_device *adev)
2101 {
2102         int r = 0;
2103         int i;
2104         uint32_t smu_version;
2105
2106         if (adev->asic_type >= CHIP_VEGA10) {
2107                 for (i = 0; i < adev->num_ip_blocks; i++) {
2108                         if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_PSP)
2109                                 continue;
2110
2111                         /* no need to do the fw loading again if already done*/
2112                         if (adev->ip_blocks[i].status.hw == true)
2113                                 break;
2114
2115                         if (amdgpu_in_reset(adev) || adev->in_suspend) {
2116                                 r = adev->ip_blocks[i].version->funcs->resume(adev);
2117                                 if (r) {
2118                                         DRM_ERROR("resume of IP block <%s> failed %d\n",
2119                                                           adev->ip_blocks[i].version->funcs->name, r);
2120                                         return r;
2121                                 }
2122                         } else {
2123                                 r = adev->ip_blocks[i].version->funcs->hw_init(adev);
2124                                 if (r) {
2125                                         DRM_ERROR("hw_init of IP block <%s> failed %d\n",
2126                                                           adev->ip_blocks[i].version->funcs->name, r);
2127                                         return r;
2128                                 }
2129                         }
2130
2131                         adev->ip_blocks[i].status.hw = true;
2132                         break;
2133                 }
2134         }
2135
2136         if (!amdgpu_sriov_vf(adev) || adev->asic_type == CHIP_TONGA)
2137                 r = amdgpu_pm_load_smu_firmware(adev, &smu_version);
2138
2139         return r;
2140 }
2141
2142 /**
2143  * amdgpu_device_ip_init - run init for hardware IPs
2144  *
2145  * @adev: amdgpu_device pointer
2146  *
2147  * Main initialization pass for hardware IPs.  The list of all the hardware
2148  * IPs that make up the asic is walked and the sw_init and hw_init callbacks
2149  * are run.  sw_init initializes the software state associated with each IP
2150  * and hw_init initializes the hardware associated with each IP.
2151  * Returns 0 on success, negative error code on failure.
2152  */
2153 static int amdgpu_device_ip_init(struct amdgpu_device *adev)
2154 {
2155         int i, r;
2156
2157         r = amdgpu_ras_init(adev);
2158         if (r)
2159                 return r;
2160
2161         for (i = 0; i < adev->num_ip_blocks; i++) {
2162                 if (!adev->ip_blocks[i].status.valid)
2163                         continue;
2164                 r = adev->ip_blocks[i].version->funcs->sw_init((void *)adev);
2165                 if (r) {
2166                         DRM_ERROR("sw_init of IP block <%s> failed %d\n",
2167                                   adev->ip_blocks[i].version->funcs->name, r);
2168                         goto init_failed;
2169                 }
2170                 adev->ip_blocks[i].status.sw = true;
2171
2172                 /* need to do gmc hw init early so we can allocate gpu mem */
2173                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
2174                         r = amdgpu_device_vram_scratch_init(adev);
2175                         if (r) {
2176                                 DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r);
2177                                 goto init_failed;
2178                         }
2179                         r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev);
2180                         if (r) {
2181                                 DRM_ERROR("hw_init %d failed %d\n", i, r);
2182                                 goto init_failed;
2183                         }
2184                         r = amdgpu_device_wb_init(adev);
2185                         if (r) {
2186                                 DRM_ERROR("amdgpu_device_wb_init failed %d\n", r);
2187                                 goto init_failed;
2188                         }
2189                         adev->ip_blocks[i].status.hw = true;
2190
2191                         /* right after GMC hw init, we create CSA */
2192                         if (amdgpu_mcbp || amdgpu_sriov_vf(adev)) {
2193                                 r = amdgpu_allocate_static_csa(adev, &adev->virt.csa_obj,
2194                                                                 AMDGPU_GEM_DOMAIN_VRAM,
2195                                                                 AMDGPU_CSA_SIZE);
2196                                 if (r) {
2197                                         DRM_ERROR("allocate CSA failed %d\n", r);
2198                                         goto init_failed;
2199                                 }
2200                         }
2201                 }
2202         }
2203
2204         if (amdgpu_sriov_vf(adev))
2205                 amdgpu_virt_init_data_exchange(adev);
2206
2207         r = amdgpu_ib_pool_init(adev);
2208         if (r) {
2209                 dev_err(adev->dev, "IB initialization failed (%d).\n", r);
2210                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r);
2211                 goto init_failed;
2212         }
2213
2214         r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/
2215         if (r)
2216                 goto init_failed;
2217
2218         r = amdgpu_device_ip_hw_init_phase1(adev);
2219         if (r)
2220                 goto init_failed;
2221
2222         r = amdgpu_device_fw_loading(adev);
2223         if (r)
2224                 goto init_failed;
2225
2226         r = amdgpu_device_ip_hw_init_phase2(adev);
2227         if (r)
2228                 goto init_failed;
2229
2230         /*
2231          * retired pages will be loaded from eeprom and reserved here,
2232          * it should be called after amdgpu_device_ip_hw_init_phase2  since
2233          * for some ASICs the RAS EEPROM code relies on SMU fully functioning
2234          * for I2C communication which only true at this point.
2235          *
2236          * amdgpu_ras_recovery_init may fail, but the upper only cares the
2237          * failure from bad gpu situation and stop amdgpu init process
2238          * accordingly. For other failed cases, it will still release all
2239          * the resource and print error message, rather than returning one
2240          * negative value to upper level.
2241          *
2242          * Note: theoretically, this should be called before all vram allocations
2243          * to protect retired page from abusing
2244          */
2245         r = amdgpu_ras_recovery_init(adev);
2246         if (r)
2247                 goto init_failed;
2248
2249         if (adev->gmc.xgmi.num_physical_nodes > 1)
2250                 amdgpu_xgmi_add_device(adev);
2251         amdgpu_amdkfd_device_init(adev);
2252
2253         amdgpu_fru_get_product_info(adev);
2254
2255 init_failed:
2256         if (amdgpu_sriov_vf(adev))
2257                 amdgpu_virt_release_full_gpu(adev, true);
2258
2259         return r;
2260 }
2261
2262 /**
2263  * amdgpu_device_fill_reset_magic - writes reset magic to gart pointer
2264  *
2265  * @adev: amdgpu_device pointer
2266  *
2267  * Writes a reset magic value to the gart pointer in VRAM.  The driver calls
2268  * this function before a GPU reset.  If the value is retained after a
2269  * GPU reset, VRAM has not been lost.  Some GPU resets may destry VRAM contents.
2270  */
2271 static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev)
2272 {
2273         memcpy(adev->reset_magic, adev->gart.ptr, AMDGPU_RESET_MAGIC_NUM);
2274 }
2275
2276 /**
2277  * amdgpu_device_check_vram_lost - check if vram is valid
2278  *
2279  * @adev: amdgpu_device pointer
2280  *
2281  * Checks the reset magic value written to the gart pointer in VRAM.
2282  * The driver calls this after a GPU reset to see if the contents of
2283  * VRAM is lost or now.
2284  * returns true if vram is lost, false if not.
2285  */
2286 static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
2287 {
2288         if (memcmp(adev->gart.ptr, adev->reset_magic,
2289                         AMDGPU_RESET_MAGIC_NUM))
2290                 return true;
2291
2292         if (!amdgpu_in_reset(adev))
2293                 return false;
2294
2295         /*
2296          * For all ASICs with baco/mode1 reset, the VRAM is
2297          * always assumed to be lost.
2298          */
2299         switch (amdgpu_asic_reset_method(adev)) {
2300         case AMD_RESET_METHOD_BACO:
2301         case AMD_RESET_METHOD_MODE1:
2302                 return true;
2303         default:
2304                 return false;
2305         }
2306 }
2307
2308 /**
2309  * amdgpu_device_set_cg_state - set clockgating for amdgpu device
2310  *
2311  * @adev: amdgpu_device pointer
2312  * @state: clockgating state (gate or ungate)
2313  *
2314  * The list of all the hardware IPs that make up the asic is walked and the
2315  * set_clockgating_state callbacks are run.
2316  * Late initialization pass enabling clockgating for hardware IPs.
2317  * Fini or suspend, pass disabling clockgating for hardware IPs.
2318  * Returns 0 on success, negative error code on failure.
2319  */
2320
2321 static int amdgpu_device_set_cg_state(struct amdgpu_device *adev,
2322                                                 enum amd_clockgating_state state)
2323 {
2324         int i, j, r;
2325
2326         if (amdgpu_emu_mode == 1)
2327                 return 0;
2328
2329         for (j = 0; j < adev->num_ip_blocks; j++) {
2330                 i = state == AMD_CG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
2331                 if (!adev->ip_blocks[i].status.late_initialized)
2332                         continue;
2333                 /* skip CG for VCE/UVD, it's handled specially */
2334                 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
2335                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
2336                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&
2337                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&
2338                     adev->ip_blocks[i].version->funcs->set_clockgating_state) {
2339                         /* enable clockgating to save power */
2340                         r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev,
2341                                                                                      state);
2342                         if (r) {
2343                                 DRM_ERROR("set_clockgating_state(gate) of IP block <%s> failed %d\n",
2344                                           adev->ip_blocks[i].version->funcs->name, r);
2345                                 return r;
2346                         }
2347                 }
2348         }
2349
2350         return 0;
2351 }
2352
2353 static int amdgpu_device_set_pg_state(struct amdgpu_device *adev, enum amd_powergating_state state)
2354 {
2355         int i, j, r;
2356
2357         if (amdgpu_emu_mode == 1)
2358                 return 0;
2359
2360         for (j = 0; j < adev->num_ip_blocks; j++) {
2361                 i = state == AMD_PG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
2362                 if (!adev->ip_blocks[i].status.late_initialized)
2363                         continue;
2364                 /* skip CG for VCE/UVD, it's handled specially */
2365                 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
2366                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
2367                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&
2368                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&
2369                     adev->ip_blocks[i].version->funcs->set_powergating_state) {
2370                         /* enable powergating to save power */
2371                         r = adev->ip_blocks[i].version->funcs->set_powergating_state((void *)adev,
2372                                                                                         state);
2373                         if (r) {
2374                                 DRM_ERROR("set_powergating_state(gate) of IP block <%s> failed %d\n",
2375                                           adev->ip_blocks[i].version->funcs->name, r);
2376                                 return r;
2377                         }
2378                 }
2379         }
2380         return 0;
2381 }
2382
2383 static int amdgpu_device_enable_mgpu_fan_boost(void)
2384 {
2385         struct amdgpu_gpu_instance *gpu_ins;
2386         struct amdgpu_device *adev;
2387         int i, ret = 0;
2388
2389         mutex_lock(&mgpu_info.mutex);
2390
2391         /*
2392          * MGPU fan boost feature should be enabled
2393          * only when there are two or more dGPUs in
2394          * the system
2395          */
2396         if (mgpu_info.num_dgpu < 2)
2397                 goto out;
2398
2399         for (i = 0; i < mgpu_info.num_dgpu; i++) {
2400                 gpu_ins = &(mgpu_info.gpu_ins[i]);
2401                 adev = gpu_ins->adev;
2402                 if (!(adev->flags & AMD_IS_APU) &&
2403                     !gpu_ins->mgpu_fan_enabled) {
2404                         ret = amdgpu_dpm_enable_mgpu_fan_boost(adev);
2405                         if (ret)
2406                                 break;
2407
2408                         gpu_ins->mgpu_fan_enabled = 1;
2409                 }
2410         }
2411
2412 out:
2413         mutex_unlock(&mgpu_info.mutex);
2414
2415         return ret;
2416 }
2417
2418 /**
2419  * amdgpu_device_ip_late_init - run late init for hardware IPs
2420  *
2421  * @adev: amdgpu_device pointer
2422  *
2423  * Late initialization pass for hardware IPs.  The list of all the hardware
2424  * IPs that make up the asic is walked and the late_init callbacks are run.
2425  * late_init covers any special initialization that an IP requires
2426  * after all of the have been initialized or something that needs to happen
2427  * late in the init process.
2428  * Returns 0 on success, negative error code on failure.
2429  */
2430 static int amdgpu_device_ip_late_init(struct amdgpu_device *adev)
2431 {
2432         struct amdgpu_gpu_instance *gpu_instance;
2433         int i = 0, r;
2434
2435         for (i = 0; i < adev->num_ip_blocks; i++) {
2436                 if (!adev->ip_blocks[i].status.hw)
2437                         continue;
2438                 if (adev->ip_blocks[i].version->funcs->late_init) {
2439                         r = adev->ip_blocks[i].version->funcs->late_init((void *)adev);
2440                         if (r) {
2441                                 DRM_ERROR("late_init of IP block <%s> failed %d\n",
2442                                           adev->ip_blocks[i].version->funcs->name, r);
2443                                 return r;
2444                         }
2445                 }
2446                 adev->ip_blocks[i].status.late_initialized = true;
2447         }
2448
2449         amdgpu_ras_set_error_query_ready(adev, true);
2450
2451         amdgpu_device_set_cg_state(adev, AMD_CG_STATE_GATE);
2452         amdgpu_device_set_pg_state(adev, AMD_PG_STATE_GATE);
2453
2454         amdgpu_device_fill_reset_magic(adev);
2455
2456         r = amdgpu_device_enable_mgpu_fan_boost();
2457         if (r)
2458                 DRM_ERROR("enable mgpu fan boost failed (%d).\n", r);
2459
2460
2461         if (adev->gmc.xgmi.num_physical_nodes > 1) {
2462                 mutex_lock(&mgpu_info.mutex);
2463
2464                 /*
2465                  * Reset device p-state to low as this was booted with high.
2466                  *
2467                  * This should be performed only after all devices from the same
2468                  * hive get initialized.
2469                  *
2470                  * However, it's unknown how many device in the hive in advance.
2471                  * As this is counted one by one during devices initializations.
2472                  *
2473                  * So, we wait for all XGMI interlinked devices initialized.
2474                  * This may bring some delays as those devices may come from
2475                  * different hives. But that should be OK.
2476                  */
2477                 if (mgpu_info.num_dgpu == adev->gmc.xgmi.num_physical_nodes) {
2478                         for (i = 0; i < mgpu_info.num_gpu; i++) {
2479                                 gpu_instance = &(mgpu_info.gpu_ins[i]);
2480                                 if (gpu_instance->adev->flags & AMD_IS_APU)
2481                                         continue;
2482
2483                                 r = amdgpu_xgmi_set_pstate(gpu_instance->adev,
2484                                                 AMDGPU_XGMI_PSTATE_MIN);
2485                                 if (r) {
2486                                         DRM_ERROR("pstate setting failed (%d).\n", r);
2487                                         break;
2488                                 }
2489                         }
2490                 }
2491
2492                 mutex_unlock(&mgpu_info.mutex);
2493         }
2494
2495         return 0;
2496 }
2497
2498 /**
2499  * amdgpu_device_ip_fini - run fini for hardware IPs
2500  *
2501  * @adev: amdgpu_device pointer
2502  *
2503  * Main teardown pass for hardware IPs.  The list of all the hardware
2504  * IPs that make up the asic is walked and the hw_fini and sw_fini callbacks
2505  * are run.  hw_fini tears down the hardware associated with each IP
2506  * and sw_fini tears down any software state associated with each IP.
2507  * Returns 0 on success, negative error code on failure.
2508  */
2509 static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
2510 {
2511         int i, r;
2512
2513         if (amdgpu_sriov_vf(adev) && adev->virt.ras_init_done)
2514                 amdgpu_virt_release_ras_err_handler_data(adev);
2515
2516         amdgpu_ras_pre_fini(adev);
2517
2518         if (adev->gmc.xgmi.num_physical_nodes > 1)
2519                 amdgpu_xgmi_remove_device(adev);
2520
2521         amdgpu_amdkfd_device_fini(adev);
2522
2523         amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2524         amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
2525
2526         /* need to disable SMC first */
2527         for (i = 0; i < adev->num_ip_blocks; i++) {
2528                 if (!adev->ip_blocks[i].status.hw)
2529                         continue;
2530                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
2531                         r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev);
2532                         /* XXX handle errors */
2533                         if (r) {
2534                                 DRM_DEBUG("hw_fini of IP block <%s> failed %d\n",
2535                                           adev->ip_blocks[i].version->funcs->name, r);
2536                         }
2537                         adev->ip_blocks[i].status.hw = false;
2538                         break;
2539                 }
2540         }
2541
2542         for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2543                 if (!adev->ip_blocks[i].status.hw)
2544                         continue;
2545
2546                 r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev);
2547                 /* XXX handle errors */
2548                 if (r) {
2549                         DRM_DEBUG("hw_fini of IP block <%s> failed %d\n",
2550                                   adev->ip_blocks[i].version->funcs->name, r);
2551                 }
2552
2553                 adev->ip_blocks[i].status.hw = false;
2554         }
2555
2556
2557         for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2558                 if (!adev->ip_blocks[i].status.sw)
2559                         continue;
2560
2561                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
2562                         amdgpu_ucode_free_bo(adev);
2563                         amdgpu_free_static_csa(&adev->virt.csa_obj);
2564                         amdgpu_device_wb_fini(adev);
2565                         amdgpu_device_vram_scratch_fini(adev);
2566                         amdgpu_ib_pool_fini(adev);
2567                 }
2568
2569                 r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev);
2570                 /* XXX handle errors */
2571                 if (r) {
2572                         DRM_DEBUG("sw_fini of IP block <%s> failed %d\n",
2573                                   adev->ip_blocks[i].version->funcs->name, r);
2574                 }
2575                 adev->ip_blocks[i].status.sw = false;
2576                 adev->ip_blocks[i].status.valid = false;
2577         }
2578
2579         for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2580                 if (!adev->ip_blocks[i].status.late_initialized)
2581                         continue;
2582                 if (adev->ip_blocks[i].version->funcs->late_fini)
2583                         adev->ip_blocks[i].version->funcs->late_fini((void *)adev);
2584                 adev->ip_blocks[i].status.late_initialized = false;
2585         }
2586
2587         amdgpu_ras_fini(adev);
2588
2589         if (amdgpu_sriov_vf(adev))
2590                 if (amdgpu_virt_release_full_gpu(adev, false))
2591                         DRM_ERROR("failed to release exclusive mode on fini\n");
2592
2593         return 0;
2594 }
2595
2596 /**
2597  * amdgpu_device_delayed_init_work_handler - work handler for IB tests
2598  *
2599  * @work: work_struct.
2600  */
2601 static void amdgpu_device_delayed_init_work_handler(struct work_struct *work)
2602 {
2603         struct amdgpu_device *adev =
2604                 container_of(work, struct amdgpu_device, delayed_init_work.work);
2605         int r;
2606
2607         r = amdgpu_ib_ring_tests(adev);
2608         if (r)
2609                 DRM_ERROR("ib ring test failed (%d).\n", r);
2610 }
2611
2612 static void amdgpu_device_delay_enable_gfx_off(struct work_struct *work)
2613 {
2614         struct amdgpu_device *adev =
2615                 container_of(work, struct amdgpu_device, gfx.gfx_off_delay_work.work);
2616
2617         mutex_lock(&adev->gfx.gfx_off_mutex);
2618         if (!adev->gfx.gfx_off_state && !adev->gfx.gfx_off_req_count) {
2619                 if (!amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GFX, true))
2620                         adev->gfx.gfx_off_state = true;
2621         }
2622         mutex_unlock(&adev->gfx.gfx_off_mutex);
2623 }
2624
2625 /**
2626  * amdgpu_device_ip_suspend_phase1 - run suspend for hardware IPs (phase 1)
2627  *
2628  * @adev: amdgpu_device pointer
2629  *
2630  * Main suspend function for hardware IPs.  The list of all the hardware
2631  * IPs that make up the asic is walked, clockgating is disabled and the
2632  * suspend callbacks are run.  suspend puts the hardware and software state
2633  * in each IP into a state suitable for suspend.
2634  * Returns 0 on success, negative error code on failure.
2635  */
2636 static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev)
2637 {
2638         int i, r;
2639
2640         amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2641         amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
2642
2643         for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2644                 if (!adev->ip_blocks[i].status.valid)
2645                         continue;
2646
2647                 /* displays are handled separately */
2648                 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_DCE)
2649                         continue;
2650
2651                 /* XXX handle errors */
2652                 r = adev->ip_blocks[i].version->funcs->suspend(adev);
2653                 /* XXX handle errors */
2654                 if (r) {
2655                         DRM_ERROR("suspend of IP block <%s> failed %d\n",
2656                                   adev->ip_blocks[i].version->funcs->name, r);
2657                         return r;
2658                 }
2659
2660                 adev->ip_blocks[i].status.hw = false;
2661         }
2662
2663         return 0;
2664 }
2665
2666 /**
2667  * amdgpu_device_ip_suspend_phase2 - run suspend for hardware IPs (phase 2)
2668  *
2669  * @adev: amdgpu_device pointer
2670  *
2671  * Main suspend function for hardware IPs.  The list of all the hardware
2672  * IPs that make up the asic is walked, clockgating is disabled and the
2673  * suspend callbacks are run.  suspend puts the hardware and software state
2674  * in each IP into a state suitable for suspend.
2675  * Returns 0 on success, negative error code on failure.
2676  */
2677 static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev)
2678 {
2679         int i, r;
2680
2681         for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2682                 if (!adev->ip_blocks[i].status.valid)
2683                         continue;
2684                 /* displays are handled in phase1 */
2685                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE)
2686                         continue;
2687                 /* PSP lost connection when err_event_athub occurs */
2688                 if (amdgpu_ras_intr_triggered() &&
2689                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
2690                         adev->ip_blocks[i].status.hw = false;
2691                         continue;
2692                 }
2693                 /* XXX handle errors */
2694                 r = adev->ip_blocks[i].version->funcs->suspend(adev);
2695                 /* XXX handle errors */
2696                 if (r) {
2697                         DRM_ERROR("suspend of IP block <%s> failed %d\n",
2698                                   adev->ip_blocks[i].version->funcs->name, r);
2699                 }
2700                 adev->ip_blocks[i].status.hw = false;
2701                 /* handle putting the SMC in the appropriate state */
2702                 if(!amdgpu_sriov_vf(adev)){
2703                         if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
2704                                 r = amdgpu_dpm_set_mp1_state(adev, adev->mp1_state);
2705                                 if (r) {
2706                                         DRM_ERROR("SMC failed to set mp1 state %d, %d\n",
2707                                                         adev->mp1_state, r);
2708                                         return r;
2709                                 }
2710                         }
2711                 }
2712                 adev->ip_blocks[i].status.hw = false;
2713         }
2714
2715         return 0;
2716 }
2717
2718 /**
2719  * amdgpu_device_ip_suspend - run suspend for hardware IPs
2720  *
2721  * @adev: amdgpu_device pointer
2722  *
2723  * Main suspend function for hardware IPs.  The list of all the hardware
2724  * IPs that make up the asic is walked, clockgating is disabled and the
2725  * suspend callbacks are run.  suspend puts the hardware and software state
2726  * in each IP into a state suitable for suspend.
2727  * Returns 0 on success, negative error code on failure.
2728  */
2729 int amdgpu_device_ip_suspend(struct amdgpu_device *adev)
2730 {
2731         int r;
2732
2733         if (amdgpu_sriov_vf(adev))
2734                 amdgpu_virt_request_full_gpu(adev, false);
2735
2736         r = amdgpu_device_ip_suspend_phase1(adev);
2737         if (r)
2738                 return r;
2739         r = amdgpu_device_ip_suspend_phase2(adev);
2740
2741         if (amdgpu_sriov_vf(adev))
2742                 amdgpu_virt_release_full_gpu(adev, false);
2743
2744         return r;
2745 }
2746
2747 static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)
2748 {
2749         int i, r;
2750
2751         static enum amd_ip_block_type ip_order[] = {
2752                 AMD_IP_BLOCK_TYPE_GMC,
2753                 AMD_IP_BLOCK_TYPE_COMMON,
2754                 AMD_IP_BLOCK_TYPE_PSP,
2755                 AMD_IP_BLOCK_TYPE_IH,
2756         };
2757
2758         for (i = 0; i < ARRAY_SIZE(ip_order); i++) {
2759                 int j;
2760                 struct amdgpu_ip_block *block;
2761
2762                 block = &adev->ip_blocks[i];
2763                 block->status.hw = false;
2764
2765                 for (j = 0; j < ARRAY_SIZE(ip_order); j++) {
2766
2767                         if (block->version->type != ip_order[j] ||
2768                                 !block->status.valid)
2769                                 continue;
2770
2771                         r = block->version->funcs->hw_init(adev);
2772                         DRM_INFO("RE-INIT-early: %s %s\n", block->version->funcs->name, r?"failed":"succeeded");
2773                         if (r)
2774                                 return r;
2775                         block->status.hw = true;
2776                 }
2777         }
2778
2779         return 0;
2780 }
2781
2782 static int amdgpu_device_ip_reinit_late_sriov(struct amdgpu_device *adev)
2783 {
2784         int i, r;
2785
2786         static enum amd_ip_block_type ip_order[] = {
2787                 AMD_IP_BLOCK_TYPE_SMC,
2788                 AMD_IP_BLOCK_TYPE_DCE,
2789                 AMD_IP_BLOCK_TYPE_GFX,
2790                 AMD_IP_BLOCK_TYPE_SDMA,
2791                 AMD_IP_BLOCK_TYPE_UVD,
2792                 AMD_IP_BLOCK_TYPE_VCE,
2793                 AMD_IP_BLOCK_TYPE_VCN
2794         };
2795
2796         for (i = 0; i < ARRAY_SIZE(ip_order); i++) {
2797                 int j;
2798                 struct amdgpu_ip_block *block;
2799
2800                 for (j = 0; j < adev->num_ip_blocks; j++) {
2801                         block = &adev->ip_blocks[j];
2802
2803                         if (block->version->type != ip_order[i] ||
2804                                 !block->status.valid ||
2805                                 block->status.hw)
2806                                 continue;
2807
2808                         if (block->version->type == AMD_IP_BLOCK_TYPE_SMC)
2809                                 r = block->version->funcs->resume(adev);
2810                         else
2811                                 r = block->version->funcs->hw_init(adev);
2812
2813                         DRM_INFO("RE-INIT-late: %s %s\n", block->version->funcs->name, r?"failed":"succeeded");
2814                         if (r)
2815                                 return r;
2816                         block->status.hw = true;
2817                 }
2818         }
2819
2820         return 0;
2821 }
2822
2823 /**
2824  * amdgpu_device_ip_resume_phase1 - run resume for hardware IPs
2825  *
2826  * @adev: amdgpu_device pointer
2827  *
2828  * First resume function for hardware IPs.  The list of all the hardware
2829  * IPs that make up the asic is walked and the resume callbacks are run for
2830  * COMMON, GMC, and IH.  resume puts the hardware into a functional state
2831  * after a suspend and updates the software state as necessary.  This
2832  * function is also used for restoring the GPU after a GPU reset.
2833  * Returns 0 on success, negative error code on failure.
2834  */
2835 static int amdgpu_device_ip_resume_phase1(struct amdgpu_device *adev)
2836 {
2837         int i, r;
2838
2839         for (i = 0; i < adev->num_ip_blocks; i++) {
2840                 if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
2841                         continue;
2842                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
2843                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
2844                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH) {
2845
2846                         r = adev->ip_blocks[i].version->funcs->resume(adev);
2847                         if (r) {
2848                                 DRM_ERROR("resume of IP block <%s> failed %d\n",
2849                                           adev->ip_blocks[i].version->funcs->name, r);
2850                                 return r;
2851                         }
2852                         adev->ip_blocks[i].status.hw = true;
2853                 }
2854         }
2855
2856         return 0;
2857 }
2858
2859 /**
2860  * amdgpu_device_ip_resume_phase2 - run resume for hardware IPs
2861  *
2862  * @adev: amdgpu_device pointer
2863  *
2864  * First resume function for hardware IPs.  The list of all the hardware
2865  * IPs that make up the asic is walked and the resume callbacks are run for
2866  * all blocks except COMMON, GMC, and IH.  resume puts the hardware into a
2867  * functional state after a suspend and updates the software state as
2868  * necessary.  This function is also used for restoring the GPU after a GPU
2869  * reset.
2870  * Returns 0 on success, negative error code on failure.
2871  */
2872 static int amdgpu_device_ip_resume_phase2(struct amdgpu_device *adev)
2873 {
2874         int i, r;
2875
2876         for (i = 0; i < adev->num_ip_blocks; i++) {
2877                 if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
2878                         continue;
2879                 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
2880                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
2881                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
2882                     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)
2883                         continue;
2884                 r = adev->ip_blocks[i].version->funcs->resume(adev);
2885                 if (r) {
2886                         DRM_ERROR("resume of IP block <%s> failed %d\n",
2887                                   adev->ip_blocks[i].version->funcs->name, r);
2888                         return r;
2889                 }
2890                 adev->ip_blocks[i].status.hw = true;
2891         }
2892
2893         return 0;
2894 }
2895
2896 /**
2897  * amdgpu_device_ip_resume - run resume for hardware IPs
2898  *
2899  * @adev: amdgpu_device pointer
2900  *
2901  * Main resume function for hardware IPs.  The hardware IPs
2902  * are split into two resume functions because they are
2903  * are also used in in recovering from a GPU reset and some additional
2904  * steps need to be take between them.  In this case (S3/S4) they are
2905  * run sequentially.
2906  * Returns 0 on success, negative error code on failure.
2907  */
2908 static int amdgpu_device_ip_resume(struct amdgpu_device *adev)
2909 {
2910         int r;
2911
2912         r = amdgpu_device_ip_resume_phase1(adev);
2913         if (r)
2914                 return r;
2915
2916         r = amdgpu_device_fw_loading(adev);
2917         if (r)
2918                 return r;
2919
2920         r = amdgpu_device_ip_resume_phase2(adev);
2921
2922         return r;
2923 }
2924
2925 /**
2926  * amdgpu_device_detect_sriov_bios - determine if the board supports SR-IOV
2927  *
2928  * @adev: amdgpu_device pointer
2929  *
2930  * Query the VBIOS data tables to determine if the board supports SR-IOV.
2931  */
2932 static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev)
2933 {
2934         if (amdgpu_sriov_vf(adev)) {
2935                 if (adev->is_atom_fw) {
2936                         if (amdgpu_atomfirmware_gpu_supports_virtualization(adev))
2937                                 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
2938                 } else {
2939                         if (amdgpu_atombios_has_gpu_virtualization_table(adev))
2940                                 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
2941                 }
2942
2943                 if (!(adev->virt.caps & AMDGPU_SRIOV_CAPS_SRIOV_VBIOS))
2944                         amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_NO_VBIOS, 0, 0);
2945         }
2946 }
2947
2948 /**
2949  * amdgpu_device_asic_has_dc_support - determine if DC supports the asic
2950  *
2951  * @asic_type: AMD asic type
2952  *
2953  * Check if there is DC (new modesetting infrastructre) support for an asic.
2954  * returns true if DC has support, false if not.
2955  */
2956 bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type)
2957 {
2958         switch (asic_type) {
2959 #if defined(CONFIG_DRM_AMD_DC)
2960 #if defined(CONFIG_DRM_AMD_DC_SI)
2961         case CHIP_TAHITI:
2962         case CHIP_PITCAIRN:
2963         case CHIP_VERDE:
2964         case CHIP_OLAND:
2965 #endif
2966         case CHIP_BONAIRE:
2967         case CHIP_KAVERI:
2968         case CHIP_KABINI:
2969         case CHIP_MULLINS:
2970                 /*
2971                  * We have systems in the wild with these ASICs that require
2972                  * LVDS and VGA support which is not supported with DC.
2973                  *
2974                  * Fallback to the non-DC driver here by default so as not to
2975                  * cause regressions.
2976                  */
2977                 return amdgpu_dc > 0;
2978         case CHIP_HAWAII:
2979         case CHIP_CARRIZO:
2980         case CHIP_STONEY:
2981         case CHIP_POLARIS10:
2982         case CHIP_POLARIS11:
2983         case CHIP_POLARIS12:
2984         case CHIP_VEGAM:
2985         case CHIP_TONGA:
2986         case CHIP_FIJI:
2987         case CHIP_VEGA10:
2988         case CHIP_VEGA12:
2989         case CHIP_VEGA20:
2990 #if defined(CONFIG_DRM_AMD_DC_DCN)
2991         case CHIP_RAVEN:
2992         case CHIP_NAVI10:
2993         case CHIP_NAVI14:
2994         case CHIP_NAVI12:
2995         case CHIP_RENOIR:
2996 #endif
2997 #if defined(CONFIG_DRM_AMD_DC_DCN3_0)
2998         case CHIP_SIENNA_CICHLID:
2999         case CHIP_NAVY_FLOUNDER:
3000 #endif
3001                 return amdgpu_dc != 0;
3002 #endif
3003         default:
3004                 if (amdgpu_dc > 0)
3005                         DRM_INFO("Display Core has been requested via kernel parameter "
3006                                          "but isn't supported by ASIC, ignoring\n");
3007                 return false;
3008         }
3009 }
3010
3011 /**
3012  * amdgpu_device_has_dc_support - check if dc is supported
3013  *
3014  * @adev: amdgpu_device_pointer
3015  *
3016  * Returns true for supported, false for not supported
3017  */
3018 bool amdgpu_device_has_dc_support(struct amdgpu_device *adev)
3019 {
3020         if (amdgpu_sriov_vf(adev) || adev->enable_virtual_display)
3021                 return false;
3022
3023         return amdgpu_device_asic_has_dc_support(adev->asic_type);
3024 }
3025
3026
3027 static void amdgpu_device_xgmi_reset_func(struct work_struct *__work)
3028 {
3029         struct amdgpu_device *adev =
3030                 container_of(__work, struct amdgpu_device, xgmi_reset_work);
3031         struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev);
3032
3033         /* It's a bug to not have a hive within this function */
3034         if (WARN_ON(!hive))
3035                 return;
3036
3037         /*
3038          * Use task barrier to synchronize all xgmi reset works across the
3039          * hive. task_barrier_enter and task_barrier_exit will block
3040          * until all the threads running the xgmi reset works reach
3041          * those points. task_barrier_full will do both blocks.
3042          */
3043         if (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
3044
3045                 task_barrier_enter(&hive->tb);
3046                 adev->asic_reset_res = amdgpu_device_baco_enter(adev_to_drm(adev));
3047
3048                 if (adev->asic_reset_res)
3049                         goto fail;
3050
3051                 task_barrier_exit(&hive->tb);
3052                 adev->asic_reset_res = amdgpu_device_baco_exit(adev_to_drm(adev));
3053
3054                 if (adev->asic_reset_res)
3055                         goto fail;
3056
3057                 if (adev->mmhub.funcs && adev->mmhub.funcs->reset_ras_error_count)
3058                         adev->mmhub.funcs->reset_ras_error_count(adev);
3059         } else {
3060
3061                 task_barrier_full(&hive->tb);
3062                 adev->asic_reset_res =  amdgpu_asic_reset(adev);
3063         }
3064
3065 fail:
3066         if (adev->asic_reset_res)
3067                 DRM_WARN("ASIC reset failed with error, %d for drm dev, %s",
3068                          adev->asic_reset_res, adev_to_drm(adev)->unique);
3069         amdgpu_put_xgmi_hive(hive);
3070 }
3071
3072 static int amdgpu_device_get_job_timeout_settings(struct amdgpu_device *adev)
3073 {
3074         char *input = amdgpu_lockup_timeout;
3075         char *timeout_setting = NULL;
3076         int index = 0;
3077         long timeout;
3078         int ret = 0;
3079
3080         /*
3081          * By default timeout for non compute jobs is 10000.
3082          * And there is no timeout enforced on compute jobs.
3083          * In SR-IOV or passthrough mode, timeout for compute
3084          * jobs are 60000 by default.
3085          */
3086         adev->gfx_timeout = msecs_to_jiffies(10000);
3087         adev->sdma_timeout = adev->video_timeout = adev->gfx_timeout;
3088         if (amdgpu_sriov_vf(adev) || amdgpu_passthrough(adev))
3089                 adev->compute_timeout =  msecs_to_jiffies(60000);
3090         else
3091                 adev->compute_timeout = MAX_SCHEDULE_TIMEOUT;
3092
3093         if (strnlen(input, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH)) {
3094                 while ((timeout_setting = strsep(&input, ",")) &&
3095                                 strnlen(timeout_setting, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH)) {
3096                         ret = kstrtol(timeout_setting, 0, &timeout);
3097                         if (ret)
3098                                 return ret;
3099
3100                         if (timeout == 0) {
3101                                 index++;
3102                                 continue;
3103                         } else if (timeout < 0) {
3104                                 timeout = MAX_SCHEDULE_TIMEOUT;
3105                         } else {
3106                                 timeout = msecs_to_jiffies(timeout);
3107                         }
3108
3109                         switch (index++) {
3110                         case 0:
3111                                 adev->gfx_timeout = timeout;
3112                                 break;
3113                         case 1:
3114                                 adev->compute_timeout = timeout;
3115                                 break;
3116                         case 2:
3117                                 adev->sdma_timeout = timeout;
3118                                 break;
3119                         case 3:
3120                                 adev->video_timeout = timeout;
3121                                 break;
3122                         default:
3123                                 break;
3124                         }
3125                 }
3126                 /*
3127                  * There is only one value specified and
3128                  * it should apply to all non-compute jobs.
3129                  */
3130                 if (index == 1) {
3131                         adev->sdma_timeout = adev->video_timeout = adev->gfx_timeout;
3132                         if (amdgpu_sriov_vf(adev) || amdgpu_passthrough(adev))
3133                                 adev->compute_timeout = adev->gfx_timeout;
3134                 }
3135         }
3136
3137         return ret;
3138 }
3139
3140 static const struct attribute *amdgpu_dev_attributes[] = {
3141         &dev_attr_product_name.attr,
3142         &dev_attr_product_number.attr,
3143         &dev_attr_serial_number.attr,
3144         &dev_attr_pcie_replay_count.attr,
3145         NULL
3146 };
3147
3148
3149 /**
3150  * amdgpu_device_init - initialize the driver
3151  *
3152  * @adev: amdgpu_device pointer
3153  * @flags: driver flags
3154  *
3155  * Initializes the driver info and hw (all asics).
3156  * Returns 0 for success or an error on failure.
3157  * Called at driver startup.
3158  */
3159 int amdgpu_device_init(struct amdgpu_device *adev,
3160                        uint32_t flags)
3161 {
3162         struct drm_device *ddev = adev_to_drm(adev);
3163         struct pci_dev *pdev = adev->pdev;
3164         int r, i;
3165         bool boco = false;
3166         u32 max_MBps;
3167
3168         adev->shutdown = false;
3169         adev->flags = flags;
3170
3171         if (amdgpu_force_asic_type >= 0 && amdgpu_force_asic_type < CHIP_LAST)
3172                 adev->asic_type = amdgpu_force_asic_type;
3173         else
3174                 adev->asic_type = flags & AMD_ASIC_MASK;
3175
3176         adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT;
3177         if (amdgpu_emu_mode == 1)
3178                 adev->usec_timeout *= 10;
3179         adev->gmc.gart_size = 512 * 1024 * 1024;
3180         adev->accel_working = false;
3181         adev->num_rings = 0;
3182         adev->mman.buffer_funcs = NULL;
3183         adev->mman.buffer_funcs_ring = NULL;
3184         adev->vm_manager.vm_pte_funcs = NULL;
3185         adev->vm_manager.vm_pte_num_scheds = 0;
3186         adev->gmc.gmc_funcs = NULL;
3187         adev->fence_context = dma_fence_context_alloc(AMDGPU_MAX_RINGS);
3188         bitmap_zero(adev->gfx.pipe_reserve_bitmap, AMDGPU_MAX_COMPUTE_QUEUES);
3189
3190         adev->smc_rreg = &amdgpu_invalid_rreg;
3191         adev->smc_wreg = &amdgpu_invalid_wreg;
3192         adev->pcie_rreg = &amdgpu_invalid_rreg;
3193         adev->pcie_wreg = &amdgpu_invalid_wreg;
3194         adev->pciep_rreg = &amdgpu_invalid_rreg;
3195         adev->pciep_wreg = &amdgpu_invalid_wreg;
3196         adev->pcie_rreg64 = &amdgpu_invalid_rreg64;
3197         adev->pcie_wreg64 = &amdgpu_invalid_wreg64;
3198         adev->uvd_ctx_rreg = &amdgpu_invalid_rreg;
3199         adev->uvd_ctx_wreg = &amdgpu_invalid_wreg;
3200         adev->didt_rreg = &amdgpu_invalid_rreg;
3201         adev->didt_wreg = &amdgpu_invalid_wreg;
3202         adev->gc_cac_rreg = &amdgpu_invalid_rreg;
3203         adev->gc_cac_wreg = &amdgpu_invalid_wreg;
3204         adev->audio_endpt_rreg = &amdgpu_block_invalid_rreg;
3205         adev->audio_endpt_wreg = &amdgpu_block_invalid_wreg;
3206
3207         DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n",
3208                  amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device,
3209                  pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision);
3210
3211         /* mutex initialization are all done here so we
3212          * can recall function without having locking issues */
3213         atomic_set(&adev->irq.ih.lock, 0);
3214         mutex_init(&adev->firmware.mutex);
3215         mutex_init(&adev->pm.mutex);
3216         mutex_init(&adev->gfx.gpu_clock_mutex);
3217         mutex_init(&adev->srbm_mutex);
3218         mutex_init(&adev->gfx.pipe_reserve_mutex);
3219         mutex_init(&adev->gfx.gfx_off_mutex);
3220         mutex_init(&adev->grbm_idx_mutex);
3221         mutex_init(&adev->mn_lock);
3222         mutex_init(&adev->virt.vf_errors.lock);
3223         hash_init(adev->mn_hash);
3224         atomic_set(&adev->in_gpu_reset, 0);
3225         init_rwsem(&adev->reset_sem);
3226         mutex_init(&adev->psp.mutex);
3227         mutex_init(&adev->notifier_lock);
3228
3229         r = amdgpu_device_check_arguments(adev);
3230         if (r)
3231                 return r;
3232
3233         spin_lock_init(&adev->mmio_idx_lock);
3234         spin_lock_init(&adev->smc_idx_lock);
3235         spin_lock_init(&adev->pcie_idx_lock);
3236         spin_lock_init(&adev->uvd_ctx_idx_lock);
3237         spin_lock_init(&adev->didt_idx_lock);
3238         spin_lock_init(&adev->gc_cac_idx_lock);
3239         spin_lock_init(&adev->se_cac_idx_lock);
3240         spin_lock_init(&adev->audio_endpt_idx_lock);
3241         spin_lock_init(&adev->mm_stats.lock);
3242
3243         INIT_LIST_HEAD(&adev->shadow_list);
3244         mutex_init(&adev->shadow_list_lock);
3245
3246         INIT_DELAYED_WORK(&adev->delayed_init_work,
3247                           amdgpu_device_delayed_init_work_handler);
3248         INIT_DELAYED_WORK(&adev->gfx.gfx_off_delay_work,
3249                           amdgpu_device_delay_enable_gfx_off);
3250
3251         INIT_WORK(&adev->xgmi_reset_work, amdgpu_device_xgmi_reset_func);
3252
3253         adev->gfx.gfx_off_req_count = 1;
3254         adev->pm.ac_power = power_supply_is_system_supplied() > 0;
3255
3256         atomic_set(&adev->throttling_logging_enabled, 1);
3257         /*
3258          * If throttling continues, logging will be performed every minute
3259          * to avoid log flooding. "-1" is subtracted since the thermal
3260          * throttling interrupt comes every second. Thus, the total logging
3261          * interval is 59 seconds(retelimited printk interval) + 1(waiting
3262          * for throttling interrupt) = 60 seconds.
3263          */
3264         ratelimit_state_init(&adev->throttling_logging_rs, (60 - 1) * HZ, 1);
3265         ratelimit_set_flags(&adev->throttling_logging_rs, RATELIMIT_MSG_ON_RELEASE);
3266
3267         /* Registers mapping */
3268         /* TODO: block userspace mapping of io register */
3269         if (adev->asic_type >= CHIP_BONAIRE) {
3270                 adev->rmmio_base = pci_resource_start(adev->pdev, 5);
3271                 adev->rmmio_size = pci_resource_len(adev->pdev, 5);
3272         } else {
3273                 adev->rmmio_base = pci_resource_start(adev->pdev, 2);
3274                 adev->rmmio_size = pci_resource_len(adev->pdev, 2);
3275         }
3276
3277         adev->rmmio = ioremap(adev->rmmio_base, adev->rmmio_size);
3278         if (adev->rmmio == NULL) {
3279                 return -ENOMEM;
3280         }
3281         DRM_INFO("register mmio base: 0x%08X\n", (uint32_t)adev->rmmio_base);
3282         DRM_INFO("register mmio size: %u\n", (unsigned)adev->rmmio_size);
3283
3284         /* io port mapping */
3285         for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3286                 if (pci_resource_flags(adev->pdev, i) & IORESOURCE_IO) {
3287                         adev->rio_mem_size = pci_resource_len(adev->pdev, i);
3288                         adev->rio_mem = pci_iomap(adev->pdev, i, adev->rio_mem_size);
3289                         break;
3290                 }
3291         }
3292         if (adev->rio_mem == NULL)
3293                 DRM_INFO("PCI I/O BAR is not found.\n");
3294
3295         /* enable PCIE atomic ops */
3296         r = pci_enable_atomic_ops_to_root(adev->pdev,
3297                                           PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
3298                                           PCI_EXP_DEVCAP2_ATOMIC_COMP64);
3299         if (r) {
3300                 adev->have_atomics_support = false;
3301                 DRM_INFO("PCIE atomic ops is not supported\n");
3302         } else {
3303                 adev->have_atomics_support = true;
3304         }
3305
3306         amdgpu_device_get_pcie_info(adev);
3307
3308         if (amdgpu_mcbp)
3309                 DRM_INFO("MCBP is enabled\n");
3310
3311         if (amdgpu_mes && adev->asic_type >= CHIP_NAVI10)
3312                 adev->enable_mes = true;
3313
3314         /* detect hw virtualization here */
3315         amdgpu_detect_virtualization(adev);
3316
3317         r = amdgpu_device_get_job_timeout_settings(adev);
3318         if (r) {
3319                 dev_err(adev->dev, "invalid lockup_timeout parameter syntax\n");
3320                 goto failed_unmap;
3321         }
3322
3323         /* early init functions */
3324         r = amdgpu_device_ip_early_init(adev);
3325         if (r)
3326                 goto failed_unmap;
3327
3328         /* doorbell bar mapping and doorbell index init*/
3329         amdgpu_device_doorbell_init(adev);
3330
3331         /* if we have > 1 VGA cards, then disable the amdgpu VGA resources */
3332         /* this will fail for cards that aren't VGA class devices, just
3333          * ignore it */
3334         vga_client_register(adev->pdev, adev, NULL, amdgpu_device_vga_set_decode);
3335
3336         if (amdgpu_device_supports_boco(ddev))
3337                 boco = true;
3338         if (amdgpu_has_atpx() &&
3339             (amdgpu_is_atpx_hybrid() ||
3340              amdgpu_has_atpx_dgpu_power_cntl()) &&
3341             !pci_is_thunderbolt_attached(adev->pdev))
3342                 vga_switcheroo_register_client(adev->pdev,
3343                                                &amdgpu_switcheroo_ops, boco);
3344         if (boco)
3345                 vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
3346
3347         if (amdgpu_emu_mode == 1) {
3348                 /* post the asic on emulation mode */
3349                 emu_soc_asic_init(adev);
3350                 goto fence_driver_init;
3351         }
3352
3353         /* detect if we are with an SRIOV vbios */
3354         amdgpu_device_detect_sriov_bios(adev);
3355
3356         /* check if we need to reset the asic
3357          *  E.g., driver was not cleanly unloaded previously, etc.
3358          */
3359         if (!amdgpu_sriov_vf(adev) && amdgpu_asic_need_reset_on_init(adev)) {
3360                 r = amdgpu_asic_reset(adev);
3361                 if (r) {
3362                         dev_err(adev->dev, "asic reset on init failed\n");
3363                         goto failed;
3364                 }
3365         }
3366
3367         pci_enable_pcie_error_reporting(adev->ddev.pdev);
3368
3369         /* Post card if necessary */
3370         if (amdgpu_device_need_post(adev)) {
3371                 if (!adev->bios) {
3372                         dev_err(adev->dev, "no vBIOS found\n");
3373                         r = -EINVAL;
3374                         goto failed;
3375                 }
3376                 DRM_INFO("GPU posting now...\n");
3377                 r = amdgpu_device_asic_init(adev);
3378                 if (r) {
3379                         dev_err(adev->dev, "gpu post error!\n");
3380                         goto failed;
3381                 }
3382         }
3383
3384         if (adev->is_atom_fw) {
3385                 /* Initialize clocks */
3386                 r = amdgpu_atomfirmware_get_clock_info(adev);
3387                 if (r) {
3388                         dev_err(adev->dev, "amdgpu_atomfirmware_get_clock_info failed\n");
3389                         amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
3390                         goto failed;
3391                 }
3392         } else {
3393                 /* Initialize clocks */
3394                 r = amdgpu_atombios_get_clock_info(adev);
3395                 if (r) {
3396                         dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n");
3397                         amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
3398                         goto failed;
3399                 }
3400                 /* init i2c buses */
3401                 if (!amdgpu_device_has_dc_support(adev))
3402                         amdgpu_atombios_i2c_init(adev);
3403         }
3404
3405 fence_driver_init:
3406         /* Fence driver */
3407         r = amdgpu_fence_driver_init(adev);
3408         if (r) {
3409                 dev_err(adev->dev, "amdgpu_fence_driver_init failed\n");
3410                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_FENCE_INIT_FAIL, 0, 0);
3411                 goto failed;
3412         }
3413
3414         /* init the mode config */
3415         drm_mode_config_init(adev_to_drm(adev));
3416
3417         r = amdgpu_device_ip_init(adev);
3418         if (r) {
3419                 /* failed in exclusive mode due to timeout */
3420                 if (amdgpu_sriov_vf(adev) &&
3421                     !amdgpu_sriov_runtime(adev) &&
3422                     amdgpu_virt_mmio_blocked(adev) &&
3423                     !amdgpu_virt_wait_reset(adev)) {
3424                         dev_err(adev->dev, "VF exclusive mode timeout\n");
3425                         /* Don't send request since VF is inactive. */
3426                         adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME;
3427                         adev->virt.ops = NULL;
3428                         r = -EAGAIN;
3429                         goto failed;
3430                 }
3431                 dev_err(adev->dev, "amdgpu_device_ip_init failed\n");
3432                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0);
3433                 goto failed;
3434         }
3435
3436         dev_info(adev->dev,
3437                 "SE %d, SH per SE %d, CU per SH %d, active_cu_number %d\n",
3438                         adev->gfx.config.max_shader_engines,
3439                         adev->gfx.config.max_sh_per_se,
3440                         adev->gfx.config.max_cu_per_sh,
3441                         adev->gfx.cu_info.number);
3442
3443         adev->accel_working = true;
3444
3445         amdgpu_vm_check_compute_bug(adev);
3446
3447         /* Initialize the buffer migration limit. */
3448         if (amdgpu_moverate >= 0)
3449                 max_MBps = amdgpu_moverate;
3450         else
3451                 max_MBps = 8; /* Allow 8 MB/s. */
3452         /* Get a log2 for easy divisions. */
3453         adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps));
3454
3455         amdgpu_fbdev_init(adev);
3456
3457         r = amdgpu_pm_sysfs_init(adev);
3458         if (r) {
3459                 adev->pm_sysfs_en = false;
3460                 DRM_ERROR("registering pm debugfs failed (%d).\n", r);
3461         } else
3462                 adev->pm_sysfs_en = true;
3463
3464         r = amdgpu_ucode_sysfs_init(adev);
3465         if (r) {
3466                 adev->ucode_sysfs_en = false;
3467                 DRM_ERROR("Creating firmware sysfs failed (%d).\n", r);
3468         } else
3469                 adev->ucode_sysfs_en = true;
3470
3471         if ((amdgpu_testing & 1)) {
3472                 if (adev->accel_working)
3473                         amdgpu_test_moves(adev);
3474                 else
3475                         DRM_INFO("amdgpu: acceleration disabled, skipping move tests\n");
3476         }
3477         if (amdgpu_benchmarking) {
3478                 if (adev->accel_working)
3479                         amdgpu_benchmark(adev, amdgpu_benchmarking);
3480                 else
3481                         DRM_INFO("amdgpu: acceleration disabled, skipping benchmarks\n");
3482         }
3483
3484         /*
3485          * Register gpu instance before amdgpu_device_enable_mgpu_fan_boost.
3486          * Otherwise the mgpu fan boost feature will be skipped due to the
3487          * gpu instance is counted less.
3488          */
3489         amdgpu_register_gpu_instance(adev);
3490
3491         /* enable clockgating, etc. after ib tests, etc. since some blocks require
3492          * explicit gating rather than handling it automatically.
3493          */
3494         r = amdgpu_device_ip_late_init(adev);
3495         if (r) {
3496                 dev_err(adev->dev, "amdgpu_device_ip_late_init failed\n");
3497                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_LATE_INIT_FAIL, 0, r);
3498                 goto failed;
3499         }
3500
3501         /* must succeed. */
3502         amdgpu_ras_resume(adev);
3503
3504         queue_delayed_work(system_wq, &adev->delayed_init_work,
3505                            msecs_to_jiffies(AMDGPU_RESUME_MS));
3506
3507         if (amdgpu_sriov_vf(adev))
3508                 flush_delayed_work(&adev->delayed_init_work);
3509
3510         r = sysfs_create_files(&adev->dev->kobj, amdgpu_dev_attributes);
3511         if (r)
3512                 dev_err(adev->dev, "Could not create amdgpu device attr\n");
3513
3514         if (IS_ENABLED(CONFIG_PERF_EVENTS))
3515                 r = amdgpu_pmu_init(adev);
3516         if (r)
3517                 dev_err(adev->dev, "amdgpu_pmu_init failed\n");
3518
3519         /* Have stored pci confspace at hand for restore in sudden PCI error */
3520         if (amdgpu_device_cache_pci_state(adev->pdev))
3521                 pci_restore_state(pdev);
3522
3523         return 0;
3524
3525 failed:
3526         amdgpu_vf_error_trans_all(adev);
3527         if (boco)
3528                 vga_switcheroo_fini_domain_pm_ops(adev->dev);
3529
3530 failed_unmap:
3531         iounmap(adev->rmmio);
3532         adev->rmmio = NULL;
3533
3534         return r;
3535 }
3536
3537 /**
3538  * amdgpu_device_fini - tear down the driver
3539  *
3540  * @adev: amdgpu_device pointer
3541  *
3542  * Tear down the driver info (all asics).
3543  * Called at driver shutdown.
3544  */
3545 void amdgpu_device_fini(struct amdgpu_device *adev)
3546 {
3547         dev_info(adev->dev, "amdgpu: finishing device.\n");
3548         flush_delayed_work(&adev->delayed_init_work);
3549         adev->shutdown = true;
3550
3551         kfree(adev->pci_state);
3552
3553         /* make sure IB test finished before entering exclusive mode
3554          * to avoid preemption on IB test
3555          * */
3556         if (amdgpu_sriov_vf(adev)) {
3557                 amdgpu_virt_request_full_gpu(adev, false);
3558                 amdgpu_virt_fini_data_exchange(adev);
3559         }
3560
3561         /* disable all interrupts */
3562         amdgpu_irq_disable_all(adev);
3563         if (adev->mode_info.mode_config_initialized){
3564                 if (!amdgpu_device_has_dc_support(adev))
3565                         drm_helper_force_disable_all(adev_to_drm(adev));
3566                 else
3567                         drm_atomic_helper_shutdown(adev_to_drm(adev));
3568         }
3569         amdgpu_fence_driver_fini(adev);
3570         if (adev->pm_sysfs_en)
3571                 amdgpu_pm_sysfs_fini(adev);
3572         amdgpu_fbdev_fini(adev);
3573         amdgpu_device_ip_fini(adev);
3574         release_firmware(adev->firmware.gpu_info_fw);
3575         adev->firmware.gpu_info_fw = NULL;
3576         adev->accel_working = false;
3577         /* free i2c buses */
3578         if (!amdgpu_device_has_dc_support(adev))
3579                 amdgpu_i2c_fini(adev);
3580
3581         if (amdgpu_emu_mode != 1)
3582                 amdgpu_atombios_fini(adev);
3583
3584         kfree(adev->bios);
3585         adev->bios = NULL;
3586         if (amdgpu_has_atpx() &&
3587             (amdgpu_is_atpx_hybrid() ||
3588              amdgpu_has_atpx_dgpu_power_cntl()) &&
3589             !pci_is_thunderbolt_attached(adev->pdev))
3590                 vga_switcheroo_unregister_client(adev->pdev);
3591         if (amdgpu_device_supports_boco(adev_to_drm(adev)))
3592                 vga_switcheroo_fini_domain_pm_ops(adev->dev);
3593         vga_client_register(adev->pdev, NULL, NULL, NULL);
3594         if (adev->rio_mem)
3595                 pci_iounmap(adev->pdev, adev->rio_mem);
3596         adev->rio_mem = NULL;
3597         iounmap(adev->rmmio);
3598         adev->rmmio = NULL;
3599         amdgpu_device_doorbell_fini(adev);
3600
3601         if (adev->ucode_sysfs_en)
3602                 amdgpu_ucode_sysfs_fini(adev);
3603
3604         sysfs_remove_files(&adev->dev->kobj, amdgpu_dev_attributes);
3605         if (IS_ENABLED(CONFIG_PERF_EVENTS))
3606                 amdgpu_pmu_fini(adev);
3607         if (adev->mman.discovery_bin)
3608                 amdgpu_discovery_fini(adev);
3609 }
3610
3611
3612 /*
3613  * Suspend & resume.
3614  */
3615 /**
3616  * amdgpu_device_suspend - initiate device suspend
3617  *
3618  * @dev: drm dev pointer
3619  * @fbcon : notify the fbdev of suspend
3620  *
3621  * Puts the hw in the suspend state (all asics).
3622  * Returns 0 for success or an error on failure.
3623  * Called at driver suspend.
3624  */
3625 int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
3626 {
3627         struct amdgpu_device *adev;
3628         struct drm_crtc *crtc;
3629         struct drm_connector *connector;
3630         struct drm_connector_list_iter iter;
3631         int r;
3632
3633         adev = drm_to_adev(dev);
3634
3635         if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
3636                 return 0;
3637
3638         adev->in_suspend = true;
3639         drm_kms_helper_poll_disable(dev);
3640
3641         if (fbcon)
3642                 amdgpu_fbdev_set_suspend(adev, 1);
3643
3644         cancel_delayed_work_sync(&adev->delayed_init_work);
3645
3646         if (!amdgpu_device_has_dc_support(adev)) {
3647                 /* turn off display hw */
3648                 drm_modeset_lock_all(dev);
3649                 drm_connector_list_iter_begin(dev, &iter);
3650                 drm_for_each_connector_iter(connector, &iter)
3651                         drm_helper_connector_dpms(connector,
3652                                                   DRM_MODE_DPMS_OFF);
3653                 drm_connector_list_iter_end(&iter);
3654                 drm_modeset_unlock_all(dev);
3655                         /* unpin the front buffers and cursors */
3656                 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
3657                         struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
3658                         struct drm_framebuffer *fb = crtc->primary->fb;
3659                         struct amdgpu_bo *robj;
3660
3661                         if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
3662                                 struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
3663                                 r = amdgpu_bo_reserve(aobj, true);
3664                                 if (r == 0) {
3665                                         amdgpu_bo_unpin(aobj);
3666                                         amdgpu_bo_unreserve(aobj);
3667                                 }
3668                         }
3669
3670                         if (fb == NULL || fb->obj[0] == NULL) {
3671                                 continue;
3672                         }
3673                         robj = gem_to_amdgpu_bo(fb->obj[0]);
3674                         /* don't unpin kernel fb objects */
3675                         if (!amdgpu_fbdev_robj_is_fb(adev, robj)) {
3676                                 r = amdgpu_bo_reserve(robj, true);
3677                                 if (r == 0) {
3678                                         amdgpu_bo_unpin(robj);
3679                                         amdgpu_bo_unreserve(robj);
3680                                 }
3681                         }
3682                 }
3683         }
3684
3685         amdgpu_ras_suspend(adev);
3686
3687         r = amdgpu_device_ip_suspend_phase1(adev);
3688
3689         amdgpu_amdkfd_suspend(adev, !fbcon);
3690
3691         /* evict vram memory */
3692         amdgpu_bo_evict_vram(adev);
3693
3694         amdgpu_fence_driver_suspend(adev);
3695
3696         r = amdgpu_device_ip_suspend_phase2(adev);
3697
3698         /* evict remaining vram memory
3699          * This second call to evict vram is to evict the gart page table
3700          * using the CPU.
3701          */
3702         amdgpu_bo_evict_vram(adev);
3703
3704         return 0;
3705 }
3706
3707 /**
3708  * amdgpu_device_resume - initiate device resume
3709  *
3710  * @dev: drm dev pointer
3711  * @fbcon : notify the fbdev of resume
3712  *
3713  * Bring the hw back to operating state (all asics).
3714  * Returns 0 for success or an error on failure.
3715  * Called at driver resume.
3716  */
3717 int amdgpu_device_resume(struct drm_device *dev, bool fbcon)
3718 {
3719         struct drm_connector *connector;
3720         struct drm_connector_list_iter iter;
3721         struct amdgpu_device *adev = drm_to_adev(dev);
3722         struct drm_crtc *crtc;
3723         int r = 0;
3724
3725         if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
3726                 return 0;
3727
3728         /* post card */
3729         if (amdgpu_device_need_post(adev)) {
3730                 r = amdgpu_device_asic_init(adev);
3731                 if (r)
3732                         dev_err(adev->dev, "amdgpu asic init failed\n");
3733         }
3734
3735         r = amdgpu_device_ip_resume(adev);
3736         if (r) {
3737                 dev_err(adev->dev, "amdgpu_device_ip_resume failed (%d).\n", r);
3738                 return r;
3739         }
3740         amdgpu_fence_driver_resume(adev);
3741
3742
3743         r = amdgpu_device_ip_late_init(adev);
3744         if (r)
3745                 return r;
3746
3747         queue_delayed_work(system_wq, &adev->delayed_init_work,
3748                            msecs_to_jiffies(AMDGPU_RESUME_MS));
3749
3750         if (!amdgpu_device_has_dc_support(adev)) {
3751                 /* pin cursors */
3752                 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
3753                         struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
3754
3755                         if (amdgpu_crtc->cursor_bo && !adev->enable_virtual_display) {
3756                                 struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
3757                                 r = amdgpu_bo_reserve(aobj, true);
3758                                 if (r == 0) {
3759                                         r = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
3760                                         if (r != 0)
3761                                                 dev_err(adev->dev, "Failed to pin cursor BO (%d)\n", r);
3762                                         amdgpu_crtc->cursor_addr = amdgpu_bo_gpu_offset(aobj);
3763                                         amdgpu_bo_unreserve(aobj);
3764                                 }
3765                         }
3766                 }
3767         }
3768         r = amdgpu_amdkfd_resume(adev, !fbcon);
3769         if (r)
3770                 return r;
3771
3772         /* Make sure IB tests flushed */
3773         flush_delayed_work(&adev->delayed_init_work);
3774
3775         /* blat the mode back in */
3776         if (fbcon) {
3777                 if (!amdgpu_device_has_dc_support(adev)) {
3778                         /* pre DCE11 */
3779                         drm_helper_resume_force_mode(dev);
3780
3781                         /* turn on display hw */
3782                         drm_modeset_lock_all(dev);
3783
3784                         drm_connector_list_iter_begin(dev, &iter);
3785                         drm_for_each_connector_iter(connector, &iter)
3786                                 drm_helper_connector_dpms(connector,
3787                                                           DRM_MODE_DPMS_ON);
3788                         drm_connector_list_iter_end(&iter);
3789
3790                         drm_modeset_unlock_all(dev);
3791                 }
3792                 amdgpu_fbdev_set_suspend(adev, 0);
3793         }
3794
3795         drm_kms_helper_poll_enable(dev);
3796
3797         amdgpu_ras_resume(adev);
3798
3799         /*
3800          * Most of the connector probing functions try to acquire runtime pm
3801          * refs to ensure that the GPU is powered on when connector polling is
3802          * performed. Since we're calling this from a runtime PM callback,
3803          * trying to acquire rpm refs will cause us to deadlock.
3804          *
3805          * Since we're guaranteed to be holding the rpm lock, it's safe to
3806          * temporarily disable the rpm helpers so this doesn't deadlock us.
3807          */
3808 #ifdef CONFIG_PM
3809         dev->dev->power.disable_depth++;
3810 #endif
3811         if (!amdgpu_device_has_dc_support(adev))
3812                 drm_helper_hpd_irq_event(dev);
3813         else
3814                 drm_kms_helper_hotplug_event(dev);
3815 #ifdef CONFIG_PM
3816         dev->dev->power.disable_depth--;
3817 #endif
3818         adev->in_suspend = false;
3819
3820         return 0;
3821 }
3822
3823 /**
3824  * amdgpu_device_ip_check_soft_reset - did soft reset succeed
3825  *
3826  * @adev: amdgpu_device pointer
3827  *
3828  * The list of all the hardware IPs that make up the asic is walked and
3829  * the check_soft_reset callbacks are run.  check_soft_reset determines
3830  * if the asic is still hung or not.
3831  * Returns true if any of the IPs are still in a hung state, false if not.
3832  */
3833 static bool amdgpu_device_ip_check_soft_reset(struct amdgpu_device *adev)
3834 {
3835         int i;
3836         bool asic_hang = false;
3837
3838         if (amdgpu_sriov_vf(adev))
3839                 return true;
3840
3841         if (amdgpu_asic_need_full_reset(adev))
3842                 return true;
3843
3844         for (i = 0; i < adev->num_ip_blocks; i++) {
3845                 if (!adev->ip_blocks[i].status.valid)
3846                         continue;
3847                 if (adev->ip_blocks[i].version->funcs->check_soft_reset)
3848                         adev->ip_blocks[i].status.hang =
3849                                 adev->ip_blocks[i].version->funcs->check_soft_reset(adev);
3850                 if (adev->ip_blocks[i].status.hang) {
3851                         dev_info(adev->dev, "IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name);
3852                         asic_hang = true;
3853                 }
3854         }
3855         return asic_hang;
3856 }
3857
3858 /**
3859  * amdgpu_device_ip_pre_soft_reset - prepare for soft reset
3860  *
3861  * @adev: amdgpu_device pointer
3862  *
3863  * The list of all the hardware IPs that make up the asic is walked and the
3864  * pre_soft_reset callbacks are run if the block is hung.  pre_soft_reset
3865  * handles any IP specific hardware or software state changes that are
3866  * necessary for a soft reset to succeed.
3867  * Returns 0 on success, negative error code on failure.
3868  */
3869 static int amdgpu_device_ip_pre_soft_reset(struct amdgpu_device *adev)
3870 {
3871         int i, r = 0;
3872
3873         for (i = 0; i < adev->num_ip_blocks; i++) {
3874                 if (!adev->ip_blocks[i].status.valid)
3875                         continue;
3876                 if (adev->ip_blocks[i].status.hang &&
3877                     adev->ip_blocks[i].version->funcs->pre_soft_reset) {
3878                         r = adev->ip_blocks[i].version->funcs->pre_soft_reset(adev);
3879                         if (r)
3880                                 return r;
3881                 }
3882         }
3883
3884         return 0;
3885 }
3886
3887 /**
3888  * amdgpu_device_ip_need_full_reset - check if a full asic reset is needed
3889  *
3890  * @adev: amdgpu_device pointer
3891  *
3892  * Some hardware IPs cannot be soft reset.  If they are hung, a full gpu
3893  * reset is necessary to recover.
3894  * Returns true if a full asic reset is required, false if not.
3895  */
3896 static bool amdgpu_device_ip_need_full_reset(struct amdgpu_device *adev)
3897 {
3898         int i;
3899
3900         if (amdgpu_asic_need_full_reset(adev))
3901                 return true;
3902
3903         for (i = 0; i < adev->num_ip_blocks; i++) {
3904                 if (!adev->ip_blocks[i].status.valid)
3905                         continue;
3906                 if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) ||
3907                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) ||
3908                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) ||
3909                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) ||
3910                      adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
3911                         if (adev->ip_blocks[i].status.hang) {
3912                                 dev_info(adev->dev, "Some block need full reset!\n");
3913                                 return true;
3914                         }
3915                 }
3916         }
3917         return false;
3918 }
3919
3920 /**
3921  * amdgpu_device_ip_soft_reset - do a soft reset
3922  *
3923  * @adev: amdgpu_device pointer
3924  *
3925  * The list of all the hardware IPs that make up the asic is walked and the
3926  * soft_reset callbacks are run if the block is hung.  soft_reset handles any
3927  * IP specific hardware or software state changes that are necessary to soft
3928  * reset the IP.
3929  * Returns 0 on success, negative error code on failure.
3930  */
3931 static int amdgpu_device_ip_soft_reset(struct amdgpu_device *adev)
3932 {
3933         int i, r = 0;
3934
3935         for (i = 0; i < adev->num_ip_blocks; i++) {
3936                 if (!adev->ip_blocks[i].status.valid)
3937                         continue;
3938                 if (adev->ip_blocks[i].status.hang &&
3939                     adev->ip_blocks[i].version->funcs->soft_reset) {
3940                         r = adev->ip_blocks[i].version->funcs->soft_reset(adev);
3941                         if (r)
3942                                 return r;
3943                 }
3944         }
3945
3946         return 0;
3947 }
3948
3949 /**
3950  * amdgpu_device_ip_post_soft_reset - clean up from soft reset
3951  *
3952  * @adev: amdgpu_device pointer
3953  *
3954  * The list of all the hardware IPs that make up the asic is walked and the
3955  * post_soft_reset callbacks are run if the asic was hung.  post_soft_reset
3956  * handles any IP specific hardware or software state changes that are
3957  * necessary after the IP has been soft reset.
3958  * Returns 0 on success, negative error code on failure.
3959  */
3960 static int amdgpu_device_ip_post_soft_reset(struct amdgpu_device *adev)
3961 {
3962         int i, r = 0;
3963
3964         for (i = 0; i < adev->num_ip_blocks; i++) {
3965                 if (!adev->ip_blocks[i].status.valid)
3966                         continue;
3967                 if (adev->ip_blocks[i].status.hang &&
3968                     adev->ip_blocks[i].version->funcs->post_soft_reset)
3969                         r = adev->ip_blocks[i].version->funcs->post_soft_reset(adev);
3970                 if (r)
3971                         return r;
3972         }
3973
3974         return 0;
3975 }
3976
3977 /**
3978  * amdgpu_device_recover_vram - Recover some VRAM contents
3979  *
3980  * @adev: amdgpu_device pointer
3981  *
3982  * Restores the contents of VRAM buffers from the shadows in GTT.  Used to
3983  * restore things like GPUVM page tables after a GPU reset where
3984  * the contents of VRAM might be lost.
3985  *
3986  * Returns:
3987  * 0 on success, negative error code on failure.
3988  */
3989 static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
3990 {
3991         struct dma_fence *fence = NULL, *next = NULL;
3992         struct amdgpu_bo *shadow;
3993         long r = 1, tmo;
3994
3995         if (amdgpu_sriov_runtime(adev))
3996                 tmo = msecs_to_jiffies(8000);
3997         else
3998                 tmo = msecs_to_jiffies(100);
3999
4000         dev_info(adev->dev, "recover vram bo from shadow start\n");
4001         mutex_lock(&adev->shadow_list_lock);
4002         list_for_each_entry(shadow, &adev->shadow_list, shadow_list) {
4003
4004                 /* No need to recover an evicted BO */
4005                 if (shadow->tbo.mem.mem_type != TTM_PL_TT ||
4006                     shadow->tbo.mem.start == AMDGPU_BO_INVALID_OFFSET ||
4007                     shadow->parent->tbo.mem.mem_type != TTM_PL_VRAM)
4008                         continue;
4009
4010                 r = amdgpu_bo_restore_shadow(shadow, &next);
4011                 if (r)
4012                         break;
4013
4014                 if (fence) {
4015                         tmo = dma_fence_wait_timeout(fence, false, tmo);
4016                         dma_fence_put(fence);
4017                         fence = next;
4018                         if (tmo == 0) {
4019                                 r = -ETIMEDOUT;
4020                                 break;
4021                         } else if (tmo < 0) {
4022                                 r = tmo;
4023                                 break;
4024                         }
4025                 } else {
4026                         fence = next;
4027                 }
4028         }
4029         mutex_unlock(&adev->shadow_list_lock);
4030
4031         if (fence)
4032                 tmo = dma_fence_wait_timeout(fence, false, tmo);
4033         dma_fence_put(fence);
4034
4035         if (r < 0 || tmo <= 0) {
4036                 dev_err(adev->dev, "recover vram bo from shadow failed, r is %ld, tmo is %ld\n", r, tmo);
4037                 return -EIO;
4038         }
4039
4040         dev_info(adev->dev, "recover vram bo from shadow done\n");
4041         return 0;
4042 }
4043
4044
4045 /**
4046  * amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
4047  *
4048  * @adev: amdgpu device pointer
4049  * @from_hypervisor: request from hypervisor
4050  *
4051  * do VF FLR and reinitialize Asic
4052  * return 0 means succeeded otherwise failed
4053  */
4054 static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
4055                                      bool from_hypervisor)
4056 {
4057         int r;
4058
4059         if (from_hypervisor)
4060                 r = amdgpu_virt_request_full_gpu(adev, true);
4061         else
4062                 r = amdgpu_virt_reset_gpu(adev);
4063         if (r)
4064                 return r;
4065
4066         amdgpu_amdkfd_pre_reset(adev);
4067
4068         /* Resume IP prior to SMC */
4069         r = amdgpu_device_ip_reinit_early_sriov(adev);
4070         if (r)
4071                 goto error;
4072
4073         amdgpu_virt_init_data_exchange(adev);
4074         /* we need recover gart prior to run SMC/CP/SDMA resume */
4075         amdgpu_gtt_mgr_recover(ttm_manager_type(&adev->mman.bdev, TTM_PL_TT));
4076
4077         r = amdgpu_device_fw_loading(adev);
4078         if (r)
4079                 return r;
4080
4081         /* now we are okay to resume SMC/CP/SDMA */
4082         r = amdgpu_device_ip_reinit_late_sriov(adev);
4083         if (r)
4084                 goto error;
4085
4086         amdgpu_irq_gpu_reset_resume_helper(adev);
4087         r = amdgpu_ib_ring_tests(adev);
4088         amdgpu_amdkfd_post_reset(adev);
4089
4090 error:
4091         amdgpu_virt_release_full_gpu(adev, true);
4092         if (!r && adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) {
4093                 amdgpu_inc_vram_lost(adev);
4094                 r = amdgpu_device_recover_vram(adev);
4095         }
4096
4097         return r;
4098 }
4099
4100 /**
4101  * amdgpu_device_has_job_running - check if there is any job in mirror list
4102  *
4103  * @adev: amdgpu device pointer
4104  *
4105  * check if there is any job in mirror list
4106  */
4107 bool amdgpu_device_has_job_running(struct amdgpu_device *adev)
4108 {
4109         int i;
4110         struct drm_sched_job *job;
4111
4112         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4113                 struct amdgpu_ring *ring = adev->rings[i];
4114
4115                 if (!ring || !ring->sched.thread)
4116                         continue;
4117
4118                 spin_lock(&ring->sched.job_list_lock);
4119                 job = list_first_entry_or_null(&ring->sched.ring_mirror_list,
4120                                 struct drm_sched_job, node);
4121                 spin_unlock(&ring->sched.job_list_lock);
4122                 if (job)
4123                         return true;
4124         }
4125         return false;
4126 }
4127
4128 /**
4129  * amdgpu_device_should_recover_gpu - check if we should try GPU recovery
4130  *
4131  * @adev: amdgpu device pointer
4132  *
4133  * Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
4134  * a hung GPU.
4135  */
4136 bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev)
4137 {
4138         if (!amdgpu_device_ip_check_soft_reset(adev)) {
4139                 dev_info(adev->dev, "Timeout, but no hardware hang detected.\n");
4140                 return false;
4141         }
4142
4143         if (amdgpu_gpu_recovery == 0)
4144                 goto disabled;
4145
4146         if (amdgpu_sriov_vf(adev))
4147                 return true;
4148
4149         if (amdgpu_gpu_recovery == -1) {
4150                 switch (adev->asic_type) {
4151                 case CHIP_BONAIRE:
4152                 case CHIP_HAWAII:
4153                 case CHIP_TOPAZ:
4154                 case CHIP_TONGA:
4155                 case CHIP_FIJI:
4156                 case CHIP_POLARIS10:
4157                 case CHIP_POLARIS11:
4158                 case CHIP_POLARIS12:
4159                 case CHIP_VEGAM:
4160                 case CHIP_VEGA20:
4161                 case CHIP_VEGA10:
4162                 case CHIP_VEGA12:
4163                 case CHIP_RAVEN:
4164                 case CHIP_ARCTURUS:
4165                 case CHIP_RENOIR:
4166                 case CHIP_NAVI10:
4167                 case CHIP_NAVI14:
4168                 case CHIP_NAVI12:
4169                 case CHIP_SIENNA_CICHLID:
4170                         break;
4171                 default:
4172                         goto disabled;
4173                 }
4174         }
4175
4176         return true;
4177
4178 disabled:
4179                 dev_info(adev->dev, "GPU recovery disabled.\n");
4180                 return false;
4181 }
4182
4183
4184 static int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
4185                                         struct amdgpu_job *job,
4186                                         bool *need_full_reset_arg)
4187 {
4188         int i, r = 0;
4189         bool need_full_reset  = *need_full_reset_arg;
4190
4191         amdgpu_debugfs_wait_dump(adev);
4192
4193         if (amdgpu_sriov_vf(adev)) {
4194                 /* stop the data exchange thread */
4195                 amdgpu_virt_fini_data_exchange(adev);
4196         }
4197
4198         /* block all schedulers and reset given job's ring */
4199         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4200                 struct amdgpu_ring *ring = adev->rings[i];
4201
4202                 if (!ring || !ring->sched.thread)
4203                         continue;
4204
4205                 /* after all hw jobs are reset, hw fence is meaningless, so force_completion */
4206                 amdgpu_fence_driver_force_completion(ring);
4207         }
4208
4209         if(job)
4210                 drm_sched_increase_karma(&job->base);
4211
4212         /* Don't suspend on bare metal if we are not going to HW reset the ASIC */
4213         if (!amdgpu_sriov_vf(adev)) {
4214
4215                 if (!need_full_reset)
4216                         need_full_reset = amdgpu_device_ip_need_full_reset(adev);
4217
4218                 if (!need_full_reset) {
4219                         amdgpu_device_ip_pre_soft_reset(adev);
4220                         r = amdgpu_device_ip_soft_reset(adev);
4221                         amdgpu_device_ip_post_soft_reset(adev);
4222                         if (r || amdgpu_device_ip_check_soft_reset(adev)) {
4223                                 dev_info(adev->dev, "soft reset failed, will fallback to full reset!\n");
4224                                 need_full_reset = true;
4225                         }
4226                 }
4227
4228                 if (need_full_reset)
4229                         r = amdgpu_device_ip_suspend(adev);
4230
4231                 *need_full_reset_arg = need_full_reset;
4232         }
4233
4234         return r;
4235 }
4236
4237 static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive,
4238                                struct list_head *device_list_handle,
4239                                bool *need_full_reset_arg,
4240                                bool skip_hw_reset)
4241 {
4242         struct amdgpu_device *tmp_adev = NULL;
4243         bool need_full_reset = *need_full_reset_arg, vram_lost = false;
4244         int r = 0;
4245
4246         /*
4247          * ASIC reset has to be done on all HGMI hive nodes ASAP
4248          * to allow proper links negotiation in FW (within 1 sec)
4249          */
4250         if (!skip_hw_reset && need_full_reset) {
4251                 list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4252                         /* For XGMI run all resets in parallel to speed up the process */
4253                         if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
4254                                 if (!queue_work(system_unbound_wq, &tmp_adev->xgmi_reset_work))
4255                                         r = -EALREADY;
4256                         } else
4257                                 r = amdgpu_asic_reset(tmp_adev);
4258
4259                         if (r) {
4260                                 dev_err(tmp_adev->dev, "ASIC reset failed with error, %d for drm dev, %s",
4261                                          r, adev_to_drm(tmp_adev)->unique);
4262                                 break;
4263                         }
4264                 }
4265
4266                 /* For XGMI wait for all resets to complete before proceed */
4267                 if (!r) {
4268                         list_for_each_entry(tmp_adev, device_list_handle,
4269                                             gmc.xgmi.head) {
4270                                 if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
4271                                         flush_work(&tmp_adev->xgmi_reset_work);
4272                                         r = tmp_adev->asic_reset_res;
4273                                         if (r)
4274                                                 break;
4275                                 }
4276                         }
4277                 }
4278         }
4279
4280         if (!r && amdgpu_ras_intr_triggered()) {
4281                 list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4282                         if (tmp_adev->mmhub.funcs &&
4283                             tmp_adev->mmhub.funcs->reset_ras_error_count)
4284                                 tmp_adev->mmhub.funcs->reset_ras_error_count(tmp_adev);
4285                 }
4286
4287                 amdgpu_ras_intr_cleared();
4288         }
4289
4290         list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4291                 if (need_full_reset) {
4292                         /* post card */
4293                         if (amdgpu_device_asic_init(tmp_adev))
4294                                 dev_warn(tmp_adev->dev, "asic atom init failed!");
4295
4296                         if (!r) {
4297                                 dev_info(tmp_adev->dev, "GPU reset succeeded, trying to resume\n");
4298                                 r = amdgpu_device_ip_resume_phase1(tmp_adev);
4299                                 if (r)
4300                                         goto out;
4301
4302                                 vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
4303                                 if (vram_lost) {
4304                                         DRM_INFO("VRAM is lost due to GPU reset!\n");
4305                                         amdgpu_inc_vram_lost(tmp_adev);
4306                                 }
4307
4308                                 r = amdgpu_gtt_mgr_recover(ttm_manager_type(&tmp_adev->mman.bdev, TTM_PL_TT));
4309                                 if (r)
4310                                         goto out;
4311
4312                                 r = amdgpu_device_fw_loading(tmp_adev);
4313                                 if (r)
4314                                         return r;
4315
4316                                 r = amdgpu_device_ip_resume_phase2(tmp_adev);
4317                                 if (r)
4318                                         goto out;
4319
4320                                 if (vram_lost)
4321                                         amdgpu_device_fill_reset_magic(tmp_adev);
4322
4323                                 /*
4324                                  * Add this ASIC as tracked as reset was already
4325                                  * complete successfully.
4326                                  */
4327                                 amdgpu_register_gpu_instance(tmp_adev);
4328
4329                                 r = amdgpu_device_ip_late_init(tmp_adev);
4330                                 if (r)
4331                                         goto out;
4332
4333                                 amdgpu_fbdev_set_suspend(tmp_adev, 0);
4334
4335                                 /*
4336                                  * The GPU enters bad state once faulty pages
4337                                  * by ECC has reached the threshold, and ras
4338                                  * recovery is scheduled next. So add one check
4339                                  * here to break recovery if it indeed exceeds
4340                                  * bad page threshold, and remind user to
4341                                  * retire this GPU or setting one bigger
4342                                  * bad_page_threshold value to fix this once
4343                                  * probing driver again.
4344                                  */
4345                                 if (!amdgpu_ras_check_err_threshold(tmp_adev)) {
4346                                         /* must succeed. */
4347                                         amdgpu_ras_resume(tmp_adev);
4348                                 } else {
4349                                         r = -EINVAL;
4350                                         goto out;
4351                                 }
4352
4353                                 /* Update PSP FW topology after reset */
4354                                 if (hive && tmp_adev->gmc.xgmi.num_physical_nodes > 1)
4355                                         r = amdgpu_xgmi_update_topology(hive, tmp_adev);
4356                         }
4357                 }
4358
4359 out:
4360                 if (!r) {
4361                         amdgpu_irq_gpu_reset_resume_helper(tmp_adev);
4362                         r = amdgpu_ib_ring_tests(tmp_adev);
4363                         if (r) {
4364                                 dev_err(tmp_adev->dev, "ib ring test failed (%d).\n", r);
4365                                 r = amdgpu_device_ip_suspend(tmp_adev);
4366                                 need_full_reset = true;
4367                                 r = -EAGAIN;
4368                                 goto end;
4369                         }
4370                 }
4371
4372                 if (!r)
4373                         r = amdgpu_device_recover_vram(tmp_adev);
4374                 else
4375                         tmp_adev->asic_reset_res = r;
4376         }
4377
4378 end:
4379         *need_full_reset_arg = need_full_reset;
4380         return r;
4381 }
4382
4383 static bool amdgpu_device_lock_adev(struct amdgpu_device *adev,
4384                                 struct amdgpu_hive_info *hive)
4385 {
4386         if (atomic_cmpxchg(&adev->in_gpu_reset, 0, 1) != 0)
4387                 return false;
4388
4389         if (hive) {
4390                 down_write_nest_lock(&adev->reset_sem, &hive->hive_lock);
4391         } else {
4392                 down_write(&adev->reset_sem);
4393         }
4394
4395         atomic_inc(&adev->gpu_reset_counter);
4396         switch (amdgpu_asic_reset_method(adev)) {
4397         case AMD_RESET_METHOD_MODE1:
4398                 adev->mp1_state = PP_MP1_STATE_SHUTDOWN;
4399                 break;
4400         case AMD_RESET_METHOD_MODE2:
4401                 adev->mp1_state = PP_MP1_STATE_RESET;
4402                 break;
4403         default:
4404                 adev->mp1_state = PP_MP1_STATE_NONE;
4405                 break;
4406         }
4407
4408         return true;
4409 }
4410
4411 static void amdgpu_device_unlock_adev(struct amdgpu_device *adev)
4412 {
4413         amdgpu_vf_error_trans_all(adev);
4414         adev->mp1_state = PP_MP1_STATE_NONE;
4415         atomic_set(&adev->in_gpu_reset, 0);
4416         up_write(&adev->reset_sem);
4417 }
4418
4419 static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev)
4420 {
4421         struct pci_dev *p = NULL;
4422
4423         p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
4424                         adev->pdev->bus->number, 1);
4425         if (p) {
4426                 pm_runtime_enable(&(p->dev));
4427                 pm_runtime_resume(&(p->dev));
4428         }
4429 }
4430
4431 static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
4432 {
4433         enum amd_reset_method reset_method;
4434         struct pci_dev *p = NULL;
4435         u64 expires;
4436
4437         /*
4438          * For now, only BACO and mode1 reset are confirmed
4439          * to suffer the audio issue without proper suspended.
4440          */
4441         reset_method = amdgpu_asic_reset_method(adev);
4442         if ((reset_method != AMD_RESET_METHOD_BACO) &&
4443              (reset_method != AMD_RESET_METHOD_MODE1))
4444                 return -EINVAL;
4445
4446         p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
4447                         adev->pdev->bus->number, 1);
4448         if (!p)
4449                 return -ENODEV;
4450
4451         expires = pm_runtime_autosuspend_expiration(&(p->dev));
4452         if (!expires)
4453                 /*
4454                  * If we cannot get the audio device autosuspend delay,
4455                  * a fixed 4S interval will be used. Considering 3S is
4456                  * the audio controller default autosuspend delay setting.
4457                  * 4S used here is guaranteed to cover that.
4458                  */
4459                 expires = ktime_get_mono_fast_ns() + NSEC_PER_SEC * 4ULL;
4460
4461         while (!pm_runtime_status_suspended(&(p->dev))) {
4462                 if (!pm_runtime_suspend(&(p->dev)))
4463                         break;
4464
4465                 if (expires < ktime_get_mono_fast_ns()) {
4466                         dev_warn(adev->dev, "failed to suspend display audio\n");
4467                         /* TODO: abort the succeeding gpu reset? */
4468                         return -ETIMEDOUT;
4469                 }
4470         }
4471
4472         pm_runtime_disable(&(p->dev));
4473
4474         return 0;
4475 }
4476
4477 /**
4478  * amdgpu_device_gpu_recover - reset the asic and recover scheduler
4479  *
4480  * @adev: amdgpu device pointer
4481  * @job: which job trigger hang
4482  *
4483  * Attempt to reset the GPU if it has hung (all asics).
4484  * Attempt to do soft-reset or full-reset and reinitialize Asic
4485  * Returns 0 for success or an error on failure.
4486  */
4487
4488 int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
4489                               struct amdgpu_job *job)
4490 {
4491         struct list_head device_list, *device_list_handle =  NULL;
4492         bool need_full_reset = false;
4493         bool job_signaled = false;
4494         struct amdgpu_hive_info *hive = NULL;
4495         struct amdgpu_device *tmp_adev = NULL;
4496         int i, r = 0;
4497         bool need_emergency_restart = false;
4498         bool audio_suspended = false;
4499
4500         /**
4501          * Special case: RAS triggered and full reset isn't supported
4502          */
4503         need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
4504
4505         /*
4506          * Flush RAM to disk so that after reboot
4507          * the user can read log and see why the system rebooted.
4508          */
4509         if (need_emergency_restart && amdgpu_ras_get_context(adev)->reboot) {
4510                 DRM_WARN("Emergency reboot.");
4511
4512                 ksys_sync_helper();
4513                 emergency_restart();
4514         }
4515
4516         dev_info(adev->dev, "GPU %s begin!\n",
4517                 need_emergency_restart ? "jobs stop":"reset");
4518
4519         /*
4520          * Here we trylock to avoid chain of resets executing from
4521          * either trigger by jobs on different adevs in XGMI hive or jobs on
4522          * different schedulers for same device while this TO handler is running.
4523          * We always reset all schedulers for device and all devices for XGMI
4524          * hive so that should take care of them too.
4525          */
4526         hive = amdgpu_get_xgmi_hive(adev);
4527         if (hive) {
4528                 if (atomic_cmpxchg(&hive->in_reset, 0, 1) != 0) {
4529                         DRM_INFO("Bailing on TDR for s_job:%llx, hive: %llx as another already in progress",
4530                                 job ? job->base.id : -1, hive->hive_id);
4531                         amdgpu_put_xgmi_hive(hive);
4532                         return 0;
4533                 }
4534                 mutex_lock(&hive->hive_lock);
4535         }
4536
4537         /*
4538          * Build list of devices to reset.
4539          * In case we are in XGMI hive mode, resort the device list
4540          * to put adev in the 1st position.
4541          */
4542         INIT_LIST_HEAD(&device_list);
4543         if (adev->gmc.xgmi.num_physical_nodes > 1) {
4544                 if (!hive)
4545                         return -ENODEV;
4546                 if (!list_is_first(&adev->gmc.xgmi.head, &hive->device_list))
4547                         list_rotate_to_front(&adev->gmc.xgmi.head, &hive->device_list);
4548                 device_list_handle = &hive->device_list;
4549         } else {
4550                 list_add_tail(&adev->gmc.xgmi.head, &device_list);
4551                 device_list_handle = &device_list;
4552         }
4553
4554         /* block all schedulers and reset given job's ring */
4555         list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4556                 if (!amdgpu_device_lock_adev(tmp_adev, hive)) {
4557                         dev_info(tmp_adev->dev, "Bailing on TDR for s_job:%llx, as another already in progress",
4558                                   job ? job->base.id : -1);
4559                         r = 0;
4560                         goto skip_recovery;
4561                 }
4562
4563                 /*
4564                  * Try to put the audio codec into suspend state
4565                  * before gpu reset started.
4566                  *
4567                  * Due to the power domain of the graphics device
4568                  * is shared with AZ power domain. Without this,
4569                  * we may change the audio hardware from behind
4570                  * the audio driver's back. That will trigger
4571                  * some audio codec errors.
4572                  */
4573                 if (!amdgpu_device_suspend_display_audio(tmp_adev))
4574                         audio_suspended = true;
4575
4576                 amdgpu_ras_set_error_query_ready(tmp_adev, false);
4577
4578                 cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
4579
4580                 if (!amdgpu_sriov_vf(tmp_adev))
4581                         amdgpu_amdkfd_pre_reset(tmp_adev);
4582
4583                 /*
4584                  * Mark these ASICs to be reseted as untracked first
4585                  * And add them back after reset completed
4586                  */
4587                 amdgpu_unregister_gpu_instance(tmp_adev);
4588
4589                 amdgpu_fbdev_set_suspend(tmp_adev, 1);
4590
4591                 /* disable ras on ALL IPs */
4592                 if (!need_emergency_restart &&
4593                       amdgpu_device_ip_need_full_reset(tmp_adev))
4594                         amdgpu_ras_suspend(tmp_adev);
4595
4596                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4597                         struct amdgpu_ring *ring = tmp_adev->rings[i];
4598
4599                         if (!ring || !ring->sched.thread)
4600                                 continue;
4601
4602                         drm_sched_stop(&ring->sched, job ? &job->base : NULL);
4603
4604                         if (need_emergency_restart)
4605                                 amdgpu_job_stop_all_jobs_on_sched(&ring->sched);
4606                 }
4607         }
4608
4609         if (need_emergency_restart)
4610                 goto skip_sched_resume;
4611
4612         /*
4613          * Must check guilty signal here since after this point all old
4614          * HW fences are force signaled.
4615          *
4616          * job->base holds a reference to parent fence
4617          */
4618         if (job && job->base.s_fence->parent &&
4619             dma_fence_is_signaled(job->base.s_fence->parent)) {
4620                 job_signaled = true;
4621                 dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
4622                 goto skip_hw_reset;
4623         }
4624
4625 retry:  /* Rest of adevs pre asic reset from XGMI hive. */
4626         list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4627                 r = amdgpu_device_pre_asic_reset(tmp_adev,
4628                                                  NULL,
4629                                                  &need_full_reset);
4630                 /*TODO Should we stop ?*/
4631                 if (r) {
4632                         dev_err(tmp_adev->dev, "GPU pre asic reset failed with err, %d for drm dev, %s ",
4633                                   r, adev_to_drm(tmp_adev)->unique);
4634                         tmp_adev->asic_reset_res = r;
4635                 }
4636         }
4637
4638         /* Actual ASIC resets if needed.*/
4639         /* TODO Implement XGMI hive reset logic for SRIOV */
4640         if (amdgpu_sriov_vf(adev)) {
4641                 r = amdgpu_device_reset_sriov(adev, job ? false : true);
4642                 if (r)
4643                         adev->asic_reset_res = r;
4644         } else {
4645                 r  = amdgpu_do_asic_reset(hive, device_list_handle, &need_full_reset, false);
4646                 if (r && r == -EAGAIN)
4647                         goto retry;
4648         }
4649
4650 skip_hw_reset:
4651
4652         /* Post ASIC reset for all devs .*/
4653         list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4654
4655                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4656                         struct amdgpu_ring *ring = tmp_adev->rings[i];
4657
4658                         if (!ring || !ring->sched.thread)
4659                                 continue;
4660
4661                         /* No point to resubmit jobs if we didn't HW reset*/
4662                         if (!tmp_adev->asic_reset_res && !job_signaled)
4663                                 drm_sched_resubmit_jobs(&ring->sched);
4664
4665                         drm_sched_start(&ring->sched, !tmp_adev->asic_reset_res);
4666                 }
4667
4668                 if (!amdgpu_device_has_dc_support(tmp_adev) && !job_signaled) {
4669                         drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
4670                 }
4671
4672                 tmp_adev->asic_reset_res = 0;
4673
4674                 if (r) {
4675                         /* bad news, how to tell it to userspace ? */
4676                         dev_info(tmp_adev->dev, "GPU reset(%d) failed\n", atomic_read(&tmp_adev->gpu_reset_counter));
4677                         amdgpu_vf_error_put(tmp_adev, AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0, r);
4678                 } else {
4679                         dev_info(tmp_adev->dev, "GPU reset(%d) succeeded!\n", atomic_read(&tmp_adev->gpu_reset_counter));
4680                 }
4681         }
4682
4683 skip_sched_resume:
4684         list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4685                 /*unlock kfd: SRIOV would do it separately */
4686                 if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
4687                         amdgpu_amdkfd_post_reset(tmp_adev);
4688                 if (audio_suspended)
4689                         amdgpu_device_resume_display_audio(tmp_adev);
4690                 amdgpu_device_unlock_adev(tmp_adev);
4691         }
4692
4693 skip_recovery:
4694         if (hive) {
4695                 atomic_set(&hive->in_reset, 0);
4696                 mutex_unlock(&hive->hive_lock);
4697                 amdgpu_put_xgmi_hive(hive);
4698         }
4699
4700         if (r)
4701                 dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
4702         return r;
4703 }
4704
4705 /**
4706  * amdgpu_device_get_pcie_info - fence pcie info about the PCIE slot
4707  *
4708  * @adev: amdgpu_device pointer
4709  *
4710  * Fetchs and stores in the driver the PCIE capabilities (gen speed
4711  * and lanes) of the slot the device is in. Handles APUs and
4712  * virtualized environments where PCIE config space may not be available.
4713  */
4714 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)
4715 {
4716         struct pci_dev *pdev;
4717         enum pci_bus_speed speed_cap, platform_speed_cap;
4718         enum pcie_link_width platform_link_width;
4719
4720         if (amdgpu_pcie_gen_cap)
4721                 adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
4722
4723         if (amdgpu_pcie_lane_cap)
4724                 adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap;
4725
4726         /* covers APUs as well */
4727         if (pci_is_root_bus(adev->pdev->bus)) {
4728                 if (adev->pm.pcie_gen_mask == 0)
4729                         adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK;
4730                 if (adev->pm.pcie_mlw_mask == 0)
4731                         adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK;
4732                 return;
4733         }
4734
4735         if (adev->pm.pcie_gen_mask && adev->pm.pcie_mlw_mask)
4736                 return;
4737
4738         pcie_bandwidth_available(adev->pdev, NULL,
4739                                  &platform_speed_cap, &platform_link_width);
4740
4741         if (adev->pm.pcie_gen_mask == 0) {
4742                 /* asic caps */
4743                 pdev = adev->pdev;
4744                 speed_cap = pcie_get_speed_cap(pdev);
4745                 if (speed_cap == PCI_SPEED_UNKNOWN) {
4746                         adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4747                                                   CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4748                                                   CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
4749                 } else {
4750                         if (speed_cap == PCIE_SPEED_16_0GT)
4751                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4752                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4753                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
4754                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4);
4755                         else if (speed_cap == PCIE_SPEED_8_0GT)
4756                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4757                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4758                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
4759                         else if (speed_cap == PCIE_SPEED_5_0GT)
4760                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4761                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2);
4762                         else
4763                                 adev->pm.pcie_gen_mask |= CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1;
4764                 }
4765                 /* platform caps */
4766                 if (platform_speed_cap == PCI_SPEED_UNKNOWN) {
4767                         adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4768                                                    CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
4769                 } else {
4770                         if (platform_speed_cap == PCIE_SPEED_16_0GT)
4771                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4772                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4773                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
4774                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4);
4775                         else if (platform_speed_cap == PCIE_SPEED_8_0GT)
4776                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4777                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4778                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3);
4779                         else if (platform_speed_cap == PCIE_SPEED_5_0GT)
4780                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4781                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
4782                         else
4783                                 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1;
4784
4785                 }
4786         }
4787         if (adev->pm.pcie_mlw_mask == 0) {
4788                 if (platform_link_width == PCIE_LNK_WIDTH_UNKNOWN) {
4789                         adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_PCIE_MLW_MASK;
4790                 } else {
4791                         switch (platform_link_width) {
4792                         case PCIE_LNK_X32:
4793                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 |
4794                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
4795                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4796                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4797                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4798                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4799                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4800                                 break;
4801                         case PCIE_LNK_X16:
4802                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
4803                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4804                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4805                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4806                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4807                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4808                                 break;
4809                         case PCIE_LNK_X12:
4810                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4811                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4812                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4813                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4814                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4815                                 break;
4816                         case PCIE_LNK_X8:
4817                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4818                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4819                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4820                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4821                                 break;
4822                         case PCIE_LNK_X4:
4823                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4824                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4825                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4826                                 break;
4827                         case PCIE_LNK_X2:
4828                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4829                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4830                                 break;
4831                         case PCIE_LNK_X1:
4832                                 adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1;
4833                                 break;
4834                         default:
4835                                 break;
4836                         }
4837                 }
4838         }
4839 }
4840
4841 int amdgpu_device_baco_enter(struct drm_device *dev)
4842 {
4843         struct amdgpu_device *adev = drm_to_adev(dev);
4844         struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
4845
4846         if (!amdgpu_device_supports_baco(adev_to_drm(adev)))
4847                 return -ENOTSUPP;
4848
4849         if (ras && ras->supported)
4850                 adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
4851
4852         return amdgpu_dpm_baco_enter(adev);
4853 }
4854
4855 int amdgpu_device_baco_exit(struct drm_device *dev)
4856 {
4857         struct amdgpu_device *adev = drm_to_adev(dev);
4858         struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
4859         int ret = 0;
4860
4861         if (!amdgpu_device_supports_baco(adev_to_drm(adev)))
4862                 return -ENOTSUPP;
4863
4864         ret = amdgpu_dpm_baco_exit(adev);
4865         if (ret)
4866                 return ret;
4867
4868         if (ras && ras->supported)
4869                 adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
4870
4871         return 0;
4872 }
4873
4874 static void amdgpu_cancel_all_tdr(struct amdgpu_device *adev)
4875 {
4876         int i;
4877
4878         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4879                 struct amdgpu_ring *ring = adev->rings[i];
4880
4881                 if (!ring || !ring->sched.thread)
4882                         continue;
4883
4884                 cancel_delayed_work_sync(&ring->sched.work_tdr);
4885         }
4886 }
4887
4888 /**
4889  * amdgpu_pci_error_detected - Called when a PCI error is detected.
4890  * @pdev: PCI device struct
4891  * @state: PCI channel state
4892  *
4893  * Description: Called when a PCI error is detected.
4894  *
4895  * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT.
4896  */
4897 pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
4898 {
4899         struct drm_device *dev = pci_get_drvdata(pdev);
4900         struct amdgpu_device *adev = drm_to_adev(dev);
4901         int i;
4902
4903         DRM_INFO("PCI error: detected callback, state(%d)!!\n", state);
4904
4905         if (adev->gmc.xgmi.num_physical_nodes > 1) {
4906                 DRM_WARN("No support for XGMI hive yet...");
4907                 return PCI_ERS_RESULT_DISCONNECT;
4908         }
4909
4910         switch (state) {
4911         case pci_channel_io_normal:
4912                 return PCI_ERS_RESULT_CAN_RECOVER;
4913         /* Fatal error, prepare for slot reset */
4914         case pci_channel_io_frozen:             
4915                 /*              
4916                  * Cancel and wait for all TDRs in progress if failing to
4917                  * set  adev->in_gpu_reset in amdgpu_device_lock_adev
4918                  *
4919                  * Locking adev->reset_sem will prevent any external access
4920                  * to GPU during PCI error recovery
4921                  */
4922                 while (!amdgpu_device_lock_adev(adev, NULL))
4923                         amdgpu_cancel_all_tdr(adev);
4924
4925                 /*
4926                  * Block any work scheduling as we do for regular GPU reset
4927                  * for the duration of the recovery
4928                  */
4929                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4930                         struct amdgpu_ring *ring = adev->rings[i];
4931
4932                         if (!ring || !ring->sched.thread)
4933                                 continue;
4934
4935                         drm_sched_stop(&ring->sched, NULL);
4936                 }
4937                 return PCI_ERS_RESULT_NEED_RESET;
4938         case pci_channel_io_perm_failure:
4939                 /* Permanent error, prepare for device removal */
4940                 return PCI_ERS_RESULT_DISCONNECT;
4941         }
4942
4943         return PCI_ERS_RESULT_NEED_RESET;
4944 }
4945
4946 /**
4947  * amdgpu_pci_mmio_enabled - Enable MMIO and dump debug registers
4948  * @pdev: pointer to PCI device
4949  */
4950 pci_ers_result_t amdgpu_pci_mmio_enabled(struct pci_dev *pdev)
4951 {
4952
4953         DRM_INFO("PCI error: mmio enabled callback!!\n");
4954
4955         /* TODO - dump whatever for debugging purposes */
4956
4957         /* This called only if amdgpu_pci_error_detected returns
4958          * PCI_ERS_RESULT_CAN_RECOVER. Read/write to the device still
4959          * works, no need to reset slot.
4960          */
4961
4962         return PCI_ERS_RESULT_RECOVERED;
4963 }
4964
4965 /**
4966  * amdgpu_pci_slot_reset - Called when PCI slot has been reset.
4967  * @pdev: PCI device struct
4968  *
4969  * Description: This routine is called by the pci error recovery
4970  * code after the PCI slot has been reset, just before we
4971  * should resume normal operations.
4972  */
4973 pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev)
4974 {
4975         struct drm_device *dev = pci_get_drvdata(pdev);
4976         struct amdgpu_device *adev = drm_to_adev(dev);
4977         int r, i;
4978         bool need_full_reset = true;
4979         u32 memsize;
4980         struct list_head device_list;
4981
4982         DRM_INFO("PCI error: slot reset callback!!\n");
4983
4984         INIT_LIST_HEAD(&device_list);
4985         list_add_tail(&adev->gmc.xgmi.head, &device_list);
4986
4987         /* wait for asic to come out of reset */
4988         msleep(500);
4989
4990         /* Restore PCI confspace */
4991         amdgpu_device_load_pci_state(pdev);
4992
4993         /* confirm  ASIC came out of reset */
4994         for (i = 0; i < adev->usec_timeout; i++) {
4995                 memsize = amdgpu_asic_get_config_memsize(adev);
4996
4997                 if (memsize != 0xffffffff)
4998                         break;
4999                 udelay(1);
5000         }
5001         if (memsize == 0xffffffff) {
5002                 r = -ETIME;
5003                 goto out;
5004         }
5005
5006         adev->in_pci_err_recovery = true;       
5007         r = amdgpu_device_pre_asic_reset(adev, NULL, &need_full_reset);
5008         adev->in_pci_err_recovery = false;
5009         if (r)
5010                 goto out;
5011
5012         r = amdgpu_do_asic_reset(NULL, &device_list, &need_full_reset, true);
5013
5014 out:
5015         if (!r) {
5016                 if (amdgpu_device_cache_pci_state(adev->pdev))
5017                         pci_restore_state(adev->pdev);
5018
5019                 DRM_INFO("PCIe error recovery succeeded\n");
5020         } else {
5021                 DRM_ERROR("PCIe error recovery failed, err:%d", r);
5022                 amdgpu_device_unlock_adev(adev);
5023         }
5024
5025         return r ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
5026 }
5027
5028 /**
5029  * amdgpu_pci_resume() - resume normal ops after PCI reset
5030  * @pdev: pointer to PCI device
5031  *
5032  * Called when the error recovery driver tells us that its
5033  * OK to resume normal operation. Use completion to allow
5034  * halted scsi ops to resume.
5035  */
5036 void amdgpu_pci_resume(struct pci_dev *pdev)
5037 {
5038         struct drm_device *dev = pci_get_drvdata(pdev);
5039         struct amdgpu_device *adev = drm_to_adev(dev);
5040         int i;
5041
5042
5043         DRM_INFO("PCI error: resume callback!!\n");
5044
5045         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5046                 struct amdgpu_ring *ring = adev->rings[i];
5047
5048                 if (!ring || !ring->sched.thread)
5049                         continue;
5050
5051
5052                 drm_sched_resubmit_jobs(&ring->sched);
5053                 drm_sched_start(&ring->sched, true);
5054         }
5055
5056         amdgpu_device_unlock_adev(adev);
5057 }
5058
5059 bool amdgpu_device_cache_pci_state(struct pci_dev *pdev)
5060 {
5061         struct drm_device *dev = pci_get_drvdata(pdev);
5062         struct amdgpu_device *adev = drm_to_adev(dev);
5063         int r;
5064
5065         r = pci_save_state(pdev);
5066         if (!r) {
5067                 kfree(adev->pci_state);
5068
5069                 adev->pci_state = pci_store_saved_state(pdev);
5070
5071                 if (!adev->pci_state) {
5072                         DRM_ERROR("Failed to store PCI saved state");
5073                         return false;
5074                 }
5075         } else {
5076                 DRM_WARN("Failed to save PCI state, err:%d\n", r);
5077                 return false;
5078         }
5079
5080         return true;
5081 }
5082
5083 bool amdgpu_device_load_pci_state(struct pci_dev *pdev)
5084 {
5085         struct drm_device *dev = pci_get_drvdata(pdev);
5086         struct amdgpu_device *adev = drm_to_adev(dev);
5087         int r;
5088
5089         if (!adev->pci_state)
5090                 return false;
5091
5092         r = pci_load_saved_state(pdev, adev->pci_state);
5093
5094         if (!r) {
5095                 pci_restore_state(pdev);
5096         } else {
5097                 DRM_WARN("Failed to load PCI state, err:%d\n", r);
5098                 return false;
5099         }
5100
5101         return true;
5102 }
5103
5104
This page took 0.326967 seconds and 4 git commands to generate.