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