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