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