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