xref: /openbmc/linux/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c (revision 75b1a8f9d62e50f05d0e4e9f3c8bcde32527ffc1)
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_amdkfd_device_fini(adev);
2552 
2553 	amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2554 	amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
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("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 			break;
4210 		default:
4211 			goto disabled;
4212 		}
4213 	}
4214 
4215 	return true;
4216 
4217 disabled:
4218 		dev_info(adev->dev, "GPU recovery disabled.\n");
4219 		return false;
4220 }
4221 
4222 
4223 static int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
4224 					struct amdgpu_job *job,
4225 					bool *need_full_reset_arg)
4226 {
4227 	int i, r = 0;
4228 	bool need_full_reset  = *need_full_reset_arg;
4229 
4230 	amdgpu_debugfs_wait_dump(adev);
4231 
4232 	if (amdgpu_sriov_vf(adev)) {
4233 		/* stop the data exchange thread */
4234 		amdgpu_virt_fini_data_exchange(adev);
4235 	}
4236 
4237 	/* block all schedulers and reset given job's ring */
4238 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4239 		struct amdgpu_ring *ring = adev->rings[i];
4240 
4241 		if (!ring || !ring->sched.thread)
4242 			continue;
4243 
4244 		/* after all hw jobs are reset, hw fence is meaningless, so force_completion */
4245 		amdgpu_fence_driver_force_completion(ring);
4246 	}
4247 
4248 	if(job)
4249 		drm_sched_increase_karma(&job->base);
4250 
4251 	/* Don't suspend on bare metal if we are not going to HW reset the ASIC */
4252 	if (!amdgpu_sriov_vf(adev)) {
4253 
4254 		if (!need_full_reset)
4255 			need_full_reset = amdgpu_device_ip_need_full_reset(adev);
4256 
4257 		if (!need_full_reset) {
4258 			amdgpu_device_ip_pre_soft_reset(adev);
4259 			r = amdgpu_device_ip_soft_reset(adev);
4260 			amdgpu_device_ip_post_soft_reset(adev);
4261 			if (r || amdgpu_device_ip_check_soft_reset(adev)) {
4262 				dev_info(adev->dev, "soft reset failed, will fallback to full reset!\n");
4263 				need_full_reset = true;
4264 			}
4265 		}
4266 
4267 		if (need_full_reset)
4268 			r = amdgpu_device_ip_suspend(adev);
4269 
4270 		*need_full_reset_arg = need_full_reset;
4271 	}
4272 
4273 	return r;
4274 }
4275 
4276 static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive,
4277 			       struct list_head *device_list_handle,
4278 			       bool *need_full_reset_arg,
4279 			       bool skip_hw_reset)
4280 {
4281 	struct amdgpu_device *tmp_adev = NULL;
4282 	bool need_full_reset = *need_full_reset_arg, vram_lost = false;
4283 	int r = 0;
4284 
4285 	/*
4286 	 * ASIC reset has to be done on all HGMI hive nodes ASAP
4287 	 * to allow proper links negotiation in FW (within 1 sec)
4288 	 */
4289 	if (!skip_hw_reset && need_full_reset) {
4290 		list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4291 			/* For XGMI run all resets in parallel to speed up the process */
4292 			if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
4293 				if (!queue_work(system_unbound_wq, &tmp_adev->xgmi_reset_work))
4294 					r = -EALREADY;
4295 			} else
4296 				r = amdgpu_asic_reset(tmp_adev);
4297 
4298 			if (r) {
4299 				dev_err(tmp_adev->dev, "ASIC reset failed with error, %d for drm dev, %s",
4300 					 r, adev_to_drm(tmp_adev)->unique);
4301 				break;
4302 			}
4303 		}
4304 
4305 		/* For XGMI wait for all resets to complete before proceed */
4306 		if (!r) {
4307 			list_for_each_entry(tmp_adev, device_list_handle,
4308 					    gmc.xgmi.head) {
4309 				if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
4310 					flush_work(&tmp_adev->xgmi_reset_work);
4311 					r = tmp_adev->asic_reset_res;
4312 					if (r)
4313 						break;
4314 				}
4315 			}
4316 		}
4317 	}
4318 
4319 	if (!r && amdgpu_ras_intr_triggered()) {
4320 		list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4321 			if (tmp_adev->mmhub.funcs &&
4322 			    tmp_adev->mmhub.funcs->reset_ras_error_count)
4323 				tmp_adev->mmhub.funcs->reset_ras_error_count(tmp_adev);
4324 		}
4325 
4326 		amdgpu_ras_intr_cleared();
4327 	}
4328 
4329 	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4330 		if (need_full_reset) {
4331 			/* post card */
4332 			if (amdgpu_device_asic_init(tmp_adev))
4333 				dev_warn(tmp_adev->dev, "asic atom init failed!");
4334 
4335 			if (!r) {
4336 				dev_info(tmp_adev->dev, "GPU reset succeeded, trying to resume\n");
4337 				r = amdgpu_device_ip_resume_phase1(tmp_adev);
4338 				if (r)
4339 					goto out;
4340 
4341 				vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
4342 				if (vram_lost) {
4343 					DRM_INFO("VRAM is lost due to GPU reset!\n");
4344 					amdgpu_inc_vram_lost(tmp_adev);
4345 				}
4346 
4347 				r = amdgpu_gtt_mgr_recover(ttm_manager_type(&tmp_adev->mman.bdev, TTM_PL_TT));
4348 				if (r)
4349 					goto out;
4350 
4351 				r = amdgpu_device_fw_loading(tmp_adev);
4352 				if (r)
4353 					return r;
4354 
4355 				r = amdgpu_device_ip_resume_phase2(tmp_adev);
4356 				if (r)
4357 					goto out;
4358 
4359 				if (vram_lost)
4360 					amdgpu_device_fill_reset_magic(tmp_adev);
4361 
4362 				/*
4363 				 * Add this ASIC as tracked as reset was already
4364 				 * complete successfully.
4365 				 */
4366 				amdgpu_register_gpu_instance(tmp_adev);
4367 
4368 				r = amdgpu_device_ip_late_init(tmp_adev);
4369 				if (r)
4370 					goto out;
4371 
4372 				amdgpu_fbdev_set_suspend(tmp_adev, 0);
4373 
4374 				/*
4375 				 * The GPU enters bad state once faulty pages
4376 				 * by ECC has reached the threshold, and ras
4377 				 * recovery is scheduled next. So add one check
4378 				 * here to break recovery if it indeed exceeds
4379 				 * bad page threshold, and remind user to
4380 				 * retire this GPU or setting one bigger
4381 				 * bad_page_threshold value to fix this once
4382 				 * probing driver again.
4383 				 */
4384 				if (!amdgpu_ras_check_err_threshold(tmp_adev)) {
4385 					/* must succeed. */
4386 					amdgpu_ras_resume(tmp_adev);
4387 				} else {
4388 					r = -EINVAL;
4389 					goto out;
4390 				}
4391 
4392 				/* Update PSP FW topology after reset */
4393 				if (hive && tmp_adev->gmc.xgmi.num_physical_nodes > 1)
4394 					r = amdgpu_xgmi_update_topology(hive, tmp_adev);
4395 			}
4396 		}
4397 
4398 out:
4399 		if (!r) {
4400 			amdgpu_irq_gpu_reset_resume_helper(tmp_adev);
4401 			r = amdgpu_ib_ring_tests(tmp_adev);
4402 			if (r) {
4403 				dev_err(tmp_adev->dev, "ib ring test failed (%d).\n", r);
4404 				r = amdgpu_device_ip_suspend(tmp_adev);
4405 				need_full_reset = true;
4406 				r = -EAGAIN;
4407 				goto end;
4408 			}
4409 		}
4410 
4411 		if (!r)
4412 			r = amdgpu_device_recover_vram(tmp_adev);
4413 		else
4414 			tmp_adev->asic_reset_res = r;
4415 	}
4416 
4417 end:
4418 	*need_full_reset_arg = need_full_reset;
4419 	return r;
4420 }
4421 
4422 static bool amdgpu_device_lock_adev(struct amdgpu_device *adev,
4423 				struct amdgpu_hive_info *hive)
4424 {
4425 	if (atomic_cmpxchg(&adev->in_gpu_reset, 0, 1) != 0)
4426 		return false;
4427 
4428 	if (hive) {
4429 		down_write_nest_lock(&adev->reset_sem, &hive->hive_lock);
4430 	} else {
4431 		down_write(&adev->reset_sem);
4432 	}
4433 
4434 	atomic_inc(&adev->gpu_reset_counter);
4435 	switch (amdgpu_asic_reset_method(adev)) {
4436 	case AMD_RESET_METHOD_MODE1:
4437 		adev->mp1_state = PP_MP1_STATE_SHUTDOWN;
4438 		break;
4439 	case AMD_RESET_METHOD_MODE2:
4440 		adev->mp1_state = PP_MP1_STATE_RESET;
4441 		break;
4442 	default:
4443 		adev->mp1_state = PP_MP1_STATE_NONE;
4444 		break;
4445 	}
4446 
4447 	return true;
4448 }
4449 
4450 static void amdgpu_device_unlock_adev(struct amdgpu_device *adev)
4451 {
4452 	amdgpu_vf_error_trans_all(adev);
4453 	adev->mp1_state = PP_MP1_STATE_NONE;
4454 	atomic_set(&adev->in_gpu_reset, 0);
4455 	up_write(&adev->reset_sem);
4456 }
4457 
4458 static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev)
4459 {
4460 	struct pci_dev *p = NULL;
4461 
4462 	p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
4463 			adev->pdev->bus->number, 1);
4464 	if (p) {
4465 		pm_runtime_enable(&(p->dev));
4466 		pm_runtime_resume(&(p->dev));
4467 	}
4468 }
4469 
4470 static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
4471 {
4472 	enum amd_reset_method reset_method;
4473 	struct pci_dev *p = NULL;
4474 	u64 expires;
4475 
4476 	/*
4477 	 * For now, only BACO and mode1 reset are confirmed
4478 	 * to suffer the audio issue without proper suspended.
4479 	 */
4480 	reset_method = amdgpu_asic_reset_method(adev);
4481 	if ((reset_method != AMD_RESET_METHOD_BACO) &&
4482 	     (reset_method != AMD_RESET_METHOD_MODE1))
4483 		return -EINVAL;
4484 
4485 	p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
4486 			adev->pdev->bus->number, 1);
4487 	if (!p)
4488 		return -ENODEV;
4489 
4490 	expires = pm_runtime_autosuspend_expiration(&(p->dev));
4491 	if (!expires)
4492 		/*
4493 		 * If we cannot get the audio device autosuspend delay,
4494 		 * a fixed 4S interval will be used. Considering 3S is
4495 		 * the audio controller default autosuspend delay setting.
4496 		 * 4S used here is guaranteed to cover that.
4497 		 */
4498 		expires = ktime_get_mono_fast_ns() + NSEC_PER_SEC * 4ULL;
4499 
4500 	while (!pm_runtime_status_suspended(&(p->dev))) {
4501 		if (!pm_runtime_suspend(&(p->dev)))
4502 			break;
4503 
4504 		if (expires < ktime_get_mono_fast_ns()) {
4505 			dev_warn(adev->dev, "failed to suspend display audio\n");
4506 			/* TODO: abort the succeeding gpu reset? */
4507 			return -ETIMEDOUT;
4508 		}
4509 	}
4510 
4511 	pm_runtime_disable(&(p->dev));
4512 
4513 	return 0;
4514 }
4515 
4516 /**
4517  * amdgpu_device_gpu_recover - reset the asic and recover scheduler
4518  *
4519  * @adev: amdgpu_device pointer
4520  * @job: which job trigger hang
4521  *
4522  * Attempt to reset the GPU if it has hung (all asics).
4523  * Attempt to do soft-reset or full-reset and reinitialize Asic
4524  * Returns 0 for success or an error on failure.
4525  */
4526 
4527 int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
4528 			      struct amdgpu_job *job)
4529 {
4530 	struct list_head device_list, *device_list_handle =  NULL;
4531 	bool need_full_reset = false;
4532 	bool job_signaled = false;
4533 	struct amdgpu_hive_info *hive = NULL;
4534 	struct amdgpu_device *tmp_adev = NULL;
4535 	int i, r = 0;
4536 	bool need_emergency_restart = false;
4537 	bool audio_suspended = false;
4538 
4539 	/*
4540 	 * Special case: RAS triggered and full reset isn't supported
4541 	 */
4542 	need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
4543 
4544 	/*
4545 	 * Flush RAM to disk so that after reboot
4546 	 * the user can read log and see why the system rebooted.
4547 	 */
4548 	if (need_emergency_restart && amdgpu_ras_get_context(adev)->reboot) {
4549 		DRM_WARN("Emergency reboot.");
4550 
4551 		ksys_sync_helper();
4552 		emergency_restart();
4553 	}
4554 
4555 	dev_info(adev->dev, "GPU %s begin!\n",
4556 		need_emergency_restart ? "jobs stop":"reset");
4557 
4558 	/*
4559 	 * Here we trylock to avoid chain of resets executing from
4560 	 * either trigger by jobs on different adevs in XGMI hive or jobs on
4561 	 * different schedulers for same device while this TO handler is running.
4562 	 * We always reset all schedulers for device and all devices for XGMI
4563 	 * hive so that should take care of them too.
4564 	 */
4565 	hive = amdgpu_get_xgmi_hive(adev);
4566 	if (hive) {
4567 		if (atomic_cmpxchg(&hive->in_reset, 0, 1) != 0) {
4568 			DRM_INFO("Bailing on TDR for s_job:%llx, hive: %llx as another already in progress",
4569 				job ? job->base.id : -1, hive->hive_id);
4570 			amdgpu_put_xgmi_hive(hive);
4571 			return 0;
4572 		}
4573 		mutex_lock(&hive->hive_lock);
4574 	}
4575 
4576 	/*
4577 	 * Build list of devices to reset.
4578 	 * In case we are in XGMI hive mode, resort the device list
4579 	 * to put adev in the 1st position.
4580 	 */
4581 	INIT_LIST_HEAD(&device_list);
4582 	if (adev->gmc.xgmi.num_physical_nodes > 1) {
4583 		if (!hive)
4584 			return -ENODEV;
4585 		if (!list_is_first(&adev->gmc.xgmi.head, &hive->device_list))
4586 			list_rotate_to_front(&adev->gmc.xgmi.head, &hive->device_list);
4587 		device_list_handle = &hive->device_list;
4588 	} else {
4589 		list_add_tail(&adev->gmc.xgmi.head, &device_list);
4590 		device_list_handle = &device_list;
4591 	}
4592 
4593 	/* block all schedulers and reset given job's ring */
4594 	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4595 		if (!amdgpu_device_lock_adev(tmp_adev, hive)) {
4596 			dev_info(tmp_adev->dev, "Bailing on TDR for s_job:%llx, as another already in progress",
4597 				  job ? job->base.id : -1);
4598 			r = 0;
4599 			goto skip_recovery;
4600 		}
4601 
4602 		/*
4603 		 * Try to put the audio codec into suspend state
4604 		 * before gpu reset started.
4605 		 *
4606 		 * Due to the power domain of the graphics device
4607 		 * is shared with AZ power domain. Without this,
4608 		 * we may change the audio hardware from behind
4609 		 * the audio driver's back. That will trigger
4610 		 * some audio codec errors.
4611 		 */
4612 		if (!amdgpu_device_suspend_display_audio(tmp_adev))
4613 			audio_suspended = true;
4614 
4615 		amdgpu_ras_set_error_query_ready(tmp_adev, false);
4616 
4617 		cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
4618 
4619 		if (!amdgpu_sriov_vf(tmp_adev))
4620 			amdgpu_amdkfd_pre_reset(tmp_adev);
4621 
4622 		/*
4623 		 * Mark these ASICs to be reseted as untracked first
4624 		 * And add them back after reset completed
4625 		 */
4626 		amdgpu_unregister_gpu_instance(tmp_adev);
4627 
4628 		amdgpu_fbdev_set_suspend(tmp_adev, 1);
4629 
4630 		/* disable ras on ALL IPs */
4631 		if (!need_emergency_restart &&
4632 		      amdgpu_device_ip_need_full_reset(tmp_adev))
4633 			amdgpu_ras_suspend(tmp_adev);
4634 
4635 		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4636 			struct amdgpu_ring *ring = tmp_adev->rings[i];
4637 
4638 			if (!ring || !ring->sched.thread)
4639 				continue;
4640 
4641 			drm_sched_stop(&ring->sched, job ? &job->base : NULL);
4642 
4643 			if (need_emergency_restart)
4644 				amdgpu_job_stop_all_jobs_on_sched(&ring->sched);
4645 		}
4646 	}
4647 
4648 	if (need_emergency_restart)
4649 		goto skip_sched_resume;
4650 
4651 	/*
4652 	 * Must check guilty signal here since after this point all old
4653 	 * HW fences are force signaled.
4654 	 *
4655 	 * job->base holds a reference to parent fence
4656 	 */
4657 	if (job && job->base.s_fence->parent &&
4658 	    dma_fence_is_signaled(job->base.s_fence->parent)) {
4659 		job_signaled = true;
4660 		dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
4661 		goto skip_hw_reset;
4662 	}
4663 
4664 retry:	/* Rest of adevs pre asic reset from XGMI hive. */
4665 	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4666 		r = amdgpu_device_pre_asic_reset(tmp_adev,
4667 						 (tmp_adev == adev) ? job : NULL,
4668 						 &need_full_reset);
4669 		/*TODO Should we stop ?*/
4670 		if (r) {
4671 			dev_err(tmp_adev->dev, "GPU pre asic reset failed with err, %d for drm dev, %s ",
4672 				  r, adev_to_drm(tmp_adev)->unique);
4673 			tmp_adev->asic_reset_res = r;
4674 		}
4675 	}
4676 
4677 	/* Actual ASIC resets if needed.*/
4678 	/* TODO Implement XGMI hive reset logic for SRIOV */
4679 	if (amdgpu_sriov_vf(adev)) {
4680 		r = amdgpu_device_reset_sriov(adev, job ? false : true);
4681 		if (r)
4682 			adev->asic_reset_res = r;
4683 	} else {
4684 		r  = amdgpu_do_asic_reset(hive, device_list_handle, &need_full_reset, false);
4685 		if (r && r == -EAGAIN)
4686 			goto retry;
4687 	}
4688 
4689 skip_hw_reset:
4690 
4691 	/* Post ASIC reset for all devs .*/
4692 	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4693 
4694 		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4695 			struct amdgpu_ring *ring = tmp_adev->rings[i];
4696 
4697 			if (!ring || !ring->sched.thread)
4698 				continue;
4699 
4700 			/* No point to resubmit jobs if we didn't HW reset*/
4701 			if (!tmp_adev->asic_reset_res && !job_signaled)
4702 				drm_sched_resubmit_jobs(&ring->sched);
4703 
4704 			drm_sched_start(&ring->sched, !tmp_adev->asic_reset_res);
4705 		}
4706 
4707 		if (!amdgpu_device_has_dc_support(tmp_adev) && !job_signaled) {
4708 			drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
4709 		}
4710 
4711 		tmp_adev->asic_reset_res = 0;
4712 
4713 		if (r) {
4714 			/* bad news, how to tell it to userspace ? */
4715 			dev_info(tmp_adev->dev, "GPU reset(%d) failed\n", atomic_read(&tmp_adev->gpu_reset_counter));
4716 			amdgpu_vf_error_put(tmp_adev, AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0, r);
4717 		} else {
4718 			dev_info(tmp_adev->dev, "GPU reset(%d) succeeded!\n", atomic_read(&tmp_adev->gpu_reset_counter));
4719 		}
4720 	}
4721 
4722 skip_sched_resume:
4723 	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
4724 		/*unlock kfd: SRIOV would do it separately */
4725 		if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
4726 	                amdgpu_amdkfd_post_reset(tmp_adev);
4727 		if (audio_suspended)
4728 			amdgpu_device_resume_display_audio(tmp_adev);
4729 		amdgpu_device_unlock_adev(tmp_adev);
4730 	}
4731 
4732 skip_recovery:
4733 	if (hive) {
4734 		atomic_set(&hive->in_reset, 0);
4735 		mutex_unlock(&hive->hive_lock);
4736 		amdgpu_put_xgmi_hive(hive);
4737 	}
4738 
4739 	if (r)
4740 		dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
4741 	return r;
4742 }
4743 
4744 /**
4745  * amdgpu_device_get_pcie_info - fence pcie info about the PCIE slot
4746  *
4747  * @adev: amdgpu_device pointer
4748  *
4749  * Fetchs and stores in the driver the PCIE capabilities (gen speed
4750  * and lanes) of the slot the device is in. Handles APUs and
4751  * virtualized environments where PCIE config space may not be available.
4752  */
4753 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)
4754 {
4755 	struct pci_dev *pdev;
4756 	enum pci_bus_speed speed_cap, platform_speed_cap;
4757 	enum pcie_link_width platform_link_width;
4758 
4759 	if (amdgpu_pcie_gen_cap)
4760 		adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
4761 
4762 	if (amdgpu_pcie_lane_cap)
4763 		adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap;
4764 
4765 	/* covers APUs as well */
4766 	if (pci_is_root_bus(adev->pdev->bus)) {
4767 		if (adev->pm.pcie_gen_mask == 0)
4768 			adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK;
4769 		if (adev->pm.pcie_mlw_mask == 0)
4770 			adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK;
4771 		return;
4772 	}
4773 
4774 	if (adev->pm.pcie_gen_mask && adev->pm.pcie_mlw_mask)
4775 		return;
4776 
4777 	pcie_bandwidth_available(adev->pdev, NULL,
4778 				 &platform_speed_cap, &platform_link_width);
4779 
4780 	if (adev->pm.pcie_gen_mask == 0) {
4781 		/* asic caps */
4782 		pdev = adev->pdev;
4783 		speed_cap = pcie_get_speed_cap(pdev);
4784 		if (speed_cap == PCI_SPEED_UNKNOWN) {
4785 			adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4786 						  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4787 						  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
4788 		} else {
4789 			if (speed_cap == PCIE_SPEED_16_0GT)
4790 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4791 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4792 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
4793 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4);
4794 			else if (speed_cap == PCIE_SPEED_8_0GT)
4795 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4796 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4797 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
4798 			else if (speed_cap == PCIE_SPEED_5_0GT)
4799 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4800 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2);
4801 			else
4802 				adev->pm.pcie_gen_mask |= CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1;
4803 		}
4804 		/* platform caps */
4805 		if (platform_speed_cap == PCI_SPEED_UNKNOWN) {
4806 			adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4807 						   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
4808 		} else {
4809 			if (platform_speed_cap == PCIE_SPEED_16_0GT)
4810 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4811 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4812 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
4813 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4);
4814 			else if (platform_speed_cap == PCIE_SPEED_8_0GT)
4815 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4816 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
4817 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3);
4818 			else if (platform_speed_cap == PCIE_SPEED_5_0GT)
4819 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
4820 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
4821 			else
4822 				adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1;
4823 
4824 		}
4825 	}
4826 	if (adev->pm.pcie_mlw_mask == 0) {
4827 		if (platform_link_width == PCIE_LNK_WIDTH_UNKNOWN) {
4828 			adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_PCIE_MLW_MASK;
4829 		} else {
4830 			switch (platform_link_width) {
4831 			case PCIE_LNK_X32:
4832 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 |
4833 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
4834 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4835 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4836 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4837 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4838 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4839 				break;
4840 			case PCIE_LNK_X16:
4841 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
4842 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4843 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4844 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4845 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4846 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4847 				break;
4848 			case PCIE_LNK_X12:
4849 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
4850 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4851 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4852 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4853 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4854 				break;
4855 			case PCIE_LNK_X8:
4856 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
4857 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4858 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4859 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4860 				break;
4861 			case PCIE_LNK_X4:
4862 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
4863 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4864 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4865 				break;
4866 			case PCIE_LNK_X2:
4867 				adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
4868 							  CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
4869 				break;
4870 			case PCIE_LNK_X1:
4871 				adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1;
4872 				break;
4873 			default:
4874 				break;
4875 			}
4876 		}
4877 	}
4878 }
4879 
4880 int amdgpu_device_baco_enter(struct drm_device *dev)
4881 {
4882 	struct amdgpu_device *adev = drm_to_adev(dev);
4883 	struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
4884 
4885 	if (!amdgpu_device_supports_baco(adev_to_drm(adev)))
4886 		return -ENOTSUPP;
4887 
4888 	if (ras && ras->supported && adev->nbio.funcs->enable_doorbell_interrupt)
4889 		adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
4890 
4891 	return amdgpu_dpm_baco_enter(adev);
4892 }
4893 
4894 int amdgpu_device_baco_exit(struct drm_device *dev)
4895 {
4896 	struct amdgpu_device *adev = drm_to_adev(dev);
4897 	struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
4898 	int ret = 0;
4899 
4900 	if (!amdgpu_device_supports_baco(adev_to_drm(adev)))
4901 		return -ENOTSUPP;
4902 
4903 	ret = amdgpu_dpm_baco_exit(adev);
4904 	if (ret)
4905 		return ret;
4906 
4907 	if (ras && ras->supported && adev->nbio.funcs->enable_doorbell_interrupt)
4908 		adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
4909 
4910 	return 0;
4911 }
4912 
4913 static void amdgpu_cancel_all_tdr(struct amdgpu_device *adev)
4914 {
4915 	int i;
4916 
4917 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4918 		struct amdgpu_ring *ring = adev->rings[i];
4919 
4920 		if (!ring || !ring->sched.thread)
4921 			continue;
4922 
4923 		cancel_delayed_work_sync(&ring->sched.work_tdr);
4924 	}
4925 }
4926 
4927 /**
4928  * amdgpu_pci_error_detected - Called when a PCI error is detected.
4929  * @pdev: PCI device struct
4930  * @state: PCI channel state
4931  *
4932  * Description: Called when a PCI error is detected.
4933  *
4934  * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT.
4935  */
4936 pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
4937 {
4938 	struct drm_device *dev = pci_get_drvdata(pdev);
4939 	struct amdgpu_device *adev = drm_to_adev(dev);
4940 	int i;
4941 
4942 	DRM_INFO("PCI error: detected callback, state(%d)!!\n", state);
4943 
4944 	if (adev->gmc.xgmi.num_physical_nodes > 1) {
4945 		DRM_WARN("No support for XGMI hive yet...");
4946 		return PCI_ERS_RESULT_DISCONNECT;
4947 	}
4948 
4949 	switch (state) {
4950 	case pci_channel_io_normal:
4951 		return PCI_ERS_RESULT_CAN_RECOVER;
4952 	/* Fatal error, prepare for slot reset */
4953 	case pci_channel_io_frozen:
4954 		/*
4955 		 * Cancel and wait for all TDRs in progress if failing to
4956 		 * set  adev->in_gpu_reset in amdgpu_device_lock_adev
4957 		 *
4958 		 * Locking adev->reset_sem will prevent any external access
4959 		 * to GPU during PCI error recovery
4960 		 */
4961 		while (!amdgpu_device_lock_adev(adev, NULL))
4962 			amdgpu_cancel_all_tdr(adev);
4963 
4964 		/*
4965 		 * Block any work scheduling as we do for regular GPU reset
4966 		 * for the duration of the recovery
4967 		 */
4968 		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4969 			struct amdgpu_ring *ring = adev->rings[i];
4970 
4971 			if (!ring || !ring->sched.thread)
4972 				continue;
4973 
4974 			drm_sched_stop(&ring->sched, NULL);
4975 		}
4976 		return PCI_ERS_RESULT_NEED_RESET;
4977 	case pci_channel_io_perm_failure:
4978 		/* Permanent error, prepare for device removal */
4979 		return PCI_ERS_RESULT_DISCONNECT;
4980 	}
4981 
4982 	return PCI_ERS_RESULT_NEED_RESET;
4983 }
4984 
4985 /**
4986  * amdgpu_pci_mmio_enabled - Enable MMIO and dump debug registers
4987  * @pdev: pointer to PCI device
4988  */
4989 pci_ers_result_t amdgpu_pci_mmio_enabled(struct pci_dev *pdev)
4990 {
4991 
4992 	DRM_INFO("PCI error: mmio enabled callback!!\n");
4993 
4994 	/* TODO - dump whatever for debugging purposes */
4995 
4996 	/* This called only if amdgpu_pci_error_detected returns
4997 	 * PCI_ERS_RESULT_CAN_RECOVER. Read/write to the device still
4998 	 * works, no need to reset slot.
4999 	 */
5000 
5001 	return PCI_ERS_RESULT_RECOVERED;
5002 }
5003 
5004 /**
5005  * amdgpu_pci_slot_reset - Called when PCI slot has been reset.
5006  * @pdev: PCI device struct
5007  *
5008  * Description: This routine is called by the pci error recovery
5009  * code after the PCI slot has been reset, just before we
5010  * should resume normal operations.
5011  */
5012 pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev)
5013 {
5014 	struct drm_device *dev = pci_get_drvdata(pdev);
5015 	struct amdgpu_device *adev = drm_to_adev(dev);
5016 	int r, i;
5017 	bool need_full_reset = true;
5018 	u32 memsize;
5019 	struct list_head device_list;
5020 
5021 	DRM_INFO("PCI error: slot reset callback!!\n");
5022 
5023 	INIT_LIST_HEAD(&device_list);
5024 	list_add_tail(&adev->gmc.xgmi.head, &device_list);
5025 
5026 	/* wait for asic to come out of reset */
5027 	msleep(500);
5028 
5029 	/* Restore PCI confspace */
5030 	amdgpu_device_load_pci_state(pdev);
5031 
5032 	/* confirm  ASIC came out of reset */
5033 	for (i = 0; i < adev->usec_timeout; i++) {
5034 		memsize = amdgpu_asic_get_config_memsize(adev);
5035 
5036 		if (memsize != 0xffffffff)
5037 			break;
5038 		udelay(1);
5039 	}
5040 	if (memsize == 0xffffffff) {
5041 		r = -ETIME;
5042 		goto out;
5043 	}
5044 
5045 	adev->in_pci_err_recovery = true;
5046 	r = amdgpu_device_pre_asic_reset(adev, NULL, &need_full_reset);
5047 	adev->in_pci_err_recovery = false;
5048 	if (r)
5049 		goto out;
5050 
5051 	r = amdgpu_do_asic_reset(NULL, &device_list, &need_full_reset, true);
5052 
5053 out:
5054 	if (!r) {
5055 		if (amdgpu_device_cache_pci_state(adev->pdev))
5056 			pci_restore_state(adev->pdev);
5057 
5058 		DRM_INFO("PCIe error recovery succeeded\n");
5059 	} else {
5060 		DRM_ERROR("PCIe error recovery failed, err:%d", r);
5061 		amdgpu_device_unlock_adev(adev);
5062 	}
5063 
5064 	return r ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
5065 }
5066 
5067 /**
5068  * amdgpu_pci_resume() - resume normal ops after PCI reset
5069  * @pdev: pointer to PCI device
5070  *
5071  * Called when the error recovery driver tells us that its
5072  * OK to resume normal operation.
5073  */
5074 void amdgpu_pci_resume(struct pci_dev *pdev)
5075 {
5076 	struct drm_device *dev = pci_get_drvdata(pdev);
5077 	struct amdgpu_device *adev = drm_to_adev(dev);
5078 	int i;
5079 
5080 
5081 	DRM_INFO("PCI error: resume callback!!\n");
5082 
5083 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5084 		struct amdgpu_ring *ring = adev->rings[i];
5085 
5086 		if (!ring || !ring->sched.thread)
5087 			continue;
5088 
5089 
5090 		drm_sched_resubmit_jobs(&ring->sched);
5091 		drm_sched_start(&ring->sched, true);
5092 	}
5093 
5094 	amdgpu_device_unlock_adev(adev);
5095 }
5096 
5097 bool amdgpu_device_cache_pci_state(struct pci_dev *pdev)
5098 {
5099 	struct drm_device *dev = pci_get_drvdata(pdev);
5100 	struct amdgpu_device *adev = drm_to_adev(dev);
5101 	int r;
5102 
5103 	r = pci_save_state(pdev);
5104 	if (!r) {
5105 		kfree(adev->pci_state);
5106 
5107 		adev->pci_state = pci_store_saved_state(pdev);
5108 
5109 		if (!adev->pci_state) {
5110 			DRM_ERROR("Failed to store PCI saved state");
5111 			return false;
5112 		}
5113 	} else {
5114 		DRM_WARN("Failed to save PCI state, err:%d\n", r);
5115 		return false;
5116 	}
5117 
5118 	return true;
5119 }
5120 
5121 bool amdgpu_device_load_pci_state(struct pci_dev *pdev)
5122 {
5123 	struct drm_device *dev = pci_get_drvdata(pdev);
5124 	struct amdgpu_device *adev = drm_to_adev(dev);
5125 	int r;
5126 
5127 	if (!adev->pci_state)
5128 		return false;
5129 
5130 	r = pci_load_saved_state(pdev, adev->pci_state);
5131 
5132 	if (!r) {
5133 		pci_restore_state(pdev);
5134 	} else {
5135 		DRM_WARN("Failed to load PCI state, err:%d\n", r);
5136 		return false;
5137 	}
5138 
5139 	return true;
5140 }
5141 
5142 
5143