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