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