xref: /linux/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c (revision 518a368c57a0e63f531e471baa9499c45ab87f7c)
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_BONAIRE:
4219 	case CHIP_KAVERI:
4220 	case CHIP_KABINI:
4221 	case CHIP_MULLINS:
4222 		/*
4223 		 * We have systems in the wild with these ASICs that require
4224 		 * VGA support which is not supported with DC.
4225 		 *
4226 		 * Fallback to the non-DC driver here by default so as not to
4227 		 * cause regressions.
4228 		 */
4229 		return amdgpu_dc > 0;
4230 	default:
4231 		return amdgpu_dc != 0;
4232 #else
4233 	default:
4234 		if (amdgpu_dc > 0)
4235 			dev_info_once(
4236 				&pdev->dev,
4237 				"Display Core has been requested via kernel parameter but isn't supported by ASIC, ignoring\n");
4238 		return false;
4239 #endif
4240 	}
4241 }
4242 
4243 /**
4244  * amdgpu_device_has_dc_support - check if dc is supported
4245  *
4246  * @adev: amdgpu_device pointer
4247  *
4248  * Returns true for supported, false for not supported
4249  */
4250 bool amdgpu_device_has_dc_support(struct amdgpu_device *adev)
4251 {
4252 	if (adev->enable_virtual_display ||
4253 	    (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK))
4254 		return false;
4255 
4256 	return amdgpu_device_asic_has_dc_support(adev->pdev, adev->asic_type);
4257 }
4258 
4259 static void amdgpu_device_xgmi_reset_func(struct work_struct *__work)
4260 {
4261 	struct amdgpu_device *adev =
4262 		container_of(__work, struct amdgpu_device, xgmi_reset_work);
4263 	struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev);
4264 
4265 	/* It's a bug to not have a hive within this function */
4266 	if (WARN_ON(!hive))
4267 		return;
4268 
4269 	/*
4270 	 * Use task barrier to synchronize all xgmi reset works across the
4271 	 * hive. task_barrier_enter and task_barrier_exit will block
4272 	 * until all the threads running the xgmi reset works reach
4273 	 * those points. task_barrier_full will do both blocks.
4274 	 */
4275 	if (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
4276 
4277 		task_barrier_enter(&hive->tb);
4278 		adev->asic_reset_res = amdgpu_device_baco_enter(adev);
4279 
4280 		if (adev->asic_reset_res)
4281 			goto fail;
4282 
4283 		task_barrier_exit(&hive->tb);
4284 		adev->asic_reset_res = amdgpu_device_baco_exit(adev);
4285 
4286 		if (adev->asic_reset_res)
4287 			goto fail;
4288 
4289 		amdgpu_ras_reset_error_count(adev, AMDGPU_RAS_BLOCK__MMHUB);
4290 	} else {
4291 
4292 		task_barrier_full(&hive->tb);
4293 		adev->asic_reset_res =  amdgpu_asic_reset(adev);
4294 	}
4295 
4296 fail:
4297 	if (adev->asic_reset_res)
4298 		dev_warn(adev->dev,
4299 			 "ASIC reset failed with error, %d for drm dev, %s",
4300 			 adev->asic_reset_res, adev_to_drm(adev)->unique);
4301 	amdgpu_put_xgmi_hive(hive);
4302 }
4303 
4304 static int amdgpu_device_get_job_timeout_settings(struct amdgpu_device *adev)
4305 {
4306 	char *input = amdgpu_lockup_timeout;
4307 	char *timeout_setting = NULL;
4308 	int index = 0;
4309 	long timeout;
4310 	int ret = 0;
4311 
4312 	/* By default timeout for all queues is 2 sec */
4313 	adev->gfx_timeout = adev->compute_timeout = adev->sdma_timeout =
4314 		adev->video_timeout = msecs_to_jiffies(2000);
4315 
4316 	if (!strnlen(input, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH))
4317 		return 0;
4318 
4319 	while ((timeout_setting = strsep(&input, ",")) &&
4320 	       strnlen(timeout_setting, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH)) {
4321 		ret = kstrtol(timeout_setting, 0, &timeout);
4322 		if (ret)
4323 			return ret;
4324 
4325 		if (timeout == 0) {
4326 			index++;
4327 			continue;
4328 		} else if (timeout < 0) {
4329 			timeout = MAX_SCHEDULE_TIMEOUT;
4330 			dev_warn(adev->dev, "lockup timeout disabled");
4331 			add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
4332 		} else {
4333 			timeout = msecs_to_jiffies(timeout);
4334 		}
4335 
4336 		switch (index++) {
4337 		case 0:
4338 			adev->gfx_timeout = timeout;
4339 			break;
4340 		case 1:
4341 			adev->compute_timeout = timeout;
4342 			break;
4343 		case 2:
4344 			adev->sdma_timeout = timeout;
4345 			break;
4346 		case 3:
4347 			adev->video_timeout = timeout;
4348 			break;
4349 		default:
4350 			break;
4351 		}
4352 	}
4353 
4354 	/* When only one value specified apply it to all queues. */
4355 	if (index == 1)
4356 		adev->gfx_timeout = adev->compute_timeout = adev->sdma_timeout =
4357 			adev->video_timeout = timeout;
4358 
4359 	return ret;
4360 }
4361 
4362 /**
4363  * amdgpu_device_check_iommu_direct_map - check if RAM direct mapped to GPU
4364  *
4365  * @adev: amdgpu_device pointer
4366  *
4367  * RAM direct mapped to GPU if IOMMU is not enabled or is pass through mode
4368  */
4369 static void amdgpu_device_check_iommu_direct_map(struct amdgpu_device *adev)
4370 {
4371 	struct iommu_domain *domain;
4372 
4373 	domain = iommu_get_domain_for_dev(adev->dev);
4374 	if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
4375 		adev->ram_is_direct_mapped = true;
4376 }
4377 
4378 #if defined(CONFIG_HSA_AMD_P2P)
4379 /**
4380  * amdgpu_device_check_iommu_remap - Check if DMA remapping is enabled.
4381  *
4382  * @adev: amdgpu_device pointer
4383  *
4384  * return if IOMMU remapping bar address
4385  */
4386 static bool amdgpu_device_check_iommu_remap(struct amdgpu_device *adev)
4387 {
4388 	struct iommu_domain *domain;
4389 
4390 	domain = iommu_get_domain_for_dev(adev->dev);
4391 	if (domain && (domain->type == IOMMU_DOMAIN_DMA ||
4392 		domain->type ==	IOMMU_DOMAIN_DMA_FQ))
4393 		return true;
4394 
4395 	return false;
4396 }
4397 #endif
4398 
4399 static void amdgpu_device_set_mcbp(struct amdgpu_device *adev)
4400 {
4401 	if (amdgpu_mcbp == 1)
4402 		adev->gfx.mcbp = true;
4403 	else if (amdgpu_mcbp == 0)
4404 		adev->gfx.mcbp = false;
4405 
4406 	if (amdgpu_sriov_vf(adev))
4407 		adev->gfx.mcbp = true;
4408 
4409 	if (adev->gfx.mcbp)
4410 		dev_info(adev->dev, "MCBP is enabled\n");
4411 }
4412 
4413 static int amdgpu_device_sys_interface_init(struct amdgpu_device *adev)
4414 {
4415 	int r;
4416 
4417 	r = amdgpu_atombios_sysfs_init(adev);
4418 	if (r)
4419 		drm_err(&adev->ddev,
4420 			"registering atombios sysfs failed (%d).\n", r);
4421 
4422 	r = amdgpu_pm_sysfs_init(adev);
4423 	if (r)
4424 		dev_err(adev->dev, "registering pm sysfs failed (%d).\n", r);
4425 
4426 	r = amdgpu_ucode_sysfs_init(adev);
4427 	if (r) {
4428 		adev->ucode_sysfs_en = false;
4429 		dev_err(adev->dev, "Creating firmware sysfs failed (%d).\n", r);
4430 	} else
4431 		adev->ucode_sysfs_en = true;
4432 
4433 	r = amdgpu_device_attr_sysfs_init(adev);
4434 	if (r)
4435 		dev_err(adev->dev, "Could not create amdgpu device attr\n");
4436 
4437 	r = devm_device_add_group(adev->dev, &amdgpu_board_attrs_group);
4438 	if (r)
4439 		dev_err(adev->dev,
4440 			"Could not create amdgpu board attributes\n");
4441 
4442 	amdgpu_fru_sysfs_init(adev);
4443 	amdgpu_reg_state_sysfs_init(adev);
4444 	amdgpu_xcp_sysfs_init(adev);
4445 
4446 	return r;
4447 }
4448 
4449 static void amdgpu_device_sys_interface_fini(struct amdgpu_device *adev)
4450 {
4451 	if (adev->pm.sysfs_initialized)
4452 		amdgpu_pm_sysfs_fini(adev);
4453 	if (adev->ucode_sysfs_en)
4454 		amdgpu_ucode_sysfs_fini(adev);
4455 	amdgpu_device_attr_sysfs_fini(adev);
4456 	amdgpu_fru_sysfs_fini(adev);
4457 
4458 	amdgpu_reg_state_sysfs_fini(adev);
4459 	amdgpu_xcp_sysfs_fini(adev);
4460 }
4461 
4462 /**
4463  * amdgpu_device_init - initialize the driver
4464  *
4465  * @adev: amdgpu_device pointer
4466  * @flags: driver flags
4467  *
4468  * Initializes the driver info and hw (all asics).
4469  * Returns 0 for success or an error on failure.
4470  * Called at driver startup.
4471  */
4472 int amdgpu_device_init(struct amdgpu_device *adev,
4473 		       uint32_t flags)
4474 {
4475 	struct pci_dev *pdev = adev->pdev;
4476 	int r, i;
4477 	bool px = false;
4478 	u32 max_MBps;
4479 	int tmp;
4480 
4481 	adev->shutdown = false;
4482 	adev->flags = flags;
4483 
4484 	if (amdgpu_force_asic_type >= 0 && amdgpu_force_asic_type < CHIP_LAST)
4485 		adev->asic_type = amdgpu_force_asic_type;
4486 	else
4487 		adev->asic_type = flags & AMD_ASIC_MASK;
4488 
4489 	adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT;
4490 	if (amdgpu_emu_mode == 1)
4491 		adev->usec_timeout *= 10;
4492 	adev->gmc.gart_size = 512 * 1024 * 1024;
4493 	adev->accel_working = false;
4494 	adev->num_rings = 0;
4495 	RCU_INIT_POINTER(adev->gang_submit, dma_fence_get_stub());
4496 	adev->mman.buffer_funcs = NULL;
4497 	adev->mman.buffer_funcs_ring = NULL;
4498 	adev->vm_manager.vm_pte_funcs = NULL;
4499 	adev->vm_manager.vm_pte_num_scheds = 0;
4500 	adev->gmc.gmc_funcs = NULL;
4501 	adev->harvest_ip_mask = 0x0;
4502 	adev->fence_context = dma_fence_context_alloc(AMDGPU_MAX_RINGS);
4503 	bitmap_zero(adev->gfx.pipe_reserve_bitmap, AMDGPU_MAX_COMPUTE_QUEUES);
4504 
4505 	adev->smc_rreg = &amdgpu_invalid_rreg;
4506 	adev->smc_wreg = &amdgpu_invalid_wreg;
4507 	adev->pcie_rreg = &amdgpu_invalid_rreg;
4508 	adev->pcie_wreg = &amdgpu_invalid_wreg;
4509 	adev->pcie_rreg_ext = &amdgpu_invalid_rreg_ext;
4510 	adev->pcie_wreg_ext = &amdgpu_invalid_wreg_ext;
4511 	adev->pciep_rreg = &amdgpu_invalid_rreg;
4512 	adev->pciep_wreg = &amdgpu_invalid_wreg;
4513 	adev->pcie_rreg64 = &amdgpu_invalid_rreg64;
4514 	adev->pcie_wreg64 = &amdgpu_invalid_wreg64;
4515 	adev->pcie_rreg64_ext = &amdgpu_invalid_rreg64_ext;
4516 	adev->pcie_wreg64_ext = &amdgpu_invalid_wreg64_ext;
4517 	adev->uvd_ctx_rreg = &amdgpu_invalid_rreg;
4518 	adev->uvd_ctx_wreg = &amdgpu_invalid_wreg;
4519 	adev->didt_rreg = &amdgpu_invalid_rreg;
4520 	adev->didt_wreg = &amdgpu_invalid_wreg;
4521 	adev->gc_cac_rreg = &amdgpu_invalid_rreg;
4522 	adev->gc_cac_wreg = &amdgpu_invalid_wreg;
4523 	adev->audio_endpt_rreg = &amdgpu_block_invalid_rreg;
4524 	adev->audio_endpt_wreg = &amdgpu_block_invalid_wreg;
4525 
4526 	dev_info(
4527 		adev->dev,
4528 		"initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n",
4529 		amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device,
4530 		pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision);
4531 
4532 	/* mutex initialization are all done here so we
4533 	 * can recall function without having locking issues
4534 	 */
4535 	mutex_init(&adev->firmware.mutex);
4536 	mutex_init(&adev->pm.mutex);
4537 	mutex_init(&adev->gfx.gpu_clock_mutex);
4538 	mutex_init(&adev->srbm_mutex);
4539 	mutex_init(&adev->gfx.pipe_reserve_mutex);
4540 	mutex_init(&adev->gfx.gfx_off_mutex);
4541 	mutex_init(&adev->gfx.partition_mutex);
4542 	mutex_init(&adev->grbm_idx_mutex);
4543 	mutex_init(&adev->mn_lock);
4544 	mutex_init(&adev->virt.vf_errors.lock);
4545 	hash_init(adev->mn_hash);
4546 	mutex_init(&adev->psp.mutex);
4547 	mutex_init(&adev->notifier_lock);
4548 	mutex_init(&adev->pm.stable_pstate_ctx_lock);
4549 	mutex_init(&adev->benchmark_mutex);
4550 	mutex_init(&adev->gfx.reset_sem_mutex);
4551 	/* Initialize the mutex for cleaner shader isolation between GFX and compute processes */
4552 	mutex_init(&adev->enforce_isolation_mutex);
4553 	for (i = 0; i < MAX_XCP; ++i) {
4554 		adev->isolation[i].spearhead = dma_fence_get_stub();
4555 		amdgpu_sync_create(&adev->isolation[i].active);
4556 		amdgpu_sync_create(&adev->isolation[i].prev);
4557 	}
4558 	mutex_init(&adev->gfx.userq_sch_mutex);
4559 	mutex_init(&adev->gfx.workload_profile_mutex);
4560 	mutex_init(&adev->vcn.workload_profile_mutex);
4561 	mutex_init(&adev->userq_mutex);
4562 
4563 	amdgpu_device_init_apu_flags(adev);
4564 
4565 	r = amdgpu_device_check_arguments(adev);
4566 	if (r)
4567 		return r;
4568 
4569 	spin_lock_init(&adev->mmio_idx_lock);
4570 	spin_lock_init(&adev->smc_idx_lock);
4571 	spin_lock_init(&adev->pcie_idx_lock);
4572 	spin_lock_init(&adev->uvd_ctx_idx_lock);
4573 	spin_lock_init(&adev->didt_idx_lock);
4574 	spin_lock_init(&adev->gc_cac_idx_lock);
4575 	spin_lock_init(&adev->se_cac_idx_lock);
4576 	spin_lock_init(&adev->audio_endpt_idx_lock);
4577 	spin_lock_init(&adev->mm_stats.lock);
4578 	spin_lock_init(&adev->virt.rlcg_reg_lock);
4579 	spin_lock_init(&adev->wb.lock);
4580 
4581 	xa_init_flags(&adev->userq_xa, XA_FLAGS_LOCK_IRQ);
4582 
4583 	INIT_LIST_HEAD(&adev->reset_list);
4584 
4585 	INIT_LIST_HEAD(&adev->ras_list);
4586 
4587 	INIT_LIST_HEAD(&adev->pm.od_kobj_list);
4588 
4589 	INIT_LIST_HEAD(&adev->userq_mgr_list);
4590 
4591 	INIT_DELAYED_WORK(&adev->delayed_init_work,
4592 			  amdgpu_device_delayed_init_work_handler);
4593 	INIT_DELAYED_WORK(&adev->gfx.gfx_off_delay_work,
4594 			  amdgpu_device_delay_enable_gfx_off);
4595 	/*
4596 	 * Initialize the enforce_isolation work structures for each XCP
4597 	 * partition.  This work handler is responsible for enforcing shader
4598 	 * isolation on AMD GPUs.  It counts the number of emitted fences for
4599 	 * each GFX and compute ring.  If there are any fences, it schedules
4600 	 * the `enforce_isolation_work` to be run after a delay.  If there are
4601 	 * no fences, it signals the Kernel Fusion Driver (KFD) to resume the
4602 	 * runqueue.
4603 	 */
4604 	for (i = 0; i < MAX_XCP; i++) {
4605 		INIT_DELAYED_WORK(&adev->gfx.enforce_isolation[i].work,
4606 				  amdgpu_gfx_enforce_isolation_handler);
4607 		adev->gfx.enforce_isolation[i].adev = adev;
4608 		adev->gfx.enforce_isolation[i].xcp_id = i;
4609 	}
4610 
4611 	INIT_WORK(&adev->xgmi_reset_work, amdgpu_device_xgmi_reset_func);
4612 
4613 	adev->gfx.gfx_off_req_count = 1;
4614 	adev->gfx.gfx_off_residency = 0;
4615 	adev->gfx.gfx_off_entrycount = 0;
4616 	adev->pm.ac_power = power_supply_is_system_supplied() > 0;
4617 
4618 	atomic_set(&adev->throttling_logging_enabled, 1);
4619 	/*
4620 	 * If throttling continues, logging will be performed every minute
4621 	 * to avoid log flooding. "-1" is subtracted since the thermal
4622 	 * throttling interrupt comes every second. Thus, the total logging
4623 	 * interval is 59 seconds(retelimited printk interval) + 1(waiting
4624 	 * for throttling interrupt) = 60 seconds.
4625 	 */
4626 	ratelimit_state_init(&adev->throttling_logging_rs, (60 - 1) * HZ, 1);
4627 
4628 	ratelimit_set_flags(&adev->throttling_logging_rs, RATELIMIT_MSG_ON_RELEASE);
4629 
4630 	/* Registers mapping */
4631 	/* TODO: block userspace mapping of io register */
4632 	if (adev->asic_type >= CHIP_BONAIRE) {
4633 		adev->rmmio_base = pci_resource_start(adev->pdev, 5);
4634 		adev->rmmio_size = pci_resource_len(adev->pdev, 5);
4635 	} else {
4636 		adev->rmmio_base = pci_resource_start(adev->pdev, 2);
4637 		adev->rmmio_size = pci_resource_len(adev->pdev, 2);
4638 	}
4639 
4640 	for (i = 0; i < AMD_IP_BLOCK_TYPE_NUM; i++)
4641 		atomic_set(&adev->pm.pwr_state[i], POWER_STATE_UNKNOWN);
4642 
4643 	adev->rmmio = ioremap(adev->rmmio_base, adev->rmmio_size);
4644 	if (!adev->rmmio)
4645 		return -ENOMEM;
4646 
4647 	dev_info(adev->dev, "register mmio base: 0x%08X\n",
4648 		 (uint32_t)adev->rmmio_base);
4649 	dev_info(adev->dev, "register mmio size: %u\n",
4650 		 (unsigned int)adev->rmmio_size);
4651 
4652 	/*
4653 	 * Reset domain needs to be present early, before XGMI hive discovered
4654 	 * (if any) and initialized to use reset sem and in_gpu reset flag
4655 	 * early on during init and before calling to RREG32.
4656 	 */
4657 	adev->reset_domain = amdgpu_reset_create_reset_domain(SINGLE_DEVICE, "amdgpu-reset-dev");
4658 	if (!adev->reset_domain)
4659 		return -ENOMEM;
4660 
4661 	/* detect hw virtualization here */
4662 	amdgpu_virt_init(adev);
4663 
4664 	amdgpu_device_get_pcie_info(adev);
4665 
4666 	r = amdgpu_device_get_job_timeout_settings(adev);
4667 	if (r) {
4668 		dev_err(adev->dev, "invalid lockup_timeout parameter syntax\n");
4669 		return r;
4670 	}
4671 
4672 	amdgpu_device_set_mcbp(adev);
4673 
4674 	/*
4675 	 * By default, use default mode where all blocks are expected to be
4676 	 * initialized. At present a 'swinit' of blocks is required to be
4677 	 * completed before the need for a different level is detected.
4678 	 */
4679 	amdgpu_set_init_level(adev, AMDGPU_INIT_LEVEL_DEFAULT);
4680 	/* early init functions */
4681 	r = amdgpu_device_ip_early_init(adev);
4682 	if (r)
4683 		return r;
4684 
4685 	/*
4686 	 * No need to remove conflicting FBs for non-display class devices.
4687 	 * This prevents the sysfb from being freed accidently.
4688 	 */
4689 	if ((pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA ||
4690 	    (pdev->class >> 8) == PCI_CLASS_DISPLAY_OTHER) {
4691 		/* Get rid of things like offb */
4692 		r = aperture_remove_conflicting_pci_devices(adev->pdev, amdgpu_kms_driver.name);
4693 		if (r)
4694 			return r;
4695 	}
4696 
4697 	/* Enable TMZ based on IP_VERSION */
4698 	amdgpu_gmc_tmz_set(adev);
4699 
4700 	if (amdgpu_sriov_vf(adev) &&
4701 	    amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(10, 3, 0))
4702 		/* VF MMIO access (except mailbox range) from CPU
4703 		 * will be blocked during sriov runtime
4704 		 */
4705 		adev->virt.caps |= AMDGPU_VF_MMIO_ACCESS_PROTECT;
4706 
4707 	amdgpu_gmc_noretry_set(adev);
4708 	/* Need to get xgmi info early to decide the reset behavior*/
4709 	if (adev->gmc.xgmi.supported) {
4710 		r = adev->gfxhub.funcs->get_xgmi_info(adev);
4711 		if (r)
4712 			return r;
4713 	}
4714 
4715 	/* enable PCIE atomic ops */
4716 	if (amdgpu_sriov_vf(adev)) {
4717 		if (adev->virt.fw_reserve.p_pf2vf)
4718 			adev->have_atomics_support = ((struct amd_sriov_msg_pf2vf_info *)
4719 						      adev->virt.fw_reserve.p_pf2vf)->pcie_atomic_ops_support_flags ==
4720 				(PCI_EXP_DEVCAP2_ATOMIC_COMP32 | PCI_EXP_DEVCAP2_ATOMIC_COMP64);
4721 	/* APUs w/ gfx9 onwards doesn't reply on PCIe atomics, rather it is a
4722 	 * internal path natively support atomics, set have_atomics_support to true.
4723 	 */
4724 	} else if ((adev->flags & AMD_IS_APU) &&
4725 		   (amdgpu_ip_version(adev, GC_HWIP, 0) >
4726 		    IP_VERSION(9, 0, 0))) {
4727 		adev->have_atomics_support = true;
4728 	} else {
4729 		adev->have_atomics_support =
4730 			!pci_enable_atomic_ops_to_root(adev->pdev,
4731 					  PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
4732 					  PCI_EXP_DEVCAP2_ATOMIC_COMP64);
4733 	}
4734 
4735 	if (!adev->have_atomics_support)
4736 		dev_info(adev->dev, "PCIE atomic ops is not supported\n");
4737 
4738 	/* doorbell bar mapping and doorbell index init*/
4739 	amdgpu_doorbell_init(adev);
4740 
4741 	if (amdgpu_emu_mode == 1) {
4742 		/* post the asic on emulation mode */
4743 		emu_soc_asic_init(adev);
4744 		goto fence_driver_init;
4745 	}
4746 
4747 	amdgpu_reset_init(adev);
4748 
4749 	/* detect if we are with an SRIOV vbios */
4750 	if (adev->bios)
4751 		amdgpu_device_detect_sriov_bios(adev);
4752 
4753 	/* check if we need to reset the asic
4754 	 *  E.g., driver was not cleanly unloaded previously, etc.
4755 	 */
4756 	if (!amdgpu_sriov_vf(adev) && amdgpu_asic_need_reset_on_init(adev)) {
4757 		if (adev->gmc.xgmi.num_physical_nodes) {
4758 			dev_info(adev->dev, "Pending hive reset.\n");
4759 			amdgpu_set_init_level(adev,
4760 					      AMDGPU_INIT_LEVEL_MINIMAL_XGMI);
4761 		} else if (amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 10) &&
4762 				   !amdgpu_device_has_display_hardware(adev)) {
4763 					r = psp_gpu_reset(adev);
4764 		} else {
4765 				tmp = amdgpu_reset_method;
4766 				/* It should do a default reset when loading or reloading the driver,
4767 				 * regardless of the module parameter reset_method.
4768 				 */
4769 				amdgpu_reset_method = AMD_RESET_METHOD_NONE;
4770 				r = amdgpu_asic_reset(adev);
4771 				amdgpu_reset_method = tmp;
4772 		}
4773 
4774 		if (r) {
4775 		  dev_err(adev->dev, "asic reset on init failed\n");
4776 		  goto failed;
4777 		}
4778 	}
4779 
4780 	/* Post card if necessary */
4781 	if (amdgpu_device_need_post(adev)) {
4782 		if (!adev->bios) {
4783 			dev_err(adev->dev, "no vBIOS found\n");
4784 			r = -EINVAL;
4785 			goto failed;
4786 		}
4787 		dev_info(adev->dev, "GPU posting now...\n");
4788 		r = amdgpu_device_asic_init(adev);
4789 		if (r) {
4790 			dev_err(adev->dev, "gpu post error!\n");
4791 			goto failed;
4792 		}
4793 	}
4794 
4795 	if (adev->bios) {
4796 		if (adev->is_atom_fw) {
4797 			/* Initialize clocks */
4798 			r = amdgpu_atomfirmware_get_clock_info(adev);
4799 			if (r) {
4800 				dev_err(adev->dev, "amdgpu_atomfirmware_get_clock_info failed\n");
4801 				amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
4802 				goto failed;
4803 			}
4804 		} else {
4805 			/* Initialize clocks */
4806 			r = amdgpu_atombios_get_clock_info(adev);
4807 			if (r) {
4808 				dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n");
4809 				amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
4810 				goto failed;
4811 			}
4812 			/* init i2c buses */
4813 			amdgpu_i2c_init(adev);
4814 		}
4815 	}
4816 
4817 fence_driver_init:
4818 	/* Fence driver */
4819 	r = amdgpu_fence_driver_sw_init(adev);
4820 	if (r) {
4821 		dev_err(adev->dev, "amdgpu_fence_driver_sw_init failed\n");
4822 		amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_FENCE_INIT_FAIL, 0, 0);
4823 		goto failed;
4824 	}
4825 
4826 	/* init the mode config */
4827 	drm_mode_config_init(adev_to_drm(adev));
4828 
4829 	r = amdgpu_device_ip_init(adev);
4830 	if (r) {
4831 		dev_err(adev->dev, "amdgpu_device_ip_init failed\n");
4832 		amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0);
4833 		goto release_ras_con;
4834 	}
4835 
4836 	amdgpu_fence_driver_hw_init(adev);
4837 
4838 	dev_info(adev->dev,
4839 		"SE %d, SH per SE %d, CU per SH %d, active_cu_number %d\n",
4840 			adev->gfx.config.max_shader_engines,
4841 			adev->gfx.config.max_sh_per_se,
4842 			adev->gfx.config.max_cu_per_sh,
4843 			adev->gfx.cu_info.number);
4844 
4845 	adev->accel_working = true;
4846 
4847 	amdgpu_vm_check_compute_bug(adev);
4848 
4849 	/* Initialize the buffer migration limit. */
4850 	if (amdgpu_moverate >= 0)
4851 		max_MBps = amdgpu_moverate;
4852 	else
4853 		max_MBps = 8; /* Allow 8 MB/s. */
4854 	/* Get a log2 for easy divisions. */
4855 	adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps));
4856 
4857 	/*
4858 	 * Register gpu instance before amdgpu_device_enable_mgpu_fan_boost.
4859 	 * Otherwise the mgpu fan boost feature will be skipped due to the
4860 	 * gpu instance is counted less.
4861 	 */
4862 	amdgpu_register_gpu_instance(adev);
4863 
4864 	/* enable clockgating, etc. after ib tests, etc. since some blocks require
4865 	 * explicit gating rather than handling it automatically.
4866 	 */
4867 	if (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI) {
4868 		r = amdgpu_device_ip_late_init(adev);
4869 		if (r) {
4870 			dev_err(adev->dev, "amdgpu_device_ip_late_init failed\n");
4871 			amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_LATE_INIT_FAIL, 0, r);
4872 			goto release_ras_con;
4873 		}
4874 		/* must succeed. */
4875 		amdgpu_ras_resume(adev);
4876 		queue_delayed_work(system_wq, &adev->delayed_init_work,
4877 				   msecs_to_jiffies(AMDGPU_RESUME_MS));
4878 	}
4879 
4880 	if (amdgpu_sriov_vf(adev)) {
4881 		amdgpu_virt_release_full_gpu(adev, true);
4882 		flush_delayed_work(&adev->delayed_init_work);
4883 	}
4884 
4885 	if (adev->init_lvl->level == AMDGPU_INIT_LEVEL_MINIMAL_XGMI)
4886 		amdgpu_xgmi_reset_on_init(adev);
4887 	/*
4888 	 * Place those sysfs registering after `late_init`. As some of those
4889 	 * operations performed in `late_init` might affect the sysfs
4890 	 * interfaces creating.
4891 	 */
4892 	r = amdgpu_device_sys_interface_init(adev);
4893 
4894 	if (IS_ENABLED(CONFIG_PERF_EVENTS))
4895 		r = amdgpu_pmu_init(adev);
4896 	if (r)
4897 		dev_err(adev->dev, "amdgpu_pmu_init failed\n");
4898 
4899 	/* Have stored pci confspace at hand for restore in sudden PCI error */
4900 	if (amdgpu_device_cache_pci_state(adev->pdev))
4901 		pci_restore_state(pdev);
4902 
4903 	/* if we have > 1 VGA cards, then disable the amdgpu VGA resources */
4904 	/* this will fail for cards that aren't VGA class devices, just
4905 	 * ignore it
4906 	 */
4907 	if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
4908 		vga_client_register(adev->pdev, amdgpu_device_vga_set_decode);
4909 
4910 	px = amdgpu_device_supports_px(adev);
4911 
4912 	if (px || (!dev_is_removable(&adev->pdev->dev) &&
4913 				apple_gmux_detect(NULL, NULL)))
4914 		vga_switcheroo_register_client(adev->pdev,
4915 					       &amdgpu_switcheroo_ops, px);
4916 
4917 	if (px)
4918 		vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
4919 
4920 	amdgpu_device_check_iommu_direct_map(adev);
4921 
4922 	adev->pm_nb.notifier_call = amdgpu_device_pm_notifier;
4923 	r = register_pm_notifier(&adev->pm_nb);
4924 	if (r)
4925 		goto failed;
4926 
4927 	return 0;
4928 
4929 release_ras_con:
4930 	if (amdgpu_sriov_vf(adev))
4931 		amdgpu_virt_release_full_gpu(adev, true);
4932 
4933 	/* failed in exclusive mode due to timeout */
4934 	if (amdgpu_sriov_vf(adev) &&
4935 		!amdgpu_sriov_runtime(adev) &&
4936 		amdgpu_virt_mmio_blocked(adev) &&
4937 		!amdgpu_virt_wait_reset(adev)) {
4938 		dev_err(adev->dev, "VF exclusive mode timeout\n");
4939 		/* Don't send request since VF is inactive. */
4940 		adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME;
4941 		adev->virt.ops = NULL;
4942 		r = -EAGAIN;
4943 	}
4944 	amdgpu_release_ras_context(adev);
4945 
4946 failed:
4947 	amdgpu_vf_error_trans_all(adev);
4948 
4949 	return r;
4950 }
4951 
4952 static void amdgpu_device_unmap_mmio(struct amdgpu_device *adev)
4953 {
4954 
4955 	/* Clear all CPU mappings pointing to this device */
4956 	unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
4957 
4958 	/* Unmap all mapped bars - Doorbell, registers and VRAM */
4959 	amdgpu_doorbell_fini(adev);
4960 
4961 	iounmap(adev->rmmio);
4962 	adev->rmmio = NULL;
4963 	if (adev->mman.aper_base_kaddr)
4964 		iounmap(adev->mman.aper_base_kaddr);
4965 	adev->mman.aper_base_kaddr = NULL;
4966 
4967 	/* Memory manager related */
4968 	if (!adev->gmc.xgmi.connected_to_cpu && !adev->gmc.is_app_apu) {
4969 		arch_phys_wc_del(adev->gmc.vram_mtrr);
4970 		arch_io_free_memtype_wc(adev->gmc.aper_base, adev->gmc.aper_size);
4971 	}
4972 }
4973 
4974 /**
4975  * amdgpu_device_fini_hw - tear down the driver
4976  *
4977  * @adev: amdgpu_device pointer
4978  *
4979  * Tear down the driver info (all asics).
4980  * Called at driver shutdown.
4981  */
4982 void amdgpu_device_fini_hw(struct amdgpu_device *adev)
4983 {
4984 	dev_info(adev->dev, "amdgpu: finishing device.\n");
4985 	flush_delayed_work(&adev->delayed_init_work);
4986 
4987 	if (adev->mman.initialized)
4988 		drain_workqueue(adev->mman.bdev.wq);
4989 	adev->shutdown = true;
4990 
4991 	unregister_pm_notifier(&adev->pm_nb);
4992 
4993 	/* make sure IB test finished before entering exclusive mode
4994 	 * to avoid preemption on IB test
4995 	 */
4996 	if (amdgpu_sriov_vf(adev)) {
4997 		amdgpu_virt_request_full_gpu(adev, false);
4998 		amdgpu_virt_fini_data_exchange(adev);
4999 	}
5000 
5001 	/* disable all interrupts */
5002 	amdgpu_irq_disable_all(adev);
5003 	if (adev->mode_info.mode_config_initialized) {
5004 		if (!drm_drv_uses_atomic_modeset(adev_to_drm(adev)))
5005 			drm_helper_force_disable_all(adev_to_drm(adev));
5006 		else
5007 			drm_atomic_helper_shutdown(adev_to_drm(adev));
5008 	}
5009 	amdgpu_fence_driver_hw_fini(adev);
5010 
5011 	amdgpu_device_sys_interface_fini(adev);
5012 
5013 	/* disable ras feature must before hw fini */
5014 	amdgpu_ras_pre_fini(adev);
5015 
5016 	amdgpu_ttm_set_buffer_funcs_status(adev, false);
5017 
5018 	amdgpu_device_ip_fini_early(adev);
5019 
5020 	amdgpu_irq_fini_hw(adev);
5021 
5022 	if (adev->mman.initialized)
5023 		ttm_device_clear_dma_mappings(&adev->mman.bdev);
5024 
5025 	amdgpu_gart_dummy_page_fini(adev);
5026 
5027 	if (drm_dev_is_unplugged(adev_to_drm(adev)))
5028 		amdgpu_device_unmap_mmio(adev);
5029 
5030 }
5031 
5032 void amdgpu_device_fini_sw(struct amdgpu_device *adev)
5033 {
5034 	int i, idx;
5035 	bool px;
5036 
5037 	amdgpu_device_ip_fini(adev);
5038 	amdgpu_fence_driver_sw_fini(adev);
5039 	amdgpu_ucode_release(&adev->firmware.gpu_info_fw);
5040 	adev->accel_working = false;
5041 	dma_fence_put(rcu_dereference_protected(adev->gang_submit, true));
5042 	for (i = 0; i < MAX_XCP; ++i) {
5043 		dma_fence_put(adev->isolation[i].spearhead);
5044 		amdgpu_sync_free(&adev->isolation[i].active);
5045 		amdgpu_sync_free(&adev->isolation[i].prev);
5046 	}
5047 
5048 	amdgpu_reset_fini(adev);
5049 
5050 	/* free i2c buses */
5051 	amdgpu_i2c_fini(adev);
5052 
5053 	if (adev->bios) {
5054 		if (amdgpu_emu_mode != 1)
5055 			amdgpu_atombios_fini(adev);
5056 		amdgpu_bios_release(adev);
5057 	}
5058 
5059 	kfree(adev->fru_info);
5060 	adev->fru_info = NULL;
5061 
5062 	kfree(adev->xcp_mgr);
5063 	adev->xcp_mgr = NULL;
5064 
5065 	px = amdgpu_device_supports_px(adev);
5066 
5067 	if (px || (!dev_is_removable(&adev->pdev->dev) &&
5068 				apple_gmux_detect(NULL, NULL)))
5069 		vga_switcheroo_unregister_client(adev->pdev);
5070 
5071 	if (px)
5072 		vga_switcheroo_fini_domain_pm_ops(adev->dev);
5073 
5074 	if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
5075 		vga_client_unregister(adev->pdev);
5076 
5077 	if (drm_dev_enter(adev_to_drm(adev), &idx)) {
5078 
5079 		iounmap(adev->rmmio);
5080 		adev->rmmio = NULL;
5081 		drm_dev_exit(idx);
5082 	}
5083 
5084 	if (IS_ENABLED(CONFIG_PERF_EVENTS))
5085 		amdgpu_pmu_fini(adev);
5086 	if (adev->discovery.bin)
5087 		amdgpu_discovery_fini(adev);
5088 
5089 	amdgpu_reset_put_reset_domain(adev->reset_domain);
5090 	adev->reset_domain = NULL;
5091 
5092 	kfree(adev->pci_state);
5093 	kfree(adev->pcie_reset_ctx.swds_pcistate);
5094 	kfree(adev->pcie_reset_ctx.swus_pcistate);
5095 }
5096 
5097 /**
5098  * amdgpu_device_evict_resources - evict device resources
5099  * @adev: amdgpu device object
5100  *
5101  * Evicts all ttm device resources(vram BOs, gart table) from the lru list
5102  * of the vram memory type. Mainly used for evicting device resources
5103  * at suspend time.
5104  *
5105  */
5106 static int amdgpu_device_evict_resources(struct amdgpu_device *adev)
5107 {
5108 	int ret;
5109 
5110 	/* No need to evict vram on APUs unless going to S4 */
5111 	if (!adev->in_s4 && (adev->flags & AMD_IS_APU))
5112 		return 0;
5113 
5114 	/* No need to evict when going to S5 through S4 callbacks */
5115 	if (system_state == SYSTEM_POWER_OFF)
5116 		return 0;
5117 
5118 	ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM);
5119 	if (ret) {
5120 		dev_warn(adev->dev, "evicting device resources failed\n");
5121 		return ret;
5122 	}
5123 
5124 	if (adev->in_s4) {
5125 		ret = ttm_device_prepare_hibernation(&adev->mman.bdev);
5126 		if (ret)
5127 			dev_err(adev->dev, "prepare hibernation failed, %d\n", ret);
5128 	}
5129 	return ret;
5130 }
5131 
5132 /*
5133  * Suspend & resume.
5134  */
5135 /**
5136  * amdgpu_device_pm_notifier - Notification block for Suspend/Hibernate events
5137  * @nb: notifier block
5138  * @mode: suspend mode
5139  * @data: data
5140  *
5141  * This function is called when the system is about to suspend or hibernate.
5142  * It is used to set the appropriate flags so that eviction can be optimized
5143  * in the pm prepare callback.
5144  */
5145 static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
5146 				     void *data)
5147 {
5148 	struct amdgpu_device *adev = container_of(nb, struct amdgpu_device, pm_nb);
5149 
5150 	switch (mode) {
5151 	case PM_HIBERNATION_PREPARE:
5152 		adev->in_s4 = true;
5153 		break;
5154 	case PM_POST_HIBERNATION:
5155 		adev->in_s4 = false;
5156 		break;
5157 	}
5158 
5159 	return NOTIFY_DONE;
5160 }
5161 
5162 /**
5163  * amdgpu_device_prepare - prepare for device suspend
5164  *
5165  * @dev: drm dev pointer
5166  *
5167  * Prepare to put the hw in the suspend state (all asics).
5168  * Returns 0 for success or an error on failure.
5169  * Called at driver suspend.
5170  */
5171 int amdgpu_device_prepare(struct drm_device *dev)
5172 {
5173 	struct amdgpu_device *adev = drm_to_adev(dev);
5174 	int i, r;
5175 
5176 	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
5177 		return 0;
5178 
5179 	/* Evict the majority of BOs before starting suspend sequence */
5180 	r = amdgpu_device_evict_resources(adev);
5181 	if (r)
5182 		return r;
5183 
5184 	flush_delayed_work(&adev->gfx.gfx_off_delay_work);
5185 
5186 	for (i = 0; i < adev->num_ip_blocks; i++) {
5187 		if (!adev->ip_blocks[i].status.valid)
5188 			continue;
5189 		if (!adev->ip_blocks[i].version->funcs->prepare_suspend)
5190 			continue;
5191 		r = adev->ip_blocks[i].version->funcs->prepare_suspend(&adev->ip_blocks[i]);
5192 		if (r)
5193 			return r;
5194 	}
5195 
5196 	return 0;
5197 }
5198 
5199 /**
5200  * amdgpu_device_complete - complete power state transition
5201  *
5202  * @dev: drm dev pointer
5203  *
5204  * Undo the changes from amdgpu_device_prepare. This will be
5205  * called on all resume transitions, including those that failed.
5206  */
5207 void amdgpu_device_complete(struct drm_device *dev)
5208 {
5209 	struct amdgpu_device *adev = drm_to_adev(dev);
5210 	int i;
5211 
5212 	for (i = 0; i < adev->num_ip_blocks; i++) {
5213 		if (!adev->ip_blocks[i].status.valid)
5214 			continue;
5215 		if (!adev->ip_blocks[i].version->funcs->complete)
5216 			continue;
5217 		adev->ip_blocks[i].version->funcs->complete(&adev->ip_blocks[i]);
5218 	}
5219 }
5220 
5221 /**
5222  * amdgpu_device_suspend - initiate device suspend
5223  *
5224  * @dev: drm dev pointer
5225  * @notify_clients: notify in-kernel DRM clients
5226  *
5227  * Puts the hw in the suspend state (all asics).
5228  * Returns 0 for success or an error on failure.
5229  * Called at driver suspend.
5230  */
5231 int amdgpu_device_suspend(struct drm_device *dev, bool notify_clients)
5232 {
5233 	struct amdgpu_device *adev = drm_to_adev(dev);
5234 	int r = 0;
5235 
5236 	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
5237 		return 0;
5238 
5239 	adev->in_suspend = true;
5240 
5241 	if (amdgpu_sriov_vf(adev)) {
5242 		if (!adev->in_runpm)
5243 			amdgpu_amdkfd_suspend_process(adev);
5244 		amdgpu_virt_fini_data_exchange(adev);
5245 		r = amdgpu_virt_request_full_gpu(adev, false);
5246 		if (r)
5247 			return r;
5248 	}
5249 
5250 	if (amdgpu_acpi_smart_shift_update(adev, AMDGPU_SS_DEV_D3))
5251 		dev_warn(adev->dev, "smart shift update failed\n");
5252 
5253 	if (notify_clients)
5254 		drm_client_dev_suspend(adev_to_drm(adev), false);
5255 
5256 	cancel_delayed_work_sync(&adev->delayed_init_work);
5257 
5258 	amdgpu_ras_suspend(adev);
5259 
5260 	r = amdgpu_device_ip_suspend_phase1(adev);
5261 	if (r)
5262 		return r;
5263 
5264 	amdgpu_amdkfd_suspend(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
5265 	r = amdgpu_userq_suspend(adev);
5266 	if (r)
5267 		return r;
5268 
5269 	r = amdgpu_device_evict_resources(adev);
5270 	if (r)
5271 		return r;
5272 
5273 	amdgpu_ttm_set_buffer_funcs_status(adev, false);
5274 
5275 	amdgpu_fence_driver_hw_fini(adev);
5276 
5277 	r = amdgpu_device_ip_suspend_phase2(adev);
5278 	if (r)
5279 		return r;
5280 
5281 	if (amdgpu_sriov_vf(adev))
5282 		amdgpu_virt_release_full_gpu(adev, false);
5283 
5284 	r = amdgpu_dpm_notify_rlc_state(adev, false);
5285 	if (r)
5286 		return r;
5287 
5288 	return 0;
5289 }
5290 
5291 static inline int amdgpu_virt_resume(struct amdgpu_device *adev)
5292 {
5293 	int r;
5294 	unsigned int prev_physical_node_id = adev->gmc.xgmi.physical_node_id;
5295 
5296 	/* During VM resume, QEMU programming of VF MSIX table (register GFXMSIX_VECT0_ADDR_LO)
5297 	 * may not work. The access could be blocked by nBIF protection as VF isn't in
5298 	 * exclusive access mode. Exclusive access is enabled now, disable/enable MSIX
5299 	 * so that QEMU reprograms MSIX table.
5300 	 */
5301 	amdgpu_restore_msix(adev);
5302 
5303 	r = adev->gfxhub.funcs->get_xgmi_info(adev);
5304 	if (r)
5305 		return r;
5306 
5307 	dev_info(adev->dev, "xgmi node, old id %d, new id %d\n",
5308 		prev_physical_node_id, adev->gmc.xgmi.physical_node_id);
5309 
5310 	adev->vm_manager.vram_base_offset = adev->gfxhub.funcs->get_mc_fb_offset(adev);
5311 	adev->vm_manager.vram_base_offset +=
5312 		adev->gmc.xgmi.physical_node_id * adev->gmc.xgmi.node_segment_size;
5313 
5314 	return 0;
5315 }
5316 
5317 /**
5318  * amdgpu_device_resume - initiate device resume
5319  *
5320  * @dev: drm dev pointer
5321  * @notify_clients: notify in-kernel DRM clients
5322  *
5323  * Bring the hw back to operating state (all asics).
5324  * Returns 0 for success or an error on failure.
5325  * Called at driver resume.
5326  */
5327 int amdgpu_device_resume(struct drm_device *dev, bool notify_clients)
5328 {
5329 	struct amdgpu_device *adev = drm_to_adev(dev);
5330 	int r = 0;
5331 
5332 	if (amdgpu_sriov_vf(adev)) {
5333 		r = amdgpu_virt_request_full_gpu(adev, true);
5334 		if (r)
5335 			return r;
5336 	}
5337 
5338 	if (amdgpu_virt_xgmi_migrate_enabled(adev)) {
5339 		r = amdgpu_virt_resume(adev);
5340 		if (r)
5341 			goto exit;
5342 	}
5343 
5344 	if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
5345 		return 0;
5346 
5347 	if (adev->in_s0ix)
5348 		amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D0Entry);
5349 
5350 	/* post card */
5351 	if (amdgpu_device_need_post(adev)) {
5352 		r = amdgpu_device_asic_init(adev);
5353 		if (r)
5354 			dev_err(adev->dev, "amdgpu asic init failed\n");
5355 	}
5356 
5357 	r = amdgpu_device_ip_resume(adev);
5358 
5359 	if (r) {
5360 		dev_err(adev->dev, "amdgpu_device_ip_resume failed (%d).\n", r);
5361 		goto exit;
5362 	}
5363 
5364 	r = amdgpu_amdkfd_resume(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
5365 	if (r)
5366 		goto exit;
5367 
5368 	r = amdgpu_userq_resume(adev);
5369 	if (r)
5370 		goto exit;
5371 
5372 	r = amdgpu_device_ip_late_init(adev);
5373 	if (r)
5374 		goto exit;
5375 
5376 	queue_delayed_work(system_wq, &adev->delayed_init_work,
5377 			   msecs_to_jiffies(AMDGPU_RESUME_MS));
5378 exit:
5379 	if (amdgpu_sriov_vf(adev)) {
5380 		amdgpu_virt_init_data_exchange(adev);
5381 		amdgpu_virt_release_full_gpu(adev, true);
5382 
5383 		if (!r && !adev->in_runpm)
5384 			r = amdgpu_amdkfd_resume_process(adev);
5385 	}
5386 
5387 	if (r)
5388 		return r;
5389 
5390 	/* Make sure IB tests flushed */
5391 	flush_delayed_work(&adev->delayed_init_work);
5392 
5393 	if (notify_clients)
5394 		drm_client_dev_resume(adev_to_drm(adev), false);
5395 
5396 	amdgpu_ras_resume(adev);
5397 
5398 	if (adev->mode_info.num_crtc) {
5399 		/*
5400 		 * Most of the connector probing functions try to acquire runtime pm
5401 		 * refs to ensure that the GPU is powered on when connector polling is
5402 		 * performed. Since we're calling this from a runtime PM callback,
5403 		 * trying to acquire rpm refs will cause us to deadlock.
5404 		 *
5405 		 * Since we're guaranteed to be holding the rpm lock, it's safe to
5406 		 * temporarily disable the rpm helpers so this doesn't deadlock us.
5407 		 */
5408 #ifdef CONFIG_PM
5409 		dev->dev->power.disable_depth++;
5410 #endif
5411 		if (!adev->dc_enabled)
5412 			drm_helper_hpd_irq_event(dev);
5413 		else
5414 			drm_kms_helper_hotplug_event(dev);
5415 #ifdef CONFIG_PM
5416 		dev->dev->power.disable_depth--;
5417 #endif
5418 	}
5419 
5420 	amdgpu_vram_mgr_clear_reset_blocks(adev);
5421 	adev->in_suspend = false;
5422 
5423 	if (amdgpu_acpi_smart_shift_update(adev, AMDGPU_SS_DEV_D0))
5424 		dev_warn(adev->dev, "smart shift update failed\n");
5425 
5426 	return 0;
5427 }
5428 
5429 /**
5430  * amdgpu_device_ip_check_soft_reset - did soft reset succeed
5431  *
5432  * @adev: amdgpu_device pointer
5433  *
5434  * The list of all the hardware IPs that make up the asic is walked and
5435  * the check_soft_reset callbacks are run.  check_soft_reset determines
5436  * if the asic is still hung or not.
5437  * Returns true if any of the IPs are still in a hung state, false if not.
5438  */
5439 static bool amdgpu_device_ip_check_soft_reset(struct amdgpu_device *adev)
5440 {
5441 	int i;
5442 	bool asic_hang = false;
5443 
5444 	if (amdgpu_sriov_vf(adev))
5445 		return true;
5446 
5447 	if (amdgpu_asic_need_full_reset(adev))
5448 		return true;
5449 
5450 	for (i = 0; i < adev->num_ip_blocks; i++) {
5451 		if (!adev->ip_blocks[i].status.valid)
5452 			continue;
5453 		if (adev->ip_blocks[i].version->funcs->check_soft_reset)
5454 			adev->ip_blocks[i].status.hang =
5455 				adev->ip_blocks[i].version->funcs->check_soft_reset(
5456 					&adev->ip_blocks[i]);
5457 		if (adev->ip_blocks[i].status.hang) {
5458 			dev_info(adev->dev, "IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name);
5459 			asic_hang = true;
5460 		}
5461 	}
5462 	return asic_hang;
5463 }
5464 
5465 /**
5466  * amdgpu_device_ip_pre_soft_reset - prepare for soft reset
5467  *
5468  * @adev: amdgpu_device pointer
5469  *
5470  * The list of all the hardware IPs that make up the asic is walked and the
5471  * pre_soft_reset callbacks are run if the block is hung.  pre_soft_reset
5472  * handles any IP specific hardware or software state changes that are
5473  * necessary for a soft reset to succeed.
5474  * Returns 0 on success, negative error code on failure.
5475  */
5476 static int amdgpu_device_ip_pre_soft_reset(struct amdgpu_device *adev)
5477 {
5478 	int i, r = 0;
5479 
5480 	for (i = 0; i < adev->num_ip_blocks; i++) {
5481 		if (!adev->ip_blocks[i].status.valid)
5482 			continue;
5483 		if (adev->ip_blocks[i].status.hang &&
5484 		    adev->ip_blocks[i].version->funcs->pre_soft_reset) {
5485 			r = adev->ip_blocks[i].version->funcs->pre_soft_reset(&adev->ip_blocks[i]);
5486 			if (r)
5487 				return r;
5488 		}
5489 	}
5490 
5491 	return 0;
5492 }
5493 
5494 /**
5495  * amdgpu_device_ip_need_full_reset - check if a full asic reset is needed
5496  *
5497  * @adev: amdgpu_device pointer
5498  *
5499  * Some hardware IPs cannot be soft reset.  If they are hung, a full gpu
5500  * reset is necessary to recover.
5501  * Returns true if a full asic reset is required, false if not.
5502  */
5503 static bool amdgpu_device_ip_need_full_reset(struct amdgpu_device *adev)
5504 {
5505 	int i;
5506 
5507 	if (amdgpu_asic_need_full_reset(adev))
5508 		return true;
5509 
5510 	for (i = 0; i < adev->num_ip_blocks; i++) {
5511 		if (!adev->ip_blocks[i].status.valid)
5512 			continue;
5513 		if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) ||
5514 		    (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) ||
5515 		    (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) ||
5516 		    (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) ||
5517 		     adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
5518 			if (adev->ip_blocks[i].status.hang) {
5519 				dev_info(adev->dev, "Some block need full reset!\n");
5520 				return true;
5521 			}
5522 		}
5523 	}
5524 	return false;
5525 }
5526 
5527 /**
5528  * amdgpu_device_ip_soft_reset - do a soft reset
5529  *
5530  * @adev: amdgpu_device pointer
5531  *
5532  * The list of all the hardware IPs that make up the asic is walked and the
5533  * soft_reset callbacks are run if the block is hung.  soft_reset handles any
5534  * IP specific hardware or software state changes that are necessary to soft
5535  * reset the IP.
5536  * Returns 0 on success, negative error code on failure.
5537  */
5538 static int amdgpu_device_ip_soft_reset(struct amdgpu_device *adev)
5539 {
5540 	int i, r = 0;
5541 
5542 	for (i = 0; i < adev->num_ip_blocks; i++) {
5543 		if (!adev->ip_blocks[i].status.valid)
5544 			continue;
5545 		if (adev->ip_blocks[i].status.hang &&
5546 		    adev->ip_blocks[i].version->funcs->soft_reset) {
5547 			r = adev->ip_blocks[i].version->funcs->soft_reset(&adev->ip_blocks[i]);
5548 			if (r)
5549 				return r;
5550 		}
5551 	}
5552 
5553 	return 0;
5554 }
5555 
5556 /**
5557  * amdgpu_device_ip_post_soft_reset - clean up from soft reset
5558  *
5559  * @adev: amdgpu_device pointer
5560  *
5561  * The list of all the hardware IPs that make up the asic is walked and the
5562  * post_soft_reset callbacks are run if the asic was hung.  post_soft_reset
5563  * handles any IP specific hardware or software state changes that are
5564  * necessary after the IP has been soft reset.
5565  * Returns 0 on success, negative error code on failure.
5566  */
5567 static int amdgpu_device_ip_post_soft_reset(struct amdgpu_device *adev)
5568 {
5569 	int i, r = 0;
5570 
5571 	for (i = 0; i < adev->num_ip_blocks; i++) {
5572 		if (!adev->ip_blocks[i].status.valid)
5573 			continue;
5574 		if (adev->ip_blocks[i].status.hang &&
5575 		    adev->ip_blocks[i].version->funcs->post_soft_reset)
5576 			r = adev->ip_blocks[i].version->funcs->post_soft_reset(&adev->ip_blocks[i]);
5577 		if (r)
5578 			return r;
5579 	}
5580 
5581 	return 0;
5582 }
5583 
5584 /**
5585  * amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
5586  *
5587  * @adev: amdgpu_device pointer
5588  * @reset_context: amdgpu reset context pointer
5589  *
5590  * do VF FLR and reinitialize Asic
5591  * return 0 means succeeded otherwise failed
5592  */
5593 static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
5594 				     struct amdgpu_reset_context *reset_context)
5595 {
5596 	int r;
5597 	struct amdgpu_hive_info *hive = NULL;
5598 
5599 	if (test_bit(AMDGPU_HOST_FLR, &reset_context->flags)) {
5600 		if (!amdgpu_ras_get_fed_status(adev))
5601 			amdgpu_virt_ready_to_reset(adev);
5602 		amdgpu_virt_wait_reset(adev);
5603 		clear_bit(AMDGPU_HOST_FLR, &reset_context->flags);
5604 		r = amdgpu_virt_request_full_gpu(adev, true);
5605 	} else {
5606 		r = amdgpu_virt_reset_gpu(adev);
5607 	}
5608 	if (r)
5609 		return r;
5610 
5611 	amdgpu_ras_clear_err_state(adev);
5612 	amdgpu_irq_gpu_reset_resume_helper(adev);
5613 
5614 	/* some sw clean up VF needs to do before recover */
5615 	amdgpu_virt_post_reset(adev);
5616 
5617 	/* Resume IP prior to SMC */
5618 	r = amdgpu_device_ip_reinit_early_sriov(adev);
5619 	if (r)
5620 		return r;
5621 
5622 	amdgpu_virt_init_data_exchange(adev);
5623 
5624 	r = amdgpu_device_fw_loading(adev);
5625 	if (r)
5626 		return r;
5627 
5628 	/* now we are okay to resume SMC/CP/SDMA */
5629 	r = amdgpu_device_ip_reinit_late_sriov(adev);
5630 	if (r)
5631 		return r;
5632 
5633 	hive = amdgpu_get_xgmi_hive(adev);
5634 	/* Update PSP FW topology after reset */
5635 	if (hive && adev->gmc.xgmi.num_physical_nodes > 1)
5636 		r = amdgpu_xgmi_update_topology(hive, adev);
5637 	if (hive)
5638 		amdgpu_put_xgmi_hive(hive);
5639 	if (r)
5640 		return r;
5641 
5642 	r = amdgpu_ib_ring_tests(adev);
5643 	if (r)
5644 		return r;
5645 
5646 	if (adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST)
5647 		amdgpu_inc_vram_lost(adev);
5648 
5649 	/* need to be called during full access so we can't do it later like
5650 	 * bare-metal does.
5651 	 */
5652 	amdgpu_amdkfd_post_reset(adev);
5653 	amdgpu_virt_release_full_gpu(adev, true);
5654 
5655 	/* Aldebaran and gfx_11_0_3 support ras in SRIOV, so need resume ras during reset */
5656 	if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 2) ||
5657 	    amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
5658 	    amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
5659 	    amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0) ||
5660 	    amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(11, 0, 3))
5661 		amdgpu_ras_resume(adev);
5662 
5663 	amdgpu_virt_ras_telemetry_post_reset(adev);
5664 
5665 	return 0;
5666 }
5667 
5668 /**
5669  * amdgpu_device_has_job_running - check if there is any unfinished job
5670  *
5671  * @adev: amdgpu_device pointer
5672  *
5673  * check if there is any job running on the device when guest driver receives
5674  * FLR notification from host driver. If there are still jobs running, then
5675  * the guest driver will not respond the FLR reset. Instead, let the job hit
5676  * the timeout and guest driver then issue the reset request.
5677  */
5678 bool amdgpu_device_has_job_running(struct amdgpu_device *adev)
5679 {
5680 	int i;
5681 
5682 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5683 		struct amdgpu_ring *ring = adev->rings[i];
5684 
5685 		if (!amdgpu_ring_sched_ready(ring))
5686 			continue;
5687 
5688 		if (amdgpu_fence_count_emitted(ring))
5689 			return true;
5690 	}
5691 	return false;
5692 }
5693 
5694 /**
5695  * amdgpu_device_should_recover_gpu - check if we should try GPU recovery
5696  *
5697  * @adev: amdgpu_device pointer
5698  *
5699  * Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
5700  * a hung GPU.
5701  */
5702 bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev)
5703 {
5704 
5705 	if (amdgpu_gpu_recovery == 0)
5706 		goto disabled;
5707 
5708 	/* Skip soft reset check in fatal error mode */
5709 	if (!amdgpu_ras_is_poison_mode_supported(adev))
5710 		return true;
5711 
5712 	if (amdgpu_sriov_vf(adev))
5713 		return true;
5714 
5715 	if (amdgpu_gpu_recovery == -1) {
5716 		switch (adev->asic_type) {
5717 #ifdef CONFIG_DRM_AMDGPU_SI
5718 		case CHIP_VERDE:
5719 		case CHIP_TAHITI:
5720 		case CHIP_PITCAIRN:
5721 		case CHIP_OLAND:
5722 		case CHIP_HAINAN:
5723 #endif
5724 #ifdef CONFIG_DRM_AMDGPU_CIK
5725 		case CHIP_KAVERI:
5726 		case CHIP_KABINI:
5727 		case CHIP_MULLINS:
5728 #endif
5729 		case CHIP_CARRIZO:
5730 		case CHIP_STONEY:
5731 		case CHIP_CYAN_SKILLFISH:
5732 			goto disabled;
5733 		default:
5734 			break;
5735 		}
5736 	}
5737 
5738 	return true;
5739 
5740 disabled:
5741 		dev_info(adev->dev, "GPU recovery disabled.\n");
5742 		return false;
5743 }
5744 
5745 int amdgpu_device_mode1_reset(struct amdgpu_device *adev)
5746 {
5747 	u32 i;
5748 	int ret = 0;
5749 
5750 	if (adev->bios)
5751 		amdgpu_atombios_scratch_regs_engine_hung(adev, true);
5752 
5753 	dev_info(adev->dev, "GPU mode1 reset\n");
5754 
5755 	/* Cache the state before bus master disable. The saved config space
5756 	 * values are used in other cases like restore after mode-2 reset.
5757 	 */
5758 	amdgpu_device_cache_pci_state(adev->pdev);
5759 
5760 	/* disable BM */
5761 	pci_clear_master(adev->pdev);
5762 
5763 	if (amdgpu_dpm_is_mode1_reset_supported(adev)) {
5764 		dev_info(adev->dev, "GPU smu mode1 reset\n");
5765 		ret = amdgpu_dpm_mode1_reset(adev);
5766 	} else {
5767 		dev_info(adev->dev, "GPU psp mode1 reset\n");
5768 		ret = psp_gpu_reset(adev);
5769 	}
5770 
5771 	if (ret)
5772 		goto mode1_reset_failed;
5773 
5774 	amdgpu_device_load_pci_state(adev->pdev);
5775 	ret = amdgpu_psp_wait_for_bootloader(adev);
5776 	if (ret)
5777 		goto mode1_reset_failed;
5778 
5779 	/* wait for asic to come out of reset */
5780 	for (i = 0; i < adev->usec_timeout; i++) {
5781 		u32 memsize = adev->nbio.funcs->get_memsize(adev);
5782 
5783 		if (memsize != 0xffffffff)
5784 			break;
5785 		udelay(1);
5786 	}
5787 
5788 	if (i >= adev->usec_timeout) {
5789 		ret = -ETIMEDOUT;
5790 		goto mode1_reset_failed;
5791 	}
5792 
5793 	if (adev->bios)
5794 		amdgpu_atombios_scratch_regs_engine_hung(adev, false);
5795 
5796 	return 0;
5797 
5798 mode1_reset_failed:
5799 	dev_err(adev->dev, "GPU mode1 reset failed\n");
5800 	return ret;
5801 }
5802 
5803 int amdgpu_device_link_reset(struct amdgpu_device *adev)
5804 {
5805 	int ret = 0;
5806 
5807 	dev_info(adev->dev, "GPU link reset\n");
5808 
5809 	if (!amdgpu_reset_in_dpc(adev))
5810 		ret = amdgpu_dpm_link_reset(adev);
5811 
5812 	if (ret)
5813 		goto link_reset_failed;
5814 
5815 	ret = amdgpu_psp_wait_for_bootloader(adev);
5816 	if (ret)
5817 		goto link_reset_failed;
5818 
5819 	return 0;
5820 
5821 link_reset_failed:
5822 	dev_err(adev->dev, "GPU link reset failed\n");
5823 	return ret;
5824 }
5825 
5826 int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
5827 				 struct amdgpu_reset_context *reset_context)
5828 {
5829 	int i, r = 0;
5830 	struct amdgpu_job *job = NULL;
5831 	struct amdgpu_device *tmp_adev = reset_context->reset_req_dev;
5832 	bool need_full_reset =
5833 		test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5834 
5835 	if (reset_context->reset_req_dev == adev)
5836 		job = reset_context->job;
5837 
5838 	if (amdgpu_sriov_vf(adev))
5839 		amdgpu_virt_pre_reset(adev);
5840 
5841 	amdgpu_fence_driver_isr_toggle(adev, true);
5842 
5843 	/* block all schedulers and reset given job's ring */
5844 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5845 		struct amdgpu_ring *ring = adev->rings[i];
5846 
5847 		if (!amdgpu_ring_sched_ready(ring))
5848 			continue;
5849 
5850 		/* after all hw jobs are reset, hw fence is meaningless, so force_completion */
5851 		amdgpu_fence_driver_force_completion(ring);
5852 	}
5853 
5854 	amdgpu_fence_driver_isr_toggle(adev, false);
5855 
5856 	if (job && job->vm)
5857 		drm_sched_increase_karma(&job->base);
5858 
5859 	r = amdgpu_reset_prepare_hwcontext(adev, reset_context);
5860 	/* If reset handler not implemented, continue; otherwise return */
5861 	if (r == -EOPNOTSUPP)
5862 		r = 0;
5863 	else
5864 		return r;
5865 
5866 	/* Don't suspend on bare metal if we are not going to HW reset the ASIC */
5867 	if (!amdgpu_sriov_vf(adev)) {
5868 
5869 		if (!need_full_reset)
5870 			need_full_reset = amdgpu_device_ip_need_full_reset(adev);
5871 
5872 		if (!need_full_reset && amdgpu_gpu_recovery &&
5873 		    amdgpu_device_ip_check_soft_reset(adev)) {
5874 			amdgpu_device_ip_pre_soft_reset(adev);
5875 			r = amdgpu_device_ip_soft_reset(adev);
5876 			amdgpu_device_ip_post_soft_reset(adev);
5877 			if (r || amdgpu_device_ip_check_soft_reset(adev)) {
5878 				dev_info(adev->dev, "soft reset failed, will fallback to full reset!\n");
5879 				need_full_reset = true;
5880 			}
5881 		}
5882 
5883 		if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags)) {
5884 			dev_info(tmp_adev->dev, "Dumping IP State\n");
5885 			/* Trigger ip dump before we reset the asic */
5886 			for (i = 0; i < tmp_adev->num_ip_blocks; i++)
5887 				if (tmp_adev->ip_blocks[i].version->funcs->dump_ip_state)
5888 					tmp_adev->ip_blocks[i].version->funcs
5889 						->dump_ip_state((void *)&tmp_adev->ip_blocks[i]);
5890 			dev_info(tmp_adev->dev, "Dumping IP State Completed\n");
5891 		}
5892 
5893 		if (need_full_reset)
5894 			r = amdgpu_device_ip_suspend(adev);
5895 		if (need_full_reset)
5896 			set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5897 		else
5898 			clear_bit(AMDGPU_NEED_FULL_RESET,
5899 				  &reset_context->flags);
5900 	}
5901 
5902 	return r;
5903 }
5904 
5905 int amdgpu_device_reinit_after_reset(struct amdgpu_reset_context *reset_context)
5906 {
5907 	struct list_head *device_list_handle;
5908 	bool full_reset, vram_lost = false;
5909 	struct amdgpu_device *tmp_adev;
5910 	int r, init_level;
5911 
5912 	device_list_handle = reset_context->reset_device_list;
5913 
5914 	if (!device_list_handle)
5915 		return -EINVAL;
5916 
5917 	full_reset = test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5918 
5919 	/**
5920 	 * If it's reset on init, it's default init level, otherwise keep level
5921 	 * as recovery level.
5922 	 */
5923 	if (reset_context->method == AMD_RESET_METHOD_ON_INIT)
5924 			init_level = AMDGPU_INIT_LEVEL_DEFAULT;
5925 	else
5926 			init_level = AMDGPU_INIT_LEVEL_RESET_RECOVERY;
5927 
5928 	r = 0;
5929 	list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5930 		amdgpu_set_init_level(tmp_adev, init_level);
5931 		if (full_reset) {
5932 			/* post card */
5933 			amdgpu_reset_set_dpc_status(tmp_adev, false);
5934 			amdgpu_ras_clear_err_state(tmp_adev);
5935 			r = amdgpu_device_asic_init(tmp_adev);
5936 			if (r) {
5937 				dev_warn(tmp_adev->dev, "asic atom init failed!");
5938 			} else {
5939 				dev_info(tmp_adev->dev, "GPU reset succeeded, trying to resume\n");
5940 
5941 				r = amdgpu_device_ip_resume_phase1(tmp_adev);
5942 				if (r)
5943 					goto out;
5944 
5945 				vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
5946 
5947 				if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags))
5948 					amdgpu_coredump(tmp_adev, false, vram_lost, reset_context->job);
5949 
5950 				if (vram_lost) {
5951 					dev_info(
5952 						tmp_adev->dev,
5953 						"VRAM is lost due to GPU reset!\n");
5954 					amdgpu_inc_vram_lost(tmp_adev);
5955 				}
5956 
5957 				r = amdgpu_device_fw_loading(tmp_adev);
5958 				if (r)
5959 					return r;
5960 
5961 				r = amdgpu_xcp_restore_partition_mode(
5962 					tmp_adev->xcp_mgr);
5963 				if (r)
5964 					goto out;
5965 
5966 				r = amdgpu_device_ip_resume_phase2(tmp_adev);
5967 				if (r)
5968 					goto out;
5969 
5970 				if (tmp_adev->mman.buffer_funcs_ring->sched.ready)
5971 					amdgpu_ttm_set_buffer_funcs_status(tmp_adev, true);
5972 
5973 				r = amdgpu_device_ip_resume_phase3(tmp_adev);
5974 				if (r)
5975 					goto out;
5976 
5977 				if (vram_lost)
5978 					amdgpu_device_fill_reset_magic(tmp_adev);
5979 
5980 				/*
5981 				 * Add this ASIC as tracked as reset was already
5982 				 * complete successfully.
5983 				 */
5984 				amdgpu_register_gpu_instance(tmp_adev);
5985 
5986 				if (!reset_context->hive &&
5987 				    tmp_adev->gmc.xgmi.num_physical_nodes > 1)
5988 					amdgpu_xgmi_add_device(tmp_adev);
5989 
5990 				r = amdgpu_device_ip_late_init(tmp_adev);
5991 				if (r)
5992 					goto out;
5993 
5994 				drm_client_dev_resume(adev_to_drm(tmp_adev), false);
5995 
5996 				/*
5997 				 * The GPU enters bad state once faulty pages
5998 				 * by ECC has reached the threshold, and ras
5999 				 * recovery is scheduled next. So add one check
6000 				 * here to break recovery if it indeed exceeds
6001 				 * bad page threshold, and remind user to
6002 				 * retire this GPU or setting one bigger
6003 				 * bad_page_threshold value to fix this once
6004 				 * probing driver again.
6005 				 */
6006 				if (!amdgpu_ras_is_rma(tmp_adev)) {
6007 					/* must succeed. */
6008 					amdgpu_ras_resume(tmp_adev);
6009 				} else {
6010 					r = -EINVAL;
6011 					goto out;
6012 				}
6013 
6014 				/* Update PSP FW topology after reset */
6015 				if (reset_context->hive &&
6016 				    tmp_adev->gmc.xgmi.num_physical_nodes > 1)
6017 					r = amdgpu_xgmi_update_topology(
6018 						reset_context->hive, tmp_adev);
6019 			}
6020 		}
6021 
6022 out:
6023 		if (!r) {
6024 			/* IP init is complete now, set level as default */
6025 			amdgpu_set_init_level(tmp_adev,
6026 					      AMDGPU_INIT_LEVEL_DEFAULT);
6027 			amdgpu_irq_gpu_reset_resume_helper(tmp_adev);
6028 			r = amdgpu_ib_ring_tests(tmp_adev);
6029 			if (r) {
6030 				dev_err(tmp_adev->dev, "ib ring test failed (%d).\n", r);
6031 				r = -EAGAIN;
6032 				goto end;
6033 			}
6034 		}
6035 
6036 		if (r)
6037 			tmp_adev->asic_reset_res = r;
6038 	}
6039 
6040 end:
6041 	return r;
6042 }
6043 
6044 int amdgpu_do_asic_reset(struct list_head *device_list_handle,
6045 			 struct amdgpu_reset_context *reset_context)
6046 {
6047 	struct amdgpu_device *tmp_adev = NULL;
6048 	bool need_full_reset, skip_hw_reset;
6049 	int r = 0;
6050 
6051 	/* Try reset handler method first */
6052 	tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
6053 				    reset_list);
6054 
6055 	reset_context->reset_device_list = device_list_handle;
6056 	r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
6057 	/* If reset handler not implemented, continue; otherwise return */
6058 	if (r == -EOPNOTSUPP)
6059 		r = 0;
6060 	else
6061 		return r;
6062 
6063 	/* Reset handler not implemented, use the default method */
6064 	need_full_reset =
6065 		test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
6066 	skip_hw_reset = test_bit(AMDGPU_SKIP_HW_RESET, &reset_context->flags);
6067 
6068 	/*
6069 	 * ASIC reset has to be done on all XGMI hive nodes ASAP
6070 	 * to allow proper links negotiation in FW (within 1 sec)
6071 	 */
6072 	if (!skip_hw_reset && need_full_reset) {
6073 		list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
6074 			/* For XGMI run all resets in parallel to speed up the process */
6075 			if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
6076 				if (!queue_work(system_unbound_wq,
6077 						&tmp_adev->xgmi_reset_work))
6078 					r = -EALREADY;
6079 			} else
6080 				r = amdgpu_asic_reset(tmp_adev);
6081 
6082 			if (r) {
6083 				dev_err(tmp_adev->dev,
6084 					"ASIC reset failed with error, %d for drm dev, %s",
6085 					r, adev_to_drm(tmp_adev)->unique);
6086 				goto out;
6087 			}
6088 		}
6089 
6090 		/* For XGMI wait for all resets to complete before proceed */
6091 		if (!r) {
6092 			list_for_each_entry(tmp_adev, device_list_handle,
6093 					    reset_list) {
6094 				if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
6095 					flush_work(&tmp_adev->xgmi_reset_work);
6096 					r = tmp_adev->asic_reset_res;
6097 					if (r)
6098 						break;
6099 				}
6100 			}
6101 		}
6102 	}
6103 
6104 	if (!r && amdgpu_ras_intr_triggered()) {
6105 		list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
6106 			amdgpu_ras_reset_error_count(tmp_adev,
6107 						     AMDGPU_RAS_BLOCK__MMHUB);
6108 		}
6109 
6110 		amdgpu_ras_intr_cleared();
6111 	}
6112 
6113 	r = amdgpu_device_reinit_after_reset(reset_context);
6114 	if (r == -EAGAIN)
6115 		set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
6116 	else
6117 		clear_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
6118 
6119 out:
6120 	return r;
6121 }
6122 
6123 static void amdgpu_device_set_mp1_state(struct amdgpu_device *adev)
6124 {
6125 
6126 	switch (amdgpu_asic_reset_method(adev)) {
6127 	case AMD_RESET_METHOD_MODE1:
6128 	case AMD_RESET_METHOD_LINK:
6129 		adev->mp1_state = PP_MP1_STATE_SHUTDOWN;
6130 		break;
6131 	case AMD_RESET_METHOD_MODE2:
6132 		adev->mp1_state = PP_MP1_STATE_RESET;
6133 		break;
6134 	default:
6135 		adev->mp1_state = PP_MP1_STATE_NONE;
6136 		break;
6137 	}
6138 }
6139 
6140 static void amdgpu_device_unset_mp1_state(struct amdgpu_device *adev)
6141 {
6142 	amdgpu_vf_error_trans_all(adev);
6143 	adev->mp1_state = PP_MP1_STATE_NONE;
6144 }
6145 
6146 static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev)
6147 {
6148 	struct pci_dev *p = NULL;
6149 
6150 	p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
6151 			adev->pdev->bus->number, 1);
6152 	if (p) {
6153 		pm_runtime_enable(&(p->dev));
6154 		pm_runtime_resume(&(p->dev));
6155 	}
6156 
6157 	pci_dev_put(p);
6158 }
6159 
6160 static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
6161 {
6162 	enum amd_reset_method reset_method;
6163 	struct pci_dev *p = NULL;
6164 	u64 expires;
6165 
6166 	/*
6167 	 * For now, only BACO and mode1 reset are confirmed
6168 	 * to suffer the audio issue without proper suspended.
6169 	 */
6170 	reset_method = amdgpu_asic_reset_method(adev);
6171 	if ((reset_method != AMD_RESET_METHOD_BACO) &&
6172 	     (reset_method != AMD_RESET_METHOD_MODE1))
6173 		return -EINVAL;
6174 
6175 	p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
6176 			adev->pdev->bus->number, 1);
6177 	if (!p)
6178 		return -ENODEV;
6179 
6180 	expires = pm_runtime_autosuspend_expiration(&(p->dev));
6181 	if (!expires)
6182 		/*
6183 		 * If we cannot get the audio device autosuspend delay,
6184 		 * a fixed 4S interval will be used. Considering 3S is
6185 		 * the audio controller default autosuspend delay setting.
6186 		 * 4S used here is guaranteed to cover that.
6187 		 */
6188 		expires = ktime_get_mono_fast_ns() + NSEC_PER_SEC * 4ULL;
6189 
6190 	while (!pm_runtime_status_suspended(&(p->dev))) {
6191 		if (!pm_runtime_suspend(&(p->dev)))
6192 			break;
6193 
6194 		if (expires < ktime_get_mono_fast_ns()) {
6195 			dev_warn(adev->dev, "failed to suspend display audio\n");
6196 			pci_dev_put(p);
6197 			/* TODO: abort the succeeding gpu reset? */
6198 			return -ETIMEDOUT;
6199 		}
6200 	}
6201 
6202 	pm_runtime_disable(&(p->dev));
6203 
6204 	pci_dev_put(p);
6205 	return 0;
6206 }
6207 
6208 static inline void amdgpu_device_stop_pending_resets(struct amdgpu_device *adev)
6209 {
6210 	struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
6211 
6212 #if defined(CONFIG_DEBUG_FS)
6213 	if (!amdgpu_sriov_vf(adev))
6214 		cancel_work(&adev->reset_work);
6215 #endif
6216 
6217 	if (adev->kfd.dev)
6218 		cancel_work(&adev->kfd.reset_work);
6219 
6220 	if (amdgpu_sriov_vf(adev))
6221 		cancel_work(&adev->virt.flr_work);
6222 
6223 	if (con && adev->ras_enabled)
6224 		cancel_work(&con->recovery_work);
6225 
6226 }
6227 
6228 static int amdgpu_device_health_check(struct list_head *device_list_handle)
6229 {
6230 	struct amdgpu_device *tmp_adev;
6231 	int ret = 0;
6232 
6233 	list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
6234 		ret |= amdgpu_device_bus_status_check(tmp_adev);
6235 	}
6236 
6237 	return ret;
6238 }
6239 
6240 static void amdgpu_device_recovery_prepare(struct amdgpu_device *adev,
6241 					  struct list_head *device_list,
6242 					  struct amdgpu_hive_info *hive)
6243 {
6244 	struct amdgpu_device *tmp_adev = NULL;
6245 
6246 	/*
6247 	 * Build list of devices to reset.
6248 	 * In case we are in XGMI hive mode, resort the device list
6249 	 * to put adev in the 1st position.
6250 	 */
6251 	if (!amdgpu_sriov_vf(adev) && (adev->gmc.xgmi.num_physical_nodes > 1) && hive) {
6252 		list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
6253 			list_add_tail(&tmp_adev->reset_list, device_list);
6254 			if (adev->shutdown)
6255 				tmp_adev->shutdown = true;
6256 			if (amdgpu_reset_in_dpc(adev))
6257 				tmp_adev->pcie_reset_ctx.in_link_reset = true;
6258 		}
6259 		if (!list_is_first(&adev->reset_list, device_list))
6260 			list_rotate_to_front(&adev->reset_list, device_list);
6261 	} else {
6262 		list_add_tail(&adev->reset_list, device_list);
6263 	}
6264 }
6265 
6266 static void amdgpu_device_recovery_get_reset_lock(struct amdgpu_device *adev,
6267 						  struct list_head *device_list)
6268 {
6269 	struct amdgpu_device *tmp_adev = NULL;
6270 
6271 	if (list_empty(device_list))
6272 		return;
6273 	tmp_adev =
6274 		list_first_entry(device_list, struct amdgpu_device, reset_list);
6275 	amdgpu_device_lock_reset_domain(tmp_adev->reset_domain);
6276 }
6277 
6278 static void amdgpu_device_recovery_put_reset_lock(struct amdgpu_device *adev,
6279 						  struct list_head *device_list)
6280 {
6281 	struct amdgpu_device *tmp_adev = NULL;
6282 
6283 	if (list_empty(device_list))
6284 		return;
6285 	tmp_adev =
6286 		list_first_entry(device_list, struct amdgpu_device, reset_list);
6287 	amdgpu_device_unlock_reset_domain(tmp_adev->reset_domain);
6288 }
6289 
6290 static void amdgpu_device_halt_activities(struct amdgpu_device *adev,
6291 					  struct amdgpu_job *job,
6292 					  struct amdgpu_reset_context *reset_context,
6293 					  struct list_head *device_list,
6294 					  struct amdgpu_hive_info *hive,
6295 					  bool need_emergency_restart)
6296 {
6297 	struct amdgpu_device *tmp_adev = NULL;
6298 	int i;
6299 
6300 	/* block all schedulers and reset given job's ring */
6301 	list_for_each_entry(tmp_adev, device_list, reset_list) {
6302 		amdgpu_device_set_mp1_state(tmp_adev);
6303 
6304 		/*
6305 		 * Try to put the audio codec into suspend state
6306 		 * before gpu reset started.
6307 		 *
6308 		 * Due to the power domain of the graphics device
6309 		 * is shared with AZ power domain. Without this,
6310 		 * we may change the audio hardware from behind
6311 		 * the audio driver's back. That will trigger
6312 		 * some audio codec errors.
6313 		 */
6314 		if (!amdgpu_device_suspend_display_audio(tmp_adev))
6315 			tmp_adev->pcie_reset_ctx.audio_suspended = true;
6316 
6317 		amdgpu_ras_set_error_query_ready(tmp_adev, false);
6318 
6319 		cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
6320 
6321 		amdgpu_amdkfd_pre_reset(tmp_adev, reset_context);
6322 
6323 		/*
6324 		 * Mark these ASICs to be reset as untracked first
6325 		 * And add them back after reset completed
6326 		 */
6327 		amdgpu_unregister_gpu_instance(tmp_adev);
6328 
6329 		drm_client_dev_suspend(adev_to_drm(tmp_adev), false);
6330 
6331 		/* disable ras on ALL IPs */
6332 		if (!need_emergency_restart && !amdgpu_reset_in_dpc(adev) &&
6333 		    amdgpu_device_ip_need_full_reset(tmp_adev))
6334 			amdgpu_ras_suspend(tmp_adev);
6335 
6336 		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
6337 			struct amdgpu_ring *ring = tmp_adev->rings[i];
6338 
6339 			if (!amdgpu_ring_sched_ready(ring))
6340 				continue;
6341 
6342 			drm_sched_stop(&ring->sched, job ? &job->base : NULL);
6343 
6344 			if (need_emergency_restart)
6345 				amdgpu_job_stop_all_jobs_on_sched(&ring->sched);
6346 		}
6347 		atomic_inc(&tmp_adev->gpu_reset_counter);
6348 	}
6349 }
6350 
6351 static int amdgpu_device_asic_reset(struct amdgpu_device *adev,
6352 			      struct list_head *device_list,
6353 			      struct amdgpu_reset_context *reset_context)
6354 {
6355 	struct amdgpu_device *tmp_adev = NULL;
6356 	int retry_limit = AMDGPU_MAX_RETRY_LIMIT;
6357 	int r = 0;
6358 
6359 retry:	/* Rest of adevs pre asic reset from XGMI hive. */
6360 	list_for_each_entry(tmp_adev, device_list, reset_list) {
6361 		r = amdgpu_device_pre_asic_reset(tmp_adev, reset_context);
6362 		/*TODO Should we stop ?*/
6363 		if (r) {
6364 			dev_err(tmp_adev->dev, "GPU pre asic reset failed with err, %d for drm dev, %s ",
6365 				  r, adev_to_drm(tmp_adev)->unique);
6366 			tmp_adev->asic_reset_res = r;
6367 		}
6368 	}
6369 
6370 	/* Actual ASIC resets if needed.*/
6371 	/* Host driver will handle XGMI hive reset for SRIOV */
6372 	if (amdgpu_sriov_vf(adev)) {
6373 
6374 		/* Bail out of reset early */
6375 		if (amdgpu_ras_is_rma(adev))
6376 			return -ENODEV;
6377 
6378 		if (amdgpu_ras_get_fed_status(adev) || amdgpu_virt_rcvd_ras_interrupt(adev)) {
6379 			dev_dbg(adev->dev, "Detected RAS error, wait for FLR completion\n");
6380 			amdgpu_ras_set_fed(adev, true);
6381 			set_bit(AMDGPU_HOST_FLR, &reset_context->flags);
6382 		}
6383 
6384 		r = amdgpu_device_reset_sriov(adev, reset_context);
6385 		if (AMDGPU_RETRY_SRIOV_RESET(r) && (retry_limit--) > 0) {
6386 			amdgpu_virt_release_full_gpu(adev, true);
6387 			goto retry;
6388 		}
6389 		if (r)
6390 			adev->asic_reset_res = r;
6391 	} else {
6392 		r = amdgpu_do_asic_reset(device_list, reset_context);
6393 		if (r && r == -EAGAIN)
6394 			goto retry;
6395 	}
6396 
6397 	list_for_each_entry(tmp_adev, device_list, reset_list) {
6398 		/*
6399 		 * Drop any pending non scheduler resets queued before reset is done.
6400 		 * Any reset scheduled after this point would be valid. Scheduler resets
6401 		 * were already dropped during drm_sched_stop and no new ones can come
6402 		 * in before drm_sched_start.
6403 		 */
6404 		amdgpu_device_stop_pending_resets(tmp_adev);
6405 	}
6406 
6407 	return r;
6408 }
6409 
6410 static int amdgpu_device_sched_resume(struct list_head *device_list,
6411 			      struct amdgpu_reset_context *reset_context,
6412 			      bool   job_signaled)
6413 {
6414 	struct amdgpu_device *tmp_adev = NULL;
6415 	int i, r = 0;
6416 
6417 	/* Post ASIC reset for all devs .*/
6418 	list_for_each_entry(tmp_adev, device_list, reset_list) {
6419 
6420 		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
6421 			struct amdgpu_ring *ring = tmp_adev->rings[i];
6422 
6423 			if (!amdgpu_ring_sched_ready(ring))
6424 				continue;
6425 
6426 			drm_sched_start(&ring->sched, 0);
6427 		}
6428 
6429 		if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled)
6430 			drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
6431 
6432 		if (tmp_adev->asic_reset_res) {
6433 			/* bad news, how to tell it to userspace ?
6434 			 * for ras error, we should report GPU bad status instead of
6435 			 * reset failure
6436 			 */
6437 			if (reset_context->src != AMDGPU_RESET_SRC_RAS ||
6438 			    !amdgpu_ras_eeprom_check_err_threshold(tmp_adev))
6439 				dev_info(
6440 					tmp_adev->dev,
6441 					"GPU reset(%d) failed with error %d \n",
6442 					atomic_read(
6443 						&tmp_adev->gpu_reset_counter),
6444 					tmp_adev->asic_reset_res);
6445 			amdgpu_vf_error_put(tmp_adev,
6446 					    AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0,
6447 					    tmp_adev->asic_reset_res);
6448 			if (!r)
6449 				r = tmp_adev->asic_reset_res;
6450 			tmp_adev->asic_reset_res = 0;
6451 		} else {
6452 			dev_info(tmp_adev->dev, "GPU reset(%d) succeeded!\n",
6453 				 atomic_read(&tmp_adev->gpu_reset_counter));
6454 			if (amdgpu_acpi_smart_shift_update(tmp_adev,
6455 							   AMDGPU_SS_DEV_D0))
6456 				dev_warn(tmp_adev->dev,
6457 					 "smart shift update failed\n");
6458 		}
6459 	}
6460 
6461 	return r;
6462 }
6463 
6464 static void amdgpu_device_gpu_resume(struct amdgpu_device *adev,
6465 			      struct list_head *device_list,
6466 			      bool   need_emergency_restart)
6467 {
6468 	struct amdgpu_device *tmp_adev = NULL;
6469 
6470 	list_for_each_entry(tmp_adev, device_list, reset_list) {
6471 		/* unlock kfd: SRIOV would do it separately */
6472 		if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
6473 			amdgpu_amdkfd_post_reset(tmp_adev);
6474 
6475 		/* kfd_post_reset will do nothing if kfd device is not initialized,
6476 		 * need to bring up kfd here if it's not be initialized before
6477 		 */
6478 		if (!adev->kfd.init_complete)
6479 			amdgpu_amdkfd_device_init(adev);
6480 
6481 		if (tmp_adev->pcie_reset_ctx.audio_suspended)
6482 			amdgpu_device_resume_display_audio(tmp_adev);
6483 
6484 		amdgpu_device_unset_mp1_state(tmp_adev);
6485 
6486 		amdgpu_ras_set_error_query_ready(tmp_adev, true);
6487 
6488 	}
6489 }
6490 
6491 
6492 /**
6493  * amdgpu_device_gpu_recover - reset the asic and recover scheduler
6494  *
6495  * @adev: amdgpu_device pointer
6496  * @job: which job trigger hang
6497  * @reset_context: amdgpu reset context pointer
6498  *
6499  * Attempt to reset the GPU if it has hung (all asics).
6500  * Attempt to do soft-reset or full-reset and reinitialize Asic
6501  * Returns 0 for success or an error on failure.
6502  */
6503 
6504 int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
6505 			      struct amdgpu_job *job,
6506 			      struct amdgpu_reset_context *reset_context)
6507 {
6508 	struct list_head device_list;
6509 	bool job_signaled = false;
6510 	struct amdgpu_hive_info *hive = NULL;
6511 	int r = 0;
6512 	bool need_emergency_restart = false;
6513 
6514 	/*
6515 	 * If it reaches here because of hang/timeout and a RAS error is
6516 	 * detected at the same time, let RAS recovery take care of it.
6517 	 */
6518 	if (amdgpu_ras_is_err_state(adev, AMDGPU_RAS_BLOCK__ANY) &&
6519 	    !amdgpu_sriov_vf(adev) &&
6520 	    reset_context->src != AMDGPU_RESET_SRC_RAS) {
6521 		dev_dbg(adev->dev,
6522 			"Gpu recovery from source: %d yielding to RAS error recovery handling",
6523 			reset_context->src);
6524 		return 0;
6525 	}
6526 
6527 	/*
6528 	 * Special case: RAS triggered and full reset isn't supported
6529 	 */
6530 	need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
6531 
6532 	/*
6533 	 * Flush RAM to disk so that after reboot
6534 	 * the user can read log and see why the system rebooted.
6535 	 */
6536 	if (need_emergency_restart && amdgpu_ras_get_context(adev) &&
6537 		amdgpu_ras_get_context(adev)->reboot) {
6538 		dev_warn(adev->dev, "Emergency reboot.");
6539 
6540 		ksys_sync_helper();
6541 		emergency_restart();
6542 	}
6543 
6544 	dev_info(adev->dev, "GPU %s begin!. Source:  %d\n",
6545 		 need_emergency_restart ? "jobs stop" : "reset",
6546 		 reset_context->src);
6547 
6548 	if (!amdgpu_sriov_vf(adev))
6549 		hive = amdgpu_get_xgmi_hive(adev);
6550 	if (hive)
6551 		mutex_lock(&hive->hive_lock);
6552 
6553 	reset_context->job = job;
6554 	reset_context->hive = hive;
6555 	INIT_LIST_HEAD(&device_list);
6556 
6557 	amdgpu_device_recovery_prepare(adev, &device_list, hive);
6558 
6559 	if (!amdgpu_sriov_vf(adev)) {
6560 		r = amdgpu_device_health_check(&device_list);
6561 		if (r)
6562 			goto end_reset;
6563 	}
6564 
6565 	/* We need to lock reset domain only once both for XGMI and single device */
6566 	amdgpu_device_recovery_get_reset_lock(adev, &device_list);
6567 
6568 	amdgpu_device_halt_activities(adev, job, reset_context, &device_list,
6569 				      hive, need_emergency_restart);
6570 	if (need_emergency_restart)
6571 		goto skip_sched_resume;
6572 	/*
6573 	 * Must check guilty signal here since after this point all old
6574 	 * HW fences are force signaled.
6575 	 *
6576 	 * job->base holds a reference to parent fence
6577 	 */
6578 	if (job && dma_fence_is_signaled(&job->hw_fence->base)) {
6579 		job_signaled = true;
6580 		dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
6581 		goto skip_hw_reset;
6582 	}
6583 
6584 	r = amdgpu_device_asic_reset(adev, &device_list, reset_context);
6585 	if (r)
6586 		goto reset_unlock;
6587 skip_hw_reset:
6588 	r = amdgpu_device_sched_resume(&device_list, reset_context, job_signaled);
6589 	if (r)
6590 		goto reset_unlock;
6591 skip_sched_resume:
6592 	amdgpu_device_gpu_resume(adev, &device_list, need_emergency_restart);
6593 reset_unlock:
6594 	amdgpu_device_recovery_put_reset_lock(adev, &device_list);
6595 end_reset:
6596 	if (hive) {
6597 		mutex_unlock(&hive->hive_lock);
6598 		amdgpu_put_xgmi_hive(hive);
6599 	}
6600 
6601 	if (r)
6602 		dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
6603 
6604 	atomic_set(&adev->reset_domain->reset_res, r);
6605 
6606 	if (!r) {
6607 		struct amdgpu_task_info *ti = NULL;
6608 
6609 		if (job)
6610 			ti = amdgpu_vm_get_task_info_pasid(adev, job->pasid);
6611 
6612 		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE,
6613 				     ti ? &ti->task : NULL);
6614 
6615 		amdgpu_vm_put_task_info(ti);
6616 	}
6617 
6618 	return r;
6619 }
6620 
6621 /**
6622  * amdgpu_device_partner_bandwidth - find the bandwidth of appropriate partner
6623  *
6624  * @adev: amdgpu_device pointer
6625  * @speed: pointer to the speed of the link
6626  * @width: pointer to the width of the link
6627  *
6628  * Evaluate the hierarchy to find the speed and bandwidth capabilities of the
6629  * first physical partner to an AMD dGPU.
6630  * This will exclude any virtual switches and links.
6631  */
6632 static void amdgpu_device_partner_bandwidth(struct amdgpu_device *adev,
6633 					    enum pci_bus_speed *speed,
6634 					    enum pcie_link_width *width)
6635 {
6636 	struct pci_dev *parent = adev->pdev;
6637 
6638 	if (!speed || !width)
6639 		return;
6640 
6641 	*speed = PCI_SPEED_UNKNOWN;
6642 	*width = PCIE_LNK_WIDTH_UNKNOWN;
6643 
6644 	if (amdgpu_device_pcie_dynamic_switching_supported(adev)) {
6645 		while ((parent = pci_upstream_bridge(parent))) {
6646 			/* skip upstream/downstream switches internal to dGPU*/
6647 			if (parent->vendor == PCI_VENDOR_ID_ATI)
6648 				continue;
6649 			*speed = pcie_get_speed_cap(parent);
6650 			*width = pcie_get_width_cap(parent);
6651 			break;
6652 		}
6653 	} else {
6654 		/* use the current speeds rather than max if switching is not supported */
6655 		pcie_bandwidth_available(adev->pdev, NULL, speed, width);
6656 	}
6657 }
6658 
6659 /**
6660  * amdgpu_device_gpu_bandwidth - find the bandwidth of the GPU
6661  *
6662  * @adev: amdgpu_device pointer
6663  * @speed: pointer to the speed of the link
6664  * @width: pointer to the width of the link
6665  *
6666  * Evaluate the hierarchy to find the speed and bandwidth capabilities of the
6667  * AMD dGPU which may be a virtual upstream bridge.
6668  */
6669 static void amdgpu_device_gpu_bandwidth(struct amdgpu_device *adev,
6670 					enum pci_bus_speed *speed,
6671 					enum pcie_link_width *width)
6672 {
6673 	struct pci_dev *parent = adev->pdev;
6674 
6675 	if (!speed || !width)
6676 		return;
6677 
6678 	parent = pci_upstream_bridge(parent);
6679 	if (parent && parent->vendor == PCI_VENDOR_ID_ATI) {
6680 		/* use the upstream/downstream switches internal to dGPU */
6681 		*speed = pcie_get_speed_cap(parent);
6682 		*width = pcie_get_width_cap(parent);
6683 		while ((parent = pci_upstream_bridge(parent))) {
6684 			if (parent->vendor == PCI_VENDOR_ID_ATI) {
6685 				/* use the upstream/downstream switches internal to dGPU */
6686 				*speed = pcie_get_speed_cap(parent);
6687 				*width = pcie_get_width_cap(parent);
6688 			}
6689 		}
6690 	} else {
6691 		/* use the device itself */
6692 		*speed = pcie_get_speed_cap(adev->pdev);
6693 		*width = pcie_get_width_cap(adev->pdev);
6694 	}
6695 }
6696 
6697 /**
6698  * amdgpu_device_get_pcie_info - fence pcie info about the PCIE slot
6699  *
6700  * @adev: amdgpu_device pointer
6701  *
6702  * Fetches and stores in the driver the PCIE capabilities (gen speed
6703  * and lanes) of the slot the device is in. Handles APUs and
6704  * virtualized environments where PCIE config space may not be available.
6705  */
6706 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)
6707 {
6708 	enum pci_bus_speed speed_cap, platform_speed_cap;
6709 	enum pcie_link_width platform_link_width, link_width;
6710 
6711 	if (amdgpu_pcie_gen_cap)
6712 		adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
6713 
6714 	if (amdgpu_pcie_lane_cap)
6715 		adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap;
6716 
6717 	/* covers APUs as well */
6718 	if (pci_is_root_bus(adev->pdev->bus) && !amdgpu_passthrough(adev)) {
6719 		if (adev->pm.pcie_gen_mask == 0)
6720 			adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK;
6721 		if (adev->pm.pcie_mlw_mask == 0)
6722 			adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK;
6723 		return;
6724 	}
6725 
6726 	if (adev->pm.pcie_gen_mask && adev->pm.pcie_mlw_mask)
6727 		return;
6728 
6729 	amdgpu_device_partner_bandwidth(adev, &platform_speed_cap,
6730 					&platform_link_width);
6731 	amdgpu_device_gpu_bandwidth(adev, &speed_cap, &link_width);
6732 
6733 	if (adev->pm.pcie_gen_mask == 0) {
6734 		/* asic caps */
6735 		if (speed_cap == PCI_SPEED_UNKNOWN) {
6736 			adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6737 						  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6738 						  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
6739 		} else {
6740 			if (speed_cap == PCIE_SPEED_32_0GT)
6741 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6742 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6743 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6744 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 |
6745 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN5);
6746 			else if (speed_cap == PCIE_SPEED_16_0GT)
6747 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6748 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6749 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6750 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4);
6751 			else if (speed_cap == PCIE_SPEED_8_0GT)
6752 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6753 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6754 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
6755 			else if (speed_cap == PCIE_SPEED_5_0GT)
6756 				adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6757 							  CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2);
6758 			else
6759 				adev->pm.pcie_gen_mask |= CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1;
6760 		}
6761 		/* platform caps */
6762 		if (platform_speed_cap == PCI_SPEED_UNKNOWN) {
6763 			adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6764 						   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
6765 		} else {
6766 			if (platform_speed_cap == PCIE_SPEED_32_0GT)
6767 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6768 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6769 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6770 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 |
6771 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN5);
6772 			else if (platform_speed_cap == PCIE_SPEED_16_0GT)
6773 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6774 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6775 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6776 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4);
6777 			else if (platform_speed_cap == PCIE_SPEED_8_0GT)
6778 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6779 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6780 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3);
6781 			else if (platform_speed_cap == PCIE_SPEED_5_0GT)
6782 				adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6783 							   CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
6784 			else
6785 				adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1;
6786 
6787 		}
6788 	}
6789 	if (adev->pm.pcie_mlw_mask == 0) {
6790 		/* asic caps */
6791 		if (link_width == PCIE_LNK_WIDTH_UNKNOWN) {
6792 			adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_ASIC_PCIE_MLW_MASK;
6793 		} else {
6794 			switch (link_width) {
6795 			case PCIE_LNK_X32:
6796 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X32 |
6797 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X16 |
6798 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6799 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6800 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6801 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6802 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6803 				break;
6804 			case PCIE_LNK_X16:
6805 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X16 |
6806 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6807 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6808 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6809 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6810 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6811 				break;
6812 			case PCIE_LNK_X12:
6813 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6814 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6815 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6816 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6817 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6818 				break;
6819 			case PCIE_LNK_X8:
6820 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6821 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6822 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6823 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6824 				break;
6825 			case PCIE_LNK_X4:
6826 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6827 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6828 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6829 				break;
6830 			case PCIE_LNK_X2:
6831 				adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6832 							   CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6833 				break;
6834 			case PCIE_LNK_X1:
6835 				adev->pm.pcie_mlw_mask |= CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1;
6836 				break;
6837 			default:
6838 				break;
6839 			}
6840 		}
6841 		/* platform caps */
6842 		if (platform_link_width == PCIE_LNK_WIDTH_UNKNOWN) {
6843 			adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_PCIE_MLW_MASK;
6844 		} else {
6845 			switch (platform_link_width) {
6846 			case PCIE_LNK_X32:
6847 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 |
6848 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
6849 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6850 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6851 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6852 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6853 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6854 				break;
6855 			case PCIE_LNK_X16:
6856 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
6857 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6858 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6859 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6860 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6861 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6862 				break;
6863 			case PCIE_LNK_X12:
6864 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6865 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6866 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6867 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6868 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6869 				break;
6870 			case PCIE_LNK_X8:
6871 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6872 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6873 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6874 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6875 				break;
6876 			case PCIE_LNK_X4:
6877 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6878 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6879 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6880 				break;
6881 			case PCIE_LNK_X2:
6882 				adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6883 							   CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6884 				break;
6885 			case PCIE_LNK_X1:
6886 				adev->pm.pcie_mlw_mask |= CAIL_PCIE_LINK_WIDTH_SUPPORT_X1;
6887 				break;
6888 			default:
6889 				break;
6890 			}
6891 		}
6892 	}
6893 }
6894 
6895 /**
6896  * amdgpu_device_is_peer_accessible - Check peer access through PCIe BAR
6897  *
6898  * @adev: amdgpu_device pointer
6899  * @peer_adev: amdgpu_device pointer for peer device trying to access @adev
6900  *
6901  * Return true if @peer_adev can access (DMA) @adev through the PCIe
6902  * BAR, i.e. @adev is "large BAR" and the BAR matches the DMA mask of
6903  * @peer_adev.
6904  */
6905 bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
6906 				      struct amdgpu_device *peer_adev)
6907 {
6908 #ifdef CONFIG_HSA_AMD_P2P
6909 	bool p2p_access =
6910 		!adev->gmc.xgmi.connected_to_cpu &&
6911 		!(pci_p2pdma_distance(adev->pdev, peer_adev->dev, false) < 0);
6912 	if (!p2p_access)
6913 		dev_info(adev->dev, "PCIe P2P access from peer device %s is not supported by the chipset\n",
6914 			pci_name(peer_adev->pdev));
6915 
6916 	bool is_large_bar = adev->gmc.visible_vram_size &&
6917 		adev->gmc.real_vram_size == adev->gmc.visible_vram_size;
6918 	bool p2p_addressable = amdgpu_device_check_iommu_remap(peer_adev);
6919 
6920 	if (!p2p_addressable) {
6921 		uint64_t address_mask = peer_adev->dev->dma_mask ?
6922 			~*peer_adev->dev->dma_mask : ~((1ULL << 32) - 1);
6923 		resource_size_t aper_limit =
6924 			adev->gmc.aper_base + adev->gmc.aper_size - 1;
6925 
6926 		p2p_addressable = !(adev->gmc.aper_base & address_mask ||
6927 				     aper_limit & address_mask);
6928 	}
6929 	return pcie_p2p && is_large_bar && p2p_access && p2p_addressable;
6930 #else
6931 	return false;
6932 #endif
6933 }
6934 
6935 int amdgpu_device_baco_enter(struct amdgpu_device *adev)
6936 {
6937 	struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
6938 
6939 	if (!amdgpu_device_supports_baco(adev))
6940 		return -ENOTSUPP;
6941 
6942 	if (ras && adev->ras_enabled &&
6943 	    adev->nbio.funcs->enable_doorbell_interrupt)
6944 		adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
6945 
6946 	return amdgpu_dpm_baco_enter(adev);
6947 }
6948 
6949 int amdgpu_device_baco_exit(struct amdgpu_device *adev)
6950 {
6951 	struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
6952 	int ret = 0;
6953 
6954 	if (!amdgpu_device_supports_baco(adev))
6955 		return -ENOTSUPP;
6956 
6957 	ret = amdgpu_dpm_baco_exit(adev);
6958 	if (ret)
6959 		return ret;
6960 
6961 	if (ras && adev->ras_enabled &&
6962 	    adev->nbio.funcs->enable_doorbell_interrupt)
6963 		adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
6964 
6965 	if (amdgpu_passthrough(adev) && adev->nbio.funcs &&
6966 	    adev->nbio.funcs->clear_doorbell_interrupt)
6967 		adev->nbio.funcs->clear_doorbell_interrupt(adev);
6968 
6969 	return 0;
6970 }
6971 
6972 /**
6973  * amdgpu_pci_error_detected - Called when a PCI error is detected.
6974  * @pdev: PCI device struct
6975  * @state: PCI channel state
6976  *
6977  * Description: Called when a PCI error is detected.
6978  *
6979  * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT.
6980  */
6981 pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
6982 {
6983 	struct drm_device *dev = pci_get_drvdata(pdev);
6984 	struct amdgpu_device *adev = drm_to_adev(dev);
6985 	struct amdgpu_hive_info *hive __free(xgmi_put_hive) =
6986 		amdgpu_get_xgmi_hive(adev);
6987 	struct amdgpu_reset_context reset_context;
6988 	struct list_head device_list;
6989 
6990 	dev_info(adev->dev, "PCI error: detected callback!!\n");
6991 
6992 	adev->pci_channel_state = state;
6993 
6994 	switch (state) {
6995 	case pci_channel_io_normal:
6996 		dev_info(adev->dev, "pci_channel_io_normal: state(%d)!!\n", state);
6997 		return PCI_ERS_RESULT_CAN_RECOVER;
6998 	case pci_channel_io_frozen:
6999 		/* Fatal error, prepare for slot reset */
7000 		dev_info(adev->dev, "pci_channel_io_frozen: state(%d)!!\n", state);
7001 		if (hive) {
7002 			/* Hive devices should be able to support FW based
7003 			 * link reset on other devices, if not return.
7004 			 */
7005 			if (!amdgpu_dpm_is_link_reset_supported(adev)) {
7006 				dev_warn(adev->dev,
7007 					 "No support for XGMI hive yet...\n");
7008 				return PCI_ERS_RESULT_DISCONNECT;
7009 			}
7010 			/* Set dpc status only if device is part of hive
7011 			 * Non-hive devices should be able to recover after
7012 			 * link reset.
7013 			 */
7014 			amdgpu_reset_set_dpc_status(adev, true);
7015 
7016 			mutex_lock(&hive->hive_lock);
7017 		}
7018 		memset(&reset_context, 0, sizeof(reset_context));
7019 		INIT_LIST_HEAD(&device_list);
7020 
7021 		amdgpu_device_recovery_prepare(adev, &device_list, hive);
7022 		amdgpu_device_recovery_get_reset_lock(adev, &device_list);
7023 		amdgpu_device_halt_activities(adev, NULL, &reset_context, &device_list,
7024 					      hive, false);
7025 		if (hive)
7026 			mutex_unlock(&hive->hive_lock);
7027 		return PCI_ERS_RESULT_NEED_RESET;
7028 	case pci_channel_io_perm_failure:
7029 		/* Permanent error, prepare for device removal */
7030 		dev_info(adev->dev, "pci_channel_io_perm_failure: state(%d)!!\n", state);
7031 		return PCI_ERS_RESULT_DISCONNECT;
7032 	}
7033 
7034 	return PCI_ERS_RESULT_NEED_RESET;
7035 }
7036 
7037 /**
7038  * amdgpu_pci_mmio_enabled - Enable MMIO and dump debug registers
7039  * @pdev: pointer to PCI device
7040  */
7041 pci_ers_result_t amdgpu_pci_mmio_enabled(struct pci_dev *pdev)
7042 {
7043 	struct drm_device *dev = pci_get_drvdata(pdev);
7044 	struct amdgpu_device *adev = drm_to_adev(dev);
7045 
7046 	dev_info(adev->dev, "PCI error: mmio enabled callback!!\n");
7047 
7048 	/* TODO - dump whatever for debugging purposes */
7049 
7050 	/* This called only if amdgpu_pci_error_detected returns
7051 	 * PCI_ERS_RESULT_CAN_RECOVER. Read/write to the device still
7052 	 * works, no need to reset slot.
7053 	 */
7054 
7055 	return PCI_ERS_RESULT_RECOVERED;
7056 }
7057 
7058 /**
7059  * amdgpu_pci_slot_reset - Called when PCI slot has been reset.
7060  * @pdev: PCI device struct
7061  *
7062  * Description: This routine is called by the pci error recovery
7063  * code after the PCI slot has been reset, just before we
7064  * should resume normal operations.
7065  */
7066 pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev)
7067 {
7068 	struct drm_device *dev = pci_get_drvdata(pdev);
7069 	struct amdgpu_device *adev = drm_to_adev(dev);
7070 	struct amdgpu_reset_context reset_context;
7071 	struct amdgpu_device *tmp_adev;
7072 	struct amdgpu_hive_info *hive;
7073 	struct list_head device_list;
7074 	struct pci_dev *link_dev;
7075 	int r = 0, i, timeout;
7076 	u32 memsize;
7077 	u16 status;
7078 
7079 	dev_info(adev->dev, "PCI error: slot reset callback!!\n");
7080 
7081 	memset(&reset_context, 0, sizeof(reset_context));
7082 
7083 	if (adev->pcie_reset_ctx.swus)
7084 		link_dev = adev->pcie_reset_ctx.swus;
7085 	else
7086 		link_dev = adev->pdev;
7087 	/* wait for asic to come out of reset, timeout = 10s */
7088 	timeout = 10000;
7089 	do {
7090 		usleep_range(10000, 10500);
7091 		r = pci_read_config_word(link_dev, PCI_VENDOR_ID, &status);
7092 		timeout -= 10;
7093 	} while (timeout > 0 && (status != PCI_VENDOR_ID_ATI) &&
7094 		 (status != PCI_VENDOR_ID_AMD));
7095 
7096 	if ((status != PCI_VENDOR_ID_ATI) && (status != PCI_VENDOR_ID_AMD)) {
7097 		r = -ETIME;
7098 		goto out;
7099 	}
7100 
7101 	amdgpu_device_load_switch_state(adev);
7102 	/* Restore PCI confspace */
7103 	amdgpu_device_load_pci_state(pdev);
7104 
7105 	/* confirm  ASIC came out of reset */
7106 	for (i = 0; i < adev->usec_timeout; i++) {
7107 		memsize = amdgpu_asic_get_config_memsize(adev);
7108 
7109 		if (memsize != 0xffffffff)
7110 			break;
7111 		udelay(1);
7112 	}
7113 	if (memsize == 0xffffffff) {
7114 		r = -ETIME;
7115 		goto out;
7116 	}
7117 
7118 	reset_context.method = AMD_RESET_METHOD_NONE;
7119 	reset_context.reset_req_dev = adev;
7120 	set_bit(AMDGPU_NEED_FULL_RESET, &reset_context.flags);
7121 	set_bit(AMDGPU_SKIP_COREDUMP, &reset_context.flags);
7122 	INIT_LIST_HEAD(&device_list);
7123 
7124 	hive = amdgpu_get_xgmi_hive(adev);
7125 	if (hive) {
7126 		mutex_lock(&hive->hive_lock);
7127 		reset_context.hive = hive;
7128 		list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
7129 			tmp_adev->pcie_reset_ctx.in_link_reset = true;
7130 			list_add_tail(&tmp_adev->reset_list, &device_list);
7131 		}
7132 	} else {
7133 		set_bit(AMDGPU_SKIP_HW_RESET, &reset_context.flags);
7134 		list_add_tail(&adev->reset_list, &device_list);
7135 	}
7136 
7137 	r = amdgpu_device_asic_reset(adev, &device_list, &reset_context);
7138 out:
7139 	if (!r) {
7140 		if (amdgpu_device_cache_pci_state(adev->pdev))
7141 			pci_restore_state(adev->pdev);
7142 		dev_info(adev->dev, "PCIe error recovery succeeded\n");
7143 	} else {
7144 		dev_err(adev->dev, "PCIe error recovery failed, err:%d\n", r);
7145 		if (hive) {
7146 			list_for_each_entry(tmp_adev, &device_list, reset_list)
7147 				amdgpu_device_unset_mp1_state(tmp_adev);
7148 		}
7149 		amdgpu_device_recovery_put_reset_lock(adev, &device_list);
7150 	}
7151 
7152 	if (hive) {
7153 		mutex_unlock(&hive->hive_lock);
7154 		amdgpu_put_xgmi_hive(hive);
7155 	}
7156 
7157 	return r ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
7158 }
7159 
7160 /**
7161  * amdgpu_pci_resume() - resume normal ops after PCI reset
7162  * @pdev: pointer to PCI device
7163  *
7164  * Called when the error recovery driver tells us that its
7165  * OK to resume normal operation.
7166  */
7167 void amdgpu_pci_resume(struct pci_dev *pdev)
7168 {
7169 	struct drm_device *dev = pci_get_drvdata(pdev);
7170 	struct amdgpu_device *adev = drm_to_adev(dev);
7171 	struct list_head device_list;
7172 	struct amdgpu_hive_info *hive = NULL;
7173 	struct amdgpu_device *tmp_adev = NULL;
7174 
7175 	dev_info(adev->dev, "PCI error: resume callback!!\n");
7176 
7177 	/* Only continue execution for the case of pci_channel_io_frozen */
7178 	if (adev->pci_channel_state != pci_channel_io_frozen)
7179 		return;
7180 
7181 	INIT_LIST_HEAD(&device_list);
7182 
7183 	hive = amdgpu_get_xgmi_hive(adev);
7184 	if (hive) {
7185 		mutex_lock(&hive->hive_lock);
7186 		list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
7187 			tmp_adev->pcie_reset_ctx.in_link_reset = false;
7188 			list_add_tail(&tmp_adev->reset_list, &device_list);
7189 		}
7190 	} else
7191 		list_add_tail(&adev->reset_list, &device_list);
7192 
7193 	amdgpu_device_sched_resume(&device_list, NULL, NULL);
7194 	amdgpu_device_gpu_resume(adev, &device_list, false);
7195 	amdgpu_device_recovery_put_reset_lock(adev, &device_list);
7196 
7197 	if (hive) {
7198 		mutex_unlock(&hive->hive_lock);
7199 		amdgpu_put_xgmi_hive(hive);
7200 	}
7201 }
7202 
7203 static void amdgpu_device_cache_switch_state(struct amdgpu_device *adev)
7204 {
7205 	struct pci_dev *swus, *swds;
7206 	int r;
7207 
7208 	swds = pci_upstream_bridge(adev->pdev);
7209 	if (!swds || swds->vendor != PCI_VENDOR_ID_ATI ||
7210 	    pci_pcie_type(swds) != PCI_EXP_TYPE_DOWNSTREAM)
7211 		return;
7212 	swus = pci_upstream_bridge(swds);
7213 	if (!swus ||
7214 	    (swus->vendor != PCI_VENDOR_ID_ATI &&
7215 	     swus->vendor != PCI_VENDOR_ID_AMD) ||
7216 	    pci_pcie_type(swus) != PCI_EXP_TYPE_UPSTREAM)
7217 		return;
7218 
7219 	/* If already saved, return */
7220 	if (adev->pcie_reset_ctx.swus)
7221 		return;
7222 	/* Upstream bridge is ATI, assume it's SWUS/DS architecture */
7223 	r = pci_save_state(swds);
7224 	if (r)
7225 		return;
7226 	adev->pcie_reset_ctx.swds_pcistate = pci_store_saved_state(swds);
7227 
7228 	r = pci_save_state(swus);
7229 	if (r)
7230 		return;
7231 	adev->pcie_reset_ctx.swus_pcistate = pci_store_saved_state(swus);
7232 
7233 	adev->pcie_reset_ctx.swus = swus;
7234 }
7235 
7236 static void amdgpu_device_load_switch_state(struct amdgpu_device *adev)
7237 {
7238 	struct pci_dev *pdev;
7239 	int r;
7240 
7241 	if (!adev->pcie_reset_ctx.swds_pcistate ||
7242 	    !adev->pcie_reset_ctx.swus_pcistate)
7243 		return;
7244 
7245 	pdev = adev->pcie_reset_ctx.swus;
7246 	r = pci_load_saved_state(pdev, adev->pcie_reset_ctx.swus_pcistate);
7247 	if (!r) {
7248 		pci_restore_state(pdev);
7249 	} else {
7250 		dev_warn(adev->dev, "Failed to load SWUS state, err:%d\n", r);
7251 		return;
7252 	}
7253 
7254 	pdev = pci_upstream_bridge(adev->pdev);
7255 	r = pci_load_saved_state(pdev, adev->pcie_reset_ctx.swds_pcistate);
7256 	if (!r)
7257 		pci_restore_state(pdev);
7258 	else
7259 		dev_warn(adev->dev, "Failed to load SWDS state, err:%d\n", r);
7260 }
7261 
7262 bool amdgpu_device_cache_pci_state(struct pci_dev *pdev)
7263 {
7264 	struct drm_device *dev = pci_get_drvdata(pdev);
7265 	struct amdgpu_device *adev = drm_to_adev(dev);
7266 	int r;
7267 
7268 	if (amdgpu_sriov_vf(adev))
7269 		return false;
7270 
7271 	r = pci_save_state(pdev);
7272 	if (!r) {
7273 		kfree(adev->pci_state);
7274 
7275 		adev->pci_state = pci_store_saved_state(pdev);
7276 
7277 		if (!adev->pci_state) {
7278 			dev_err(adev->dev, "Failed to store PCI saved state");
7279 			return false;
7280 		}
7281 	} else {
7282 		dev_warn(adev->dev, "Failed to save PCI state, err:%d\n", r);
7283 		return false;
7284 	}
7285 
7286 	amdgpu_device_cache_switch_state(adev);
7287 
7288 	return true;
7289 }
7290 
7291 bool amdgpu_device_load_pci_state(struct pci_dev *pdev)
7292 {
7293 	struct drm_device *dev = pci_get_drvdata(pdev);
7294 	struct amdgpu_device *adev = drm_to_adev(dev);
7295 	int r;
7296 
7297 	if (!adev->pci_state)
7298 		return false;
7299 
7300 	r = pci_load_saved_state(pdev, adev->pci_state);
7301 
7302 	if (!r) {
7303 		pci_restore_state(pdev);
7304 	} else {
7305 		dev_warn(adev->dev, "Failed to load PCI state, err:%d\n", r);
7306 		return false;
7307 	}
7308 
7309 	return true;
7310 }
7311 
7312 void amdgpu_device_flush_hdp(struct amdgpu_device *adev,
7313 		struct amdgpu_ring *ring)
7314 {
7315 #ifdef CONFIG_X86_64
7316 	if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
7317 		return;
7318 #endif
7319 	if (adev->gmc.xgmi.connected_to_cpu)
7320 		return;
7321 
7322 	if (ring && ring->funcs->emit_hdp_flush) {
7323 		amdgpu_ring_emit_hdp_flush(ring);
7324 		return;
7325 	}
7326 
7327 	if (!ring && amdgpu_sriov_runtime(adev)) {
7328 		if (!amdgpu_kiq_hdp_flush(adev))
7329 			return;
7330 	}
7331 
7332 	amdgpu_asic_flush_hdp(adev, ring);
7333 }
7334 
7335 void amdgpu_device_invalidate_hdp(struct amdgpu_device *adev,
7336 		struct amdgpu_ring *ring)
7337 {
7338 #ifdef CONFIG_X86_64
7339 	if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
7340 		return;
7341 #endif
7342 	if (adev->gmc.xgmi.connected_to_cpu)
7343 		return;
7344 
7345 	amdgpu_asic_invalidate_hdp(adev, ring);
7346 }
7347 
7348 int amdgpu_in_reset(struct amdgpu_device *adev)
7349 {
7350 	return atomic_read(&adev->reset_domain->in_gpu_reset);
7351 }
7352 
7353 /**
7354  * amdgpu_device_halt() - bring hardware to some kind of halt state
7355  *
7356  * @adev: amdgpu_device pointer
7357  *
7358  * Bring hardware to some kind of halt state so that no one can touch it
7359  * any more. It will help to maintain error context when error occurred.
7360  * Compare to a simple hang, the system will keep stable at least for SSH
7361  * access. Then it should be trivial to inspect the hardware state and
7362  * see what's going on. Implemented as following:
7363  *
7364  * 1. drm_dev_unplug() makes device inaccessible to user space(IOCTLs, etc),
7365  *    clears all CPU mappings to device, disallows remappings through page faults
7366  * 2. amdgpu_irq_disable_all() disables all interrupts
7367  * 3. amdgpu_fence_driver_hw_fini() signals all HW fences
7368  * 4. set adev->no_hw_access to avoid potential crashes after setp 5
7369  * 5. amdgpu_device_unmap_mmio() clears all MMIO mappings
7370  * 6. pci_disable_device() and pci_wait_for_pending_transaction()
7371  *    flush any in flight DMA operations
7372  */
7373 void amdgpu_device_halt(struct amdgpu_device *adev)
7374 {
7375 	struct pci_dev *pdev = adev->pdev;
7376 	struct drm_device *ddev = adev_to_drm(adev);
7377 
7378 	amdgpu_xcp_dev_unplug(adev);
7379 	drm_dev_unplug(ddev);
7380 
7381 	amdgpu_irq_disable_all(adev);
7382 
7383 	amdgpu_fence_driver_hw_fini(adev);
7384 
7385 	adev->no_hw_access = true;
7386 
7387 	amdgpu_device_unmap_mmio(adev);
7388 
7389 	pci_disable_device(pdev);
7390 	pci_wait_for_pending_transaction(pdev);
7391 }
7392 
7393 u32 amdgpu_device_pcie_port_rreg(struct amdgpu_device *adev,
7394 				u32 reg)
7395 {
7396 	unsigned long flags, address, data;
7397 	u32 r;
7398 
7399 	address = adev->nbio.funcs->get_pcie_port_index_offset(adev);
7400 	data = adev->nbio.funcs->get_pcie_port_data_offset(adev);
7401 
7402 	spin_lock_irqsave(&adev->pcie_idx_lock, flags);
7403 	WREG32(address, reg * 4);
7404 	(void)RREG32(address);
7405 	r = RREG32(data);
7406 	spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
7407 	return r;
7408 }
7409 
7410 void amdgpu_device_pcie_port_wreg(struct amdgpu_device *adev,
7411 				u32 reg, u32 v)
7412 {
7413 	unsigned long flags, address, data;
7414 
7415 	address = adev->nbio.funcs->get_pcie_port_index_offset(adev);
7416 	data = adev->nbio.funcs->get_pcie_port_data_offset(adev);
7417 
7418 	spin_lock_irqsave(&adev->pcie_idx_lock, flags);
7419 	WREG32(address, reg * 4);
7420 	(void)RREG32(address);
7421 	WREG32(data, v);
7422 	(void)RREG32(data);
7423 	spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
7424 }
7425 
7426 /**
7427  * amdgpu_device_get_gang - return a reference to the current gang
7428  * @adev: amdgpu_device pointer
7429  *
7430  * Returns: A new reference to the current gang leader.
7431  */
7432 struct dma_fence *amdgpu_device_get_gang(struct amdgpu_device *adev)
7433 {
7434 	struct dma_fence *fence;
7435 
7436 	rcu_read_lock();
7437 	fence = dma_fence_get_rcu_safe(&adev->gang_submit);
7438 	rcu_read_unlock();
7439 	return fence;
7440 }
7441 
7442 /**
7443  * amdgpu_device_switch_gang - switch to a new gang
7444  * @adev: amdgpu_device pointer
7445  * @gang: the gang to switch to
7446  *
7447  * Try to switch to a new gang.
7448  * Returns: NULL if we switched to the new gang or a reference to the current
7449  * gang leader.
7450  */
7451 struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev,
7452 					    struct dma_fence *gang)
7453 {
7454 	struct dma_fence *old = NULL;
7455 
7456 	dma_fence_get(gang);
7457 	do {
7458 		dma_fence_put(old);
7459 		old = amdgpu_device_get_gang(adev);
7460 		if (old == gang)
7461 			break;
7462 
7463 		if (!dma_fence_is_signaled(old)) {
7464 			dma_fence_put(gang);
7465 			return old;
7466 		}
7467 
7468 	} while (cmpxchg((struct dma_fence __force **)&adev->gang_submit,
7469 			 old, gang) != old);
7470 
7471 	/*
7472 	 * Drop it once for the exchanged reference in adev and once for the
7473 	 * thread local reference acquired in amdgpu_device_get_gang().
7474 	 */
7475 	dma_fence_put(old);
7476 	dma_fence_put(old);
7477 	return NULL;
7478 }
7479 
7480 /**
7481  * amdgpu_device_enforce_isolation - enforce HW isolation
7482  * @adev: the amdgpu device pointer
7483  * @ring: the HW ring the job is supposed to run on
7484  * @job: the job which is about to be pushed to the HW ring
7485  *
7486  * Makes sure that only one client at a time can use the GFX block.
7487  * Returns: The dependency to wait on before the job can be pushed to the HW.
7488  * The function is called multiple times until NULL is returned.
7489  */
7490 struct dma_fence *amdgpu_device_enforce_isolation(struct amdgpu_device *adev,
7491 						  struct amdgpu_ring *ring,
7492 						  struct amdgpu_job *job)
7493 {
7494 	struct amdgpu_isolation *isolation = &adev->isolation[ring->xcp_id];
7495 	struct drm_sched_fence *f = job->base.s_fence;
7496 	struct dma_fence *dep;
7497 	void *owner;
7498 	int r;
7499 
7500 	/*
7501 	 * For now enforce isolation only for the GFX block since we only need
7502 	 * the cleaner shader on those rings.
7503 	 */
7504 	if (ring->funcs->type != AMDGPU_RING_TYPE_GFX &&
7505 	    ring->funcs->type != AMDGPU_RING_TYPE_COMPUTE)
7506 		return NULL;
7507 
7508 	/*
7509 	 * All submissions where enforce isolation is false are handled as if
7510 	 * they come from a single client. Use ~0l as the owner to distinct it
7511 	 * from kernel submissions where the owner is NULL.
7512 	 */
7513 	owner = job->enforce_isolation ? f->owner : (void *)~0l;
7514 
7515 	mutex_lock(&adev->enforce_isolation_mutex);
7516 
7517 	/*
7518 	 * The "spearhead" submission is the first one which changes the
7519 	 * ownership to its client. We always need to wait for it to be
7520 	 * pushed to the HW before proceeding with anything.
7521 	 */
7522 	if (&f->scheduled != isolation->spearhead &&
7523 	    !dma_fence_is_signaled(isolation->spearhead)) {
7524 		dep = isolation->spearhead;
7525 		goto out_grab_ref;
7526 	}
7527 
7528 	if (isolation->owner != owner) {
7529 
7530 		/*
7531 		 * Wait for any gang to be assembled before switching to a
7532 		 * different owner or otherwise we could deadlock the
7533 		 * submissions.
7534 		 */
7535 		if (!job->gang_submit) {
7536 			dep = amdgpu_device_get_gang(adev);
7537 			if (!dma_fence_is_signaled(dep))
7538 				goto out_return_dep;
7539 			dma_fence_put(dep);
7540 		}
7541 
7542 		dma_fence_put(isolation->spearhead);
7543 		isolation->spearhead = dma_fence_get(&f->scheduled);
7544 		amdgpu_sync_move(&isolation->active, &isolation->prev);
7545 		trace_amdgpu_isolation(isolation->owner, owner);
7546 		isolation->owner = owner;
7547 	}
7548 
7549 	/*
7550 	 * Specifying the ring here helps to pipeline submissions even when
7551 	 * isolation is enabled. If that is not desired for testing NULL can be
7552 	 * used instead of the ring to enforce a CPU round trip while switching
7553 	 * between clients.
7554 	 */
7555 	dep = amdgpu_sync_peek_fence(&isolation->prev, ring);
7556 	r = amdgpu_sync_fence(&isolation->active, &f->finished, GFP_NOWAIT);
7557 	if (r)
7558 		dev_warn(adev->dev, "OOM tracking isolation\n");
7559 
7560 out_grab_ref:
7561 	dma_fence_get(dep);
7562 out_return_dep:
7563 	mutex_unlock(&adev->enforce_isolation_mutex);
7564 	return dep;
7565 }
7566 
7567 bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev)
7568 {
7569 	switch (adev->asic_type) {
7570 #ifdef CONFIG_DRM_AMDGPU_SI
7571 	case CHIP_HAINAN:
7572 #endif
7573 	case CHIP_TOPAZ:
7574 		/* chips with no display hardware */
7575 		return false;
7576 #ifdef CONFIG_DRM_AMDGPU_SI
7577 	case CHIP_TAHITI:
7578 	case CHIP_PITCAIRN:
7579 	case CHIP_VERDE:
7580 	case CHIP_OLAND:
7581 #endif
7582 #ifdef CONFIG_DRM_AMDGPU_CIK
7583 	case CHIP_BONAIRE:
7584 	case CHIP_HAWAII:
7585 	case CHIP_KAVERI:
7586 	case CHIP_KABINI:
7587 	case CHIP_MULLINS:
7588 #endif
7589 	case CHIP_TONGA:
7590 	case CHIP_FIJI:
7591 	case CHIP_POLARIS10:
7592 	case CHIP_POLARIS11:
7593 	case CHIP_POLARIS12:
7594 	case CHIP_VEGAM:
7595 	case CHIP_CARRIZO:
7596 	case CHIP_STONEY:
7597 		/* chips with display hardware */
7598 		return true;
7599 	default:
7600 		/* IP discovery */
7601 		if (!amdgpu_ip_version(adev, DCE_HWIP, 0) ||
7602 		    (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK))
7603 			return false;
7604 		return true;
7605 	}
7606 }
7607 
7608 uint32_t amdgpu_device_wait_on_rreg(struct amdgpu_device *adev,
7609 		uint32_t inst, uint32_t reg_addr, char reg_name[],
7610 		uint32_t expected_value, uint32_t mask)
7611 {
7612 	uint32_t ret = 0;
7613 	uint32_t old_ = 0;
7614 	uint32_t tmp_ = RREG32(reg_addr);
7615 	uint32_t loop = adev->usec_timeout;
7616 
7617 	while ((tmp_ & (mask)) != (expected_value)) {
7618 		if (old_ != tmp_) {
7619 			loop = adev->usec_timeout;
7620 			old_ = tmp_;
7621 		} else
7622 			udelay(1);
7623 		tmp_ = RREG32(reg_addr);
7624 		loop--;
7625 		if (!loop) {
7626 			dev_warn(
7627 				adev->dev,
7628 				"Register(%d) [%s] failed to reach value 0x%08x != 0x%08xn",
7629 				inst, reg_name, (uint32_t)expected_value,
7630 				(uint32_t)(tmp_ & (mask)));
7631 			ret = -ETIMEDOUT;
7632 			break;
7633 		}
7634 	}
7635 	return ret;
7636 }
7637 
7638 ssize_t amdgpu_get_soft_full_reset_mask(struct amdgpu_ring *ring)
7639 {
7640 	ssize_t size = 0;
7641 
7642 	if (!ring || !ring->adev)
7643 		return size;
7644 
7645 	if (amdgpu_device_should_recover_gpu(ring->adev))
7646 		size |= AMDGPU_RESET_TYPE_FULL;
7647 
7648 	if (unlikely(!ring->adev->debug_disable_soft_recovery) &&
7649 	    !amdgpu_sriov_vf(ring->adev) && ring->funcs->soft_recovery)
7650 		size |= AMDGPU_RESET_TYPE_SOFT_RESET;
7651 
7652 	return size;
7653 }
7654 
7655 ssize_t amdgpu_show_reset_mask(char *buf, uint32_t supported_reset)
7656 {
7657 	ssize_t size = 0;
7658 
7659 	if (supported_reset == 0) {
7660 		size += sysfs_emit_at(buf, size, "unsupported");
7661 		size += sysfs_emit_at(buf, size, "\n");
7662 		return size;
7663 
7664 	}
7665 
7666 	if (supported_reset & AMDGPU_RESET_TYPE_SOFT_RESET)
7667 		size += sysfs_emit_at(buf, size, "soft ");
7668 
7669 	if (supported_reset & AMDGPU_RESET_TYPE_PER_QUEUE)
7670 		size += sysfs_emit_at(buf, size, "queue ");
7671 
7672 	if (supported_reset & AMDGPU_RESET_TYPE_PER_PIPE)
7673 		size += sysfs_emit_at(buf, size, "pipe ");
7674 
7675 	if (supported_reset & AMDGPU_RESET_TYPE_FULL)
7676 		size += sysfs_emit_at(buf, size, "full ");
7677 
7678 	size += sysfs_emit_at(buf, size, "\n");
7679 	return size;
7680 }
7681 
7682 void amdgpu_device_set_uid(struct amdgpu_uid *uid_info,
7683 			   enum amdgpu_uid_type type, uint8_t inst,
7684 			   uint64_t uid)
7685 {
7686 	if (!uid_info)
7687 		return;
7688 
7689 	if (type >= AMDGPU_UID_TYPE_MAX) {
7690 		dev_err_once(uid_info->adev->dev, "Invalid UID type %d\n",
7691 			     type);
7692 		return;
7693 	}
7694 
7695 	if (inst >= AMDGPU_UID_INST_MAX) {
7696 		dev_err_once(uid_info->adev->dev, "Invalid UID instance %d\n",
7697 			     inst);
7698 		return;
7699 	}
7700 
7701 	if (uid_info->uid[type][inst] != 0) {
7702 		dev_warn_once(
7703 			uid_info->adev->dev,
7704 			"Overwriting existing UID %llu for type %d instance %d\n",
7705 			uid_info->uid[type][inst], type, inst);
7706 	}
7707 
7708 	uid_info->uid[type][inst] = uid;
7709 }
7710 
7711 u64 amdgpu_device_get_uid(struct amdgpu_uid *uid_info,
7712 			  enum amdgpu_uid_type type, uint8_t inst)
7713 {
7714 	if (!uid_info)
7715 		return 0;
7716 
7717 	if (type >= AMDGPU_UID_TYPE_MAX) {
7718 		dev_err_once(uid_info->adev->dev, "Invalid UID type %d\n",
7719 			     type);
7720 		return 0;
7721 	}
7722 
7723 	if (inst >= AMDGPU_UID_INST_MAX) {
7724 		dev_err_once(uid_info->adev->dev, "Invalid UID instance %d\n",
7725 			     inst);
7726 		return 0;
7727 	}
7728 
7729 	return uid_info->uid[type][inst];
7730 }
7731