linux/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
<<
>>
Prefs
   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}
5865