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