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