]> Git Repo - J-linux.git/blob - drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Merge tag 'wq-for-6.9-bh-conversions' of git://git.kernel.org/pub/scm/linux/kernel...
[J-linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_device.c
1 /*
2  * Copyright 2008 Advanced Micro Devices, Inc.
3  * Copyright 2008 Red Hat Inc.
4  * Copyright 2009 Jerome Glisse.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  *
24  * Authors: Dave Airlie
25  *          Alex Deucher
26  *          Jerome Glisse
27  */
28 #include <linux/power_supply.h>
29 #include <linux/kthread.h>
30 #include <linux/module.h>
31 #include <linux/console.h>
32 #include <linux/slab.h>
33 #include <linux/iommu.h>
34 #include <linux/pci.h>
35 #include <linux/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                         tmp = amdgpu_reset_method;
4125                         /* It should do a default reset when loading or reloading the driver,
4126                          * regardless of the module parameter reset_method.
4127                          */
4128                         amdgpu_reset_method = AMD_RESET_METHOD_NONE;
4129                         r = amdgpu_asic_reset(adev);
4130                         amdgpu_reset_method = tmp;
4131                         if (r) {
4132                                 dev_err(adev->dev, "asic reset on init failed\n");
4133                                 goto failed;
4134                         }
4135                 }
4136         }
4137
4138         /* Post card if necessary */
4139         if (amdgpu_device_need_post(adev)) {
4140                 if (!adev->bios) {
4141                         dev_err(adev->dev, "no vBIOS found\n");
4142                         r = -EINVAL;
4143                         goto failed;
4144                 }
4145                 DRM_INFO("GPU posting now...\n");
4146                 r = amdgpu_device_asic_init(adev);
4147                 if (r) {
4148                         dev_err(adev->dev, "gpu post error!\n");
4149                         goto failed;
4150                 }
4151         }
4152
4153         if (adev->bios) {
4154                 if (adev->is_atom_fw) {
4155                         /* Initialize clocks */
4156                         r = amdgpu_atomfirmware_get_clock_info(adev);
4157                         if (r) {
4158                                 dev_err(adev->dev, "amdgpu_atomfirmware_get_clock_info failed\n");
4159                                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
4160                                 goto failed;
4161                         }
4162                 } else {
4163                         /* Initialize clocks */
4164                         r = amdgpu_atombios_get_clock_info(adev);
4165                         if (r) {
4166                                 dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n");
4167                                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
4168                                 goto failed;
4169                         }
4170                         /* init i2c buses */
4171                         if (!amdgpu_device_has_dc_support(adev))
4172                                 amdgpu_atombios_i2c_init(adev);
4173                 }
4174         }
4175
4176 fence_driver_init:
4177         /* Fence driver */
4178         r = amdgpu_fence_driver_sw_init(adev);
4179         if (r) {
4180                 dev_err(adev->dev, "amdgpu_fence_driver_sw_init failed\n");
4181                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_FENCE_INIT_FAIL, 0, 0);
4182                 goto failed;
4183         }
4184
4185         /* init the mode config */
4186         drm_mode_config_init(adev_to_drm(adev));
4187
4188         r = amdgpu_device_ip_init(adev);
4189         if (r) {
4190                 dev_err(adev->dev, "amdgpu_device_ip_init failed\n");
4191                 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0);
4192                 goto release_ras_con;
4193         }
4194
4195         amdgpu_fence_driver_hw_init(adev);
4196
4197         dev_info(adev->dev,
4198                 "SE %d, SH per SE %d, CU per SH %d, active_cu_number %d\n",
4199                         adev->gfx.config.max_shader_engines,
4200                         adev->gfx.config.max_sh_per_se,
4201                         adev->gfx.config.max_cu_per_sh,
4202                         adev->gfx.cu_info.number);
4203
4204         adev->accel_working = true;
4205
4206         amdgpu_vm_check_compute_bug(adev);
4207
4208         /* Initialize the buffer migration limit. */
4209         if (amdgpu_moverate >= 0)
4210                 max_MBps = amdgpu_moverate;
4211         else
4212                 max_MBps = 8; /* Allow 8 MB/s. */
4213         /* Get a log2 for easy divisions. */
4214         adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps));
4215
4216         /*
4217          * Register gpu instance before amdgpu_device_enable_mgpu_fan_boost.
4218          * Otherwise the mgpu fan boost feature will be skipped due to the
4219          * gpu instance is counted less.
4220          */
4221         amdgpu_register_gpu_instance(adev);
4222
4223         /* enable clockgating, etc. after ib tests, etc. since some blocks require
4224          * explicit gating rather than handling it automatically.
4225          */
4226         if (!adev->gmc.xgmi.pending_reset) {
4227                 r = amdgpu_device_ip_late_init(adev);
4228                 if (r) {
4229                         dev_err(adev->dev, "amdgpu_device_ip_late_init failed\n");
4230                         amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_LATE_INIT_FAIL, 0, r);
4231                         goto release_ras_con;
4232                 }
4233                 /* must succeed. */
4234                 amdgpu_ras_resume(adev);
4235                 queue_delayed_work(system_wq, &adev->delayed_init_work,
4236                                    msecs_to_jiffies(AMDGPU_RESUME_MS));
4237         }
4238
4239         if (amdgpu_sriov_vf(adev)) {
4240                 amdgpu_virt_release_full_gpu(adev, true);
4241                 flush_delayed_work(&adev->delayed_init_work);
4242         }
4243
4244         /*
4245          * Place those sysfs registering after `late_init`. As some of those
4246          * operations performed in `late_init` might affect the sysfs
4247          * interfaces creating.
4248          */
4249         r = amdgpu_atombios_sysfs_init(adev);
4250         if (r)
4251                 drm_err(&adev->ddev,
4252                         "registering atombios sysfs failed (%d).\n", r);
4253
4254         r = amdgpu_pm_sysfs_init(adev);
4255         if (r)
4256                 DRM_ERROR("registering pm sysfs failed (%d).\n", r);
4257
4258         r = amdgpu_ucode_sysfs_init(adev);
4259         if (r) {
4260                 adev->ucode_sysfs_en = false;
4261                 DRM_ERROR("Creating firmware sysfs failed (%d).\n", r);
4262         } else
4263                 adev->ucode_sysfs_en = true;
4264
4265         r = sysfs_create_files(&adev->dev->kobj, amdgpu_dev_attributes);
4266         if (r)
4267                 dev_err(adev->dev, "Could not create amdgpu device attr\n");
4268
4269         r = devm_device_add_group(adev->dev, &amdgpu_board_attrs_group);
4270         if (r)
4271                 dev_err(adev->dev,
4272                         "Could not create amdgpu board attributes\n");
4273
4274         amdgpu_fru_sysfs_init(adev);
4275         amdgpu_reg_state_sysfs_init(adev);
4276
4277         if (IS_ENABLED(CONFIG_PERF_EVENTS))
4278                 r = amdgpu_pmu_init(adev);
4279         if (r)
4280                 dev_err(adev->dev, "amdgpu_pmu_init failed\n");
4281
4282         /* Have stored pci confspace at hand for restore in sudden PCI error */
4283         if (amdgpu_device_cache_pci_state(adev->pdev))
4284                 pci_restore_state(pdev);
4285
4286         /* if we have > 1 VGA cards, then disable the amdgpu VGA resources */
4287         /* this will fail for cards that aren't VGA class devices, just
4288          * ignore it
4289          */
4290         if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
4291                 vga_client_register(adev->pdev, amdgpu_device_vga_set_decode);
4292
4293         px = amdgpu_device_supports_px(ddev);
4294
4295         if (px || (!dev_is_removable(&adev->pdev->dev) &&
4296                                 apple_gmux_detect(NULL, NULL)))
4297                 vga_switcheroo_register_client(adev->pdev,
4298                                                &amdgpu_switcheroo_ops, px);
4299
4300         if (px)
4301                 vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
4302
4303         if (adev->gmc.xgmi.pending_reset)
4304                 queue_delayed_work(system_wq, &mgpu_info.delayed_reset_work,
4305                                    msecs_to_jiffies(AMDGPU_RESUME_MS));
4306
4307         amdgpu_device_check_iommu_direct_map(adev);
4308
4309         return 0;
4310
4311 release_ras_con:
4312         if (amdgpu_sriov_vf(adev))
4313                 amdgpu_virt_release_full_gpu(adev, true);
4314
4315         /* failed in exclusive mode due to timeout */
4316         if (amdgpu_sriov_vf(adev) &&
4317                 !amdgpu_sriov_runtime(adev) &&
4318                 amdgpu_virt_mmio_blocked(adev) &&
4319                 !amdgpu_virt_wait_reset(adev)) {
4320                 dev_err(adev->dev, "VF exclusive mode timeout\n");
4321                 /* Don't send request since VF is inactive. */
4322                 adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME;
4323                 adev->virt.ops = NULL;
4324                 r = -EAGAIN;
4325         }
4326         amdgpu_release_ras_context(adev);
4327
4328 failed:
4329         amdgpu_vf_error_trans_all(adev);
4330
4331         return r;
4332 }
4333
4334 static void amdgpu_device_unmap_mmio(struct amdgpu_device *adev)
4335 {
4336
4337         /* Clear all CPU mappings pointing to this device */
4338         unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
4339
4340         /* Unmap all mapped bars - Doorbell, registers and VRAM */
4341         amdgpu_doorbell_fini(adev);
4342
4343         iounmap(adev->rmmio);
4344         adev->rmmio = NULL;
4345         if (adev->mman.aper_base_kaddr)
4346                 iounmap(adev->mman.aper_base_kaddr);
4347         adev->mman.aper_base_kaddr = NULL;
4348
4349         /* Memory manager related */
4350         if (!adev->gmc.xgmi.connected_to_cpu && !adev->gmc.is_app_apu) {
4351                 arch_phys_wc_del(adev->gmc.vram_mtrr);
4352                 arch_io_free_memtype_wc(adev->gmc.aper_base, adev->gmc.aper_size);
4353         }
4354 }
4355
4356 /**
4357  * amdgpu_device_fini_hw - tear down the driver
4358  *
4359  * @adev: amdgpu_device pointer
4360  *
4361  * Tear down the driver info (all asics).
4362  * Called at driver shutdown.
4363  */
4364 void amdgpu_device_fini_hw(struct amdgpu_device *adev)
4365 {
4366         dev_info(adev->dev, "amdgpu: finishing device.\n");
4367         flush_delayed_work(&adev->delayed_init_work);
4368         adev->shutdown = true;
4369
4370         /* make sure IB test finished before entering exclusive mode
4371          * to avoid preemption on IB test
4372          */
4373         if (amdgpu_sriov_vf(adev)) {
4374                 amdgpu_virt_request_full_gpu(adev, false);
4375                 amdgpu_virt_fini_data_exchange(adev);
4376         }
4377
4378         /* disable all interrupts */
4379         amdgpu_irq_disable_all(adev);
4380         if (adev->mode_info.mode_config_initialized) {
4381                 if (!drm_drv_uses_atomic_modeset(adev_to_drm(adev)))
4382                         drm_helper_force_disable_all(adev_to_drm(adev));
4383                 else
4384                         drm_atomic_helper_shutdown(adev_to_drm(adev));
4385         }
4386         amdgpu_fence_driver_hw_fini(adev);
4387
4388         if (adev->mman.initialized)
4389                 drain_workqueue(adev->mman.bdev.wq);
4390
4391         if (adev->pm.sysfs_initialized)
4392                 amdgpu_pm_sysfs_fini(adev);
4393         if (adev->ucode_sysfs_en)
4394                 amdgpu_ucode_sysfs_fini(adev);
4395         sysfs_remove_files(&adev->dev->kobj, amdgpu_dev_attributes);
4396         amdgpu_fru_sysfs_fini(adev);
4397
4398         amdgpu_reg_state_sysfs_fini(adev);
4399
4400         /* disable ras feature must before hw fini */
4401         amdgpu_ras_pre_fini(adev);
4402
4403         amdgpu_ttm_set_buffer_funcs_status(adev, false);
4404
4405         amdgpu_device_ip_fini_early(adev);
4406
4407         amdgpu_irq_fini_hw(adev);
4408
4409         if (adev->mman.initialized)
4410                 ttm_device_clear_dma_mappings(&adev->mman.bdev);
4411
4412         amdgpu_gart_dummy_page_fini(adev);
4413
4414         if (drm_dev_is_unplugged(adev_to_drm(adev)))
4415                 amdgpu_device_unmap_mmio(adev);
4416
4417 }
4418
4419 void amdgpu_device_fini_sw(struct amdgpu_device *adev)
4420 {
4421         int idx;
4422         bool px;
4423
4424         amdgpu_fence_driver_sw_fini(adev);
4425         amdgpu_device_ip_fini(adev);
4426         amdgpu_ucode_release(&adev->firmware.gpu_info_fw);
4427         adev->accel_working = false;
4428         dma_fence_put(rcu_dereference_protected(adev->gang_submit, true));
4429
4430         amdgpu_reset_fini(adev);
4431
4432         /* free i2c buses */
4433         if (!amdgpu_device_has_dc_support(adev))
4434                 amdgpu_i2c_fini(adev);
4435
4436         if (amdgpu_emu_mode != 1)
4437                 amdgpu_atombios_fini(adev);
4438
4439         kfree(adev->bios);
4440         adev->bios = NULL;
4441
4442         kfree(adev->fru_info);
4443         adev->fru_info = NULL;
4444
4445         px = amdgpu_device_supports_px(adev_to_drm(adev));
4446
4447         if (px || (!dev_is_removable(&adev->pdev->dev) &&
4448                                 apple_gmux_detect(NULL, NULL)))
4449                 vga_switcheroo_unregister_client(adev->pdev);
4450
4451         if (px)
4452                 vga_switcheroo_fini_domain_pm_ops(adev->dev);
4453
4454         if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
4455                 vga_client_unregister(adev->pdev);
4456
4457         if (drm_dev_enter(adev_to_drm(adev), &idx)) {
4458
4459                 iounmap(adev->rmmio);
4460                 adev->rmmio = NULL;
4461                 amdgpu_doorbell_fini(adev);
4462                 drm_dev_exit(idx);
4463         }
4464
4465         if (IS_ENABLED(CONFIG_PERF_EVENTS))
4466                 amdgpu_pmu_fini(adev);
4467         if (adev->mman.discovery_bin)
4468                 amdgpu_discovery_fini(adev);
4469
4470         amdgpu_reset_put_reset_domain(adev->reset_domain);
4471         adev->reset_domain = NULL;
4472
4473         kfree(adev->pci_state);
4474
4475 }
4476
4477 /**
4478  * amdgpu_device_evict_resources - evict device resources
4479  * @adev: amdgpu device object
4480  *
4481  * Evicts all ttm device resources(vram BOs, gart table) from the lru list
4482  * of the vram memory type. Mainly used for evicting device resources
4483  * at suspend time.
4484  *
4485  */
4486 static int amdgpu_device_evict_resources(struct amdgpu_device *adev)
4487 {
4488         int ret;
4489
4490         /* No need to evict vram on APUs for suspend to ram or s2idle */
4491         if ((adev->in_s3 || adev->in_s0ix) && (adev->flags & AMD_IS_APU))
4492                 return 0;
4493
4494         ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM);
4495         if (ret)
4496                 DRM_WARN("evicting device resources failed\n");
4497         return ret;
4498 }
4499
4500 /*
4501  * Suspend & resume.
4502  */
4503 /**
4504  * amdgpu_device_prepare - prepare for device suspend
4505  *
4506  * @dev: drm dev pointer
4507  *
4508  * Prepare to put the hw in the suspend state (all asics).
4509  * Returns 0 for success or an error on failure.
4510  * Called at driver suspend.
4511  */
4512 int amdgpu_device_prepare(struct drm_device *dev)
4513 {
4514         struct amdgpu_device *adev = drm_to_adev(dev);
4515         int i, r;
4516
4517         amdgpu_choose_low_power_state(adev);
4518
4519         if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4520                 return 0;
4521
4522         /* Evict the majority of BOs before starting suspend sequence */
4523         r = amdgpu_device_evict_resources(adev);
4524         if (r)
4525                 goto unprepare;
4526
4527         for (i = 0; i < adev->num_ip_blocks; i++) {
4528                 if (!adev->ip_blocks[i].status.valid)
4529                         continue;
4530                 if (!adev->ip_blocks[i].version->funcs->prepare_suspend)
4531                         continue;
4532                 r = adev->ip_blocks[i].version->funcs->prepare_suspend((void *)adev);
4533                 if (r)
4534                         goto unprepare;
4535         }
4536
4537         return 0;
4538
4539 unprepare:
4540         adev->in_s0ix = adev->in_s3 = false;
4541
4542         return r;
4543 }
4544
4545 /**
4546  * amdgpu_device_suspend - initiate device suspend
4547  *
4548  * @dev: drm dev pointer
4549  * @fbcon : notify the fbdev of suspend
4550  *
4551  * Puts the hw in the suspend state (all asics).
4552  * Returns 0 for success or an error on failure.
4553  * Called at driver suspend.
4554  */
4555 int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
4556 {
4557         struct amdgpu_device *adev = drm_to_adev(dev);
4558         int r = 0;
4559
4560         if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4561                 return 0;
4562
4563         adev->in_suspend = true;
4564
4565         if (amdgpu_sriov_vf(adev)) {
4566                 amdgpu_virt_fini_data_exchange(adev);
4567                 r = amdgpu_virt_request_full_gpu(adev, false);
4568                 if (r)
4569                         return r;
4570         }
4571
4572         if (amdgpu_acpi_smart_shift_update(dev, AMDGPU_SS_DEV_D3))
4573                 DRM_WARN("smart shift update failed\n");
4574
4575         if (fbcon)
4576                 drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, true);
4577
4578         cancel_delayed_work_sync(&adev->delayed_init_work);
4579
4580         amdgpu_ras_suspend(adev);
4581
4582         amdgpu_device_ip_suspend_phase1(adev);
4583
4584         if (!adev->in_s0ix)
4585                 amdgpu_amdkfd_suspend(adev, adev->in_runpm);
4586
4587         r = amdgpu_device_evict_resources(adev);
4588         if (r)
4589                 return r;
4590
4591         amdgpu_ttm_set_buffer_funcs_status(adev, false);
4592
4593         amdgpu_fence_driver_hw_fini(adev);
4594
4595         amdgpu_device_ip_suspend_phase2(adev);
4596
4597         if (amdgpu_sriov_vf(adev))
4598                 amdgpu_virt_release_full_gpu(adev, false);
4599
4600         r = amdgpu_dpm_notify_rlc_state(adev, false);
4601         if (r)
4602                 return r;
4603
4604         return 0;
4605 }
4606
4607 /**
4608  * amdgpu_device_resume - initiate device resume
4609  *
4610  * @dev: drm dev pointer
4611  * @fbcon : notify the fbdev of resume
4612  *
4613  * Bring the hw back to operating state (all asics).
4614  * Returns 0 for success or an error on failure.
4615  * Called at driver resume.
4616  */
4617 int amdgpu_device_resume(struct drm_device *dev, bool fbcon)
4618 {
4619         struct amdgpu_device *adev = drm_to_adev(dev);
4620         int r = 0;
4621
4622         if (amdgpu_sriov_vf(adev)) {
4623                 r = amdgpu_virt_request_full_gpu(adev, true);
4624                 if (r)
4625                         return r;
4626         }
4627
4628         if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4629                 return 0;
4630
4631         if (adev->in_s0ix)
4632                 amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D0Entry);
4633
4634         /* post card */
4635         if (amdgpu_device_need_post(adev)) {
4636                 r = amdgpu_device_asic_init(adev);
4637                 if (r)
4638                         dev_err(adev->dev, "amdgpu asic init failed\n");
4639         }
4640
4641         r = amdgpu_device_ip_resume(adev);
4642
4643         if (r) {
4644                 dev_err(adev->dev, "amdgpu_device_ip_resume failed (%d).\n", r);
4645                 goto exit;
4646         }
4647         amdgpu_fence_driver_hw_init(adev);
4648
4649         if (!adev->in_s0ix) {
4650                 r = amdgpu_amdkfd_resume(adev, adev->in_runpm);
4651                 if (r)
4652                         goto exit;
4653         }
4654
4655         r = amdgpu_device_ip_late_init(adev);
4656         if (r)
4657                 goto exit;
4658
4659         queue_delayed_work(system_wq, &adev->delayed_init_work,
4660                            msecs_to_jiffies(AMDGPU_RESUME_MS));
4661 exit:
4662         if (amdgpu_sriov_vf(adev)) {
4663                 amdgpu_virt_init_data_exchange(adev);
4664                 amdgpu_virt_release_full_gpu(adev, true);
4665         }
4666
4667         if (r)
4668                 return r;
4669
4670         /* Make sure IB tests flushed */
4671         flush_delayed_work(&adev->delayed_init_work);
4672
4673         if (fbcon)
4674                 drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, false);
4675
4676         amdgpu_ras_resume(adev);
4677
4678         if (adev->mode_info.num_crtc) {
4679                 /*
4680                  * Most of the connector probing functions try to acquire runtime pm
4681                  * refs to ensure that the GPU is powered on when connector polling is
4682                  * performed. Since we're calling this from a runtime PM callback,
4683                  * trying to acquire rpm refs will cause us to deadlock.
4684                  *
4685                  * Since we're guaranteed to be holding the rpm lock, it's safe to
4686                  * temporarily disable the rpm helpers so this doesn't deadlock us.
4687                  */
4688 #ifdef CONFIG_PM
4689                 dev->dev->power.disable_depth++;
4690 #endif
4691                 if (!adev->dc_enabled)
4692                         drm_helper_hpd_irq_event(dev);
4693                 else
4694                         drm_kms_helper_hotplug_event(dev);
4695 #ifdef CONFIG_PM
4696                 dev->dev->power.disable_depth--;
4697 #endif
4698         }
4699         adev->in_suspend = false;
4700
4701         if (adev->enable_mes)
4702                 amdgpu_mes_self_test(adev);
4703
4704         if (amdgpu_acpi_smart_shift_update(dev, AMDGPU_SS_DEV_D0))
4705                 DRM_WARN("smart shift update failed\n");
4706
4707         return 0;
4708 }
4709
4710 /**
4711  * amdgpu_device_ip_check_soft_reset - did soft reset succeed
4712  *
4713  * @adev: amdgpu_device pointer
4714  *
4715  * The list of all the hardware IPs that make up the asic is walked and
4716  * the check_soft_reset callbacks are run.  check_soft_reset determines
4717  * if the asic is still hung or not.
4718  * Returns true if any of the IPs are still in a hung state, false if not.
4719  */
4720 static bool amdgpu_device_ip_check_soft_reset(struct amdgpu_device *adev)
4721 {
4722         int i;
4723         bool asic_hang = false;
4724
4725         if (amdgpu_sriov_vf(adev))
4726                 return true;
4727
4728         if (amdgpu_asic_need_full_reset(adev))
4729                 return true;
4730
4731         for (i = 0; i < adev->num_ip_blocks; i++) {
4732                 if (!adev->ip_blocks[i].status.valid)
4733                         continue;
4734                 if (adev->ip_blocks[i].version->funcs->check_soft_reset)
4735                         adev->ip_blocks[i].status.hang =
4736                                 adev->ip_blocks[i].version->funcs->check_soft_reset(adev);
4737                 if (adev->ip_blocks[i].status.hang) {
4738                         dev_info(adev->dev, "IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name);
4739                         asic_hang = true;
4740                 }
4741         }
4742         return asic_hang;
4743 }
4744
4745 /**
4746  * amdgpu_device_ip_pre_soft_reset - prepare for soft reset
4747  *
4748  * @adev: amdgpu_device pointer
4749  *
4750  * The list of all the hardware IPs that make up the asic is walked and the
4751  * pre_soft_reset callbacks are run if the block is hung.  pre_soft_reset
4752  * handles any IP specific hardware or software state changes that are
4753  * necessary for a soft reset to succeed.
4754  * Returns 0 on success, negative error code on failure.
4755  */
4756 static int amdgpu_device_ip_pre_soft_reset(struct amdgpu_device *adev)
4757 {
4758         int i, r = 0;
4759
4760         for (i = 0; i < adev->num_ip_blocks; i++) {
4761                 if (!adev->ip_blocks[i].status.valid)
4762                         continue;
4763                 if (adev->ip_blocks[i].status.hang &&
4764                     adev->ip_blocks[i].version->funcs->pre_soft_reset) {
4765                         r = adev->ip_blocks[i].version->funcs->pre_soft_reset(adev);
4766                         if (r)
4767                                 return r;
4768                 }
4769         }
4770
4771         return 0;
4772 }
4773
4774 /**
4775  * amdgpu_device_ip_need_full_reset - check if a full asic reset is needed
4776  *
4777  * @adev: amdgpu_device pointer
4778  *
4779  * Some hardware IPs cannot be soft reset.  If they are hung, a full gpu
4780  * reset is necessary to recover.
4781  * Returns true if a full asic reset is required, false if not.
4782  */
4783 static bool amdgpu_device_ip_need_full_reset(struct amdgpu_device *adev)
4784 {
4785         int i;
4786
4787         if (amdgpu_asic_need_full_reset(adev))
4788                 return true;
4789
4790         for (i = 0; i < adev->num_ip_blocks; i++) {
4791                 if (!adev->ip_blocks[i].status.valid)
4792                         continue;
4793                 if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) ||
4794                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) ||
4795                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) ||
4796                     (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) ||
4797                      adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
4798                         if (adev->ip_blocks[i].status.hang) {
4799                                 dev_info(adev->dev, "Some block need full reset!\n");
4800                                 return true;
4801                         }
4802                 }
4803         }
4804         return false;
4805 }
4806
4807 /**
4808  * amdgpu_device_ip_soft_reset - do a soft reset
4809  *
4810  * @adev: amdgpu_device pointer
4811  *
4812  * The list of all the hardware IPs that make up the asic is walked and the
4813  * soft_reset callbacks are run if the block is hung.  soft_reset handles any
4814  * IP specific hardware or software state changes that are necessary to soft
4815  * reset the IP.
4816  * Returns 0 on success, negative error code on failure.
4817  */
4818 static int amdgpu_device_ip_soft_reset(struct amdgpu_device *adev)
4819 {
4820         int i, r = 0;
4821
4822         for (i = 0; i < adev->num_ip_blocks; i++) {
4823                 if (!adev->ip_blocks[i].status.valid)
4824                         continue;
4825                 if (adev->ip_blocks[i].status.hang &&
4826                     adev->ip_blocks[i].version->funcs->soft_reset) {
4827                         r = adev->ip_blocks[i].version->funcs->soft_reset(adev);
4828                         if (r)
4829                                 return r;
4830                 }
4831         }
4832
4833         return 0;
4834 }
4835
4836 /**
4837  * amdgpu_device_ip_post_soft_reset - clean up from soft reset
4838  *
4839  * @adev: amdgpu_device pointer
4840  *
4841  * The list of all the hardware IPs that make up the asic is walked and the
4842  * post_soft_reset callbacks are run if the asic was hung.  post_soft_reset
4843  * handles any IP specific hardware or software state changes that are
4844  * necessary after the IP has been soft reset.
4845  * Returns 0 on success, negative error code on failure.
4846  */
4847 static int amdgpu_device_ip_post_soft_reset(struct amdgpu_device *adev)
4848 {
4849         int i, r = 0;
4850
4851         for (i = 0; i < adev->num_ip_blocks; i++) {
4852                 if (!adev->ip_blocks[i].status.valid)
4853                         continue;
4854                 if (adev->ip_blocks[i].status.hang &&
4855                     adev->ip_blocks[i].version->funcs->post_soft_reset)
4856                         r = adev->ip_blocks[i].version->funcs->post_soft_reset(adev);
4857                 if (r)
4858                         return r;
4859         }
4860
4861         return 0;
4862 }
4863
4864 /**
4865  * amdgpu_device_recover_vram - Recover some VRAM contents
4866  *
4867  * @adev: amdgpu_device pointer
4868  *
4869  * Restores the contents of VRAM buffers from the shadows in GTT.  Used to
4870  * restore things like GPUVM page tables after a GPU reset where
4871  * the contents of VRAM might be lost.
4872  *
4873  * Returns:
4874  * 0 on success, negative error code on failure.
4875  */
4876 static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
4877 {
4878         struct dma_fence *fence = NULL, *next = NULL;
4879         struct amdgpu_bo *shadow;
4880         struct amdgpu_bo_vm *vmbo;
4881         long r = 1, tmo;
4882
4883         if (amdgpu_sriov_runtime(adev))
4884                 tmo = msecs_to_jiffies(8000);
4885         else
4886                 tmo = msecs_to_jiffies(100);
4887
4888         dev_info(adev->dev, "recover vram bo from shadow start\n");
4889         mutex_lock(&adev->shadow_list_lock);
4890         list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) {
4891                 /* If vm is compute context or adev is APU, shadow will be NULL */
4892                 if (!vmbo->shadow)
4893                         continue;
4894                 shadow = vmbo->shadow;
4895
4896                 /* No need to recover an evicted BO */
4897                 if (shadow->tbo.resource->mem_type != TTM_PL_TT ||
4898                     shadow->tbo.resource->start == AMDGPU_BO_INVALID_OFFSET ||
4899                     shadow->parent->tbo.resource->mem_type != TTM_PL_VRAM)
4900                         continue;
4901
4902                 r = amdgpu_bo_restore_shadow(shadow, &next);
4903                 if (r)
4904                         break;
4905
4906                 if (fence) {
4907                         tmo = dma_fence_wait_timeout(fence, false, tmo);
4908                         dma_fence_put(fence);
4909                         fence = next;
4910                         if (tmo == 0) {
4911                                 r = -ETIMEDOUT;
4912                                 break;
4913                         } else if (tmo < 0) {
4914                                 r = tmo;
4915                                 break;
4916                         }
4917                 } else {
4918                         fence = next;
4919                 }
4920         }
4921         mutex_unlock(&adev->shadow_list_lock);
4922
4923         if (fence)
4924                 tmo = dma_fence_wait_timeout(fence, false, tmo);
4925         dma_fence_put(fence);
4926
4927         if (r < 0 || tmo <= 0) {
4928                 dev_err(adev->dev, "recover vram bo from shadow failed, r is %ld, tmo is %ld\n", r, tmo);
4929                 return -EIO;
4930         }
4931
4932         dev_info(adev->dev, "recover vram bo from shadow done\n");
4933         return 0;
4934 }
4935
4936
4937 /**
4938  * amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
4939  *
4940  * @adev: amdgpu_device pointer
4941  * @from_hypervisor: request from hypervisor
4942  *
4943  * do VF FLR and reinitialize Asic
4944  * return 0 means succeeded otherwise failed
4945  */
4946 static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
4947                                      bool from_hypervisor)
4948 {
4949         int r;
4950         struct amdgpu_hive_info *hive = NULL;
4951         int retry_limit = 0;
4952
4953 retry:
4954         amdgpu_amdkfd_pre_reset(adev);
4955
4956         if (from_hypervisor)
4957                 r = amdgpu_virt_request_full_gpu(adev, true);
4958         else
4959                 r = amdgpu_virt_reset_gpu(adev);
4960         if (r)
4961                 return r;
4962         amdgpu_irq_gpu_reset_resume_helper(adev);
4963
4964         /* some sw clean up VF needs to do before recover */
4965         amdgpu_virt_post_reset(adev);
4966
4967         /* Resume IP prior to SMC */
4968         r = amdgpu_device_ip_reinit_early_sriov(adev);
4969         if (r)
4970                 goto error;
4971
4972         amdgpu_virt_init_data_exchange(adev);
4973
4974         r = amdgpu_device_fw_loading(adev);
4975         if (r)
4976                 return r;
4977
4978         /* now we are okay to resume SMC/CP/SDMA */
4979         r = amdgpu_device_ip_reinit_late_sriov(adev);
4980         if (r)
4981                 goto error;
4982
4983         hive = amdgpu_get_xgmi_hive(adev);
4984         /* Update PSP FW topology after reset */
4985         if (hive && adev->gmc.xgmi.num_physical_nodes > 1)
4986                 r = amdgpu_xgmi_update_topology(hive, adev);
4987
4988         if (hive)
4989                 amdgpu_put_xgmi_hive(hive);
4990
4991         if (!r) {
4992                 r = amdgpu_ib_ring_tests(adev);
4993
4994                 amdgpu_amdkfd_post_reset(adev);
4995         }
4996
4997 error:
4998         if (!r && adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) {
4999                 amdgpu_inc_vram_lost(adev);
5000                 r = amdgpu_device_recover_vram(adev);
5001         }
5002         amdgpu_virt_release_full_gpu(adev, true);
5003
5004         if (AMDGPU_RETRY_SRIOV_RESET(r)) {
5005                 if (retry_limit < AMDGPU_MAX_RETRY_LIMIT) {
5006                         retry_limit++;
5007                         goto retry;
5008                 } else
5009                         DRM_ERROR("GPU reset retry is beyond the retry limit\n");
5010         }
5011
5012         return r;
5013 }
5014
5015 /**
5016  * amdgpu_device_has_job_running - check if there is any job in mirror list
5017  *
5018  * @adev: amdgpu_device pointer
5019  *
5020  * check if there is any job in mirror list
5021  */
5022 bool amdgpu_device_has_job_running(struct amdgpu_device *adev)
5023 {
5024         int i;
5025         struct drm_sched_job *job;
5026
5027         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5028                 struct amdgpu_ring *ring = adev->rings[i];
5029
5030                 if (!amdgpu_ring_sched_ready(ring))
5031                         continue;
5032
5033                 spin_lock(&ring->sched.job_list_lock);
5034                 job = list_first_entry_or_null(&ring->sched.pending_list,
5035                                                struct drm_sched_job, list);
5036                 spin_unlock(&ring->sched.job_list_lock);
5037                 if (job)
5038                         return true;
5039         }
5040         return false;
5041 }
5042
5043 /**
5044  * amdgpu_device_should_recover_gpu - check if we should try GPU recovery
5045  *
5046  * @adev: amdgpu_device pointer
5047  *
5048  * Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
5049  * a hung GPU.
5050  */
5051 bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev)
5052 {
5053
5054         if (amdgpu_gpu_recovery == 0)
5055                 goto disabled;
5056
5057         /* Skip soft reset check in fatal error mode */
5058         if (!amdgpu_ras_is_poison_mode_supported(adev))
5059                 return true;
5060
5061         if (amdgpu_sriov_vf(adev))
5062                 return true;
5063
5064         if (amdgpu_gpu_recovery == -1) {
5065                 switch (adev->asic_type) {
5066 #ifdef CONFIG_DRM_AMDGPU_SI
5067                 case CHIP_VERDE:
5068                 case CHIP_TAHITI:
5069                 case CHIP_PITCAIRN:
5070                 case CHIP_OLAND:
5071                 case CHIP_HAINAN:
5072 #endif
5073 #ifdef CONFIG_DRM_AMDGPU_CIK
5074                 case CHIP_KAVERI:
5075                 case CHIP_KABINI:
5076                 case CHIP_MULLINS:
5077 #endif
5078                 case CHIP_CARRIZO:
5079                 case CHIP_STONEY:
5080                 case CHIP_CYAN_SKILLFISH:
5081                         goto disabled;
5082                 default:
5083                         break;
5084                 }
5085         }
5086
5087         return true;
5088
5089 disabled:
5090                 dev_info(adev->dev, "GPU recovery disabled.\n");
5091                 return false;
5092 }
5093
5094 int amdgpu_device_mode1_reset(struct amdgpu_device *adev)
5095 {
5096         u32 i;
5097         int ret = 0;
5098
5099         amdgpu_atombios_scratch_regs_engine_hung(adev, true);
5100
5101         dev_info(adev->dev, "GPU mode1 reset\n");
5102
5103         /* disable BM */
5104         pci_clear_master(adev->pdev);
5105
5106         amdgpu_device_cache_pci_state(adev->pdev);
5107
5108         if (amdgpu_dpm_is_mode1_reset_supported(adev)) {
5109                 dev_info(adev->dev, "GPU smu mode1 reset\n");
5110                 ret = amdgpu_dpm_mode1_reset(adev);
5111         } else {
5112                 dev_info(adev->dev, "GPU psp mode1 reset\n");
5113                 ret = psp_gpu_reset(adev);
5114         }
5115
5116         if (ret)
5117                 goto mode1_reset_failed;
5118
5119         amdgpu_device_load_pci_state(adev->pdev);
5120         ret = amdgpu_psp_wait_for_bootloader(adev);
5121         if (ret)
5122                 goto mode1_reset_failed;
5123
5124         /* wait for asic to come out of reset */
5125         for (i = 0; i < adev->usec_timeout; i++) {
5126                 u32 memsize = adev->nbio.funcs->get_memsize(adev);
5127
5128                 if (memsize != 0xffffffff)
5129                         break;
5130                 udelay(1);
5131         }
5132
5133         if (i >= adev->usec_timeout) {
5134                 ret = -ETIMEDOUT;
5135                 goto mode1_reset_failed;
5136         }
5137
5138         amdgpu_atombios_scratch_regs_engine_hung(adev, false);
5139
5140         return 0;
5141
5142 mode1_reset_failed:
5143         dev_err(adev->dev, "GPU mode1 reset failed\n");
5144         return ret;
5145 }
5146
5147 int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
5148                                  struct amdgpu_reset_context *reset_context)
5149 {
5150         int i, r = 0;
5151         struct amdgpu_job *job = NULL;
5152         bool need_full_reset =
5153                 test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5154
5155         if (reset_context->reset_req_dev == adev)
5156                 job = reset_context->job;
5157
5158         if (amdgpu_sriov_vf(adev)) {
5159                 /* stop the data exchange thread */
5160                 amdgpu_virt_fini_data_exchange(adev);
5161         }
5162
5163         amdgpu_fence_driver_isr_toggle(adev, true);
5164
5165         /* block all schedulers and reset given job's ring */
5166         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5167                 struct amdgpu_ring *ring = adev->rings[i];
5168
5169                 if (!amdgpu_ring_sched_ready(ring))
5170                         continue;
5171
5172                 /* Clear job fence from fence drv to avoid force_completion
5173                  * leave NULL and vm flush fence in fence drv
5174                  */
5175                 amdgpu_fence_driver_clear_job_fences(ring);
5176
5177                 /* after all hw jobs are reset, hw fence is meaningless, so force_completion */
5178                 amdgpu_fence_driver_force_completion(ring);
5179         }
5180
5181         amdgpu_fence_driver_isr_toggle(adev, false);
5182
5183         if (job && job->vm)
5184                 drm_sched_increase_karma(&job->base);
5185
5186         r = amdgpu_reset_prepare_hwcontext(adev, reset_context);
5187         /* If reset handler not implemented, continue; otherwise return */
5188         if (r == -EOPNOTSUPP)
5189                 r = 0;
5190         else
5191                 return r;
5192
5193         /* Don't suspend on bare metal if we are not going to HW reset the ASIC */
5194         if (!amdgpu_sriov_vf(adev)) {
5195
5196                 if (!need_full_reset)
5197                         need_full_reset = amdgpu_device_ip_need_full_reset(adev);
5198
5199                 if (!need_full_reset && amdgpu_gpu_recovery &&
5200                     amdgpu_device_ip_check_soft_reset(adev)) {
5201                         amdgpu_device_ip_pre_soft_reset(adev);
5202                         r = amdgpu_device_ip_soft_reset(adev);
5203                         amdgpu_device_ip_post_soft_reset(adev);
5204                         if (r || amdgpu_device_ip_check_soft_reset(adev)) {
5205                                 dev_info(adev->dev, "soft reset failed, will fallback to full reset!\n");
5206                                 need_full_reset = true;
5207                         }
5208                 }
5209
5210                 if (need_full_reset)
5211                         r = amdgpu_device_ip_suspend(adev);
5212                 if (need_full_reset)
5213                         set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5214                 else
5215                         clear_bit(AMDGPU_NEED_FULL_RESET,
5216                                   &reset_context->flags);
5217         }
5218
5219         return r;
5220 }
5221
5222 static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
5223 {
5224         int i;
5225
5226         lockdep_assert_held(&adev->reset_domain->sem);
5227
5228         for (i = 0; i < adev->reset_info.num_regs; i++) {
5229                 adev->reset_info.reset_dump_reg_value[i] =
5230                         RREG32(adev->reset_info.reset_dump_reg_list[i]);
5231
5232                 trace_amdgpu_reset_reg_dumps(adev->reset_info.reset_dump_reg_list[i],
5233                                              adev->reset_info.reset_dump_reg_value[i]);
5234         }
5235
5236         return 0;
5237 }
5238
5239 int amdgpu_do_asic_reset(struct list_head *device_list_handle,
5240                          struct amdgpu_reset_context *reset_context)
5241 {
5242         struct amdgpu_device *tmp_adev = NULL;
5243         bool need_full_reset, skip_hw_reset, vram_lost = false;
5244         int r = 0;
5245
5246         /* Try reset handler method first */
5247         tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
5248                                     reset_list);
5249         amdgpu_reset_reg_dumps(tmp_adev);
5250
5251         reset_context->reset_device_list = device_list_handle;
5252         r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
5253         /* If reset handler not implemented, continue; otherwise return */
5254         if (r == -EOPNOTSUPP)
5255                 r = 0;
5256         else
5257                 return r;
5258
5259         /* Reset handler not implemented, use the default method */
5260         need_full_reset =
5261                 test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5262         skip_hw_reset = test_bit(AMDGPU_SKIP_HW_RESET, &reset_context->flags);
5263
5264         /*
5265          * ASIC reset has to be done on all XGMI hive nodes ASAP
5266          * to allow proper links negotiation in FW (within 1 sec)
5267          */
5268         if (!skip_hw_reset && need_full_reset) {
5269                 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5270                         /* For XGMI run all resets in parallel to speed up the process */
5271                         if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
5272                                 tmp_adev->gmc.xgmi.pending_reset = false;
5273                                 if (!queue_work(system_unbound_wq, &tmp_adev->xgmi_reset_work))
5274                                         r = -EALREADY;
5275                         } else
5276                                 r = amdgpu_asic_reset(tmp_adev);
5277
5278                         if (r) {
5279                                 dev_err(tmp_adev->dev, "ASIC reset failed with error, %d for drm dev, %s",
5280                                          r, adev_to_drm(tmp_adev)->unique);
5281                                 goto out;
5282                         }
5283                 }
5284
5285                 /* For XGMI wait for all resets to complete before proceed */
5286                 if (!r) {
5287                         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5288                                 if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
5289                                         flush_work(&tmp_adev->xgmi_reset_work);
5290                                         r = tmp_adev->asic_reset_res;
5291                                         if (r)
5292                                                 break;
5293                                 }
5294                         }
5295                 }
5296         }
5297
5298         if (!r && amdgpu_ras_intr_triggered()) {
5299                 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5300                         amdgpu_ras_reset_error_count(tmp_adev, AMDGPU_RAS_BLOCK__MMHUB);
5301                 }
5302
5303                 amdgpu_ras_intr_cleared();
5304         }
5305
5306         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5307                 if (need_full_reset) {
5308                         /* post card */
5309                         r = amdgpu_device_asic_init(tmp_adev);
5310                         if (r) {
5311                                 dev_warn(tmp_adev->dev, "asic atom init failed!");
5312                         } else {
5313                                 dev_info(tmp_adev->dev, "GPU reset succeeded, trying to resume\n");
5314
5315                                 r = amdgpu_device_ip_resume_phase1(tmp_adev);
5316                                 if (r)
5317                                         goto out;
5318
5319                                 vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
5320
5321                                 amdgpu_coredump(tmp_adev, vram_lost, reset_context);
5322
5323                                 if (vram_lost) {
5324                                         DRM_INFO("VRAM is lost due to GPU reset!\n");
5325                                         amdgpu_inc_vram_lost(tmp_adev);
5326                                 }
5327
5328                                 r = amdgpu_device_fw_loading(tmp_adev);
5329                                 if (r)
5330                                         return r;
5331
5332                                 r = amdgpu_xcp_restore_partition_mode(
5333                                         tmp_adev->xcp_mgr);
5334                                 if (r)
5335                                         goto out;
5336
5337                                 r = amdgpu_device_ip_resume_phase2(tmp_adev);
5338                                 if (r)
5339                                         goto out;
5340
5341                                 if (tmp_adev->mman.buffer_funcs_ring->sched.ready)
5342                                         amdgpu_ttm_set_buffer_funcs_status(tmp_adev, true);
5343
5344                                 if (vram_lost)
5345                                         amdgpu_device_fill_reset_magic(tmp_adev);
5346
5347                                 /*
5348                                  * Add this ASIC as tracked as reset was already
5349                                  * complete successfully.
5350                                  */
5351                                 amdgpu_register_gpu_instance(tmp_adev);
5352
5353                                 if (!reset_context->hive &&
5354                                     tmp_adev->gmc.xgmi.num_physical_nodes > 1)
5355                                         amdgpu_xgmi_add_device(tmp_adev);
5356
5357                                 r = amdgpu_device_ip_late_init(tmp_adev);
5358                                 if (r)
5359                                         goto out;
5360
5361                                 drm_fb_helper_set_suspend_unlocked(adev_to_drm(tmp_adev)->fb_helper, false);
5362
5363                                 /*
5364                                  * The GPU enters bad state once faulty pages
5365                                  * by ECC has reached the threshold, and ras
5366                                  * recovery is scheduled next. So add one check
5367                                  * here to break recovery if it indeed exceeds
5368                                  * bad page threshold, and remind user to
5369                                  * retire this GPU or setting one bigger
5370                                  * bad_page_threshold value to fix this once
5371                                  * probing driver again.
5372                                  */
5373                                 if (!amdgpu_ras_eeprom_check_err_threshold(tmp_adev)) {
5374                                         /* must succeed. */
5375                                         amdgpu_ras_resume(tmp_adev);
5376                                 } else {
5377                                         r = -EINVAL;
5378                                         goto out;
5379                                 }
5380
5381                                 /* Update PSP FW topology after reset */
5382                                 if (reset_context->hive &&
5383                                     tmp_adev->gmc.xgmi.num_physical_nodes > 1)
5384                                         r = amdgpu_xgmi_update_topology(
5385                                                 reset_context->hive, tmp_adev);
5386                         }
5387                 }
5388
5389 out:
5390                 if (!r) {
5391                         amdgpu_irq_gpu_reset_resume_helper(tmp_adev);
5392                         r = amdgpu_ib_ring_tests(tmp_adev);
5393                         if (r) {
5394                                 dev_err(tmp_adev->dev, "ib ring test failed (%d).\n", r);
5395                                 need_full_reset = true;
5396                                 r = -EAGAIN;
5397                                 goto end;
5398                         }
5399                 }
5400
5401                 if (!r)
5402                         r = amdgpu_device_recover_vram(tmp_adev);
5403                 else
5404                         tmp_adev->asic_reset_res = r;
5405         }
5406
5407 end:
5408         if (need_full_reset)
5409                 set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5410         else
5411                 clear_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5412         return r;
5413 }
5414
5415 static void amdgpu_device_set_mp1_state(struct amdgpu_device *adev)
5416 {
5417
5418         switch (amdgpu_asic_reset_method(adev)) {
5419         case AMD_RESET_METHOD_MODE1:
5420                 adev->mp1_state = PP_MP1_STATE_SHUTDOWN;
5421                 break;
5422         case AMD_RESET_METHOD_MODE2:
5423                 adev->mp1_state = PP_MP1_STATE_RESET;
5424                 break;
5425         default:
5426                 adev->mp1_state = PP_MP1_STATE_NONE;
5427                 break;
5428         }
5429 }
5430
5431 static void amdgpu_device_unset_mp1_state(struct amdgpu_device *adev)
5432 {
5433         amdgpu_vf_error_trans_all(adev);
5434         adev->mp1_state = PP_MP1_STATE_NONE;
5435 }
5436
5437 static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev)
5438 {
5439         struct pci_dev *p = NULL;
5440
5441         p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
5442                         adev->pdev->bus->number, 1);
5443         if (p) {
5444                 pm_runtime_enable(&(p->dev));
5445                 pm_runtime_resume(&(p->dev));
5446         }
5447
5448         pci_dev_put(p);
5449 }
5450
5451 static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
5452 {
5453         enum amd_reset_method reset_method;
5454         struct pci_dev *p = NULL;
5455         u64 expires;
5456
5457         /*
5458          * For now, only BACO and mode1 reset are confirmed
5459          * to suffer the audio issue without proper suspended.
5460          */
5461         reset_method = amdgpu_asic_reset_method(adev);
5462         if ((reset_method != AMD_RESET_METHOD_BACO) &&
5463              (reset_method != AMD_RESET_METHOD_MODE1))
5464                 return -EINVAL;
5465
5466         p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
5467                         adev->pdev->bus->number, 1);
5468         if (!p)
5469                 return -ENODEV;
5470
5471         expires = pm_runtime_autosuspend_expiration(&(p->dev));
5472         if (!expires)
5473                 /*
5474                  * If we cannot get the audio device autosuspend delay,
5475                  * a fixed 4S interval will be used. Considering 3S is
5476                  * the audio controller default autosuspend delay setting.
5477                  * 4S used here is guaranteed to cover that.
5478                  */
5479                 expires = ktime_get_mono_fast_ns() + NSEC_PER_SEC * 4ULL;
5480
5481         while (!pm_runtime_status_suspended(&(p->dev))) {
5482                 if (!pm_runtime_suspend(&(p->dev)))
5483                         break;
5484
5485                 if (expires < ktime_get_mono_fast_ns()) {
5486                         dev_warn(adev->dev, "failed to suspend display audio\n");
5487                         pci_dev_put(p);
5488                         /* TODO: abort the succeeding gpu reset? */
5489                         return -ETIMEDOUT;
5490                 }
5491         }
5492
5493         pm_runtime_disable(&(p->dev));
5494
5495         pci_dev_put(p);
5496         return 0;
5497 }
5498
5499 static inline void amdgpu_device_stop_pending_resets(struct amdgpu_device *adev)
5500 {
5501         struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
5502
5503 #if defined(CONFIG_DEBUG_FS)
5504         if (!amdgpu_sriov_vf(adev))
5505                 cancel_work(&adev->reset_work);
5506 #endif
5507
5508         if (adev->kfd.dev)
5509                 cancel_work(&adev->kfd.reset_work);
5510
5511         if (amdgpu_sriov_vf(adev))
5512                 cancel_work(&adev->virt.flr_work);
5513
5514         if (con && adev->ras_enabled)
5515                 cancel_work(&con->recovery_work);
5516
5517 }
5518
5519 /**
5520  * amdgpu_device_gpu_recover - reset the asic and recover scheduler
5521  *
5522  * @adev: amdgpu_device pointer
5523  * @job: which job trigger hang
5524  * @reset_context: amdgpu reset context pointer
5525  *
5526  * Attempt to reset the GPU if it has hung (all asics).
5527  * Attempt to do soft-reset or full-reset and reinitialize Asic
5528  * Returns 0 for success or an error on failure.
5529  */
5530
5531 int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
5532                               struct amdgpu_job *job,
5533                               struct amdgpu_reset_context *reset_context)
5534 {
5535         struct list_head device_list, *device_list_handle =  NULL;
5536         bool job_signaled = false;
5537         struct amdgpu_hive_info *hive = NULL;
5538         struct amdgpu_device *tmp_adev = NULL;
5539         int i, r = 0;
5540         bool need_emergency_restart = false;
5541         bool audio_suspended = false;
5542
5543         /*
5544          * Special case: RAS triggered and full reset isn't supported
5545          */
5546         need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
5547
5548         /*
5549          * Flush RAM to disk so that after reboot
5550          * the user can read log and see why the system rebooted.
5551          */
5552         if (need_emergency_restart && amdgpu_ras_get_context(adev) &&
5553                 amdgpu_ras_get_context(adev)->reboot) {
5554                 DRM_WARN("Emergency reboot.");
5555
5556                 ksys_sync_helper();
5557                 emergency_restart();
5558         }
5559
5560         dev_info(adev->dev, "GPU %s begin!\n",
5561                 need_emergency_restart ? "jobs stop":"reset");
5562
5563         if (!amdgpu_sriov_vf(adev))
5564                 hive = amdgpu_get_xgmi_hive(adev);
5565         if (hive)
5566                 mutex_lock(&hive->hive_lock);
5567
5568         reset_context->job = job;
5569         reset_context->hive = hive;
5570         /*
5571          * Build list of devices to reset.
5572          * In case we are in XGMI hive mode, resort the device list
5573          * to put adev in the 1st position.
5574          */
5575         INIT_LIST_HEAD(&device_list);
5576         if (!amdgpu_sriov_vf(adev) && (adev->gmc.xgmi.num_physical_nodes > 1)) {
5577                 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
5578                         list_add_tail(&tmp_adev->reset_list, &device_list);
5579                         if (adev->shutdown)
5580                                 tmp_adev->shutdown = true;
5581                 }
5582                 if (!list_is_first(&adev->reset_list, &device_list))
5583                         list_rotate_to_front(&adev->reset_list, &device_list);
5584                 device_list_handle = &device_list;
5585         } else {
5586                 list_add_tail(&adev->reset_list, &device_list);
5587                 device_list_handle = &device_list;
5588         }
5589
5590         /* We need to lock reset domain only once both for XGMI and single device */
5591         tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
5592                                     reset_list);
5593         amdgpu_device_lock_reset_domain(tmp_adev->reset_domain);
5594
5595         /* block all schedulers and reset given job's ring */
5596         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5597
5598                 amdgpu_device_set_mp1_state(tmp_adev);
5599
5600                 /*
5601                  * Try to put the audio codec into suspend state
5602                  * before gpu reset started.
5603                  *
5604                  * Due to the power domain of the graphics device
5605                  * is shared with AZ power domain. Without this,
5606                  * we may change the audio hardware from behind
5607                  * the audio driver's back. That will trigger
5608                  * some audio codec errors.
5609                  */
5610                 if (!amdgpu_device_suspend_display_audio(tmp_adev))
5611                         audio_suspended = true;
5612
5613                 amdgpu_ras_set_error_query_ready(tmp_adev, false);
5614
5615                 cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
5616
5617                 if (!amdgpu_sriov_vf(tmp_adev))
5618                         amdgpu_amdkfd_pre_reset(tmp_adev);
5619
5620                 /*
5621                  * Mark these ASICs to be reseted as untracked first
5622                  * And add them back after reset completed
5623                  */
5624                 amdgpu_unregister_gpu_instance(tmp_adev);
5625
5626                 drm_fb_helper_set_suspend_unlocked(adev_to_drm(tmp_adev)->fb_helper, true);
5627
5628                 /* disable ras on ALL IPs */
5629                 if (!need_emergency_restart &&
5630                       amdgpu_device_ip_need_full_reset(tmp_adev))
5631                         amdgpu_ras_suspend(tmp_adev);
5632
5633                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5634                         struct amdgpu_ring *ring = tmp_adev->rings[i];
5635
5636                         if (!amdgpu_ring_sched_ready(ring))
5637                                 continue;
5638
5639                         drm_sched_stop(&ring->sched, job ? &job->base : NULL);
5640
5641                         if (need_emergency_restart)
5642                                 amdgpu_job_stop_all_jobs_on_sched(&ring->sched);
5643                 }
5644                 atomic_inc(&tmp_adev->gpu_reset_counter);
5645         }
5646
5647         if (need_emergency_restart)
5648                 goto skip_sched_resume;
5649
5650         /*
5651          * Must check guilty signal here since after this point all old
5652          * HW fences are force signaled.
5653          *
5654          * job->base holds a reference to parent fence
5655          */
5656         if (job && dma_fence_is_signaled(&job->hw_fence)) {
5657                 job_signaled = true;
5658                 dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
5659                 goto skip_hw_reset;
5660         }
5661
5662 retry:  /* Rest of adevs pre asic reset from XGMI hive. */
5663         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5664                 r = amdgpu_device_pre_asic_reset(tmp_adev, reset_context);
5665                 /*TODO Should we stop ?*/
5666                 if (r) {
5667                         dev_err(tmp_adev->dev, "GPU pre asic reset failed with err, %d for drm dev, %s ",
5668                                   r, adev_to_drm(tmp_adev)->unique);
5669                         tmp_adev->asic_reset_res = r;
5670                 }
5671
5672                 /*
5673                  * Drop all pending non scheduler resets. Scheduler resets
5674                  * were already dropped during drm_sched_stop
5675                  */
5676                 amdgpu_device_stop_pending_resets(tmp_adev);
5677         }
5678
5679         /* Actual ASIC resets if needed.*/
5680         /* Host driver will handle XGMI hive reset for SRIOV */
5681         if (amdgpu_sriov_vf(adev)) {
5682                 r = amdgpu_device_reset_sriov(adev, job ? false : true);
5683                 if (r)
5684                         adev->asic_reset_res = r;
5685
5686                 /* Aldebaran and gfx_11_0_3 support ras in SRIOV, so need resume ras during reset */
5687                 if (amdgpu_ip_version(adev, GC_HWIP, 0) ==
5688                             IP_VERSION(9, 4, 2) ||
5689                     amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(11, 0, 3))
5690                         amdgpu_ras_resume(adev);
5691         } else {
5692                 r = amdgpu_do_asic_reset(device_list_handle, reset_context);
5693                 if (r && r == -EAGAIN)
5694                         goto retry;
5695         }
5696
5697 skip_hw_reset:
5698
5699         /* Post ASIC reset for all devs .*/
5700         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5701
5702                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5703                         struct amdgpu_ring *ring = tmp_adev->rings[i];
5704
5705                         if (!amdgpu_ring_sched_ready(ring))
5706                                 continue;
5707
5708                         drm_sched_start(&ring->sched, true);
5709                 }
5710
5711                 if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled)
5712                         drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
5713
5714                 if (tmp_adev->asic_reset_res)
5715                         r = tmp_adev->asic_reset_res;
5716
5717                 tmp_adev->asic_reset_res = 0;
5718
5719                 if (r) {
5720                         /* bad news, how to tell it to userspace ? */
5721                         dev_info(tmp_adev->dev, "GPU reset(%d) failed\n", atomic_read(&tmp_adev->gpu_reset_counter));
5722                         amdgpu_vf_error_put(tmp_adev, AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0, r);
5723                 } else {
5724                         dev_info(tmp_adev->dev, "GPU reset(%d) succeeded!\n", atomic_read(&tmp_adev->gpu_reset_counter));
5725                         if (amdgpu_acpi_smart_shift_update(adev_to_drm(tmp_adev), AMDGPU_SS_DEV_D0))
5726                                 DRM_WARN("smart shift update failed\n");
5727                 }
5728         }
5729
5730 skip_sched_resume:
5731         list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5732                 /* unlock kfd: SRIOV would do it separately */
5733                 if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
5734                         amdgpu_amdkfd_post_reset(tmp_adev);
5735
5736                 /* kfd_post_reset will do nothing if kfd device is not initialized,
5737                  * need to bring up kfd here if it's not be initialized before
5738                  */
5739                 if (!adev->kfd.init_complete)
5740                         amdgpu_amdkfd_device_init(adev);
5741
5742                 if (audio_suspended)
5743                         amdgpu_device_resume_display_audio(tmp_adev);
5744
5745                 amdgpu_device_unset_mp1_state(tmp_adev);
5746
5747                 amdgpu_ras_set_error_query_ready(tmp_adev, true);
5748         }
5749
5750         tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
5751                                             reset_list);
5752         amdgpu_device_unlock_reset_domain(tmp_adev->reset_domain);
5753
5754         if (hive) {
5755                 mutex_unlock(&hive->hive_lock);
5756                 amdgpu_put_xgmi_hive(hive);
5757         }
5758
5759         if (r)
5760                 dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
5761
5762         atomic_set(&adev->reset_domain->reset_res, r);
5763         return r;
5764 }
5765
5766 /**
5767  * amdgpu_device_partner_bandwidth - find the bandwidth of appropriate partner
5768  *
5769  * @adev: amdgpu_device pointer
5770  * @speed: pointer to the speed of the link
5771  * @width: pointer to the width of the link
5772  *
5773  * Evaluate the hierarchy to find the speed and bandwidth capabilities of the
5774  * first physical partner to an AMD dGPU.
5775  * This will exclude any virtual switches and links.
5776  */
5777 static void amdgpu_device_partner_bandwidth(struct amdgpu_device *adev,
5778                                             enum pci_bus_speed *speed,
5779                                             enum pcie_link_width *width)
5780 {
5781         struct pci_dev *parent = adev->pdev;
5782
5783         if (!speed || !width)
5784                 return;
5785
5786         *speed = PCI_SPEED_UNKNOWN;
5787         *width = PCIE_LNK_WIDTH_UNKNOWN;
5788
5789         while ((parent = pci_upstream_bridge(parent))) {
5790                 /* skip upstream/downstream switches internal to dGPU*/
5791                 if (parent->vendor == PCI_VENDOR_ID_ATI)
5792                         continue;
5793                 *speed = pcie_get_speed_cap(parent);
5794                 *width = pcie_get_width_cap(parent);
5795                 break;
5796         }
5797 }
5798
5799 /**
5800  * amdgpu_device_get_pcie_info - fence pcie info about the PCIE slot
5801  *
5802  * @adev: amdgpu_device pointer
5803  *
5804  * Fetchs and stores in the driver the PCIE capabilities (gen speed
5805  * and lanes) of the slot the device is in. Handles APUs and
5806  * virtualized environments where PCIE config space may not be available.
5807  */
5808 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)
5809 {
5810         struct pci_dev *pdev;
5811         enum pci_bus_speed speed_cap, platform_speed_cap;
5812         enum pcie_link_width platform_link_width;
5813
5814         if (amdgpu_pcie_gen_cap)
5815                 adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
5816
5817         if (amdgpu_pcie_lane_cap)
5818                 adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap;
5819
5820         /* covers APUs as well */
5821         if (pci_is_root_bus(adev->pdev->bus) && !amdgpu_passthrough(adev)) {
5822                 if (adev->pm.pcie_gen_mask == 0)
5823                         adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK;
5824                 if (adev->pm.pcie_mlw_mask == 0)
5825                         adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK;
5826                 return;
5827         }
5828
5829         if (adev->pm.pcie_gen_mask && adev->pm.pcie_mlw_mask)
5830                 return;
5831
5832         amdgpu_device_partner_bandwidth(adev, &platform_speed_cap,
5833                                         &platform_link_width);
5834
5835         if (adev->pm.pcie_gen_mask == 0) {
5836                 /* asic caps */
5837                 pdev = adev->pdev;
5838                 speed_cap = pcie_get_speed_cap(pdev);
5839                 if (speed_cap == PCI_SPEED_UNKNOWN) {
5840                         adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5841                                                   CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5842                                                   CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
5843                 } else {
5844                         if (speed_cap == PCIE_SPEED_32_0GT)
5845                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5846                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5847                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
5848                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 |
5849                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN5);
5850                         else if (speed_cap == PCIE_SPEED_16_0GT)
5851                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5852                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5853                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
5854                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4);
5855                         else if (speed_cap == PCIE_SPEED_8_0GT)
5856                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5857                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5858                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
5859                         else if (speed_cap == PCIE_SPEED_5_0GT)
5860                                 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5861                                                           CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2);
5862                         else
5863                                 adev->pm.pcie_gen_mask |= CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1;
5864                 }
5865                 /* platform caps */
5866                 if (platform_speed_cap == PCI_SPEED_UNKNOWN) {
5867                         adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5868                                                    CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
5869                 } else {
5870                         if (platform_speed_cap == PCIE_SPEED_32_0GT)
5871                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5872                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5873                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
5874                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 |
5875                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN5);
5876                         else if (platform_speed_cap == PCIE_SPEED_16_0GT)
5877                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5878                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5879                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
5880                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4);
5881                         else if (platform_speed_cap == PCIE_SPEED_8_0GT)
5882                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5883                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
5884                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3);
5885                         else if (platform_speed_cap == PCIE_SPEED_5_0GT)
5886                                 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
5887                                                            CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
5888                         else
5889                                 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1;
5890
5891                 }
5892         }
5893         if (adev->pm.pcie_mlw_mask == 0) {
5894                 if (platform_link_width == PCIE_LNK_WIDTH_UNKNOWN) {
5895                         adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_PCIE_MLW_MASK;
5896                 } else {
5897                         switch (platform_link_width) {
5898                         case PCIE_LNK_X32:
5899                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 |
5900                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
5901                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
5902                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
5903                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
5904                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5905                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5906                                 break;
5907                         case PCIE_LNK_X16:
5908                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
5909                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
5910                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
5911                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
5912                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5913                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5914                                 break;
5915                         case PCIE_LNK_X12:
5916                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
5917                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
5918                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
5919                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5920                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5921                                 break;
5922                         case PCIE_LNK_X8:
5923                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
5924                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
5925                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5926                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5927                                 break;
5928                         case PCIE_LNK_X4:
5929                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
5930                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5931                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5932                                 break;
5933                         case PCIE_LNK_X2:
5934                                 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
5935                                                           CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
5936                                 break;
5937                         case PCIE_LNK_X1:
5938                                 adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1;
5939                                 break;
5940                         default:
5941                                 break;
5942                         }
5943                 }
5944         }
5945 }
5946
5947 /**
5948  * amdgpu_device_is_peer_accessible - Check peer access through PCIe BAR
5949  *
5950  * @adev: amdgpu_device pointer
5951  * @peer_adev: amdgpu_device pointer for peer device trying to access @adev
5952  *
5953  * Return true if @peer_adev can access (DMA) @adev through the PCIe
5954  * BAR, i.e. @adev is "large BAR" and the BAR matches the DMA mask of
5955  * @peer_adev.
5956  */
5957 bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
5958                                       struct amdgpu_device *peer_adev)
5959 {
5960 #ifdef CONFIG_HSA_AMD_P2P
5961         uint64_t address_mask = peer_adev->dev->dma_mask ?
5962                 ~*peer_adev->dev->dma_mask : ~((1ULL << 32) - 1);
5963         resource_size_t aper_limit =
5964                 adev->gmc.aper_base + adev->gmc.aper_size - 1;
5965         bool p2p_access =
5966                 !adev->gmc.xgmi.connected_to_cpu &&
5967                 !(pci_p2pdma_distance(adev->pdev, peer_adev->dev, false) < 0);
5968
5969         return pcie_p2p && p2p_access && (adev->gmc.visible_vram_size &&
5970                 adev->gmc.real_vram_size == adev->gmc.visible_vram_size &&
5971                 !(adev->gmc.aper_base & address_mask ||
5972                   aper_limit & address_mask));
5973 #else
5974         return false;
5975 #endif
5976 }
5977
5978 int amdgpu_device_baco_enter(struct drm_device *dev)
5979 {
5980         struct amdgpu_device *adev = drm_to_adev(dev);
5981         struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
5982
5983         if (!amdgpu_device_supports_baco(dev))
5984                 return -ENOTSUPP;
5985
5986         if (ras && adev->ras_enabled &&
5987             adev->nbio.funcs->enable_doorbell_interrupt)
5988                 adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
5989
5990         return amdgpu_dpm_baco_enter(adev);
5991 }
5992
5993 int amdgpu_device_baco_exit(struct drm_device *dev)
5994 {
5995         struct amdgpu_device *adev = drm_to_adev(dev);
5996         struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
5997         int ret = 0;
5998
5999         if (!amdgpu_device_supports_baco(dev))
6000                 return -ENOTSUPP;
6001
6002         ret = amdgpu_dpm_baco_exit(adev);
6003         if (ret)
6004                 return ret;
6005
6006         if (ras && adev->ras_enabled &&
6007             adev->nbio.funcs->enable_doorbell_interrupt)
6008                 adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
6009
6010         if (amdgpu_passthrough(adev) &&
6011             adev->nbio.funcs->clear_doorbell_interrupt)
6012                 adev->nbio.funcs->clear_doorbell_interrupt(adev);
6013
6014         return 0;
6015 }
6016
6017 /**
6018  * amdgpu_pci_error_detected - Called when a PCI error is detected.
6019  * @pdev: PCI device struct
6020  * @state: PCI channel state
6021  *
6022  * Description: Called when a PCI error is detected.
6023  *
6024  * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT.
6025  */
6026 pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
6027 {
6028         struct drm_device *dev = pci_get_drvdata(pdev);
6029         struct amdgpu_device *adev = drm_to_adev(dev);
6030         int i;
6031
6032         DRM_INFO("PCI error: detected callback, state(%d)!!\n", state);
6033
6034         if (adev->gmc.xgmi.num_physical_nodes > 1) {
6035                 DRM_WARN("No support for XGMI hive yet...");
6036                 return PCI_ERS_RESULT_DISCONNECT;
6037         }
6038
6039         adev->pci_channel_state = state;
6040
6041         switch (state) {
6042         case pci_channel_io_normal:
6043                 return PCI_ERS_RESULT_CAN_RECOVER;
6044         /* Fatal error, prepare for slot reset */
6045         case pci_channel_io_frozen:
6046                 /*
6047                  * Locking adev->reset_domain->sem will prevent any external access
6048                  * to GPU during PCI error recovery
6049                  */
6050                 amdgpu_device_lock_reset_domain(adev->reset_domain);
6051                 amdgpu_device_set_mp1_state(adev);
6052
6053                 /*
6054                  * Block any work scheduling as we do for regular GPU reset
6055                  * for the duration of the recovery
6056                  */
6057                 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
6058                         struct amdgpu_ring *ring = adev->rings[i];
6059
6060                         if (!amdgpu_ring_sched_ready(ring))
6061                                 continue;
6062
6063                         drm_sched_stop(&ring->sched, NULL);
6064                 }
6065                 atomic_inc(&adev->gpu_reset_counter);
6066                 return PCI_ERS_RESULT_NEED_RESET;
6067         case pci_channel_io_perm_failure:
6068                 /* Permanent error, prepare for device removal */
6069                 return PCI_ERS_RESULT_DISCONNECT;
6070         }
6071
6072         return PCI_ERS_RESULT_NEED_RESET;
6073 }
6074
6075 /**
6076  * amdgpu_pci_mmio_enabled - Enable MMIO and dump debug registers
6077  * @pdev: pointer to PCI device
6078  */
6079 pci_ers_result_t amdgpu_pci_mmio_enabled(struct pci_dev *pdev)
6080 {
6081
6082         DRM_INFO("PCI error: mmio enabled callback!!\n");
6083
6084         /* TODO - dump whatever for debugging purposes */
6085
6086         /* This called only if amdgpu_pci_error_detected returns
6087          * PCI_ERS_RESULT_CAN_RECOVER. Read/write to the device still
6088          * works, no need to reset slot.
6089          */
6090
6091         return PCI_ERS_RESULT_RECOVERED;
6092 }
6093
6094 /**
6095  * amdgpu_pci_slot_reset - Called when PCI slot has been reset.
6096  * @pdev: PCI device struct
6097  *
6098  * Description: This routine is called by the pci error recovery
6099  * code after the PCI slot has been reset, just before we
6100  * should resume normal operations.
6101  */
6102 pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev)
6103 {
6104         struct drm_device *dev = pci_get_drvdata(pdev);
6105         struct amdgpu_device *adev = drm_to_adev(dev);
6106         int r, i;
6107         struct amdgpu_reset_context reset_context;
6108         u32 memsize;
6109         struct list_head device_list;
6110
6111         DRM_INFO("PCI error: slot reset callback!!\n");
6112
6113         memset(&reset_context, 0, sizeof(reset_context));
6114
6115         INIT_LIST_HEAD(&device_list);
6116         list_add_tail(&adev->reset_list, &device_list);
6117
6118         /* wait for asic to come out of reset */
6119         msleep(500);
6120
6121         /* Restore PCI confspace */
6122         amdgpu_device_load_pci_state(pdev);
6123
6124         /* confirm  ASIC came out of reset */
6125         for (i = 0; i < adev->usec_timeout; i++) {
6126                 memsize = amdgpu_asic_get_config_memsize(adev);
6127
6128                 if (memsize != 0xffffffff)
6129                         break;
6130                 udelay(1);
6131         }
6132         if (memsize == 0xffffffff) {
6133                 r = -ETIME;
6134                 goto out;
6135         }
6136
6137         reset_context.method = AMD_RESET_METHOD_NONE;
6138         reset_context.reset_req_dev = adev;
6139         set_bit(AMDGPU_NEED_FULL_RESET, &reset_context.flags);
6140         set_bit(AMDGPU_SKIP_HW_RESET, &reset_context.flags);
6141
6142         adev->no_hw_access = true;
6143         r = amdgpu_device_pre_asic_reset(adev, &reset_context);
6144         adev->no_hw_access = false;
6145         if (r)
6146                 goto out;
6147
6148         r = amdgpu_do_asic_reset(&device_list, &reset_context);
6149
6150 out:
6151         if (!r) {
6152                 if (amdgpu_device_cache_pci_state(adev->pdev))
6153                         pci_restore_state(adev->pdev);
6154
6155                 DRM_INFO("PCIe error recovery succeeded\n");
6156         } else {
6157                 DRM_ERROR("PCIe error recovery failed, err:%d", r);
6158                 amdgpu_device_unset_mp1_state(adev);
6159                 amdgpu_device_unlock_reset_domain(adev->reset_domain);
6160         }
6161
6162         return r ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
6163 }
6164
6165 /**
6166  * amdgpu_pci_resume() - resume normal ops after PCI reset
6167  * @pdev: pointer to PCI device
6168  *
6169  * Called when the error recovery driver tells us that its
6170  * OK to resume normal operation.
6171  */
6172 void amdgpu_pci_resume(struct pci_dev *pdev)
6173 {
6174         struct drm_device *dev = pci_get_drvdata(pdev);
6175         struct amdgpu_device *adev = drm_to_adev(dev);
6176         int i;
6177
6178
6179         DRM_INFO("PCI error: resume callback!!\n");
6180
6181         /* Only continue execution for the case of pci_channel_io_frozen */
6182         if (adev->pci_channel_state != pci_channel_io_frozen)
6183                 return;
6184
6185         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
6186                 struct amdgpu_ring *ring = adev->rings[i];
6187
6188                 if (!amdgpu_ring_sched_ready(ring))
6189                         continue;
6190
6191                 drm_sched_start(&ring->sched, true);
6192         }
6193
6194         amdgpu_device_unset_mp1_state(adev);
6195         amdgpu_device_unlock_reset_domain(adev->reset_domain);
6196 }
6197
6198 bool amdgpu_device_cache_pci_state(struct pci_dev *pdev)
6199 {
6200         struct drm_device *dev = pci_get_drvdata(pdev);
6201         struct amdgpu_device *adev = drm_to_adev(dev);
6202         int r;
6203
6204         r = pci_save_state(pdev);
6205         if (!r) {
6206                 kfree(adev->pci_state);
6207
6208                 adev->pci_state = pci_store_saved_state(pdev);
6209
6210                 if (!adev->pci_state) {
6211                         DRM_ERROR("Failed to store PCI saved state");
6212                         return false;
6213                 }
6214         } else {
6215                 DRM_WARN("Failed to save PCI state, err:%d\n", r);
6216                 return false;
6217         }
6218
6219         return true;
6220 }
6221
6222 bool amdgpu_device_load_pci_state(struct pci_dev *pdev)
6223 {
6224         struct drm_device *dev = pci_get_drvdata(pdev);
6225         struct amdgpu_device *adev = drm_to_adev(dev);
6226         int r;
6227
6228         if (!adev->pci_state)
6229                 return false;
6230
6231         r = pci_load_saved_state(pdev, adev->pci_state);
6232
6233         if (!r) {
6234                 pci_restore_state(pdev);
6235         } else {
6236                 DRM_WARN("Failed to load PCI state, err:%d\n", r);
6237                 return false;
6238         }
6239
6240         return true;
6241 }
6242
6243 void amdgpu_device_flush_hdp(struct amdgpu_device *adev,
6244                 struct amdgpu_ring *ring)
6245 {
6246 #ifdef CONFIG_X86_64
6247         if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
6248                 return;
6249 #endif
6250         if (adev->gmc.xgmi.connected_to_cpu)
6251                 return;
6252
6253         if (ring && ring->funcs->emit_hdp_flush)
6254                 amdgpu_ring_emit_hdp_flush(ring);
6255         else
6256                 amdgpu_asic_flush_hdp(adev, ring);
6257 }
6258
6259 void amdgpu_device_invalidate_hdp(struct amdgpu_device *adev,
6260                 struct amdgpu_ring *ring)
6261 {
6262 #ifdef CONFIG_X86_64
6263         if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
6264                 return;
6265 #endif
6266         if (adev->gmc.xgmi.connected_to_cpu)
6267                 return;
6268
6269         amdgpu_asic_invalidate_hdp(adev, ring);
6270 }
6271
6272 int amdgpu_in_reset(struct amdgpu_device *adev)
6273 {
6274         return atomic_read(&adev->reset_domain->in_gpu_reset);
6275 }
6276
6277 /**
6278  * amdgpu_device_halt() - bring hardware to some kind of halt state
6279  *
6280  * @adev: amdgpu_device pointer
6281  *
6282  * Bring hardware to some kind of halt state so that no one can touch it
6283  * any more. It will help to maintain error context when error occurred.
6284  * Compare to a simple hang, the system will keep stable at least for SSH
6285  * access. Then it should be trivial to inspect the hardware state and
6286  * see what's going on. Implemented as following:
6287  *
6288  * 1. drm_dev_unplug() makes device inaccessible to user space(IOCTLs, etc),
6289  *    clears all CPU mappings to device, disallows remappings through page faults
6290  * 2. amdgpu_irq_disable_all() disables all interrupts
6291  * 3. amdgpu_fence_driver_hw_fini() signals all HW fences
6292  * 4. set adev->no_hw_access to avoid potential crashes after setp 5
6293  * 5. amdgpu_device_unmap_mmio() clears all MMIO mappings
6294  * 6. pci_disable_device() and pci_wait_for_pending_transaction()
6295  *    flush any in flight DMA operations
6296  */
6297 void amdgpu_device_halt(struct amdgpu_device *adev)
6298 {
6299         struct pci_dev *pdev = adev->pdev;
6300         struct drm_device *ddev = adev_to_drm(adev);
6301
6302         amdgpu_xcp_dev_unplug(adev);
6303         drm_dev_unplug(ddev);
6304
6305         amdgpu_irq_disable_all(adev);
6306
6307         amdgpu_fence_driver_hw_fini(adev);
6308
6309         adev->no_hw_access = true;
6310
6311         amdgpu_device_unmap_mmio(adev);
6312
6313         pci_disable_device(pdev);
6314         pci_wait_for_pending_transaction(pdev);
6315 }
6316
6317 u32 amdgpu_device_pcie_port_rreg(struct amdgpu_device *adev,
6318                                 u32 reg)
6319 {
6320         unsigned long flags, address, data;
6321         u32 r;
6322
6323         address = adev->nbio.funcs->get_pcie_port_index_offset(adev);
6324         data = adev->nbio.funcs->get_pcie_port_data_offset(adev);
6325
6326         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
6327         WREG32(address, reg * 4);
6328         (void)RREG32(address);
6329         r = RREG32(data);
6330         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
6331         return r;
6332 }
6333
6334 void amdgpu_device_pcie_port_wreg(struct amdgpu_device *adev,
6335                                 u32 reg, u32 v)
6336 {
6337         unsigned long flags, address, data;
6338
6339         address = adev->nbio.funcs->get_pcie_port_index_offset(adev);
6340         data = adev->nbio.funcs->get_pcie_port_data_offset(adev);
6341
6342         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
6343         WREG32(address, reg * 4);
6344         (void)RREG32(address);
6345         WREG32(data, v);
6346         (void)RREG32(data);
6347         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
6348 }
6349
6350 /**
6351  * amdgpu_device_switch_gang - switch to a new gang
6352  * @adev: amdgpu_device pointer
6353  * @gang: the gang to switch to
6354  *
6355  * Try to switch to a new gang.
6356  * Returns: NULL if we switched to the new gang or a reference to the current
6357  * gang leader.
6358  */
6359 struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev,
6360                                             struct dma_fence *gang)
6361 {
6362         struct dma_fence *old = NULL;
6363
6364         do {
6365                 dma_fence_put(old);
6366                 rcu_read_lock();
6367                 old = dma_fence_get_rcu_safe(&adev->gang_submit);
6368                 rcu_read_unlock();
6369
6370                 if (old == gang)
6371                         break;
6372
6373                 if (!dma_fence_is_signaled(old))
6374                         return old;
6375
6376         } while (cmpxchg((struct dma_fence __force **)&adev->gang_submit,
6377                          old, gang) != old);
6378
6379         dma_fence_put(old);
6380         return NULL;
6381 }
6382
6383 bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev)
6384 {
6385         switch (adev->asic_type) {
6386 #ifdef CONFIG_DRM_AMDGPU_SI
6387         case CHIP_HAINAN:
6388 #endif
6389         case CHIP_TOPAZ:
6390                 /* chips with no display hardware */
6391                 return false;
6392 #ifdef CONFIG_DRM_AMDGPU_SI
6393         case CHIP_TAHITI:
6394         case CHIP_PITCAIRN:
6395         case CHIP_VERDE:
6396         case CHIP_OLAND:
6397 #endif
6398 #ifdef CONFIG_DRM_AMDGPU_CIK
6399         case CHIP_BONAIRE:
6400         case CHIP_HAWAII:
6401         case CHIP_KAVERI:
6402         case CHIP_KABINI:
6403         case CHIP_MULLINS:
6404 #endif
6405         case CHIP_TONGA:
6406         case CHIP_FIJI:
6407         case CHIP_POLARIS10:
6408         case CHIP_POLARIS11:
6409         case CHIP_POLARIS12:
6410         case CHIP_VEGAM:
6411         case CHIP_CARRIZO:
6412         case CHIP_STONEY:
6413                 /* chips with display hardware */
6414                 return true;
6415         default:
6416                 /* IP discovery */
6417                 if (!amdgpu_ip_version(adev, DCE_HWIP, 0) ||
6418                     (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK))
6419                         return false;
6420                 return true;
6421         }
6422 }
6423
6424 uint32_t amdgpu_device_wait_on_rreg(struct amdgpu_device *adev,
6425                 uint32_t inst, uint32_t reg_addr, char reg_name[],
6426                 uint32_t expected_value, uint32_t mask)
6427 {
6428         uint32_t ret = 0;
6429         uint32_t old_ = 0;
6430         uint32_t tmp_ = RREG32(reg_addr);
6431         uint32_t loop = adev->usec_timeout;
6432
6433         while ((tmp_ & (mask)) != (expected_value)) {
6434                 if (old_ != tmp_) {
6435                         loop = adev->usec_timeout;
6436                         old_ = tmp_;
6437                 } else
6438                         udelay(1);
6439                 tmp_ = RREG32(reg_addr);
6440                 loop--;
6441                 if (!loop) {
6442                         DRM_WARN("Register(%d) [%s] failed to reach value 0x%08x != 0x%08xn",
6443                                   inst, reg_name, (uint32_t)expected_value,
6444                                   (uint32_t)(tmp_ & (mask)));
6445                         ret = -ETIMEDOUT;
6446                         break;
6447                 }
6448         }
6449         return ret;
6450 }
This page took 0.462861 seconds and 4 git commands to generate.