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