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