cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

amdgpu_device.c (160988B)


      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}