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