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