1 /* 2 * Copyright 2008 Advanced Micro Devices, Inc. 3 * Copyright 2008 Red Hat Inc. 4 * Copyright 2009 Jerome Glisse. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 * OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: Dave Airlie 25 * Alex Deucher 26 * Jerome Glisse 27 */ 28 #include <linux/kthread.h> 29 #include <linux/console.h> 30 #include <linux/slab.h> 31 #include <linux/debugfs.h> 32 #include <drm/drmP.h> 33 #include <drm/drm_crtc_helper.h> 34 #include <drm/drm_atomic_helper.h> 35 #include <drm/amdgpu_drm.h> 36 #include <linux/vgaarb.h> 37 #include <linux/vga_switcheroo.h> 38 #include <linux/efi.h> 39 #include "amdgpu.h" 40 #include "amdgpu_trace.h" 41 #include "amdgpu_i2c.h" 42 #include "atom.h" 43 #include "amdgpu_atombios.h" 44 #include "amdgpu_atomfirmware.h" 45 #include "amd_pcie.h" 46 #ifdef CONFIG_DRM_AMDGPU_SI 47 #include "si.h" 48 #endif 49 #ifdef CONFIG_DRM_AMDGPU_CIK 50 #include "cik.h" 51 #endif 52 #include "vi.h" 53 #include "soc15.h" 54 #include "bif/bif_4_1_d.h" 55 #include <linux/pci.h> 56 #include <linux/firmware.h> 57 #include "amdgpu_vf_error.h" 58 59 #include "amdgpu_amdkfd.h" 60 #include "amdgpu_pm.h" 61 62 MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin"); 63 MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin"); 64 65 #define AMDGPU_RESUME_MS 2000 66 67 static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); 68 static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); 69 static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev); 70 static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev); 71 72 static const char *amdgpu_asic_name[] = { 73 "TAHITI", 74 "PITCAIRN", 75 "VERDE", 76 "OLAND", 77 "HAINAN", 78 "BONAIRE", 79 "KAVERI", 80 "KABINI", 81 "HAWAII", 82 "MULLINS", 83 "TOPAZ", 84 "TONGA", 85 "FIJI", 86 "CARRIZO", 87 "STONEY", 88 "POLARIS10", 89 "POLARIS11", 90 "POLARIS12", 91 "VEGA10", 92 "RAVEN", 93 "LAST", 94 }; 95 96 bool amdgpu_device_is_px(struct drm_device *dev) 97 { 98 struct amdgpu_device *adev = dev->dev_private; 99 100 if (adev->flags & AMD_IS_PX) 101 return true; 102 return false; 103 } 104 105 /* 106 * MMIO register access helper functions. 107 */ 108 uint32_t amdgpu_mm_rreg(struct amdgpu_device *adev, uint32_t reg, 109 uint32_t acc_flags) 110 { 111 uint32_t ret; 112 113 if (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev)) 114 return amdgpu_virt_kiq_rreg(adev, reg); 115 116 if ((reg * 4) < adev->rmmio_size && !(acc_flags & AMDGPU_REGS_IDX)) 117 ret = readl(((void __iomem *)adev->rmmio) + (reg * 4)); 118 else { 119 unsigned long flags; 120 121 spin_lock_irqsave(&adev->mmio_idx_lock, flags); 122 writel((reg * 4), ((void __iomem *)adev->rmmio) + (mmMM_INDEX * 4)); 123 ret = readl(((void __iomem *)adev->rmmio) + (mmMM_DATA * 4)); 124 spin_unlock_irqrestore(&adev->mmio_idx_lock, flags); 125 } 126 trace_amdgpu_mm_rreg(adev->pdev->device, reg, ret); 127 return ret; 128 } 129 130 void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v, 131 uint32_t acc_flags) 132 { 133 trace_amdgpu_mm_wreg(adev->pdev->device, reg, v); 134 135 if (adev->asic_type >= CHIP_VEGA10 && reg == 0) { 136 adev->last_mm_index = v; 137 } 138 139 if (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev)) 140 return amdgpu_virt_kiq_wreg(adev, reg, v); 141 142 if ((reg * 4) < adev->rmmio_size && !(acc_flags & AMDGPU_REGS_IDX)) 143 writel(v, ((void __iomem *)adev->rmmio) + (reg * 4)); 144 else { 145 unsigned long flags; 146 147 spin_lock_irqsave(&adev->mmio_idx_lock, flags); 148 writel((reg * 4), ((void __iomem *)adev->rmmio) + (mmMM_INDEX * 4)); 149 writel(v, ((void __iomem *)adev->rmmio) + (mmMM_DATA * 4)); 150 spin_unlock_irqrestore(&adev->mmio_idx_lock, flags); 151 } 152 153 if (adev->asic_type >= CHIP_VEGA10 && reg == 1 && adev->last_mm_index == 0x5702C) { 154 udelay(500); 155 } 156 } 157 158 u32 amdgpu_io_rreg(struct amdgpu_device *adev, u32 reg) 159 { 160 if ((reg * 4) < adev->rio_mem_size) 161 return ioread32(adev->rio_mem + (reg * 4)); 162 else { 163 iowrite32((reg * 4), adev->rio_mem + (mmMM_INDEX * 4)); 164 return ioread32(adev->rio_mem + (mmMM_DATA * 4)); 165 } 166 } 167 168 void amdgpu_io_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 169 { 170 if (adev->asic_type >= CHIP_VEGA10 && reg == 0) { 171 adev->last_mm_index = v; 172 } 173 174 if ((reg * 4) < adev->rio_mem_size) 175 iowrite32(v, adev->rio_mem + (reg * 4)); 176 else { 177 iowrite32((reg * 4), adev->rio_mem + (mmMM_INDEX * 4)); 178 iowrite32(v, adev->rio_mem + (mmMM_DATA * 4)); 179 } 180 181 if (adev->asic_type >= CHIP_VEGA10 && reg == 1 && adev->last_mm_index == 0x5702C) { 182 udelay(500); 183 } 184 } 185 186 /** 187 * amdgpu_mm_rdoorbell - read a doorbell dword 188 * 189 * @adev: amdgpu_device pointer 190 * @index: doorbell index 191 * 192 * Returns the value in the doorbell aperture at the 193 * requested doorbell index (CIK). 194 */ 195 u32 amdgpu_mm_rdoorbell(struct amdgpu_device *adev, u32 index) 196 { 197 if (index < adev->doorbell.num_doorbells) { 198 return readl(adev->doorbell.ptr + index); 199 } else { 200 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index); 201 return 0; 202 } 203 } 204 205 /** 206 * amdgpu_mm_wdoorbell - write a doorbell dword 207 * 208 * @adev: amdgpu_device pointer 209 * @index: doorbell index 210 * @v: value to write 211 * 212 * Writes @v to the doorbell aperture at the 213 * requested doorbell index (CIK). 214 */ 215 void amdgpu_mm_wdoorbell(struct amdgpu_device *adev, u32 index, u32 v) 216 { 217 if (index < adev->doorbell.num_doorbells) { 218 writel(v, adev->doorbell.ptr + index); 219 } else { 220 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index); 221 } 222 } 223 224 /** 225 * amdgpu_mm_rdoorbell64 - read a doorbell Qword 226 * 227 * @adev: amdgpu_device pointer 228 * @index: doorbell index 229 * 230 * Returns the value in the doorbell aperture at the 231 * requested doorbell index (VEGA10+). 232 */ 233 u64 amdgpu_mm_rdoorbell64(struct amdgpu_device *adev, u32 index) 234 { 235 if (index < adev->doorbell.num_doorbells) { 236 return atomic64_read((atomic64_t *)(adev->doorbell.ptr + index)); 237 } else { 238 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index); 239 return 0; 240 } 241 } 242 243 /** 244 * amdgpu_mm_wdoorbell64 - write a doorbell Qword 245 * 246 * @adev: amdgpu_device pointer 247 * @index: doorbell index 248 * @v: value to write 249 * 250 * Writes @v to the doorbell aperture at the 251 * requested doorbell index (VEGA10+). 252 */ 253 void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v) 254 { 255 if (index < adev->doorbell.num_doorbells) { 256 atomic64_set((atomic64_t *)(adev->doorbell.ptr + index), v); 257 } else { 258 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index); 259 } 260 } 261 262 /** 263 * amdgpu_invalid_rreg - dummy reg read function 264 * 265 * @adev: amdgpu device pointer 266 * @reg: offset of register 267 * 268 * Dummy register read function. Used for register blocks 269 * that certain asics don't have (all asics). 270 * Returns the value in the register. 271 */ 272 static uint32_t amdgpu_invalid_rreg(struct amdgpu_device *adev, uint32_t reg) 273 { 274 DRM_ERROR("Invalid callback to read register 0x%04X\n", reg); 275 BUG(); 276 return 0; 277 } 278 279 /** 280 * amdgpu_invalid_wreg - dummy reg write function 281 * 282 * @adev: amdgpu device pointer 283 * @reg: offset of register 284 * @v: value to write to the register 285 * 286 * Dummy register read function. Used for register blocks 287 * that certain asics don't have (all asics). 288 */ 289 static void amdgpu_invalid_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) 290 { 291 DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n", 292 reg, v); 293 BUG(); 294 } 295 296 /** 297 * amdgpu_block_invalid_rreg - dummy reg read function 298 * 299 * @adev: amdgpu device pointer 300 * @block: offset of instance 301 * @reg: offset of register 302 * 303 * Dummy register read function. Used for register blocks 304 * that certain asics don't have (all asics). 305 * Returns the value in the register. 306 */ 307 static uint32_t amdgpu_block_invalid_rreg(struct amdgpu_device *adev, 308 uint32_t block, uint32_t reg) 309 { 310 DRM_ERROR("Invalid callback to read register 0x%04X in block 0x%04X\n", 311 reg, block); 312 BUG(); 313 return 0; 314 } 315 316 /** 317 * amdgpu_block_invalid_wreg - dummy reg write function 318 * 319 * @adev: amdgpu device pointer 320 * @block: offset of instance 321 * @reg: offset of register 322 * @v: value to write to the register 323 * 324 * Dummy register read function. Used for register blocks 325 * that certain asics don't have (all asics). 326 */ 327 static void amdgpu_block_invalid_wreg(struct amdgpu_device *adev, 328 uint32_t block, 329 uint32_t reg, uint32_t v) 330 { 331 DRM_ERROR("Invalid block callback to write register 0x%04X in block 0x%04X with 0x%08X\n", 332 reg, block, v); 333 BUG(); 334 } 335 336 static int amdgpu_vram_scratch_init(struct amdgpu_device *adev) 337 { 338 return amdgpu_bo_create_kernel(adev, AMDGPU_GPU_PAGE_SIZE, 339 PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM, 340 &adev->vram_scratch.robj, 341 &adev->vram_scratch.gpu_addr, 342 (void **)&adev->vram_scratch.ptr); 343 } 344 345 static void amdgpu_vram_scratch_fini(struct amdgpu_device *adev) 346 { 347 amdgpu_bo_free_kernel(&adev->vram_scratch.robj, NULL, NULL); 348 } 349 350 /** 351 * amdgpu_program_register_sequence - program an array of registers. 352 * 353 * @adev: amdgpu_device pointer 354 * @registers: pointer to the register array 355 * @array_size: size of the register array 356 * 357 * Programs an array or registers with and and or masks. 358 * This is a helper for setting golden registers. 359 */ 360 void amdgpu_program_register_sequence(struct amdgpu_device *adev, 361 const u32 *registers, 362 const u32 array_size) 363 { 364 u32 tmp, reg, and_mask, or_mask; 365 int i; 366 367 if (array_size % 3) 368 return; 369 370 for (i = 0; i < array_size; i +=3) { 371 reg = registers[i + 0]; 372 and_mask = registers[i + 1]; 373 or_mask = registers[i + 2]; 374 375 if (and_mask == 0xffffffff) { 376 tmp = or_mask; 377 } else { 378 tmp = RREG32(reg); 379 tmp &= ~and_mask; 380 tmp |= or_mask; 381 } 382 WREG32(reg, tmp); 383 } 384 } 385 386 void amdgpu_pci_config_reset(struct amdgpu_device *adev) 387 { 388 pci_write_config_dword(adev->pdev, 0x7c, AMDGPU_ASIC_RESET_DATA); 389 } 390 391 /* 392 * GPU doorbell aperture helpers function. 393 */ 394 /** 395 * amdgpu_doorbell_init - Init doorbell driver information. 396 * 397 * @adev: amdgpu_device pointer 398 * 399 * Init doorbell driver information (CIK) 400 * Returns 0 on success, error on failure. 401 */ 402 static int amdgpu_doorbell_init(struct amdgpu_device *adev) 403 { 404 /* No doorbell on SI hardware generation */ 405 if (adev->asic_type < CHIP_BONAIRE) { 406 adev->doorbell.base = 0; 407 adev->doorbell.size = 0; 408 adev->doorbell.num_doorbells = 0; 409 adev->doorbell.ptr = NULL; 410 return 0; 411 } 412 413 if (pci_resource_flags(adev->pdev, 2) & IORESOURCE_UNSET) 414 return -EINVAL; 415 416 /* doorbell bar mapping */ 417 adev->doorbell.base = pci_resource_start(adev->pdev, 2); 418 adev->doorbell.size = pci_resource_len(adev->pdev, 2); 419 420 adev->doorbell.num_doorbells = min_t(u32, adev->doorbell.size / sizeof(u32), 421 AMDGPU_DOORBELL_MAX_ASSIGNMENT+1); 422 if (adev->doorbell.num_doorbells == 0) 423 return -EINVAL; 424 425 adev->doorbell.ptr = ioremap(adev->doorbell.base, 426 adev->doorbell.num_doorbells * 427 sizeof(u32)); 428 if (adev->doorbell.ptr == NULL) 429 return -ENOMEM; 430 431 return 0; 432 } 433 434 /** 435 * amdgpu_doorbell_fini - Tear down doorbell driver information. 436 * 437 * @adev: amdgpu_device pointer 438 * 439 * Tear down doorbell driver information (CIK) 440 */ 441 static void amdgpu_doorbell_fini(struct amdgpu_device *adev) 442 { 443 iounmap(adev->doorbell.ptr); 444 adev->doorbell.ptr = NULL; 445 } 446 447 /** 448 * amdgpu_doorbell_get_kfd_info - Report doorbell configuration required to 449 * setup amdkfd 450 * 451 * @adev: amdgpu_device pointer 452 * @aperture_base: output returning doorbell aperture base physical address 453 * @aperture_size: output returning doorbell aperture size in bytes 454 * @start_offset: output returning # of doorbell bytes reserved for amdgpu. 455 * 456 * amdgpu and amdkfd share the doorbell aperture. amdgpu sets it up, 457 * takes doorbells required for its own rings and reports the setup to amdkfd. 458 * amdgpu reserved doorbells are at the start of the doorbell aperture. 459 */ 460 void amdgpu_doorbell_get_kfd_info(struct amdgpu_device *adev, 461 phys_addr_t *aperture_base, 462 size_t *aperture_size, 463 size_t *start_offset) 464 { 465 /* 466 * The first num_doorbells are used by amdgpu. 467 * amdkfd takes whatever's left in the aperture. 468 */ 469 if (adev->doorbell.size > adev->doorbell.num_doorbells * sizeof(u32)) { 470 *aperture_base = adev->doorbell.base; 471 *aperture_size = adev->doorbell.size; 472 *start_offset = adev->doorbell.num_doorbells * sizeof(u32); 473 } else { 474 *aperture_base = 0; 475 *aperture_size = 0; 476 *start_offset = 0; 477 } 478 } 479 480 /* 481 * amdgpu_wb_*() 482 * Writeback is the method by which the GPU updates special pages in memory 483 * with the status of certain GPU events (fences, ring pointers,etc.). 484 */ 485 486 /** 487 * amdgpu_wb_fini - Disable Writeback and free memory 488 * 489 * @adev: amdgpu_device pointer 490 * 491 * Disables Writeback and frees the Writeback memory (all asics). 492 * Used at driver shutdown. 493 */ 494 static void amdgpu_wb_fini(struct amdgpu_device *adev) 495 { 496 if (adev->wb.wb_obj) { 497 amdgpu_bo_free_kernel(&adev->wb.wb_obj, 498 &adev->wb.gpu_addr, 499 (void **)&adev->wb.wb); 500 adev->wb.wb_obj = NULL; 501 } 502 } 503 504 /** 505 * amdgpu_wb_init- Init Writeback driver info and allocate memory 506 * 507 * @adev: amdgpu_device pointer 508 * 509 * Initializes writeback and allocates writeback memory (all asics). 510 * Used at driver startup. 511 * Returns 0 on success or an -error on failure. 512 */ 513 static int amdgpu_wb_init(struct amdgpu_device *adev) 514 { 515 int r; 516 517 if (adev->wb.wb_obj == NULL) { 518 /* AMDGPU_MAX_WB * sizeof(uint32_t) * 8 = AMDGPU_MAX_WB 256bit slots */ 519 r = amdgpu_bo_create_kernel(adev, AMDGPU_MAX_WB * sizeof(uint32_t) * 8, 520 PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT, 521 &adev->wb.wb_obj, &adev->wb.gpu_addr, 522 (void **)&adev->wb.wb); 523 if (r) { 524 dev_warn(adev->dev, "(%d) create WB bo failed\n", r); 525 return r; 526 } 527 528 adev->wb.num_wb = AMDGPU_MAX_WB; 529 memset(&adev->wb.used, 0, sizeof(adev->wb.used)); 530 531 /* clear wb memory */ 532 memset((char *)adev->wb.wb, 0, AMDGPU_MAX_WB * sizeof(uint32_t)); 533 } 534 535 return 0; 536 } 537 538 /** 539 * amdgpu_wb_get - Allocate a wb entry 540 * 541 * @adev: amdgpu_device pointer 542 * @wb: wb index 543 * 544 * Allocate a wb slot for use by the driver (all asics). 545 * Returns 0 on success or -EINVAL on failure. 546 */ 547 int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb) 548 { 549 unsigned long offset = find_first_zero_bit(adev->wb.used, adev->wb.num_wb); 550 551 if (offset < adev->wb.num_wb) { 552 __set_bit(offset, adev->wb.used); 553 *wb = offset << 3; /* convert to dw offset */ 554 return 0; 555 } else { 556 return -EINVAL; 557 } 558 } 559 560 /** 561 * amdgpu_wb_free - Free a wb entry 562 * 563 * @adev: amdgpu_device pointer 564 * @wb: wb index 565 * 566 * Free a wb slot allocated for use by the driver (all asics) 567 */ 568 void amdgpu_wb_free(struct amdgpu_device *adev, u32 wb) 569 { 570 if (wb < adev->wb.num_wb) 571 __clear_bit(wb >> 3, adev->wb.used); 572 } 573 574 /** 575 * amdgpu_vram_location - try to find VRAM location 576 * @adev: amdgpu device structure holding all necessary informations 577 * @mc: memory controller structure holding memory informations 578 * @base: base address at which to put VRAM 579 * 580 * Function will try to place VRAM at base address provided 581 * as parameter. 582 */ 583 void amdgpu_vram_location(struct amdgpu_device *adev, struct amdgpu_mc *mc, u64 base) 584 { 585 uint64_t limit = (uint64_t)amdgpu_vram_limit << 20; 586 587 mc->vram_start = base; 588 mc->vram_end = mc->vram_start + mc->mc_vram_size - 1; 589 if (limit && limit < mc->real_vram_size) 590 mc->real_vram_size = limit; 591 dev_info(adev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n", 592 mc->mc_vram_size >> 20, mc->vram_start, 593 mc->vram_end, mc->real_vram_size >> 20); 594 } 595 596 /** 597 * amdgpu_gart_location - try to find GTT location 598 * @adev: amdgpu device structure holding all necessary informations 599 * @mc: memory controller structure holding memory informations 600 * 601 * Function will place try to place GTT before or after VRAM. 602 * 603 * If GTT size is bigger than space left then we ajust GTT size. 604 * Thus function will never fails. 605 * 606 * FIXME: when reducing GTT size align new size on power of 2. 607 */ 608 void amdgpu_gart_location(struct amdgpu_device *adev, struct amdgpu_mc *mc) 609 { 610 u64 size_af, size_bf; 611 612 size_af = adev->mc.mc_mask - mc->vram_end; 613 size_bf = mc->vram_start; 614 if (size_bf > size_af) { 615 if (mc->gart_size > size_bf) { 616 dev_warn(adev->dev, "limiting GTT\n"); 617 mc->gart_size = size_bf; 618 } 619 mc->gart_start = 0; 620 } else { 621 if (mc->gart_size > size_af) { 622 dev_warn(adev->dev, "limiting GTT\n"); 623 mc->gart_size = size_af; 624 } 625 /* VCE doesn't like it when BOs cross a 4GB segment, so align 626 * the GART base on a 4GB boundary as well. 627 */ 628 mc->gart_start = ALIGN(mc->vram_end + 1, 0x100000000ULL); 629 } 630 mc->gart_end = mc->gart_start + mc->gart_size - 1; 631 dev_info(adev->dev, "GTT: %lluM 0x%016llX - 0x%016llX\n", 632 mc->gart_size >> 20, mc->gart_start, mc->gart_end); 633 } 634 635 /* 636 * Firmware Reservation functions 637 */ 638 /** 639 * amdgpu_fw_reserve_vram_fini - free fw reserved vram 640 * 641 * @adev: amdgpu_device pointer 642 * 643 * free fw reserved vram if it has been reserved. 644 */ 645 void amdgpu_fw_reserve_vram_fini(struct amdgpu_device *adev) 646 { 647 amdgpu_bo_free_kernel(&adev->fw_vram_usage.reserved_bo, 648 NULL, &adev->fw_vram_usage.va); 649 } 650 651 /** 652 * amdgpu_fw_reserve_vram_init - create bo vram reservation from fw 653 * 654 * @adev: amdgpu_device pointer 655 * 656 * create bo vram reservation from fw. 657 */ 658 int amdgpu_fw_reserve_vram_init(struct amdgpu_device *adev) 659 { 660 struct ttm_operation_ctx ctx = { false, false }; 661 int r = 0; 662 int i; 663 u64 vram_size = adev->mc.visible_vram_size; 664 u64 offset = adev->fw_vram_usage.start_offset; 665 u64 size = adev->fw_vram_usage.size; 666 struct amdgpu_bo *bo; 667 668 adev->fw_vram_usage.va = NULL; 669 adev->fw_vram_usage.reserved_bo = NULL; 670 671 if (adev->fw_vram_usage.size > 0 && 672 adev->fw_vram_usage.size <= vram_size) { 673 674 r = amdgpu_bo_create(adev, adev->fw_vram_usage.size, 675 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 676 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | 677 AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS, NULL, NULL, 0, 678 &adev->fw_vram_usage.reserved_bo); 679 if (r) 680 goto error_create; 681 682 r = amdgpu_bo_reserve(adev->fw_vram_usage.reserved_bo, false); 683 if (r) 684 goto error_reserve; 685 686 /* remove the original mem node and create a new one at the 687 * request position 688 */ 689 bo = adev->fw_vram_usage.reserved_bo; 690 offset = ALIGN(offset, PAGE_SIZE); 691 for (i = 0; i < bo->placement.num_placement; ++i) { 692 bo->placements[i].fpfn = offset >> PAGE_SHIFT; 693 bo->placements[i].lpfn = (offset + size) >> PAGE_SHIFT; 694 } 695 696 ttm_bo_mem_put(&bo->tbo, &bo->tbo.mem); 697 r = ttm_bo_mem_space(&bo->tbo, &bo->placement, 698 &bo->tbo.mem, &ctx); 699 if (r) 700 goto error_pin; 701 702 r = amdgpu_bo_pin_restricted(adev->fw_vram_usage.reserved_bo, 703 AMDGPU_GEM_DOMAIN_VRAM, 704 adev->fw_vram_usage.start_offset, 705 (adev->fw_vram_usage.start_offset + 706 adev->fw_vram_usage.size), NULL); 707 if (r) 708 goto error_pin; 709 r = amdgpu_bo_kmap(adev->fw_vram_usage.reserved_bo, 710 &adev->fw_vram_usage.va); 711 if (r) 712 goto error_kmap; 713 714 amdgpu_bo_unreserve(adev->fw_vram_usage.reserved_bo); 715 } 716 return r; 717 718 error_kmap: 719 amdgpu_bo_unpin(adev->fw_vram_usage.reserved_bo); 720 error_pin: 721 amdgpu_bo_unreserve(adev->fw_vram_usage.reserved_bo); 722 error_reserve: 723 amdgpu_bo_unref(&adev->fw_vram_usage.reserved_bo); 724 error_create: 725 adev->fw_vram_usage.va = NULL; 726 adev->fw_vram_usage.reserved_bo = NULL; 727 return r; 728 } 729 730 /** 731 * amdgpu_device_resize_fb_bar - try to resize FB BAR 732 * 733 * @adev: amdgpu_device pointer 734 * 735 * Try to resize FB BAR to make all VRAM CPU accessible. We try very hard not 736 * to fail, but if any of the BARs is not accessible after the size we abort 737 * driver loading by returning -ENODEV. 738 */ 739 int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) 740 { 741 u64 space_needed = roundup_pow_of_two(adev->mc.real_vram_size); 742 u32 rbar_size = order_base_2(((space_needed >> 20) | 1)) - 1; 743 struct pci_bus *root; 744 struct resource *res; 745 unsigned i; 746 u16 cmd; 747 int r; 748 749 /* Bypass for VF */ 750 if (amdgpu_sriov_vf(adev)) 751 return 0; 752 753 /* Check if the root BUS has 64bit memory resources */ 754 root = adev->pdev->bus; 755 while (root->parent) 756 root = root->parent; 757 758 pci_bus_for_each_resource(root, res, i) { 759 if (res && res->flags & IORESOURCE_MEM_64 && 760 res->start > 0x100000000ull) 761 break; 762 } 763 764 /* Trying to resize is pointless without a root hub window above 4GB */ 765 if (!res) 766 return 0; 767 768 /* Disable memory decoding while we change the BAR addresses and size */ 769 pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd); 770 pci_write_config_word(adev->pdev, PCI_COMMAND, 771 cmd & ~PCI_COMMAND_MEMORY); 772 773 /* Free the VRAM and doorbell BAR, we most likely need to move both. */ 774 amdgpu_doorbell_fini(adev); 775 if (adev->asic_type >= CHIP_BONAIRE) 776 pci_release_resource(adev->pdev, 2); 777 778 pci_release_resource(adev->pdev, 0); 779 780 r = pci_resize_resource(adev->pdev, 0, rbar_size); 781 if (r == -ENOSPC) 782 DRM_INFO("Not enough PCI address space for a large BAR."); 783 else if (r && r != -ENOTSUPP) 784 DRM_ERROR("Problem resizing BAR0 (%d).", r); 785 786 pci_assign_unassigned_bus_resources(adev->pdev->bus); 787 788 /* When the doorbell or fb BAR isn't available we have no chance of 789 * using the device. 790 */ 791 r = amdgpu_doorbell_init(adev); 792 if (r || (pci_resource_flags(adev->pdev, 0) & IORESOURCE_UNSET)) 793 return -ENODEV; 794 795 pci_write_config_word(adev->pdev, PCI_COMMAND, cmd); 796 797 return 0; 798 } 799 800 /* 801 * GPU helpers function. 802 */ 803 /** 804 * amdgpu_need_post - check if the hw need post or not 805 * 806 * @adev: amdgpu_device pointer 807 * 808 * Check if the asic has been initialized (all asics) at driver startup 809 * or post is needed if hw reset is performed. 810 * Returns true if need or false if not. 811 */ 812 bool amdgpu_need_post(struct amdgpu_device *adev) 813 { 814 uint32_t reg; 815 816 if (amdgpu_sriov_vf(adev)) 817 return false; 818 819 if (amdgpu_passthrough(adev)) { 820 /* for FIJI: In whole GPU pass-through virtualization case, after VM reboot 821 * some old smc fw still need driver do vPost otherwise gpu hang, while 822 * those smc fw version above 22.15 doesn't have this flaw, so we force 823 * vpost executed for smc version below 22.15 824 */ 825 if (adev->asic_type == CHIP_FIJI) { 826 int err; 827 uint32_t fw_ver; 828 err = request_firmware(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev); 829 /* force vPost if error occured */ 830 if (err) 831 return true; 832 833 fw_ver = *((uint32_t *)adev->pm.fw->data + 69); 834 if (fw_ver < 0x00160e00) 835 return true; 836 } 837 } 838 839 if (adev->has_hw_reset) { 840 adev->has_hw_reset = false; 841 return true; 842 } 843 844 /* bios scratch used on CIK+ */ 845 if (adev->asic_type >= CHIP_BONAIRE) 846 return amdgpu_atombios_scratch_need_asic_init(adev); 847 848 /* check MEM_SIZE for older asics */ 849 reg = amdgpu_asic_get_config_memsize(adev); 850 851 if ((reg != 0) && (reg != 0xffffffff)) 852 return false; 853 854 return true; 855 } 856 857 /** 858 * amdgpu_dummy_page_init - init dummy page used by the driver 859 * 860 * @adev: amdgpu_device pointer 861 * 862 * Allocate the dummy page used by the driver (all asics). 863 * This dummy page is used by the driver as a filler for gart entries 864 * when pages are taken out of the GART 865 * Returns 0 on sucess, -ENOMEM on failure. 866 */ 867 int amdgpu_dummy_page_init(struct amdgpu_device *adev) 868 { 869 if (adev->dummy_page.page) 870 return 0; 871 adev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO); 872 if (adev->dummy_page.page == NULL) 873 return -ENOMEM; 874 adev->dummy_page.addr = pci_map_page(adev->pdev, adev->dummy_page.page, 875 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); 876 if (pci_dma_mapping_error(adev->pdev, adev->dummy_page.addr)) { 877 dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n"); 878 __free_page(adev->dummy_page.page); 879 adev->dummy_page.page = NULL; 880 return -ENOMEM; 881 } 882 return 0; 883 } 884 885 /** 886 * amdgpu_dummy_page_fini - free dummy page used by the driver 887 * 888 * @adev: amdgpu_device pointer 889 * 890 * Frees the dummy page used by the driver (all asics). 891 */ 892 void amdgpu_dummy_page_fini(struct amdgpu_device *adev) 893 { 894 if (adev->dummy_page.page == NULL) 895 return; 896 pci_unmap_page(adev->pdev, adev->dummy_page.addr, 897 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); 898 __free_page(adev->dummy_page.page); 899 adev->dummy_page.page = NULL; 900 } 901 902 903 /* ATOM accessor methods */ 904 /* 905 * ATOM is an interpreted byte code stored in tables in the vbios. The 906 * driver registers callbacks to access registers and the interpreter 907 * in the driver parses the tables and executes then to program specific 908 * actions (set display modes, asic init, etc.). See amdgpu_atombios.c, 909 * atombios.h, and atom.c 910 */ 911 912 /** 913 * cail_pll_read - read PLL register 914 * 915 * @info: atom card_info pointer 916 * @reg: PLL register offset 917 * 918 * Provides a PLL register accessor for the atom interpreter (r4xx+). 919 * Returns the value of the PLL register. 920 */ 921 static uint32_t cail_pll_read(struct card_info *info, uint32_t reg) 922 { 923 return 0; 924 } 925 926 /** 927 * cail_pll_write - write PLL register 928 * 929 * @info: atom card_info pointer 930 * @reg: PLL register offset 931 * @val: value to write to the pll register 932 * 933 * Provides a PLL register accessor for the atom interpreter (r4xx+). 934 */ 935 static void cail_pll_write(struct card_info *info, uint32_t reg, uint32_t val) 936 { 937 938 } 939 940 /** 941 * cail_mc_read - read MC (Memory Controller) register 942 * 943 * @info: atom card_info pointer 944 * @reg: MC register offset 945 * 946 * Provides an MC register accessor for the atom interpreter (r4xx+). 947 * Returns the value of the MC register. 948 */ 949 static uint32_t cail_mc_read(struct card_info *info, uint32_t reg) 950 { 951 return 0; 952 } 953 954 /** 955 * cail_mc_write - write MC (Memory Controller) register 956 * 957 * @info: atom card_info pointer 958 * @reg: MC register offset 959 * @val: value to write to the pll register 960 * 961 * Provides a MC register accessor for the atom interpreter (r4xx+). 962 */ 963 static void cail_mc_write(struct card_info *info, uint32_t reg, uint32_t val) 964 { 965 966 } 967 968 /** 969 * cail_reg_write - write MMIO register 970 * 971 * @info: atom card_info pointer 972 * @reg: MMIO register offset 973 * @val: value to write to the pll register 974 * 975 * Provides a MMIO register accessor for the atom interpreter (r4xx+). 976 */ 977 static void cail_reg_write(struct card_info *info, uint32_t reg, uint32_t val) 978 { 979 struct amdgpu_device *adev = info->dev->dev_private; 980 981 WREG32(reg, val); 982 } 983 984 /** 985 * cail_reg_read - read MMIO register 986 * 987 * @info: atom card_info pointer 988 * @reg: MMIO register offset 989 * 990 * Provides an MMIO register accessor for the atom interpreter (r4xx+). 991 * Returns the value of the MMIO register. 992 */ 993 static uint32_t cail_reg_read(struct card_info *info, uint32_t reg) 994 { 995 struct amdgpu_device *adev = info->dev->dev_private; 996 uint32_t r; 997 998 r = RREG32(reg); 999 return r; 1000 } 1001 1002 /** 1003 * cail_ioreg_write - write IO register 1004 * 1005 * @info: atom card_info pointer 1006 * @reg: IO register offset 1007 * @val: value to write to the pll register 1008 * 1009 * Provides a IO register accessor for the atom interpreter (r4xx+). 1010 */ 1011 static void cail_ioreg_write(struct card_info *info, uint32_t reg, uint32_t val) 1012 { 1013 struct amdgpu_device *adev = info->dev->dev_private; 1014 1015 WREG32_IO(reg, val); 1016 } 1017 1018 /** 1019 * cail_ioreg_read - read IO register 1020 * 1021 * @info: atom card_info pointer 1022 * @reg: IO register offset 1023 * 1024 * Provides an IO register accessor for the atom interpreter (r4xx+). 1025 * Returns the value of the IO register. 1026 */ 1027 static uint32_t cail_ioreg_read(struct card_info *info, uint32_t reg) 1028 { 1029 struct amdgpu_device *adev = info->dev->dev_private; 1030 uint32_t r; 1031 1032 r = RREG32_IO(reg); 1033 return r; 1034 } 1035 1036 static ssize_t amdgpu_atombios_get_vbios_version(struct device *dev, 1037 struct device_attribute *attr, 1038 char *buf) 1039 { 1040 struct drm_device *ddev = dev_get_drvdata(dev); 1041 struct amdgpu_device *adev = ddev->dev_private; 1042 struct atom_context *ctx = adev->mode_info.atom_context; 1043 1044 return snprintf(buf, PAGE_SIZE, "%s\n", ctx->vbios_version); 1045 } 1046 1047 static DEVICE_ATTR(vbios_version, 0444, amdgpu_atombios_get_vbios_version, 1048 NULL); 1049 1050 /** 1051 * amdgpu_atombios_fini - free the driver info and callbacks for atombios 1052 * 1053 * @adev: amdgpu_device pointer 1054 * 1055 * Frees the driver info and register access callbacks for the ATOM 1056 * interpreter (r4xx+). 1057 * Called at driver shutdown. 1058 */ 1059 static void amdgpu_atombios_fini(struct amdgpu_device *adev) 1060 { 1061 if (adev->mode_info.atom_context) { 1062 kfree(adev->mode_info.atom_context->scratch); 1063 kfree(adev->mode_info.atom_context->iio); 1064 } 1065 kfree(adev->mode_info.atom_context); 1066 adev->mode_info.atom_context = NULL; 1067 kfree(adev->mode_info.atom_card_info); 1068 adev->mode_info.atom_card_info = NULL; 1069 device_remove_file(adev->dev, &dev_attr_vbios_version); 1070 } 1071 1072 /** 1073 * amdgpu_atombios_init - init the driver info and callbacks for atombios 1074 * 1075 * @adev: amdgpu_device pointer 1076 * 1077 * Initializes the driver info and register access callbacks for the 1078 * ATOM interpreter (r4xx+). 1079 * Returns 0 on sucess, -ENOMEM on failure. 1080 * Called at driver startup. 1081 */ 1082 static int amdgpu_atombios_init(struct amdgpu_device *adev) 1083 { 1084 struct card_info *atom_card_info = 1085 kzalloc(sizeof(struct card_info), GFP_KERNEL); 1086 int ret; 1087 1088 if (!atom_card_info) 1089 return -ENOMEM; 1090 1091 adev->mode_info.atom_card_info = atom_card_info; 1092 atom_card_info->dev = adev->ddev; 1093 atom_card_info->reg_read = cail_reg_read; 1094 atom_card_info->reg_write = cail_reg_write; 1095 /* needed for iio ops */ 1096 if (adev->rio_mem) { 1097 atom_card_info->ioreg_read = cail_ioreg_read; 1098 atom_card_info->ioreg_write = cail_ioreg_write; 1099 } else { 1100 DRM_DEBUG("PCI I/O BAR is not found. Using MMIO to access ATOM BIOS\n"); 1101 atom_card_info->ioreg_read = cail_reg_read; 1102 atom_card_info->ioreg_write = cail_reg_write; 1103 } 1104 atom_card_info->mc_read = cail_mc_read; 1105 atom_card_info->mc_write = cail_mc_write; 1106 atom_card_info->pll_read = cail_pll_read; 1107 atom_card_info->pll_write = cail_pll_write; 1108 1109 adev->mode_info.atom_context = amdgpu_atom_parse(atom_card_info, adev->bios); 1110 if (!adev->mode_info.atom_context) { 1111 amdgpu_atombios_fini(adev); 1112 return -ENOMEM; 1113 } 1114 1115 mutex_init(&adev->mode_info.atom_context->mutex); 1116 if (adev->is_atom_fw) { 1117 amdgpu_atomfirmware_scratch_regs_init(adev); 1118 amdgpu_atomfirmware_allocate_fb_scratch(adev); 1119 } else { 1120 amdgpu_atombios_scratch_regs_init(adev); 1121 amdgpu_atombios_allocate_fb_scratch(adev); 1122 } 1123 1124 ret = device_create_file(adev->dev, &dev_attr_vbios_version); 1125 if (ret) { 1126 DRM_ERROR("Failed to create device file for VBIOS version\n"); 1127 return ret; 1128 } 1129 1130 return 0; 1131 } 1132 1133 /* if we get transitioned to only one device, take VGA back */ 1134 /** 1135 * amdgpu_vga_set_decode - enable/disable vga decode 1136 * 1137 * @cookie: amdgpu_device pointer 1138 * @state: enable/disable vga decode 1139 * 1140 * Enable/disable vga decode (all asics). 1141 * Returns VGA resource flags. 1142 */ 1143 static unsigned int amdgpu_vga_set_decode(void *cookie, bool state) 1144 { 1145 struct amdgpu_device *adev = cookie; 1146 amdgpu_asic_set_vga_state(adev, state); 1147 if (state) 1148 return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM | 1149 VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; 1150 else 1151 return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; 1152 } 1153 1154 static void amdgpu_check_block_size(struct amdgpu_device *adev) 1155 { 1156 /* defines number of bits in page table versus page directory, 1157 * a page is 4KB so we have 12 bits offset, minimum 9 bits in the 1158 * page table and the remaining bits are in the page directory */ 1159 if (amdgpu_vm_block_size == -1) 1160 return; 1161 1162 if (amdgpu_vm_block_size < 9) { 1163 dev_warn(adev->dev, "VM page table size (%d) too small\n", 1164 amdgpu_vm_block_size); 1165 goto def_value; 1166 } 1167 1168 if (amdgpu_vm_block_size > 24 || 1169 (amdgpu_vm_size * 1024) < (1ull << amdgpu_vm_block_size)) { 1170 dev_warn(adev->dev, "VM page table size (%d) too large\n", 1171 amdgpu_vm_block_size); 1172 goto def_value; 1173 } 1174 1175 return; 1176 1177 def_value: 1178 amdgpu_vm_block_size = -1; 1179 } 1180 1181 static void amdgpu_check_vm_size(struct amdgpu_device *adev) 1182 { 1183 /* no need to check the default value */ 1184 if (amdgpu_vm_size == -1) 1185 return; 1186 1187 if (!is_power_of_2(amdgpu_vm_size)) { 1188 dev_warn(adev->dev, "VM size (%d) must be a power of 2\n", 1189 amdgpu_vm_size); 1190 goto def_value; 1191 } 1192 1193 if (amdgpu_vm_size < 1) { 1194 dev_warn(adev->dev, "VM size (%d) too small, min is 1GB\n", 1195 amdgpu_vm_size); 1196 goto def_value; 1197 } 1198 1199 /* 1200 * Max GPUVM size for Cayman, SI, CI VI are 40 bits. 1201 */ 1202 if (amdgpu_vm_size > 1024) { 1203 dev_warn(adev->dev, "VM size (%d) too large, max is 1TB\n", 1204 amdgpu_vm_size); 1205 goto def_value; 1206 } 1207 1208 return; 1209 1210 def_value: 1211 amdgpu_vm_size = -1; 1212 } 1213 1214 /** 1215 * amdgpu_check_arguments - validate module params 1216 * 1217 * @adev: amdgpu_device pointer 1218 * 1219 * Validates certain module parameters and updates 1220 * the associated values used by the driver (all asics). 1221 */ 1222 static void amdgpu_check_arguments(struct amdgpu_device *adev) 1223 { 1224 if (amdgpu_sched_jobs < 4) { 1225 dev_warn(adev->dev, "sched jobs (%d) must be at least 4\n", 1226 amdgpu_sched_jobs); 1227 amdgpu_sched_jobs = 4; 1228 } else if (!is_power_of_2(amdgpu_sched_jobs)){ 1229 dev_warn(adev->dev, "sched jobs (%d) must be a power of 2\n", 1230 amdgpu_sched_jobs); 1231 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs); 1232 } 1233 1234 if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) { 1235 /* gart size must be greater or equal to 32M */ 1236 dev_warn(adev->dev, "gart size (%d) too small\n", 1237 amdgpu_gart_size); 1238 amdgpu_gart_size = -1; 1239 } 1240 1241 if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) { 1242 /* gtt size must be greater or equal to 32M */ 1243 dev_warn(adev->dev, "gtt size (%d) too small\n", 1244 amdgpu_gtt_size); 1245 amdgpu_gtt_size = -1; 1246 } 1247 1248 /* valid range is between 4 and 9 inclusive */ 1249 if (amdgpu_vm_fragment_size != -1 && 1250 (amdgpu_vm_fragment_size > 9 || amdgpu_vm_fragment_size < 4)) { 1251 dev_warn(adev->dev, "valid range is between 4 and 9\n"); 1252 amdgpu_vm_fragment_size = -1; 1253 } 1254 1255 amdgpu_check_vm_size(adev); 1256 1257 amdgpu_check_block_size(adev); 1258 1259 if (amdgpu_vram_page_split != -1 && (amdgpu_vram_page_split < 16 || 1260 !is_power_of_2(amdgpu_vram_page_split))) { 1261 dev_warn(adev->dev, "invalid VRAM page split (%d)\n", 1262 amdgpu_vram_page_split); 1263 amdgpu_vram_page_split = 1024; 1264 } 1265 } 1266 1267 /** 1268 * amdgpu_switcheroo_set_state - set switcheroo state 1269 * 1270 * @pdev: pci dev pointer 1271 * @state: vga_switcheroo state 1272 * 1273 * Callback for the switcheroo driver. Suspends or resumes the 1274 * the asics before or after it is powered up using ACPI methods. 1275 */ 1276 static void amdgpu_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state) 1277 { 1278 struct drm_device *dev = pci_get_drvdata(pdev); 1279 1280 if (amdgpu_device_is_px(dev) && state == VGA_SWITCHEROO_OFF) 1281 return; 1282 1283 if (state == VGA_SWITCHEROO_ON) { 1284 pr_info("amdgpu: switched on\n"); 1285 /* don't suspend or resume card normally */ 1286 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; 1287 1288 amdgpu_device_resume(dev, true, true); 1289 1290 dev->switch_power_state = DRM_SWITCH_POWER_ON; 1291 drm_kms_helper_poll_enable(dev); 1292 } else { 1293 pr_info("amdgpu: switched off\n"); 1294 drm_kms_helper_poll_disable(dev); 1295 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; 1296 amdgpu_device_suspend(dev, true, true); 1297 dev->switch_power_state = DRM_SWITCH_POWER_OFF; 1298 } 1299 } 1300 1301 /** 1302 * amdgpu_switcheroo_can_switch - see if switcheroo state can change 1303 * 1304 * @pdev: pci dev pointer 1305 * 1306 * Callback for the switcheroo driver. Check of the switcheroo 1307 * state can be changed. 1308 * Returns true if the state can be changed, false if not. 1309 */ 1310 static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev) 1311 { 1312 struct drm_device *dev = pci_get_drvdata(pdev); 1313 1314 /* 1315 * FIXME: open_count is protected by drm_global_mutex but that would lead to 1316 * locking inversion with the driver load path. And the access here is 1317 * completely racy anyway. So don't bother with locking for now. 1318 */ 1319 return dev->open_count == 0; 1320 } 1321 1322 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = { 1323 .set_gpu_state = amdgpu_switcheroo_set_state, 1324 .reprobe = NULL, 1325 .can_switch = amdgpu_switcheroo_can_switch, 1326 }; 1327 1328 int amdgpu_set_clockgating_state(struct amdgpu_device *adev, 1329 enum amd_ip_block_type block_type, 1330 enum amd_clockgating_state state) 1331 { 1332 int i, r = 0; 1333 1334 for (i = 0; i < adev->num_ip_blocks; i++) { 1335 if (!adev->ip_blocks[i].status.valid) 1336 continue; 1337 if (adev->ip_blocks[i].version->type != block_type) 1338 continue; 1339 if (!adev->ip_blocks[i].version->funcs->set_clockgating_state) 1340 continue; 1341 r = adev->ip_blocks[i].version->funcs->set_clockgating_state( 1342 (void *)adev, state); 1343 if (r) 1344 DRM_ERROR("set_clockgating_state of IP block <%s> failed %d\n", 1345 adev->ip_blocks[i].version->funcs->name, r); 1346 } 1347 return r; 1348 } 1349 1350 int amdgpu_set_powergating_state(struct amdgpu_device *adev, 1351 enum amd_ip_block_type block_type, 1352 enum amd_powergating_state state) 1353 { 1354 int i, r = 0; 1355 1356 for (i = 0; i < adev->num_ip_blocks; i++) { 1357 if (!adev->ip_blocks[i].status.valid) 1358 continue; 1359 if (adev->ip_blocks[i].version->type != block_type) 1360 continue; 1361 if (!adev->ip_blocks[i].version->funcs->set_powergating_state) 1362 continue; 1363 r = adev->ip_blocks[i].version->funcs->set_powergating_state( 1364 (void *)adev, state); 1365 if (r) 1366 DRM_ERROR("set_powergating_state of IP block <%s> failed %d\n", 1367 adev->ip_blocks[i].version->funcs->name, r); 1368 } 1369 return r; 1370 } 1371 1372 void amdgpu_get_clockgating_state(struct amdgpu_device *adev, u32 *flags) 1373 { 1374 int i; 1375 1376 for (i = 0; i < adev->num_ip_blocks; i++) { 1377 if (!adev->ip_blocks[i].status.valid) 1378 continue; 1379 if (adev->ip_blocks[i].version->funcs->get_clockgating_state) 1380 adev->ip_blocks[i].version->funcs->get_clockgating_state((void *)adev, flags); 1381 } 1382 } 1383 1384 int amdgpu_wait_for_idle(struct amdgpu_device *adev, 1385 enum amd_ip_block_type block_type) 1386 { 1387 int i, r; 1388 1389 for (i = 0; i < adev->num_ip_blocks; i++) { 1390 if (!adev->ip_blocks[i].status.valid) 1391 continue; 1392 if (adev->ip_blocks[i].version->type == block_type) { 1393 r = adev->ip_blocks[i].version->funcs->wait_for_idle((void *)adev); 1394 if (r) 1395 return r; 1396 break; 1397 } 1398 } 1399 return 0; 1400 1401 } 1402 1403 bool amdgpu_is_idle(struct amdgpu_device *adev, 1404 enum amd_ip_block_type block_type) 1405 { 1406 int i; 1407 1408 for (i = 0; i < adev->num_ip_blocks; i++) { 1409 if (!adev->ip_blocks[i].status.valid) 1410 continue; 1411 if (adev->ip_blocks[i].version->type == block_type) 1412 return adev->ip_blocks[i].version->funcs->is_idle((void *)adev); 1413 } 1414 return true; 1415 1416 } 1417 1418 struct amdgpu_ip_block * amdgpu_get_ip_block(struct amdgpu_device *adev, 1419 enum amd_ip_block_type type) 1420 { 1421 int i; 1422 1423 for (i = 0; i < adev->num_ip_blocks; i++) 1424 if (adev->ip_blocks[i].version->type == type) 1425 return &adev->ip_blocks[i]; 1426 1427 return NULL; 1428 } 1429 1430 /** 1431 * amdgpu_ip_block_version_cmp 1432 * 1433 * @adev: amdgpu_device pointer 1434 * @type: enum amd_ip_block_type 1435 * @major: major version 1436 * @minor: minor version 1437 * 1438 * return 0 if equal or greater 1439 * return 1 if smaller or the ip_block doesn't exist 1440 */ 1441 int amdgpu_ip_block_version_cmp(struct amdgpu_device *adev, 1442 enum amd_ip_block_type type, 1443 u32 major, u32 minor) 1444 { 1445 struct amdgpu_ip_block *ip_block = amdgpu_get_ip_block(adev, type); 1446 1447 if (ip_block && ((ip_block->version->major > major) || 1448 ((ip_block->version->major == major) && 1449 (ip_block->version->minor >= minor)))) 1450 return 0; 1451 1452 return 1; 1453 } 1454 1455 /** 1456 * amdgpu_ip_block_add 1457 * 1458 * @adev: amdgpu_device pointer 1459 * @ip_block_version: pointer to the IP to add 1460 * 1461 * Adds the IP block driver information to the collection of IPs 1462 * on the asic. 1463 */ 1464 int amdgpu_ip_block_add(struct amdgpu_device *adev, 1465 const struct amdgpu_ip_block_version *ip_block_version) 1466 { 1467 if (!ip_block_version) 1468 return -EINVAL; 1469 1470 DRM_DEBUG("add ip block number %d <%s>\n", adev->num_ip_blocks, 1471 ip_block_version->funcs->name); 1472 1473 adev->ip_blocks[adev->num_ip_blocks++].version = ip_block_version; 1474 1475 return 0; 1476 } 1477 1478 static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev) 1479 { 1480 adev->enable_virtual_display = false; 1481 1482 if (amdgpu_virtual_display) { 1483 struct drm_device *ddev = adev->ddev; 1484 const char *pci_address_name = pci_name(ddev->pdev); 1485 char *pciaddstr, *pciaddstr_tmp, *pciaddname_tmp, *pciaddname; 1486 1487 pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL); 1488 pciaddstr_tmp = pciaddstr; 1489 while ((pciaddname_tmp = strsep(&pciaddstr_tmp, ";"))) { 1490 pciaddname = strsep(&pciaddname_tmp, ","); 1491 if (!strcmp("all", pciaddname) 1492 || !strcmp(pci_address_name, pciaddname)) { 1493 long num_crtc; 1494 int res = -1; 1495 1496 adev->enable_virtual_display = true; 1497 1498 if (pciaddname_tmp) 1499 res = kstrtol(pciaddname_tmp, 10, 1500 &num_crtc); 1501 1502 if (!res) { 1503 if (num_crtc < 1) 1504 num_crtc = 1; 1505 if (num_crtc > 6) 1506 num_crtc = 6; 1507 adev->mode_info.num_crtc = num_crtc; 1508 } else { 1509 adev->mode_info.num_crtc = 1; 1510 } 1511 break; 1512 } 1513 } 1514 1515 DRM_INFO("virtual display string:%s, %s:virtual_display:%d, num_crtc:%d\n", 1516 amdgpu_virtual_display, pci_address_name, 1517 adev->enable_virtual_display, adev->mode_info.num_crtc); 1518 1519 kfree(pciaddstr); 1520 } 1521 } 1522 1523 static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) 1524 { 1525 const char *chip_name; 1526 char fw_name[30]; 1527 int err; 1528 const struct gpu_info_firmware_header_v1_0 *hdr; 1529 1530 adev->firmware.gpu_info_fw = NULL; 1531 1532 switch (adev->asic_type) { 1533 case CHIP_TOPAZ: 1534 case CHIP_TONGA: 1535 case CHIP_FIJI: 1536 case CHIP_POLARIS11: 1537 case CHIP_POLARIS10: 1538 case CHIP_POLARIS12: 1539 case CHIP_CARRIZO: 1540 case CHIP_STONEY: 1541 #ifdef CONFIG_DRM_AMDGPU_SI 1542 case CHIP_VERDE: 1543 case CHIP_TAHITI: 1544 case CHIP_PITCAIRN: 1545 case CHIP_OLAND: 1546 case CHIP_HAINAN: 1547 #endif 1548 #ifdef CONFIG_DRM_AMDGPU_CIK 1549 case CHIP_BONAIRE: 1550 case CHIP_HAWAII: 1551 case CHIP_KAVERI: 1552 case CHIP_KABINI: 1553 case CHIP_MULLINS: 1554 #endif 1555 default: 1556 return 0; 1557 case CHIP_VEGA10: 1558 chip_name = "vega10"; 1559 break; 1560 case CHIP_RAVEN: 1561 chip_name = "raven"; 1562 break; 1563 } 1564 1565 snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name); 1566 err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev); 1567 if (err) { 1568 dev_err(adev->dev, 1569 "Failed to load gpu_info firmware \"%s\"\n", 1570 fw_name); 1571 goto out; 1572 } 1573 err = amdgpu_ucode_validate(adev->firmware.gpu_info_fw); 1574 if (err) { 1575 dev_err(adev->dev, 1576 "Failed to validate gpu_info firmware \"%s\"\n", 1577 fw_name); 1578 goto out; 1579 } 1580 1581 hdr = (const struct gpu_info_firmware_header_v1_0 *)adev->firmware.gpu_info_fw->data; 1582 amdgpu_ucode_print_gpu_info_hdr(&hdr->header); 1583 1584 switch (hdr->version_major) { 1585 case 1: 1586 { 1587 const struct gpu_info_firmware_v1_0 *gpu_info_fw = 1588 (const struct gpu_info_firmware_v1_0 *)(adev->firmware.gpu_info_fw->data + 1589 le32_to_cpu(hdr->header.ucode_array_offset_bytes)); 1590 1591 adev->gfx.config.max_shader_engines = le32_to_cpu(gpu_info_fw->gc_num_se); 1592 adev->gfx.config.max_cu_per_sh = le32_to_cpu(gpu_info_fw->gc_num_cu_per_sh); 1593 adev->gfx.config.max_sh_per_se = le32_to_cpu(gpu_info_fw->gc_num_sh_per_se); 1594 adev->gfx.config.max_backends_per_se = le32_to_cpu(gpu_info_fw->gc_num_rb_per_se); 1595 adev->gfx.config.max_texture_channel_caches = 1596 le32_to_cpu(gpu_info_fw->gc_num_tccs); 1597 adev->gfx.config.max_gprs = le32_to_cpu(gpu_info_fw->gc_num_gprs); 1598 adev->gfx.config.max_gs_threads = le32_to_cpu(gpu_info_fw->gc_num_max_gs_thds); 1599 adev->gfx.config.gs_vgt_table_depth = le32_to_cpu(gpu_info_fw->gc_gs_table_depth); 1600 adev->gfx.config.gs_prim_buffer_depth = le32_to_cpu(gpu_info_fw->gc_gsprim_buff_depth); 1601 adev->gfx.config.double_offchip_lds_buf = 1602 le32_to_cpu(gpu_info_fw->gc_double_offchip_lds_buffer); 1603 adev->gfx.cu_info.wave_front_size = le32_to_cpu(gpu_info_fw->gc_wave_size); 1604 adev->gfx.cu_info.max_waves_per_simd = 1605 le32_to_cpu(gpu_info_fw->gc_max_waves_per_simd); 1606 adev->gfx.cu_info.max_scratch_slots_per_cu = 1607 le32_to_cpu(gpu_info_fw->gc_max_scratch_slots_per_cu); 1608 adev->gfx.cu_info.lds_size = le32_to_cpu(gpu_info_fw->gc_lds_size); 1609 break; 1610 } 1611 default: 1612 dev_err(adev->dev, 1613 "Unsupported gpu_info table %d\n", hdr->header.ucode_version); 1614 err = -EINVAL; 1615 goto out; 1616 } 1617 out: 1618 return err; 1619 } 1620 1621 static int amdgpu_early_init(struct amdgpu_device *adev) 1622 { 1623 int i, r; 1624 1625 amdgpu_device_enable_virtual_display(adev); 1626 1627 switch (adev->asic_type) { 1628 case CHIP_TOPAZ: 1629 case CHIP_TONGA: 1630 case CHIP_FIJI: 1631 case CHIP_POLARIS11: 1632 case CHIP_POLARIS10: 1633 case CHIP_POLARIS12: 1634 case CHIP_CARRIZO: 1635 case CHIP_STONEY: 1636 if (adev->asic_type == CHIP_CARRIZO || adev->asic_type == CHIP_STONEY) 1637 adev->family = AMDGPU_FAMILY_CZ; 1638 else 1639 adev->family = AMDGPU_FAMILY_VI; 1640 1641 r = vi_set_ip_blocks(adev); 1642 if (r) 1643 return r; 1644 break; 1645 #ifdef CONFIG_DRM_AMDGPU_SI 1646 case CHIP_VERDE: 1647 case CHIP_TAHITI: 1648 case CHIP_PITCAIRN: 1649 case CHIP_OLAND: 1650 case CHIP_HAINAN: 1651 adev->family = AMDGPU_FAMILY_SI; 1652 r = si_set_ip_blocks(adev); 1653 if (r) 1654 return r; 1655 break; 1656 #endif 1657 #ifdef CONFIG_DRM_AMDGPU_CIK 1658 case CHIP_BONAIRE: 1659 case CHIP_HAWAII: 1660 case CHIP_KAVERI: 1661 case CHIP_KABINI: 1662 case CHIP_MULLINS: 1663 if ((adev->asic_type == CHIP_BONAIRE) || (adev->asic_type == CHIP_HAWAII)) 1664 adev->family = AMDGPU_FAMILY_CI; 1665 else 1666 adev->family = AMDGPU_FAMILY_KV; 1667 1668 r = cik_set_ip_blocks(adev); 1669 if (r) 1670 return r; 1671 break; 1672 #endif 1673 case CHIP_VEGA10: 1674 case CHIP_RAVEN: 1675 if (adev->asic_type == CHIP_RAVEN) 1676 adev->family = AMDGPU_FAMILY_RV; 1677 else 1678 adev->family = AMDGPU_FAMILY_AI; 1679 1680 r = soc15_set_ip_blocks(adev); 1681 if (r) 1682 return r; 1683 break; 1684 default: 1685 /* FIXME: not supported yet */ 1686 return -EINVAL; 1687 } 1688 1689 r = amdgpu_device_parse_gpu_info_fw(adev); 1690 if (r) 1691 return r; 1692 1693 amdgpu_amdkfd_device_probe(adev); 1694 1695 if (amdgpu_sriov_vf(adev)) { 1696 r = amdgpu_virt_request_full_gpu(adev, true); 1697 if (r) 1698 return -EAGAIN; 1699 } 1700 1701 for (i = 0; i < adev->num_ip_blocks; i++) { 1702 if ((amdgpu_ip_block_mask & (1 << i)) == 0) { 1703 DRM_ERROR("disabled ip block: %d <%s>\n", 1704 i, adev->ip_blocks[i].version->funcs->name); 1705 adev->ip_blocks[i].status.valid = false; 1706 } else { 1707 if (adev->ip_blocks[i].version->funcs->early_init) { 1708 r = adev->ip_blocks[i].version->funcs->early_init((void *)adev); 1709 if (r == -ENOENT) { 1710 adev->ip_blocks[i].status.valid = false; 1711 } else if (r) { 1712 DRM_ERROR("early_init of IP block <%s> failed %d\n", 1713 adev->ip_blocks[i].version->funcs->name, r); 1714 return r; 1715 } else { 1716 adev->ip_blocks[i].status.valid = true; 1717 } 1718 } else { 1719 adev->ip_blocks[i].status.valid = true; 1720 } 1721 } 1722 } 1723 1724 adev->cg_flags &= amdgpu_cg_mask; 1725 adev->pg_flags &= amdgpu_pg_mask; 1726 1727 return 0; 1728 } 1729 1730 static int amdgpu_init(struct amdgpu_device *adev) 1731 { 1732 int i, r; 1733 1734 for (i = 0; i < adev->num_ip_blocks; i++) { 1735 if (!adev->ip_blocks[i].status.valid) 1736 continue; 1737 r = adev->ip_blocks[i].version->funcs->sw_init((void *)adev); 1738 if (r) { 1739 DRM_ERROR("sw_init of IP block <%s> failed %d\n", 1740 adev->ip_blocks[i].version->funcs->name, r); 1741 return r; 1742 } 1743 adev->ip_blocks[i].status.sw = true; 1744 /* need to do gmc hw init early so we can allocate gpu mem */ 1745 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { 1746 r = amdgpu_vram_scratch_init(adev); 1747 if (r) { 1748 DRM_ERROR("amdgpu_vram_scratch_init failed %d\n", r); 1749 return r; 1750 } 1751 r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); 1752 if (r) { 1753 DRM_ERROR("hw_init %d failed %d\n", i, r); 1754 return r; 1755 } 1756 r = amdgpu_wb_init(adev); 1757 if (r) { 1758 DRM_ERROR("amdgpu_wb_init failed %d\n", r); 1759 return r; 1760 } 1761 adev->ip_blocks[i].status.hw = true; 1762 1763 /* right after GMC hw init, we create CSA */ 1764 if (amdgpu_sriov_vf(adev)) { 1765 r = amdgpu_allocate_static_csa(adev); 1766 if (r) { 1767 DRM_ERROR("allocate CSA failed %d\n", r); 1768 return r; 1769 } 1770 } 1771 } 1772 } 1773 1774 for (i = 0; i < adev->num_ip_blocks; i++) { 1775 if (!adev->ip_blocks[i].status.sw) 1776 continue; 1777 /* gmc hw init is done early */ 1778 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) 1779 continue; 1780 r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); 1781 if (r) { 1782 DRM_ERROR("hw_init of IP block <%s> failed %d\n", 1783 adev->ip_blocks[i].version->funcs->name, r); 1784 return r; 1785 } 1786 adev->ip_blocks[i].status.hw = true; 1787 } 1788 1789 amdgpu_amdkfd_device_init(adev); 1790 1791 if (amdgpu_sriov_vf(adev)) 1792 amdgpu_virt_release_full_gpu(adev, true); 1793 1794 return 0; 1795 } 1796 1797 static void amdgpu_fill_reset_magic(struct amdgpu_device *adev) 1798 { 1799 memcpy(adev->reset_magic, adev->gart.ptr, AMDGPU_RESET_MAGIC_NUM); 1800 } 1801 1802 static bool amdgpu_check_vram_lost(struct amdgpu_device *adev) 1803 { 1804 return !!memcmp(adev->gart.ptr, adev->reset_magic, 1805 AMDGPU_RESET_MAGIC_NUM); 1806 } 1807 1808 static int amdgpu_late_set_cg_state(struct amdgpu_device *adev) 1809 { 1810 int i = 0, r; 1811 1812 for (i = 0; i < adev->num_ip_blocks; i++) { 1813 if (!adev->ip_blocks[i].status.valid) 1814 continue; 1815 /* skip CG for VCE/UVD, it's handled specially */ 1816 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD && 1817 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE) { 1818 /* enable clockgating to save power */ 1819 r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1820 AMD_CG_STATE_GATE); 1821 if (r) { 1822 DRM_ERROR("set_clockgating_state(gate) of IP block <%s> failed %d\n", 1823 adev->ip_blocks[i].version->funcs->name, r); 1824 return r; 1825 } 1826 } 1827 } 1828 return 0; 1829 } 1830 1831 static int amdgpu_late_init(struct amdgpu_device *adev) 1832 { 1833 int i = 0, r; 1834 1835 for (i = 0; i < adev->num_ip_blocks; i++) { 1836 if (!adev->ip_blocks[i].status.valid) 1837 continue; 1838 if (adev->ip_blocks[i].version->funcs->late_init) { 1839 r = adev->ip_blocks[i].version->funcs->late_init((void *)adev); 1840 if (r) { 1841 DRM_ERROR("late_init of IP block <%s> failed %d\n", 1842 adev->ip_blocks[i].version->funcs->name, r); 1843 return r; 1844 } 1845 adev->ip_blocks[i].status.late_initialized = true; 1846 } 1847 } 1848 1849 mod_delayed_work(system_wq, &adev->late_init_work, 1850 msecs_to_jiffies(AMDGPU_RESUME_MS)); 1851 1852 amdgpu_fill_reset_magic(adev); 1853 1854 return 0; 1855 } 1856 1857 static int amdgpu_fini(struct amdgpu_device *adev) 1858 { 1859 int i, r; 1860 1861 amdgpu_amdkfd_device_fini(adev); 1862 /* need to disable SMC first */ 1863 for (i = 0; i < adev->num_ip_blocks; i++) { 1864 if (!adev->ip_blocks[i].status.hw) 1865 continue; 1866 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) { 1867 /* ungate blocks before hw fini so that we can shutdown the blocks safely */ 1868 r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1869 AMD_CG_STATE_UNGATE); 1870 if (r) { 1871 DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1872 adev->ip_blocks[i].version->funcs->name, r); 1873 return r; 1874 } 1875 r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev); 1876 /* XXX handle errors */ 1877 if (r) { 1878 DRM_DEBUG("hw_fini of IP block <%s> failed %d\n", 1879 adev->ip_blocks[i].version->funcs->name, r); 1880 } 1881 adev->ip_blocks[i].status.hw = false; 1882 break; 1883 } 1884 } 1885 1886 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1887 if (!adev->ip_blocks[i].status.hw) 1888 continue; 1889 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { 1890 amdgpu_free_static_csa(adev); 1891 amdgpu_wb_fini(adev); 1892 amdgpu_vram_scratch_fini(adev); 1893 } 1894 1895 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD && 1896 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE) { 1897 /* ungate blocks before hw fini so that we can shutdown the blocks safely */ 1898 r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1899 AMD_CG_STATE_UNGATE); 1900 if (r) { 1901 DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1902 adev->ip_blocks[i].version->funcs->name, r); 1903 return r; 1904 } 1905 } 1906 1907 r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev); 1908 /* XXX handle errors */ 1909 if (r) { 1910 DRM_DEBUG("hw_fini of IP block <%s> failed %d\n", 1911 adev->ip_blocks[i].version->funcs->name, r); 1912 } 1913 1914 adev->ip_blocks[i].status.hw = false; 1915 } 1916 1917 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1918 if (!adev->ip_blocks[i].status.sw) 1919 continue; 1920 r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev); 1921 /* XXX handle errors */ 1922 if (r) { 1923 DRM_DEBUG("sw_fini of IP block <%s> failed %d\n", 1924 adev->ip_blocks[i].version->funcs->name, r); 1925 } 1926 adev->ip_blocks[i].status.sw = false; 1927 adev->ip_blocks[i].status.valid = false; 1928 } 1929 1930 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1931 if (!adev->ip_blocks[i].status.late_initialized) 1932 continue; 1933 if (adev->ip_blocks[i].version->funcs->late_fini) 1934 adev->ip_blocks[i].version->funcs->late_fini((void *)adev); 1935 adev->ip_blocks[i].status.late_initialized = false; 1936 } 1937 1938 if (amdgpu_sriov_vf(adev)) 1939 if (amdgpu_virt_release_full_gpu(adev, false)) 1940 DRM_ERROR("failed to release exclusive mode on fini\n"); 1941 1942 return 0; 1943 } 1944 1945 static void amdgpu_late_init_func_handler(struct work_struct *work) 1946 { 1947 struct amdgpu_device *adev = 1948 container_of(work, struct amdgpu_device, late_init_work.work); 1949 amdgpu_late_set_cg_state(adev); 1950 } 1951 1952 int amdgpu_suspend(struct amdgpu_device *adev) 1953 { 1954 int i, r; 1955 1956 if (amdgpu_sriov_vf(adev)) 1957 amdgpu_virt_request_full_gpu(adev, false); 1958 1959 /* ungate SMC block first */ 1960 r = amdgpu_set_clockgating_state(adev, AMD_IP_BLOCK_TYPE_SMC, 1961 AMD_CG_STATE_UNGATE); 1962 if (r) { 1963 DRM_ERROR("set_clockgating_state(ungate) SMC failed %d\n",r); 1964 } 1965 1966 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1967 if (!adev->ip_blocks[i].status.valid) 1968 continue; 1969 /* ungate blocks so that suspend can properly shut them down */ 1970 if (i != AMD_IP_BLOCK_TYPE_SMC) { 1971 r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev, 1972 AMD_CG_STATE_UNGATE); 1973 if (r) { 1974 DRM_ERROR("set_clockgating_state(ungate) of IP block <%s> failed %d\n", 1975 adev->ip_blocks[i].version->funcs->name, r); 1976 } 1977 } 1978 /* XXX handle errors */ 1979 r = adev->ip_blocks[i].version->funcs->suspend(adev); 1980 /* XXX handle errors */ 1981 if (r) { 1982 DRM_ERROR("suspend of IP block <%s> failed %d\n", 1983 adev->ip_blocks[i].version->funcs->name, r); 1984 } 1985 } 1986 1987 if (amdgpu_sriov_vf(adev)) 1988 amdgpu_virt_release_full_gpu(adev, false); 1989 1990 return 0; 1991 } 1992 1993 static int amdgpu_sriov_reinit_early(struct amdgpu_device *adev) 1994 { 1995 int i, r; 1996 1997 static enum amd_ip_block_type ip_order[] = { 1998 AMD_IP_BLOCK_TYPE_GMC, 1999 AMD_IP_BLOCK_TYPE_COMMON, 2000 AMD_IP_BLOCK_TYPE_IH, 2001 }; 2002 2003 for (i = 0; i < ARRAY_SIZE(ip_order); i++) { 2004 int j; 2005 struct amdgpu_ip_block *block; 2006 2007 for (j = 0; j < adev->num_ip_blocks; j++) { 2008 block = &adev->ip_blocks[j]; 2009 2010 if (block->version->type != ip_order[i] || 2011 !block->status.valid) 2012 continue; 2013 2014 r = block->version->funcs->hw_init(adev); 2015 DRM_INFO("RE-INIT: %s %s\n", block->version->funcs->name, r?"failed":"successed"); 2016 } 2017 } 2018 2019 return 0; 2020 } 2021 2022 static int amdgpu_sriov_reinit_late(struct amdgpu_device *adev) 2023 { 2024 int i, r; 2025 2026 static enum amd_ip_block_type ip_order[] = { 2027 AMD_IP_BLOCK_TYPE_SMC, 2028 AMD_IP_BLOCK_TYPE_PSP, 2029 AMD_IP_BLOCK_TYPE_DCE, 2030 AMD_IP_BLOCK_TYPE_GFX, 2031 AMD_IP_BLOCK_TYPE_SDMA, 2032 AMD_IP_BLOCK_TYPE_UVD, 2033 AMD_IP_BLOCK_TYPE_VCE 2034 }; 2035 2036 for (i = 0; i < ARRAY_SIZE(ip_order); i++) { 2037 int j; 2038 struct amdgpu_ip_block *block; 2039 2040 for (j = 0; j < adev->num_ip_blocks; j++) { 2041 block = &adev->ip_blocks[j]; 2042 2043 if (block->version->type != ip_order[i] || 2044 !block->status.valid) 2045 continue; 2046 2047 r = block->version->funcs->hw_init(adev); 2048 DRM_INFO("RE-INIT: %s %s\n", block->version->funcs->name, r?"failed":"successed"); 2049 } 2050 } 2051 2052 return 0; 2053 } 2054 2055 static int amdgpu_resume_phase1(struct amdgpu_device *adev) 2056 { 2057 int i, r; 2058 2059 for (i = 0; i < adev->num_ip_blocks; i++) { 2060 if (!adev->ip_blocks[i].status.valid) 2061 continue; 2062 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON || 2063 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC || 2064 adev->ip_blocks[i].version->type == 2065 AMD_IP_BLOCK_TYPE_IH) { 2066 r = adev->ip_blocks[i].version->funcs->resume(adev); 2067 if (r) { 2068 DRM_ERROR("resume of IP block <%s> failed %d\n", 2069 adev->ip_blocks[i].version->funcs->name, r); 2070 return r; 2071 } 2072 } 2073 } 2074 2075 return 0; 2076 } 2077 2078 static int amdgpu_resume_phase2(struct amdgpu_device *adev) 2079 { 2080 int i, r; 2081 2082 for (i = 0; i < adev->num_ip_blocks; i++) { 2083 if (!adev->ip_blocks[i].status.valid) 2084 continue; 2085 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON || 2086 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC || 2087 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ) 2088 continue; 2089 r = adev->ip_blocks[i].version->funcs->resume(adev); 2090 if (r) { 2091 DRM_ERROR("resume of IP block <%s> failed %d\n", 2092 adev->ip_blocks[i].version->funcs->name, r); 2093 return r; 2094 } 2095 } 2096 2097 return 0; 2098 } 2099 2100 static int amdgpu_resume(struct amdgpu_device *adev) 2101 { 2102 int r; 2103 2104 r = amdgpu_resume_phase1(adev); 2105 if (r) 2106 return r; 2107 r = amdgpu_resume_phase2(adev); 2108 2109 return r; 2110 } 2111 2112 static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) 2113 { 2114 if (amdgpu_sriov_vf(adev)) { 2115 if (adev->is_atom_fw) { 2116 if (amdgpu_atomfirmware_gpu_supports_virtualization(adev)) 2117 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS; 2118 } else { 2119 if (amdgpu_atombios_has_gpu_virtualization_table(adev)) 2120 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS; 2121 } 2122 2123 if (!(adev->virt.caps & AMDGPU_SRIOV_CAPS_SRIOV_VBIOS)) 2124 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_NO_VBIOS, 0, 0); 2125 } 2126 } 2127 2128 bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type) 2129 { 2130 switch (asic_type) { 2131 #if defined(CONFIG_DRM_AMD_DC) 2132 case CHIP_BONAIRE: 2133 case CHIP_HAWAII: 2134 case CHIP_KAVERI: 2135 case CHIP_CARRIZO: 2136 case CHIP_STONEY: 2137 case CHIP_POLARIS11: 2138 case CHIP_POLARIS10: 2139 case CHIP_POLARIS12: 2140 case CHIP_TONGA: 2141 case CHIP_FIJI: 2142 #if defined(CONFIG_DRM_AMD_DC_PRE_VEGA) 2143 return amdgpu_dc != 0; 2144 #endif 2145 case CHIP_KABINI: 2146 case CHIP_MULLINS: 2147 return amdgpu_dc > 0; 2148 case CHIP_VEGA10: 2149 #if defined(CONFIG_DRM_AMD_DC_DCN1_0) 2150 case CHIP_RAVEN: 2151 #endif 2152 return amdgpu_dc != 0; 2153 #endif 2154 default: 2155 return false; 2156 } 2157 } 2158 2159 /** 2160 * amdgpu_device_has_dc_support - check if dc is supported 2161 * 2162 * @adev: amdgpu_device_pointer 2163 * 2164 * Returns true for supported, false for not supported 2165 */ 2166 bool amdgpu_device_has_dc_support(struct amdgpu_device *adev) 2167 { 2168 if (amdgpu_sriov_vf(adev)) 2169 return false; 2170 2171 return amdgpu_device_asic_has_dc_support(adev->asic_type); 2172 } 2173 2174 /** 2175 * amdgpu_device_init - initialize the driver 2176 * 2177 * @adev: amdgpu_device pointer 2178 * @pdev: drm dev pointer 2179 * @pdev: pci dev pointer 2180 * @flags: driver flags 2181 * 2182 * Initializes the driver info and hw (all asics). 2183 * Returns 0 for success or an error on failure. 2184 * Called at driver startup. 2185 */ 2186 int amdgpu_device_init(struct amdgpu_device *adev, 2187 struct drm_device *ddev, 2188 struct pci_dev *pdev, 2189 uint32_t flags) 2190 { 2191 int r, i; 2192 bool runtime = false; 2193 u32 max_MBps; 2194 2195 adev->shutdown = false; 2196 adev->dev = &pdev->dev; 2197 adev->ddev = ddev; 2198 adev->pdev = pdev; 2199 adev->flags = flags; 2200 adev->asic_type = flags & AMD_ASIC_MASK; 2201 adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT; 2202 adev->mc.gart_size = 512 * 1024 * 1024; 2203 adev->accel_working = false; 2204 adev->num_rings = 0; 2205 adev->mman.buffer_funcs = NULL; 2206 adev->mman.buffer_funcs_ring = NULL; 2207 adev->vm_manager.vm_pte_funcs = NULL; 2208 adev->vm_manager.vm_pte_num_rings = 0; 2209 adev->gart.gart_funcs = NULL; 2210 adev->fence_context = dma_fence_context_alloc(AMDGPU_MAX_RINGS); 2211 bitmap_zero(adev->gfx.pipe_reserve_bitmap, AMDGPU_MAX_COMPUTE_QUEUES); 2212 2213 adev->smc_rreg = &amdgpu_invalid_rreg; 2214 adev->smc_wreg = &amdgpu_invalid_wreg; 2215 adev->pcie_rreg = &amdgpu_invalid_rreg; 2216 adev->pcie_wreg = &amdgpu_invalid_wreg; 2217 adev->pciep_rreg = &amdgpu_invalid_rreg; 2218 adev->pciep_wreg = &amdgpu_invalid_wreg; 2219 adev->uvd_ctx_rreg = &amdgpu_invalid_rreg; 2220 adev->uvd_ctx_wreg = &amdgpu_invalid_wreg; 2221 adev->didt_rreg = &amdgpu_invalid_rreg; 2222 adev->didt_wreg = &amdgpu_invalid_wreg; 2223 adev->gc_cac_rreg = &amdgpu_invalid_rreg; 2224 adev->gc_cac_wreg = &amdgpu_invalid_wreg; 2225 adev->audio_endpt_rreg = &amdgpu_block_invalid_rreg; 2226 adev->audio_endpt_wreg = &amdgpu_block_invalid_wreg; 2227 2228 DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n", 2229 amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device, 2230 pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision); 2231 2232 /* mutex initialization are all done here so we 2233 * can recall function without having locking issues */ 2234 atomic_set(&adev->irq.ih.lock, 0); 2235 mutex_init(&adev->firmware.mutex); 2236 mutex_init(&adev->pm.mutex); 2237 mutex_init(&adev->gfx.gpu_clock_mutex); 2238 mutex_init(&adev->srbm_mutex); 2239 mutex_init(&adev->gfx.pipe_reserve_mutex); 2240 mutex_init(&adev->grbm_idx_mutex); 2241 mutex_init(&adev->mn_lock); 2242 mutex_init(&adev->virt.vf_errors.lock); 2243 hash_init(adev->mn_hash); 2244 mutex_init(&adev->lock_reset); 2245 2246 amdgpu_check_arguments(adev); 2247 2248 spin_lock_init(&adev->mmio_idx_lock); 2249 spin_lock_init(&adev->smc_idx_lock); 2250 spin_lock_init(&adev->pcie_idx_lock); 2251 spin_lock_init(&adev->uvd_ctx_idx_lock); 2252 spin_lock_init(&adev->didt_idx_lock); 2253 spin_lock_init(&adev->gc_cac_idx_lock); 2254 spin_lock_init(&adev->se_cac_idx_lock); 2255 spin_lock_init(&adev->audio_endpt_idx_lock); 2256 spin_lock_init(&adev->mm_stats.lock); 2257 2258 INIT_LIST_HEAD(&adev->shadow_list); 2259 mutex_init(&adev->shadow_list_lock); 2260 2261 INIT_LIST_HEAD(&adev->ring_lru_list); 2262 spin_lock_init(&adev->ring_lru_list_lock); 2263 2264 INIT_DELAYED_WORK(&adev->late_init_work, amdgpu_late_init_func_handler); 2265 2266 /* Registers mapping */ 2267 /* TODO: block userspace mapping of io register */ 2268 if (adev->asic_type >= CHIP_BONAIRE) { 2269 adev->rmmio_base = pci_resource_start(adev->pdev, 5); 2270 adev->rmmio_size = pci_resource_len(adev->pdev, 5); 2271 } else { 2272 adev->rmmio_base = pci_resource_start(adev->pdev, 2); 2273 adev->rmmio_size = pci_resource_len(adev->pdev, 2); 2274 } 2275 2276 adev->rmmio = ioremap(adev->rmmio_base, adev->rmmio_size); 2277 if (adev->rmmio == NULL) { 2278 return -ENOMEM; 2279 } 2280 DRM_INFO("register mmio base: 0x%08X\n", (uint32_t)adev->rmmio_base); 2281 DRM_INFO("register mmio size: %u\n", (unsigned)adev->rmmio_size); 2282 2283 /* doorbell bar mapping */ 2284 amdgpu_doorbell_init(adev); 2285 2286 /* io port mapping */ 2287 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { 2288 if (pci_resource_flags(adev->pdev, i) & IORESOURCE_IO) { 2289 adev->rio_mem_size = pci_resource_len(adev->pdev, i); 2290 adev->rio_mem = pci_iomap(adev->pdev, i, adev->rio_mem_size); 2291 break; 2292 } 2293 } 2294 if (adev->rio_mem == NULL) 2295 DRM_INFO("PCI I/O BAR is not found.\n"); 2296 2297 /* early init functions */ 2298 r = amdgpu_early_init(adev); 2299 if (r) 2300 return r; 2301 2302 /* if we have > 1 VGA cards, then disable the amdgpu VGA resources */ 2303 /* this will fail for cards that aren't VGA class devices, just 2304 * ignore it */ 2305 vga_client_register(adev->pdev, adev, NULL, amdgpu_vga_set_decode); 2306 2307 if (amdgpu_runtime_pm == 1) 2308 runtime = true; 2309 if (amdgpu_device_is_px(ddev)) 2310 runtime = true; 2311 if (!pci_is_thunderbolt_attached(adev->pdev)) 2312 vga_switcheroo_register_client(adev->pdev, 2313 &amdgpu_switcheroo_ops, runtime); 2314 if (runtime) 2315 vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain); 2316 2317 /* Read BIOS */ 2318 if (!amdgpu_get_bios(adev)) { 2319 r = -EINVAL; 2320 goto failed; 2321 } 2322 2323 r = amdgpu_atombios_init(adev); 2324 if (r) { 2325 dev_err(adev->dev, "amdgpu_atombios_init failed\n"); 2326 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_INIT_FAIL, 0, 0); 2327 goto failed; 2328 } 2329 2330 /* detect if we are with an SRIOV vbios */ 2331 amdgpu_device_detect_sriov_bios(adev); 2332 2333 /* Post card if necessary */ 2334 if (amdgpu_need_post(adev)) { 2335 if (!adev->bios) { 2336 dev_err(adev->dev, "no vBIOS found\n"); 2337 r = -EINVAL; 2338 goto failed; 2339 } 2340 DRM_INFO("GPU posting now...\n"); 2341 r = amdgpu_atom_asic_init(adev->mode_info.atom_context); 2342 if (r) { 2343 dev_err(adev->dev, "gpu post error!\n"); 2344 goto failed; 2345 } 2346 } 2347 2348 if (adev->is_atom_fw) { 2349 /* Initialize clocks */ 2350 r = amdgpu_atomfirmware_get_clock_info(adev); 2351 if (r) { 2352 dev_err(adev->dev, "amdgpu_atomfirmware_get_clock_info failed\n"); 2353 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0); 2354 goto failed; 2355 } 2356 } else { 2357 /* Initialize clocks */ 2358 r = amdgpu_atombios_get_clock_info(adev); 2359 if (r) { 2360 dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n"); 2361 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0); 2362 goto failed; 2363 } 2364 /* init i2c buses */ 2365 if (!amdgpu_device_has_dc_support(adev)) 2366 amdgpu_atombios_i2c_init(adev); 2367 } 2368 2369 /* Fence driver */ 2370 r = amdgpu_fence_driver_init(adev); 2371 if (r) { 2372 dev_err(adev->dev, "amdgpu_fence_driver_init failed\n"); 2373 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_FENCE_INIT_FAIL, 0, 0); 2374 goto failed; 2375 } 2376 2377 /* init the mode config */ 2378 drm_mode_config_init(adev->ddev); 2379 2380 r = amdgpu_init(adev); 2381 if (r) { 2382 /* failed in exclusive mode due to timeout */ 2383 if (amdgpu_sriov_vf(adev) && 2384 !amdgpu_sriov_runtime(adev) && 2385 amdgpu_virt_mmio_blocked(adev) && 2386 !amdgpu_virt_wait_reset(adev)) { 2387 dev_err(adev->dev, "VF exclusive mode timeout\n"); 2388 /* Don't send request since VF is inactive. */ 2389 adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; 2390 adev->virt.ops = NULL; 2391 r = -EAGAIN; 2392 goto failed; 2393 } 2394 dev_err(adev->dev, "amdgpu_init failed\n"); 2395 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0); 2396 amdgpu_fini(adev); 2397 goto failed; 2398 } 2399 2400 adev->accel_working = true; 2401 2402 amdgpu_vm_check_compute_bug(adev); 2403 2404 /* Initialize the buffer migration limit. */ 2405 if (amdgpu_moverate >= 0) 2406 max_MBps = amdgpu_moverate; 2407 else 2408 max_MBps = 8; /* Allow 8 MB/s. */ 2409 /* Get a log2 for easy divisions. */ 2410 adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps)); 2411 2412 r = amdgpu_ib_pool_init(adev); 2413 if (r) { 2414 dev_err(adev->dev, "IB initialization failed (%d).\n", r); 2415 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r); 2416 goto failed; 2417 } 2418 2419 r = amdgpu_ib_ring_tests(adev); 2420 if (r) 2421 DRM_ERROR("ib ring test failed (%d).\n", r); 2422 2423 if (amdgpu_sriov_vf(adev)) 2424 amdgpu_virt_init_data_exchange(adev); 2425 2426 amdgpu_fbdev_init(adev); 2427 2428 r = amdgpu_pm_sysfs_init(adev); 2429 if (r) 2430 DRM_ERROR("registering pm debugfs failed (%d).\n", r); 2431 2432 r = amdgpu_gem_debugfs_init(adev); 2433 if (r) 2434 DRM_ERROR("registering gem debugfs failed (%d).\n", r); 2435 2436 r = amdgpu_debugfs_regs_init(adev); 2437 if (r) 2438 DRM_ERROR("registering register debugfs failed (%d).\n", r); 2439 2440 r = amdgpu_debugfs_test_ib_ring_init(adev); 2441 if (r) 2442 DRM_ERROR("registering register test ib ring debugfs failed (%d).\n", r); 2443 2444 r = amdgpu_debugfs_firmware_init(adev); 2445 if (r) 2446 DRM_ERROR("registering firmware debugfs failed (%d).\n", r); 2447 2448 r = amdgpu_debugfs_vbios_dump_init(adev); 2449 if (r) 2450 DRM_ERROR("Creating vbios dump debugfs failed (%d).\n", r); 2451 2452 if ((amdgpu_testing & 1)) { 2453 if (adev->accel_working) 2454 amdgpu_test_moves(adev); 2455 else 2456 DRM_INFO("amdgpu: acceleration disabled, skipping move tests\n"); 2457 } 2458 if (amdgpu_benchmarking) { 2459 if (adev->accel_working) 2460 amdgpu_benchmark(adev, amdgpu_benchmarking); 2461 else 2462 DRM_INFO("amdgpu: acceleration disabled, skipping benchmarks\n"); 2463 } 2464 2465 /* enable clockgating, etc. after ib tests, etc. since some blocks require 2466 * explicit gating rather than handling it automatically. 2467 */ 2468 r = amdgpu_late_init(adev); 2469 if (r) { 2470 dev_err(adev->dev, "amdgpu_late_init failed\n"); 2471 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_LATE_INIT_FAIL, 0, r); 2472 goto failed; 2473 } 2474 2475 return 0; 2476 2477 failed: 2478 amdgpu_vf_error_trans_all(adev); 2479 if (runtime) 2480 vga_switcheroo_fini_domain_pm_ops(adev->dev); 2481 2482 return r; 2483 } 2484 2485 /** 2486 * amdgpu_device_fini - tear down the driver 2487 * 2488 * @adev: amdgpu_device pointer 2489 * 2490 * Tear down the driver info (all asics). 2491 * Called at driver shutdown. 2492 */ 2493 void amdgpu_device_fini(struct amdgpu_device *adev) 2494 { 2495 int r; 2496 2497 DRM_INFO("amdgpu: finishing device.\n"); 2498 adev->shutdown = true; 2499 if (adev->mode_info.mode_config_initialized) 2500 drm_crtc_force_disable_all(adev->ddev); 2501 /* evict vram memory */ 2502 amdgpu_bo_evict_vram(adev); 2503 amdgpu_ib_pool_fini(adev); 2504 amdgpu_fence_driver_fini(adev); 2505 amdgpu_fbdev_fini(adev); 2506 r = amdgpu_fini(adev); 2507 if (adev->firmware.gpu_info_fw) { 2508 release_firmware(adev->firmware.gpu_info_fw); 2509 adev->firmware.gpu_info_fw = NULL; 2510 } 2511 adev->accel_working = false; 2512 cancel_delayed_work_sync(&adev->late_init_work); 2513 /* free i2c buses */ 2514 if (!amdgpu_device_has_dc_support(adev)) 2515 amdgpu_i2c_fini(adev); 2516 amdgpu_atombios_fini(adev); 2517 kfree(adev->bios); 2518 adev->bios = NULL; 2519 if (!pci_is_thunderbolt_attached(adev->pdev)) 2520 vga_switcheroo_unregister_client(adev->pdev); 2521 if (adev->flags & AMD_IS_PX) 2522 vga_switcheroo_fini_domain_pm_ops(adev->dev); 2523 vga_client_register(adev->pdev, NULL, NULL, NULL); 2524 if (adev->rio_mem) 2525 pci_iounmap(adev->pdev, adev->rio_mem); 2526 adev->rio_mem = NULL; 2527 iounmap(adev->rmmio); 2528 adev->rmmio = NULL; 2529 amdgpu_doorbell_fini(adev); 2530 amdgpu_pm_sysfs_fini(adev); 2531 amdgpu_debugfs_regs_cleanup(adev); 2532 } 2533 2534 2535 /* 2536 * Suspend & resume. 2537 */ 2538 /** 2539 * amdgpu_device_suspend - initiate device suspend 2540 * 2541 * @pdev: drm dev pointer 2542 * @state: suspend state 2543 * 2544 * Puts the hw in the suspend state (all asics). 2545 * Returns 0 for success or an error on failure. 2546 * Called at driver suspend. 2547 */ 2548 int amdgpu_device_suspend(struct drm_device *dev, bool suspend, bool fbcon) 2549 { 2550 struct amdgpu_device *adev; 2551 struct drm_crtc *crtc; 2552 struct drm_connector *connector; 2553 int r; 2554 2555 if (dev == NULL || dev->dev_private == NULL) { 2556 return -ENODEV; 2557 } 2558 2559 adev = dev->dev_private; 2560 2561 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) 2562 return 0; 2563 2564 drm_kms_helper_poll_disable(dev); 2565 2566 if (!amdgpu_device_has_dc_support(adev)) { 2567 /* turn off display hw */ 2568 drm_modeset_lock_all(dev); 2569 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 2570 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); 2571 } 2572 drm_modeset_unlock_all(dev); 2573 } 2574 2575 amdgpu_amdkfd_suspend(adev); 2576 2577 /* unpin the front buffers and cursors */ 2578 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 2579 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2580 struct amdgpu_framebuffer *rfb = to_amdgpu_framebuffer(crtc->primary->fb); 2581 struct amdgpu_bo *robj; 2582 2583 if (amdgpu_crtc->cursor_bo) { 2584 struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo); 2585 r = amdgpu_bo_reserve(aobj, true); 2586 if (r == 0) { 2587 amdgpu_bo_unpin(aobj); 2588 amdgpu_bo_unreserve(aobj); 2589 } 2590 } 2591 2592 if (rfb == NULL || rfb->obj == NULL) { 2593 continue; 2594 } 2595 robj = gem_to_amdgpu_bo(rfb->obj); 2596 /* don't unpin kernel fb objects */ 2597 if (!amdgpu_fbdev_robj_is_fb(adev, robj)) { 2598 r = amdgpu_bo_reserve(robj, true); 2599 if (r == 0) { 2600 amdgpu_bo_unpin(robj); 2601 amdgpu_bo_unreserve(robj); 2602 } 2603 } 2604 } 2605 /* evict vram memory */ 2606 amdgpu_bo_evict_vram(adev); 2607 2608 amdgpu_fence_driver_suspend(adev); 2609 2610 r = amdgpu_suspend(adev); 2611 2612 /* evict remaining vram memory 2613 * This second call to evict vram is to evict the gart page table 2614 * using the CPU. 2615 */ 2616 amdgpu_bo_evict_vram(adev); 2617 2618 amdgpu_atombios_scratch_regs_save(adev); 2619 pci_save_state(dev->pdev); 2620 if (suspend) { 2621 /* Shut down the device */ 2622 pci_disable_device(dev->pdev); 2623 pci_set_power_state(dev->pdev, PCI_D3hot); 2624 } else { 2625 r = amdgpu_asic_reset(adev); 2626 if (r) 2627 DRM_ERROR("amdgpu asic reset failed\n"); 2628 } 2629 2630 if (fbcon) { 2631 console_lock(); 2632 amdgpu_fbdev_set_suspend(adev, 1); 2633 console_unlock(); 2634 } 2635 return 0; 2636 } 2637 2638 /** 2639 * amdgpu_device_resume - initiate device resume 2640 * 2641 * @pdev: drm dev pointer 2642 * 2643 * Bring the hw back to operating state (all asics). 2644 * Returns 0 for success or an error on failure. 2645 * Called at driver resume. 2646 */ 2647 int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon) 2648 { 2649 struct drm_connector *connector; 2650 struct amdgpu_device *adev = dev->dev_private; 2651 struct drm_crtc *crtc; 2652 int r = 0; 2653 2654 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) 2655 return 0; 2656 2657 if (fbcon) 2658 console_lock(); 2659 2660 if (resume) { 2661 pci_set_power_state(dev->pdev, PCI_D0); 2662 pci_restore_state(dev->pdev); 2663 r = pci_enable_device(dev->pdev); 2664 if (r) 2665 goto unlock; 2666 } 2667 amdgpu_atombios_scratch_regs_restore(adev); 2668 2669 /* post card */ 2670 if (amdgpu_need_post(adev)) { 2671 r = amdgpu_atom_asic_init(adev->mode_info.atom_context); 2672 if (r) 2673 DRM_ERROR("amdgpu asic init failed\n"); 2674 } 2675 2676 r = amdgpu_resume(adev); 2677 if (r) { 2678 DRM_ERROR("amdgpu_resume failed (%d).\n", r); 2679 goto unlock; 2680 } 2681 amdgpu_fence_driver_resume(adev); 2682 2683 if (resume) { 2684 r = amdgpu_ib_ring_tests(adev); 2685 if (r) 2686 DRM_ERROR("ib ring test failed (%d).\n", r); 2687 } 2688 2689 r = amdgpu_late_init(adev); 2690 if (r) 2691 goto unlock; 2692 2693 /* pin cursors */ 2694 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 2695 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2696 2697 if (amdgpu_crtc->cursor_bo) { 2698 struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo); 2699 r = amdgpu_bo_reserve(aobj, true); 2700 if (r == 0) { 2701 r = amdgpu_bo_pin(aobj, 2702 AMDGPU_GEM_DOMAIN_VRAM, 2703 &amdgpu_crtc->cursor_addr); 2704 if (r != 0) 2705 DRM_ERROR("Failed to pin cursor BO (%d)\n", r); 2706 amdgpu_bo_unreserve(aobj); 2707 } 2708 } 2709 } 2710 r = amdgpu_amdkfd_resume(adev); 2711 if (r) 2712 return r; 2713 2714 /* blat the mode back in */ 2715 if (fbcon) { 2716 if (!amdgpu_device_has_dc_support(adev)) { 2717 /* pre DCE11 */ 2718 drm_helper_resume_force_mode(dev); 2719 2720 /* turn on display hw */ 2721 drm_modeset_lock_all(dev); 2722 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 2723 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); 2724 } 2725 drm_modeset_unlock_all(dev); 2726 } else { 2727 /* 2728 * There is no equivalent atomic helper to turn on 2729 * display, so we defined our own function for this, 2730 * once suspend resume is supported by the atomic 2731 * framework this will be reworked 2732 */ 2733 amdgpu_dm_display_resume(adev); 2734 } 2735 } 2736 2737 drm_kms_helper_poll_enable(dev); 2738 2739 /* 2740 * Most of the connector probing functions try to acquire runtime pm 2741 * refs to ensure that the GPU is powered on when connector polling is 2742 * performed. Since we're calling this from a runtime PM callback, 2743 * trying to acquire rpm refs will cause us to deadlock. 2744 * 2745 * Since we're guaranteed to be holding the rpm lock, it's safe to 2746 * temporarily disable the rpm helpers so this doesn't deadlock us. 2747 */ 2748 #ifdef CONFIG_PM 2749 dev->dev->power.disable_depth++; 2750 #endif 2751 if (!amdgpu_device_has_dc_support(adev)) 2752 drm_helper_hpd_irq_event(dev); 2753 else 2754 drm_kms_helper_hotplug_event(dev); 2755 #ifdef CONFIG_PM 2756 dev->dev->power.disable_depth--; 2757 #endif 2758 2759 if (fbcon) 2760 amdgpu_fbdev_set_suspend(adev, 0); 2761 2762 unlock: 2763 if (fbcon) 2764 console_unlock(); 2765 2766 return r; 2767 } 2768 2769 static bool amdgpu_check_soft_reset(struct amdgpu_device *adev) 2770 { 2771 int i; 2772 bool asic_hang = false; 2773 2774 if (amdgpu_sriov_vf(adev)) 2775 return true; 2776 2777 for (i = 0; i < adev->num_ip_blocks; i++) { 2778 if (!adev->ip_blocks[i].status.valid) 2779 continue; 2780 if (adev->ip_blocks[i].version->funcs->check_soft_reset) 2781 adev->ip_blocks[i].status.hang = 2782 adev->ip_blocks[i].version->funcs->check_soft_reset(adev); 2783 if (adev->ip_blocks[i].status.hang) { 2784 DRM_INFO("IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name); 2785 asic_hang = true; 2786 } 2787 } 2788 return asic_hang; 2789 } 2790 2791 static int amdgpu_pre_soft_reset(struct amdgpu_device *adev) 2792 { 2793 int i, r = 0; 2794 2795 for (i = 0; i < adev->num_ip_blocks; i++) { 2796 if (!adev->ip_blocks[i].status.valid) 2797 continue; 2798 if (adev->ip_blocks[i].status.hang && 2799 adev->ip_blocks[i].version->funcs->pre_soft_reset) { 2800 r = adev->ip_blocks[i].version->funcs->pre_soft_reset(adev); 2801 if (r) 2802 return r; 2803 } 2804 } 2805 2806 return 0; 2807 } 2808 2809 static bool amdgpu_need_full_reset(struct amdgpu_device *adev) 2810 { 2811 int i; 2812 2813 for (i = 0; i < adev->num_ip_blocks; i++) { 2814 if (!adev->ip_blocks[i].status.valid) 2815 continue; 2816 if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) || 2817 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) || 2818 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) || 2819 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) || 2820 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) { 2821 if (adev->ip_blocks[i].status.hang) { 2822 DRM_INFO("Some block need full reset!\n"); 2823 return true; 2824 } 2825 } 2826 } 2827 return false; 2828 } 2829 2830 static int amdgpu_soft_reset(struct amdgpu_device *adev) 2831 { 2832 int i, r = 0; 2833 2834 for (i = 0; i < adev->num_ip_blocks; i++) { 2835 if (!adev->ip_blocks[i].status.valid) 2836 continue; 2837 if (adev->ip_blocks[i].status.hang && 2838 adev->ip_blocks[i].version->funcs->soft_reset) { 2839 r = adev->ip_blocks[i].version->funcs->soft_reset(adev); 2840 if (r) 2841 return r; 2842 } 2843 } 2844 2845 return 0; 2846 } 2847 2848 static int amdgpu_post_soft_reset(struct amdgpu_device *adev) 2849 { 2850 int i, r = 0; 2851 2852 for (i = 0; i < adev->num_ip_blocks; i++) { 2853 if (!adev->ip_blocks[i].status.valid) 2854 continue; 2855 if (adev->ip_blocks[i].status.hang && 2856 adev->ip_blocks[i].version->funcs->post_soft_reset) 2857 r = adev->ip_blocks[i].version->funcs->post_soft_reset(adev); 2858 if (r) 2859 return r; 2860 } 2861 2862 return 0; 2863 } 2864 2865 bool amdgpu_need_backup(struct amdgpu_device *adev) 2866 { 2867 if (adev->flags & AMD_IS_APU) 2868 return false; 2869 2870 return amdgpu_lockup_timeout > 0 ? true : false; 2871 } 2872 2873 static int amdgpu_recover_vram_from_shadow(struct amdgpu_device *adev, 2874 struct amdgpu_ring *ring, 2875 struct amdgpu_bo *bo, 2876 struct dma_fence **fence) 2877 { 2878 uint32_t domain; 2879 int r; 2880 2881 if (!bo->shadow) 2882 return 0; 2883 2884 r = amdgpu_bo_reserve(bo, true); 2885 if (r) 2886 return r; 2887 domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); 2888 /* if bo has been evicted, then no need to recover */ 2889 if (domain == AMDGPU_GEM_DOMAIN_VRAM) { 2890 r = amdgpu_bo_validate(bo->shadow); 2891 if (r) { 2892 DRM_ERROR("bo validate failed!\n"); 2893 goto err; 2894 } 2895 2896 r = amdgpu_bo_restore_from_shadow(adev, ring, bo, 2897 NULL, fence, true); 2898 if (r) { 2899 DRM_ERROR("recover page table failed!\n"); 2900 goto err; 2901 } 2902 } 2903 err: 2904 amdgpu_bo_unreserve(bo); 2905 return r; 2906 } 2907 2908 /* 2909 * amdgpu_reset - reset ASIC/GPU for bare-metal or passthrough 2910 * 2911 * @adev: amdgpu device pointer 2912 * @reset_flags: output param tells caller the reset result 2913 * 2914 * attempt to do soft-reset or full-reset and reinitialize Asic 2915 * return 0 means successed otherwise failed 2916 */ 2917 static int amdgpu_reset(struct amdgpu_device *adev, uint64_t* reset_flags) 2918 { 2919 bool need_full_reset, vram_lost = 0; 2920 int r; 2921 2922 need_full_reset = amdgpu_need_full_reset(adev); 2923 2924 if (!need_full_reset) { 2925 amdgpu_pre_soft_reset(adev); 2926 r = amdgpu_soft_reset(adev); 2927 amdgpu_post_soft_reset(adev); 2928 if (r || amdgpu_check_soft_reset(adev)) { 2929 DRM_INFO("soft reset failed, will fallback to full reset!\n"); 2930 need_full_reset = true; 2931 } 2932 2933 } 2934 2935 if (need_full_reset) { 2936 r = amdgpu_suspend(adev); 2937 2938 retry: 2939 amdgpu_atombios_scratch_regs_save(adev); 2940 r = amdgpu_asic_reset(adev); 2941 amdgpu_atombios_scratch_regs_restore(adev); 2942 /* post card */ 2943 amdgpu_atom_asic_init(adev->mode_info.atom_context); 2944 2945 if (!r) { 2946 dev_info(adev->dev, "GPU reset succeeded, trying to resume\n"); 2947 r = amdgpu_resume_phase1(adev); 2948 if (r) 2949 goto out; 2950 2951 vram_lost = amdgpu_check_vram_lost(adev); 2952 if (vram_lost) { 2953 DRM_ERROR("VRAM is lost!\n"); 2954 atomic_inc(&adev->vram_lost_counter); 2955 } 2956 2957 r = amdgpu_gtt_mgr_recover( 2958 &adev->mman.bdev.man[TTM_PL_TT]); 2959 if (r) 2960 goto out; 2961 2962 r = amdgpu_resume_phase2(adev); 2963 if (r) 2964 goto out; 2965 2966 if (vram_lost) 2967 amdgpu_fill_reset_magic(adev); 2968 } 2969 } 2970 2971 out: 2972 if (!r) { 2973 amdgpu_irq_gpu_reset_resume_helper(adev); 2974 r = amdgpu_ib_ring_tests(adev); 2975 if (r) { 2976 dev_err(adev->dev, "ib ring test failed (%d).\n", r); 2977 r = amdgpu_suspend(adev); 2978 need_full_reset = true; 2979 goto retry; 2980 } 2981 } 2982 2983 if (reset_flags) { 2984 if (vram_lost) 2985 (*reset_flags) |= AMDGPU_RESET_INFO_VRAM_LOST; 2986 2987 if (need_full_reset) 2988 (*reset_flags) |= AMDGPU_RESET_INFO_FULLRESET; 2989 } 2990 2991 return r; 2992 } 2993 2994 /* 2995 * amdgpu_reset_sriov - reset ASIC for SR-IOV vf 2996 * 2997 * @adev: amdgpu device pointer 2998 * @reset_flags: output param tells caller the reset result 2999 * 3000 * do VF FLR and reinitialize Asic 3001 * return 0 means successed otherwise failed 3002 */ 3003 static int amdgpu_reset_sriov(struct amdgpu_device *adev, uint64_t *reset_flags, bool from_hypervisor) 3004 { 3005 int r; 3006 3007 if (from_hypervisor) 3008 r = amdgpu_virt_request_full_gpu(adev, true); 3009 else 3010 r = amdgpu_virt_reset_gpu(adev); 3011 if (r) 3012 return r; 3013 3014 /* Resume IP prior to SMC */ 3015 r = amdgpu_sriov_reinit_early(adev); 3016 if (r) 3017 goto error; 3018 3019 /* we need recover gart prior to run SMC/CP/SDMA resume */ 3020 amdgpu_gtt_mgr_recover(&adev->mman.bdev.man[TTM_PL_TT]); 3021 3022 /* now we are okay to resume SMC/CP/SDMA */ 3023 r = amdgpu_sriov_reinit_late(adev); 3024 if (r) 3025 goto error; 3026 3027 amdgpu_irq_gpu_reset_resume_helper(adev); 3028 r = amdgpu_ib_ring_tests(adev); 3029 if (r) 3030 dev_err(adev->dev, "[GPU_RESET] ib ring test failed (%d).\n", r); 3031 3032 error: 3033 /* release full control of GPU after ib test */ 3034 amdgpu_virt_release_full_gpu(adev, true); 3035 3036 if (reset_flags) { 3037 if (adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) { 3038 (*reset_flags) |= AMDGPU_RESET_INFO_VRAM_LOST; 3039 atomic_inc(&adev->vram_lost_counter); 3040 } 3041 3042 /* VF FLR or hotlink reset is always full-reset */ 3043 (*reset_flags) |= AMDGPU_RESET_INFO_FULLRESET; 3044 } 3045 3046 return r; 3047 } 3048 3049 /** 3050 * amdgpu_gpu_recover - reset the asic and recover scheduler 3051 * 3052 * @adev: amdgpu device pointer 3053 * @job: which job trigger hang 3054 * 3055 * Attempt to reset the GPU if it has hung (all asics). 3056 * Returns 0 for success or an error on failure. 3057 */ 3058 int amdgpu_gpu_recover(struct amdgpu_device *adev, struct amdgpu_job *job) 3059 { 3060 struct drm_atomic_state *state = NULL; 3061 uint64_t reset_flags = 0; 3062 int i, r, resched; 3063 3064 if (!amdgpu_check_soft_reset(adev)) { 3065 DRM_INFO("No hardware hang detected. Did some blocks stall?\n"); 3066 return 0; 3067 } 3068 3069 dev_info(adev->dev, "GPU reset begin!\n"); 3070 3071 mutex_lock(&adev->lock_reset); 3072 atomic_inc(&adev->gpu_reset_counter); 3073 adev->in_gpu_reset = 1; 3074 3075 /* block TTM */ 3076 resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); 3077 /* store modesetting */ 3078 if (amdgpu_device_has_dc_support(adev)) 3079 state = drm_atomic_helper_suspend(adev->ddev); 3080 3081 /* block scheduler */ 3082 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { 3083 struct amdgpu_ring *ring = adev->rings[i]; 3084 3085 if (!ring || !ring->sched.thread) 3086 continue; 3087 3088 /* only focus on the ring hit timeout if &job not NULL */ 3089 if (job && job->ring->idx != i) 3090 continue; 3091 3092 kthread_park(ring->sched.thread); 3093 amd_sched_hw_job_reset(&ring->sched, &job->base); 3094 3095 /* after all hw jobs are reset, hw fence is meaningless, so force_completion */ 3096 amdgpu_fence_driver_force_completion(ring); 3097 } 3098 3099 if (amdgpu_sriov_vf(adev)) 3100 r = amdgpu_reset_sriov(adev, &reset_flags, job ? false : true); 3101 else 3102 r = amdgpu_reset(adev, &reset_flags); 3103 3104 if (!r) { 3105 if (((reset_flags & AMDGPU_RESET_INFO_FULLRESET) && !(adev->flags & AMD_IS_APU)) || 3106 (reset_flags & AMDGPU_RESET_INFO_VRAM_LOST)) { 3107 struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring; 3108 struct amdgpu_bo *bo, *tmp; 3109 struct dma_fence *fence = NULL, *next = NULL; 3110 3111 DRM_INFO("recover vram bo from shadow\n"); 3112 mutex_lock(&adev->shadow_list_lock); 3113 list_for_each_entry_safe(bo, tmp, &adev->shadow_list, shadow_list) { 3114 next = NULL; 3115 amdgpu_recover_vram_from_shadow(adev, ring, bo, &next); 3116 if (fence) { 3117 r = dma_fence_wait(fence, false); 3118 if (r) { 3119 WARN(r, "recovery from shadow isn't completed\n"); 3120 break; 3121 } 3122 } 3123 3124 dma_fence_put(fence); 3125 fence = next; 3126 } 3127 mutex_unlock(&adev->shadow_list_lock); 3128 if (fence) { 3129 r = dma_fence_wait(fence, false); 3130 if (r) 3131 WARN(r, "recovery from shadow isn't completed\n"); 3132 } 3133 dma_fence_put(fence); 3134 } 3135 3136 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { 3137 struct amdgpu_ring *ring = adev->rings[i]; 3138 3139 if (!ring || !ring->sched.thread) 3140 continue; 3141 3142 /* only focus on the ring hit timeout if &job not NULL */ 3143 if (job && job->ring->idx != i) 3144 continue; 3145 3146 amd_sched_job_recovery(&ring->sched); 3147 kthread_unpark(ring->sched.thread); 3148 } 3149 } else { 3150 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { 3151 struct amdgpu_ring *ring = adev->rings[i]; 3152 3153 if (!ring || !ring->sched.thread) 3154 continue; 3155 3156 /* only focus on the ring hit timeout if &job not NULL */ 3157 if (job && job->ring->idx != i) 3158 continue; 3159 3160 kthread_unpark(adev->rings[i]->sched.thread); 3161 } 3162 } 3163 3164 if (amdgpu_device_has_dc_support(adev)) { 3165 if (drm_atomic_helper_resume(adev->ddev, state)) 3166 dev_info(adev->dev, "drm resume failed:%d\n", r); 3167 amdgpu_dm_display_resume(adev); 3168 } else { 3169 drm_helper_resume_force_mode(adev->ddev); 3170 } 3171 3172 ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); 3173 3174 if (r) { 3175 /* bad news, how to tell it to userspace ? */ 3176 dev_info(adev->dev, "GPU reset(%d) failed\n", atomic_read(&adev->gpu_reset_counter)); 3177 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0, r); 3178 } else { 3179 dev_info(adev->dev, "GPU reset(%d) successed!\n",atomic_read(&adev->gpu_reset_counter)); 3180 } 3181 3182 amdgpu_vf_error_trans_all(adev); 3183 adev->in_gpu_reset = 0; 3184 mutex_unlock(&adev->lock_reset); 3185 return r; 3186 } 3187 3188 void amdgpu_get_pcie_info(struct amdgpu_device *adev) 3189 { 3190 u32 mask; 3191 int ret; 3192 3193 if (amdgpu_pcie_gen_cap) 3194 adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap; 3195 3196 if (amdgpu_pcie_lane_cap) 3197 adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap; 3198 3199 /* covers APUs as well */ 3200 if (pci_is_root_bus(adev->pdev->bus)) { 3201 if (adev->pm.pcie_gen_mask == 0) 3202 adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK; 3203 if (adev->pm.pcie_mlw_mask == 0) 3204 adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK; 3205 return; 3206 } 3207 3208 if (adev->pm.pcie_gen_mask == 0) { 3209 ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); 3210 if (!ret) { 3211 adev->pm.pcie_gen_mask = (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | 3212 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | 3213 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3); 3214 3215 if (mask & DRM_PCIE_SPEED_25) 3216 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1; 3217 if (mask & DRM_PCIE_SPEED_50) 3218 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2; 3219 if (mask & DRM_PCIE_SPEED_80) 3220 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3; 3221 } else { 3222 adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK; 3223 } 3224 } 3225 if (adev->pm.pcie_mlw_mask == 0) { 3226 ret = drm_pcie_get_max_link_width(adev->ddev, &mask); 3227 if (!ret) { 3228 switch (mask) { 3229 case 32: 3230 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 | 3231 CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | 3232 CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | 3233 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | 3234 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | 3235 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3236 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3237 break; 3238 case 16: 3239 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | 3240 CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | 3241 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | 3242 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | 3243 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3244 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3245 break; 3246 case 12: 3247 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | 3248 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | 3249 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | 3250 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3251 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3252 break; 3253 case 8: 3254 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | 3255 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | 3256 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3257 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3258 break; 3259 case 4: 3260 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | 3261 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3262 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3263 break; 3264 case 2: 3265 adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | 3266 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); 3267 break; 3268 case 1: 3269 adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1; 3270 break; 3271 default: 3272 break; 3273 } 3274 } else { 3275 adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK; 3276 } 3277 } 3278 } 3279 3280 /* 3281 * Debugfs 3282 */ 3283 int amdgpu_debugfs_add_files(struct amdgpu_device *adev, 3284 const struct drm_info_list *files, 3285 unsigned nfiles) 3286 { 3287 unsigned i; 3288 3289 for (i = 0; i < adev->debugfs_count; i++) { 3290 if (adev->debugfs[i].files == files) { 3291 /* Already registered */ 3292 return 0; 3293 } 3294 } 3295 3296 i = adev->debugfs_count + 1; 3297 if (i > AMDGPU_DEBUGFS_MAX_COMPONENTS) { 3298 DRM_ERROR("Reached maximum number of debugfs components.\n"); 3299 DRM_ERROR("Report so we increase " 3300 "AMDGPU_DEBUGFS_MAX_COMPONENTS.\n"); 3301 return -EINVAL; 3302 } 3303 adev->debugfs[adev->debugfs_count].files = files; 3304 adev->debugfs[adev->debugfs_count].num_files = nfiles; 3305 adev->debugfs_count = i; 3306 #if defined(CONFIG_DEBUG_FS) 3307 drm_debugfs_create_files(files, nfiles, 3308 adev->ddev->primary->debugfs_root, 3309 adev->ddev->primary); 3310 #endif 3311 return 0; 3312 } 3313 3314 #if defined(CONFIG_DEBUG_FS) 3315 3316 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, 3317 size_t size, loff_t *pos) 3318 { 3319 struct amdgpu_device *adev = file_inode(f)->i_private; 3320 ssize_t result = 0; 3321 int r; 3322 bool pm_pg_lock, use_bank; 3323 unsigned instance_bank, sh_bank, se_bank; 3324 3325 if (size & 0x3 || *pos & 0x3) 3326 return -EINVAL; 3327 3328 /* are we reading registers for which a PG lock is necessary? */ 3329 pm_pg_lock = (*pos >> 23) & 1; 3330 3331 if (*pos & (1ULL << 62)) { 3332 se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24; 3333 sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34; 3334 instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44; 3335 3336 if (se_bank == 0x3FF) 3337 se_bank = 0xFFFFFFFF; 3338 if (sh_bank == 0x3FF) 3339 sh_bank = 0xFFFFFFFF; 3340 if (instance_bank == 0x3FF) 3341 instance_bank = 0xFFFFFFFF; 3342 use_bank = 1; 3343 } else { 3344 use_bank = 0; 3345 } 3346 3347 *pos &= (1UL << 22) - 1; 3348 3349 if (use_bank) { 3350 if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) || 3351 (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) 3352 return -EINVAL; 3353 mutex_lock(&adev->grbm_idx_mutex); 3354 amdgpu_gfx_select_se_sh(adev, se_bank, 3355 sh_bank, instance_bank); 3356 } 3357 3358 if (pm_pg_lock) 3359 mutex_lock(&adev->pm.mutex); 3360 3361 while (size) { 3362 uint32_t value; 3363 3364 if (*pos > adev->rmmio_size) 3365 goto end; 3366 3367 value = RREG32(*pos >> 2); 3368 r = put_user(value, (uint32_t *)buf); 3369 if (r) { 3370 result = r; 3371 goto end; 3372 } 3373 3374 result += 4; 3375 buf += 4; 3376 *pos += 4; 3377 size -= 4; 3378 } 3379 3380 end: 3381 if (use_bank) { 3382 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 3383 mutex_unlock(&adev->grbm_idx_mutex); 3384 } 3385 3386 if (pm_pg_lock) 3387 mutex_unlock(&adev->pm.mutex); 3388 3389 return result; 3390 } 3391 3392 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf, 3393 size_t size, loff_t *pos) 3394 { 3395 struct amdgpu_device *adev = file_inode(f)->i_private; 3396 ssize_t result = 0; 3397 int r; 3398 bool pm_pg_lock, use_bank; 3399 unsigned instance_bank, sh_bank, se_bank; 3400 3401 if (size & 0x3 || *pos & 0x3) 3402 return -EINVAL; 3403 3404 /* are we reading registers for which a PG lock is necessary? */ 3405 pm_pg_lock = (*pos >> 23) & 1; 3406 3407 if (*pos & (1ULL << 62)) { 3408 se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24; 3409 sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34; 3410 instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44; 3411 3412 if (se_bank == 0x3FF) 3413 se_bank = 0xFFFFFFFF; 3414 if (sh_bank == 0x3FF) 3415 sh_bank = 0xFFFFFFFF; 3416 if (instance_bank == 0x3FF) 3417 instance_bank = 0xFFFFFFFF; 3418 use_bank = 1; 3419 } else { 3420 use_bank = 0; 3421 } 3422 3423 *pos &= (1UL << 22) - 1; 3424 3425 if (use_bank) { 3426 if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) || 3427 (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) 3428 return -EINVAL; 3429 mutex_lock(&adev->grbm_idx_mutex); 3430 amdgpu_gfx_select_se_sh(adev, se_bank, 3431 sh_bank, instance_bank); 3432 } 3433 3434 if (pm_pg_lock) 3435 mutex_lock(&adev->pm.mutex); 3436 3437 while (size) { 3438 uint32_t value; 3439 3440 if (*pos > adev->rmmio_size) 3441 return result; 3442 3443 r = get_user(value, (uint32_t *)buf); 3444 if (r) 3445 return r; 3446 3447 WREG32(*pos >> 2, value); 3448 3449 result += 4; 3450 buf += 4; 3451 *pos += 4; 3452 size -= 4; 3453 } 3454 3455 if (use_bank) { 3456 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 3457 mutex_unlock(&adev->grbm_idx_mutex); 3458 } 3459 3460 if (pm_pg_lock) 3461 mutex_unlock(&adev->pm.mutex); 3462 3463 return result; 3464 } 3465 3466 static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf, 3467 size_t size, loff_t *pos) 3468 { 3469 struct amdgpu_device *adev = file_inode(f)->i_private; 3470 ssize_t result = 0; 3471 int r; 3472 3473 if (size & 0x3 || *pos & 0x3) 3474 return -EINVAL; 3475 3476 while (size) { 3477 uint32_t value; 3478 3479 value = RREG32_PCIE(*pos >> 2); 3480 r = put_user(value, (uint32_t *)buf); 3481 if (r) 3482 return r; 3483 3484 result += 4; 3485 buf += 4; 3486 *pos += 4; 3487 size -= 4; 3488 } 3489 3490 return result; 3491 } 3492 3493 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf, 3494 size_t size, loff_t *pos) 3495 { 3496 struct amdgpu_device *adev = file_inode(f)->i_private; 3497 ssize_t result = 0; 3498 int r; 3499 3500 if (size & 0x3 || *pos & 0x3) 3501 return -EINVAL; 3502 3503 while (size) { 3504 uint32_t value; 3505 3506 r = get_user(value, (uint32_t *)buf); 3507 if (r) 3508 return r; 3509 3510 WREG32_PCIE(*pos >> 2, value); 3511 3512 result += 4; 3513 buf += 4; 3514 *pos += 4; 3515 size -= 4; 3516 } 3517 3518 return result; 3519 } 3520 3521 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf, 3522 size_t size, loff_t *pos) 3523 { 3524 struct amdgpu_device *adev = file_inode(f)->i_private; 3525 ssize_t result = 0; 3526 int r; 3527 3528 if (size & 0x3 || *pos & 0x3) 3529 return -EINVAL; 3530 3531 while (size) { 3532 uint32_t value; 3533 3534 value = RREG32_DIDT(*pos >> 2); 3535 r = put_user(value, (uint32_t *)buf); 3536 if (r) 3537 return r; 3538 3539 result += 4; 3540 buf += 4; 3541 *pos += 4; 3542 size -= 4; 3543 } 3544 3545 return result; 3546 } 3547 3548 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf, 3549 size_t size, loff_t *pos) 3550 { 3551 struct amdgpu_device *adev = file_inode(f)->i_private; 3552 ssize_t result = 0; 3553 int r; 3554 3555 if (size & 0x3 || *pos & 0x3) 3556 return -EINVAL; 3557 3558 while (size) { 3559 uint32_t value; 3560 3561 r = get_user(value, (uint32_t *)buf); 3562 if (r) 3563 return r; 3564 3565 WREG32_DIDT(*pos >> 2, value); 3566 3567 result += 4; 3568 buf += 4; 3569 *pos += 4; 3570 size -= 4; 3571 } 3572 3573 return result; 3574 } 3575 3576 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf, 3577 size_t size, loff_t *pos) 3578 { 3579 struct amdgpu_device *adev = file_inode(f)->i_private; 3580 ssize_t result = 0; 3581 int r; 3582 3583 if (size & 0x3 || *pos & 0x3) 3584 return -EINVAL; 3585 3586 while (size) { 3587 uint32_t value; 3588 3589 value = RREG32_SMC(*pos); 3590 r = put_user(value, (uint32_t *)buf); 3591 if (r) 3592 return r; 3593 3594 result += 4; 3595 buf += 4; 3596 *pos += 4; 3597 size -= 4; 3598 } 3599 3600 return result; 3601 } 3602 3603 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf, 3604 size_t size, loff_t *pos) 3605 { 3606 struct amdgpu_device *adev = file_inode(f)->i_private; 3607 ssize_t result = 0; 3608 int r; 3609 3610 if (size & 0x3 || *pos & 0x3) 3611 return -EINVAL; 3612 3613 while (size) { 3614 uint32_t value; 3615 3616 r = get_user(value, (uint32_t *)buf); 3617 if (r) 3618 return r; 3619 3620 WREG32_SMC(*pos, value); 3621 3622 result += 4; 3623 buf += 4; 3624 *pos += 4; 3625 size -= 4; 3626 } 3627 3628 return result; 3629 } 3630 3631 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf, 3632 size_t size, loff_t *pos) 3633 { 3634 struct amdgpu_device *adev = file_inode(f)->i_private; 3635 ssize_t result = 0; 3636 int r; 3637 uint32_t *config, no_regs = 0; 3638 3639 if (size & 0x3 || *pos & 0x3) 3640 return -EINVAL; 3641 3642 config = kmalloc_array(256, sizeof(*config), GFP_KERNEL); 3643 if (!config) 3644 return -ENOMEM; 3645 3646 /* version, increment each time something is added */ 3647 config[no_regs++] = 3; 3648 config[no_regs++] = adev->gfx.config.max_shader_engines; 3649 config[no_regs++] = adev->gfx.config.max_tile_pipes; 3650 config[no_regs++] = adev->gfx.config.max_cu_per_sh; 3651 config[no_regs++] = adev->gfx.config.max_sh_per_se; 3652 config[no_regs++] = adev->gfx.config.max_backends_per_se; 3653 config[no_regs++] = adev->gfx.config.max_texture_channel_caches; 3654 config[no_regs++] = adev->gfx.config.max_gprs; 3655 config[no_regs++] = adev->gfx.config.max_gs_threads; 3656 config[no_regs++] = adev->gfx.config.max_hw_contexts; 3657 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend; 3658 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend; 3659 config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size; 3660 config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size; 3661 config[no_regs++] = adev->gfx.config.num_tile_pipes; 3662 config[no_regs++] = adev->gfx.config.backend_enable_mask; 3663 config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes; 3664 config[no_regs++] = adev->gfx.config.mem_row_size_in_kb; 3665 config[no_regs++] = adev->gfx.config.shader_engine_tile_size; 3666 config[no_regs++] = adev->gfx.config.num_gpus; 3667 config[no_regs++] = adev->gfx.config.multi_gpu_tile_size; 3668 config[no_regs++] = adev->gfx.config.mc_arb_ramcfg; 3669 config[no_regs++] = adev->gfx.config.gb_addr_config; 3670 config[no_regs++] = adev->gfx.config.num_rbs; 3671 3672 /* rev==1 */ 3673 config[no_regs++] = adev->rev_id; 3674 config[no_regs++] = adev->pg_flags; 3675 config[no_regs++] = adev->cg_flags; 3676 3677 /* rev==2 */ 3678 config[no_regs++] = adev->family; 3679 config[no_regs++] = adev->external_rev_id; 3680 3681 /* rev==3 */ 3682 config[no_regs++] = adev->pdev->device; 3683 config[no_regs++] = adev->pdev->revision; 3684 config[no_regs++] = adev->pdev->subsystem_device; 3685 config[no_regs++] = adev->pdev->subsystem_vendor; 3686 3687 while (size && (*pos < no_regs * 4)) { 3688 uint32_t value; 3689 3690 value = config[*pos >> 2]; 3691 r = put_user(value, (uint32_t *)buf); 3692 if (r) { 3693 kfree(config); 3694 return r; 3695 } 3696 3697 result += 4; 3698 buf += 4; 3699 *pos += 4; 3700 size -= 4; 3701 } 3702 3703 kfree(config); 3704 return result; 3705 } 3706 3707 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf, 3708 size_t size, loff_t *pos) 3709 { 3710 struct amdgpu_device *adev = file_inode(f)->i_private; 3711 int idx, x, outsize, r, valuesize; 3712 uint32_t values[16]; 3713 3714 if (size & 3 || *pos & 0x3) 3715 return -EINVAL; 3716 3717 if (amdgpu_dpm == 0) 3718 return -EINVAL; 3719 3720 /* convert offset to sensor number */ 3721 idx = *pos >> 2; 3722 3723 valuesize = sizeof(values); 3724 if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs->read_sensor) 3725 r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize); 3726 else 3727 return -EINVAL; 3728 3729 if (size > valuesize) 3730 return -EINVAL; 3731 3732 outsize = 0; 3733 x = 0; 3734 if (!r) { 3735 while (size) { 3736 r = put_user(values[x++], (int32_t *)buf); 3737 buf += 4; 3738 size -= 4; 3739 outsize += 4; 3740 } 3741 } 3742 3743 return !r ? outsize : r; 3744 } 3745 3746 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf, 3747 size_t size, loff_t *pos) 3748 { 3749 struct amdgpu_device *adev = f->f_inode->i_private; 3750 int r, x; 3751 ssize_t result=0; 3752 uint32_t offset, se, sh, cu, wave, simd, data[32]; 3753 3754 if (size & 3 || *pos & 3) 3755 return -EINVAL; 3756 3757 /* decode offset */ 3758 offset = (*pos & GENMASK_ULL(6, 0)); 3759 se = (*pos & GENMASK_ULL(14, 7)) >> 7; 3760 sh = (*pos & GENMASK_ULL(22, 15)) >> 15; 3761 cu = (*pos & GENMASK_ULL(30, 23)) >> 23; 3762 wave = (*pos & GENMASK_ULL(36, 31)) >> 31; 3763 simd = (*pos & GENMASK_ULL(44, 37)) >> 37; 3764 3765 /* switch to the specific se/sh/cu */ 3766 mutex_lock(&adev->grbm_idx_mutex); 3767 amdgpu_gfx_select_se_sh(adev, se, sh, cu); 3768 3769 x = 0; 3770 if (adev->gfx.funcs->read_wave_data) 3771 adev->gfx.funcs->read_wave_data(adev, simd, wave, data, &x); 3772 3773 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); 3774 mutex_unlock(&adev->grbm_idx_mutex); 3775 3776 if (!x) 3777 return -EINVAL; 3778 3779 while (size && (offset < x * 4)) { 3780 uint32_t value; 3781 3782 value = data[offset >> 2]; 3783 r = put_user(value, (uint32_t *)buf); 3784 if (r) 3785 return r; 3786 3787 result += 4; 3788 buf += 4; 3789 offset += 4; 3790 size -= 4; 3791 } 3792 3793 return result; 3794 } 3795 3796 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, 3797 size_t size, loff_t *pos) 3798 { 3799 struct amdgpu_device *adev = f->f_inode->i_private; 3800 int r; 3801 ssize_t result = 0; 3802 uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data; 3803 3804 if (size & 3 || *pos & 3) 3805 return -EINVAL; 3806 3807 /* decode offset */ 3808 offset = *pos & GENMASK_ULL(11, 0); 3809 se = (*pos & GENMASK_ULL(19, 12)) >> 12; 3810 sh = (*pos & GENMASK_ULL(27, 20)) >> 20; 3811 cu = (*pos & GENMASK_ULL(35, 28)) >> 28; 3812 wave = (*pos & GENMASK_ULL(43, 36)) >> 36; 3813 simd = (*pos & GENMASK_ULL(51, 44)) >> 44; 3814 thread = (*pos & GENMASK_ULL(59, 52)) >> 52; 3815 bank = (*pos & GENMASK_ULL(61, 60)) >> 60; 3816 3817 data = kmalloc_array(1024, sizeof(*data), GFP_KERNEL); 3818 if (!data) 3819 return -ENOMEM; 3820 3821 /* switch to the specific se/sh/cu */ 3822 mutex_lock(&adev->grbm_idx_mutex); 3823 amdgpu_gfx_select_se_sh(adev, se, sh, cu); 3824 3825 if (bank == 0) { 3826 if (adev->gfx.funcs->read_wave_vgprs) 3827 adev->gfx.funcs->read_wave_vgprs(adev, simd, wave, thread, offset, size>>2, data); 3828 } else { 3829 if (adev->gfx.funcs->read_wave_sgprs) 3830 adev->gfx.funcs->read_wave_sgprs(adev, simd, wave, offset, size>>2, data); 3831 } 3832 3833 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); 3834 mutex_unlock(&adev->grbm_idx_mutex); 3835 3836 while (size) { 3837 uint32_t value; 3838 3839 value = data[offset++]; 3840 r = put_user(value, (uint32_t *)buf); 3841 if (r) { 3842 result = r; 3843 goto err; 3844 } 3845 3846 result += 4; 3847 buf += 4; 3848 size -= 4; 3849 } 3850 3851 err: 3852 kfree(data); 3853 return result; 3854 } 3855 3856 static const struct file_operations amdgpu_debugfs_regs_fops = { 3857 .owner = THIS_MODULE, 3858 .read = amdgpu_debugfs_regs_read, 3859 .write = amdgpu_debugfs_regs_write, 3860 .llseek = default_llseek 3861 }; 3862 static const struct file_operations amdgpu_debugfs_regs_didt_fops = { 3863 .owner = THIS_MODULE, 3864 .read = amdgpu_debugfs_regs_didt_read, 3865 .write = amdgpu_debugfs_regs_didt_write, 3866 .llseek = default_llseek 3867 }; 3868 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = { 3869 .owner = THIS_MODULE, 3870 .read = amdgpu_debugfs_regs_pcie_read, 3871 .write = amdgpu_debugfs_regs_pcie_write, 3872 .llseek = default_llseek 3873 }; 3874 static const struct file_operations amdgpu_debugfs_regs_smc_fops = { 3875 .owner = THIS_MODULE, 3876 .read = amdgpu_debugfs_regs_smc_read, 3877 .write = amdgpu_debugfs_regs_smc_write, 3878 .llseek = default_llseek 3879 }; 3880 3881 static const struct file_operations amdgpu_debugfs_gca_config_fops = { 3882 .owner = THIS_MODULE, 3883 .read = amdgpu_debugfs_gca_config_read, 3884 .llseek = default_llseek 3885 }; 3886 3887 static const struct file_operations amdgpu_debugfs_sensors_fops = { 3888 .owner = THIS_MODULE, 3889 .read = amdgpu_debugfs_sensor_read, 3890 .llseek = default_llseek 3891 }; 3892 3893 static const struct file_operations amdgpu_debugfs_wave_fops = { 3894 .owner = THIS_MODULE, 3895 .read = amdgpu_debugfs_wave_read, 3896 .llseek = default_llseek 3897 }; 3898 static const struct file_operations amdgpu_debugfs_gpr_fops = { 3899 .owner = THIS_MODULE, 3900 .read = amdgpu_debugfs_gpr_read, 3901 .llseek = default_llseek 3902 }; 3903 3904 static const struct file_operations *debugfs_regs[] = { 3905 &amdgpu_debugfs_regs_fops, 3906 &amdgpu_debugfs_regs_didt_fops, 3907 &amdgpu_debugfs_regs_pcie_fops, 3908 &amdgpu_debugfs_regs_smc_fops, 3909 &amdgpu_debugfs_gca_config_fops, 3910 &amdgpu_debugfs_sensors_fops, 3911 &amdgpu_debugfs_wave_fops, 3912 &amdgpu_debugfs_gpr_fops, 3913 }; 3914 3915 static const char *debugfs_regs_names[] = { 3916 "amdgpu_regs", 3917 "amdgpu_regs_didt", 3918 "amdgpu_regs_pcie", 3919 "amdgpu_regs_smc", 3920 "amdgpu_gca_config", 3921 "amdgpu_sensors", 3922 "amdgpu_wave", 3923 "amdgpu_gpr", 3924 }; 3925 3926 static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) 3927 { 3928 struct drm_minor *minor = adev->ddev->primary; 3929 struct dentry *ent, *root = minor->debugfs_root; 3930 unsigned i, j; 3931 3932 for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) { 3933 ent = debugfs_create_file(debugfs_regs_names[i], 3934 S_IFREG | S_IRUGO, root, 3935 adev, debugfs_regs[i]); 3936 if (IS_ERR(ent)) { 3937 for (j = 0; j < i; j++) { 3938 debugfs_remove(adev->debugfs_regs[i]); 3939 adev->debugfs_regs[i] = NULL; 3940 } 3941 return PTR_ERR(ent); 3942 } 3943 3944 if (!i) 3945 i_size_write(ent->d_inode, adev->rmmio_size); 3946 adev->debugfs_regs[i] = ent; 3947 } 3948 3949 return 0; 3950 } 3951 3952 static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev) 3953 { 3954 unsigned i; 3955 3956 for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) { 3957 if (adev->debugfs_regs[i]) { 3958 debugfs_remove(adev->debugfs_regs[i]); 3959 adev->debugfs_regs[i] = NULL; 3960 } 3961 } 3962 } 3963 3964 static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data) 3965 { 3966 struct drm_info_node *node = (struct drm_info_node *) m->private; 3967 struct drm_device *dev = node->minor->dev; 3968 struct amdgpu_device *adev = dev->dev_private; 3969 int r = 0, i; 3970 3971 /* hold on the scheduler */ 3972 for (i = 0; i < AMDGPU_MAX_RINGS; i++) { 3973 struct amdgpu_ring *ring = adev->rings[i]; 3974 3975 if (!ring || !ring->sched.thread) 3976 continue; 3977 kthread_park(ring->sched.thread); 3978 } 3979 3980 seq_printf(m, "run ib test:\n"); 3981 r = amdgpu_ib_ring_tests(adev); 3982 if (r) 3983 seq_printf(m, "ib ring tests failed (%d).\n", r); 3984 else 3985 seq_printf(m, "ib ring tests passed.\n"); 3986 3987 /* go on the scheduler */ 3988 for (i = 0; i < AMDGPU_MAX_RINGS; i++) { 3989 struct amdgpu_ring *ring = adev->rings[i]; 3990 3991 if (!ring || !ring->sched.thread) 3992 continue; 3993 kthread_unpark(ring->sched.thread); 3994 } 3995 3996 return 0; 3997 } 3998 3999 static const struct drm_info_list amdgpu_debugfs_test_ib_ring_list[] = { 4000 {"amdgpu_test_ib", &amdgpu_debugfs_test_ib} 4001 }; 4002 4003 static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) 4004 { 4005 return amdgpu_debugfs_add_files(adev, 4006 amdgpu_debugfs_test_ib_ring_list, 1); 4007 } 4008 4009 int amdgpu_debugfs_init(struct drm_minor *minor) 4010 { 4011 return 0; 4012 } 4013 4014 static int amdgpu_debugfs_get_vbios_dump(struct seq_file *m, void *data) 4015 { 4016 struct drm_info_node *node = (struct drm_info_node *) m->private; 4017 struct drm_device *dev = node->minor->dev; 4018 struct amdgpu_device *adev = dev->dev_private; 4019 4020 seq_write(m, adev->bios, adev->bios_size); 4021 return 0; 4022 } 4023 4024 static const struct drm_info_list amdgpu_vbios_dump_list[] = { 4025 {"amdgpu_vbios", 4026 amdgpu_debugfs_get_vbios_dump, 4027 0, NULL}, 4028 }; 4029 4030 static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev) 4031 { 4032 return amdgpu_debugfs_add_files(adev, 4033 amdgpu_vbios_dump_list, 1); 4034 } 4035 #else 4036 static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) 4037 { 4038 return 0; 4039 } 4040 static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) 4041 { 4042 return 0; 4043 } 4044 static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev) 4045 { 4046 return 0; 4047 } 4048 static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev) { } 4049 #endif 4050