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