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