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