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 */ 25 26 #include <linux/kthread.h> 27 #include <linux/pci.h> 28 #include <linux/uaccess.h> 29 #include <linux/pm_runtime.h> 30 #include <linux/poll.h> 31 #include <drm/drm_debugfs.h> 32 33 #include "amdgpu.h" 34 #include "amdgpu_pm.h" 35 #include "amdgpu_dm_debugfs.h" 36 #include "amdgpu_ras.h" 37 38 /** 39 * amdgpu_debugfs_add_files - Add simple debugfs entries 40 * 41 * @adev: Device to attach debugfs entries to 42 * @files: Array of function callbacks that respond to reads 43 * @nfiles: Number of callbacks to register 44 * 45 */ 46 int amdgpu_debugfs_add_files(struct amdgpu_device *adev, 47 const struct drm_info_list *files, 48 unsigned nfiles) 49 { 50 unsigned i; 51 52 for (i = 0; i < adev->debugfs_count; i++) { 53 if (adev->debugfs[i].files == files) { 54 /* Already registered */ 55 return 0; 56 } 57 } 58 59 i = adev->debugfs_count + 1; 60 if (i > AMDGPU_DEBUGFS_MAX_COMPONENTS) { 61 DRM_ERROR("Reached maximum number of debugfs components.\n"); 62 DRM_ERROR("Report so we increase " 63 "AMDGPU_DEBUGFS_MAX_COMPONENTS.\n"); 64 return -EINVAL; 65 } 66 adev->debugfs[adev->debugfs_count].files = files; 67 adev->debugfs[adev->debugfs_count].num_files = nfiles; 68 adev->debugfs_count = i; 69 #if defined(CONFIG_DEBUG_FS) 70 drm_debugfs_create_files(files, nfiles, 71 adev->ddev->primary->debugfs_root, 72 adev->ddev->primary); 73 #endif 74 return 0; 75 } 76 77 int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev) 78 { 79 #if defined(CONFIG_DEBUG_FS) 80 unsigned long timeout = 600 * HZ; 81 int ret; 82 83 wake_up_interruptible(&adev->autodump.gpu_hang); 84 85 ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout); 86 if (ret == 0) { 87 pr_err("autodump: timeout, move on to gpu recovery\n"); 88 return -ETIMEDOUT; 89 } 90 #endif 91 return 0; 92 } 93 94 #if defined(CONFIG_DEBUG_FS) 95 96 static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file) 97 { 98 struct amdgpu_device *adev = inode->i_private; 99 int ret; 100 101 file->private_data = adev; 102 103 mutex_lock(&adev->lock_reset); 104 if (adev->autodump.dumping.done) { 105 reinit_completion(&adev->autodump.dumping); 106 ret = 0; 107 } else { 108 ret = -EBUSY; 109 } 110 mutex_unlock(&adev->lock_reset); 111 112 return ret; 113 } 114 115 static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file) 116 { 117 struct amdgpu_device *adev = file->private_data; 118 119 complete_all(&adev->autodump.dumping); 120 return 0; 121 } 122 123 static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table) 124 { 125 struct amdgpu_device *adev = file->private_data; 126 127 poll_wait(file, &adev->autodump.gpu_hang, poll_table); 128 129 if (adev->in_gpu_reset) 130 return POLLIN | POLLRDNORM | POLLWRNORM; 131 132 return 0; 133 } 134 135 static const struct file_operations autodump_debug_fops = { 136 .owner = THIS_MODULE, 137 .open = amdgpu_debugfs_autodump_open, 138 .poll = amdgpu_debugfs_autodump_poll, 139 .release = amdgpu_debugfs_autodump_release, 140 }; 141 142 static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev) 143 { 144 init_completion(&adev->autodump.dumping); 145 complete_all(&adev->autodump.dumping); 146 init_waitqueue_head(&adev->autodump.gpu_hang); 147 148 debugfs_create_file("amdgpu_autodump", 0600, 149 adev->ddev->primary->debugfs_root, 150 adev, &autodump_debug_fops); 151 } 152 153 /** 154 * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes 155 * 156 * @read: True if reading 157 * @f: open file handle 158 * @buf: User buffer to write/read to 159 * @size: Number of bytes to write/read 160 * @pos: Offset to seek to 161 * 162 * This debugfs entry has special meaning on the offset being sought. 163 * Various bits have different meanings: 164 * 165 * Bit 62: Indicates a GRBM bank switch is needed 166 * Bit 61: Indicates a SRBM bank switch is needed (implies bit 62 is 167 * zero) 168 * Bits 24..33: The SE or ME selector if needed 169 * Bits 34..43: The SH (or SA) or PIPE selector if needed 170 * Bits 44..53: The INSTANCE (or CU/WGP) or QUEUE selector if needed 171 * 172 * Bit 23: Indicates that the PM power gating lock should be held 173 * This is necessary to read registers that might be 174 * unreliable during a power gating transistion. 175 * 176 * The lower bits are the BYTE offset of the register to read. This 177 * allows reading multiple registers in a single call and having 178 * the returned size reflect that. 179 */ 180 static int amdgpu_debugfs_process_reg_op(bool read, struct file *f, 181 char __user *buf, size_t size, loff_t *pos) 182 { 183 struct amdgpu_device *adev = file_inode(f)->i_private; 184 ssize_t result = 0; 185 int r; 186 bool pm_pg_lock, use_bank, use_ring; 187 unsigned instance_bank, sh_bank, se_bank, me, pipe, queue, vmid; 188 189 pm_pg_lock = use_bank = use_ring = false; 190 instance_bank = sh_bank = se_bank = me = pipe = queue = vmid = 0; 191 192 if (size & 0x3 || *pos & 0x3 || 193 ((*pos & (1ULL << 62)) && (*pos & (1ULL << 61)))) 194 return -EINVAL; 195 196 /* are we reading registers for which a PG lock is necessary? */ 197 pm_pg_lock = (*pos >> 23) & 1; 198 199 if (*pos & (1ULL << 62)) { 200 se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24; 201 sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34; 202 instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44; 203 204 if (se_bank == 0x3FF) 205 se_bank = 0xFFFFFFFF; 206 if (sh_bank == 0x3FF) 207 sh_bank = 0xFFFFFFFF; 208 if (instance_bank == 0x3FF) 209 instance_bank = 0xFFFFFFFF; 210 use_bank = true; 211 } else if (*pos & (1ULL << 61)) { 212 213 me = (*pos & GENMASK_ULL(33, 24)) >> 24; 214 pipe = (*pos & GENMASK_ULL(43, 34)) >> 34; 215 queue = (*pos & GENMASK_ULL(53, 44)) >> 44; 216 vmid = (*pos & GENMASK_ULL(58, 54)) >> 54; 217 218 use_ring = true; 219 } else { 220 use_bank = use_ring = false; 221 } 222 223 *pos &= (1UL << 22) - 1; 224 225 r = pm_runtime_get_sync(adev->ddev->dev); 226 if (r < 0) { 227 pm_runtime_put_autosuspend(adev->ddev->dev); 228 return r; 229 } 230 231 r = amdgpu_virt_enable_access_debugfs(adev); 232 if (r < 0) { 233 pm_runtime_put_autosuspend(adev->ddev->dev); 234 return r; 235 } 236 237 if (use_bank) { 238 if ((sh_bank != 0xFFFFFFFF && sh_bank >= adev->gfx.config.max_sh_per_se) || 239 (se_bank != 0xFFFFFFFF && se_bank >= adev->gfx.config.max_shader_engines)) { 240 pm_runtime_mark_last_busy(adev->ddev->dev); 241 pm_runtime_put_autosuspend(adev->ddev->dev); 242 amdgpu_virt_disable_access_debugfs(adev); 243 return -EINVAL; 244 } 245 mutex_lock(&adev->grbm_idx_mutex); 246 amdgpu_gfx_select_se_sh(adev, se_bank, 247 sh_bank, instance_bank); 248 } else if (use_ring) { 249 mutex_lock(&adev->srbm_mutex); 250 amdgpu_gfx_select_me_pipe_q(adev, me, pipe, queue, vmid); 251 } 252 253 if (pm_pg_lock) 254 mutex_lock(&adev->pm.mutex); 255 256 while (size) { 257 uint32_t value; 258 259 if (read) { 260 value = RREG32(*pos >> 2); 261 r = put_user(value, (uint32_t *)buf); 262 } else { 263 r = get_user(value, (uint32_t *)buf); 264 if (!r) 265 amdgpu_mm_wreg_mmio_rlc(adev, *pos >> 2, value, 0); 266 } 267 if (r) { 268 result = r; 269 goto end; 270 } 271 272 result += 4; 273 buf += 4; 274 *pos += 4; 275 size -= 4; 276 } 277 278 end: 279 if (use_bank) { 280 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 281 mutex_unlock(&adev->grbm_idx_mutex); 282 } else if (use_ring) { 283 amdgpu_gfx_select_me_pipe_q(adev, 0, 0, 0, 0); 284 mutex_unlock(&adev->srbm_mutex); 285 } 286 287 if (pm_pg_lock) 288 mutex_unlock(&adev->pm.mutex); 289 290 pm_runtime_mark_last_busy(adev->ddev->dev); 291 pm_runtime_put_autosuspend(adev->ddev->dev); 292 293 amdgpu_virt_disable_access_debugfs(adev); 294 return result; 295 } 296 297 /** 298 * amdgpu_debugfs_regs_read - Callback for reading MMIO registers 299 */ 300 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf, 301 size_t size, loff_t *pos) 302 { 303 return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos); 304 } 305 306 /** 307 * amdgpu_debugfs_regs_write - Callback for writing MMIO registers 308 */ 309 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf, 310 size_t size, loff_t *pos) 311 { 312 return amdgpu_debugfs_process_reg_op(false, f, (char __user *)buf, size, pos); 313 } 314 315 316 /** 317 * amdgpu_debugfs_regs_pcie_read - Read from a PCIE register 318 * 319 * @f: open file handle 320 * @buf: User buffer to store read data in 321 * @size: Number of bytes to read 322 * @pos: Offset to seek to 323 * 324 * The lower bits are the BYTE offset of the register to read. This 325 * allows reading multiple registers in a single call and having 326 * the returned size reflect that. 327 */ 328 static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf, 329 size_t size, loff_t *pos) 330 { 331 struct amdgpu_device *adev = file_inode(f)->i_private; 332 ssize_t result = 0; 333 int r; 334 335 if (size & 0x3 || *pos & 0x3) 336 return -EINVAL; 337 338 r = pm_runtime_get_sync(adev->ddev->dev); 339 if (r < 0) { 340 pm_runtime_put_autosuspend(adev->ddev->dev); 341 return r; 342 } 343 344 r = amdgpu_virt_enable_access_debugfs(adev); 345 if (r < 0) { 346 pm_runtime_put_autosuspend(adev->ddev->dev); 347 return r; 348 } 349 350 while (size) { 351 uint32_t value; 352 353 value = RREG32_PCIE(*pos >> 2); 354 r = put_user(value, (uint32_t *)buf); 355 if (r) { 356 pm_runtime_mark_last_busy(adev->ddev->dev); 357 pm_runtime_put_autosuspend(adev->ddev->dev); 358 amdgpu_virt_disable_access_debugfs(adev); 359 return r; 360 } 361 362 result += 4; 363 buf += 4; 364 *pos += 4; 365 size -= 4; 366 } 367 368 pm_runtime_mark_last_busy(adev->ddev->dev); 369 pm_runtime_put_autosuspend(adev->ddev->dev); 370 371 amdgpu_virt_disable_access_debugfs(adev); 372 return result; 373 } 374 375 /** 376 * amdgpu_debugfs_regs_pcie_write - Write to a PCIE register 377 * 378 * @f: open file handle 379 * @buf: User buffer to write data from 380 * @size: Number of bytes to write 381 * @pos: Offset to seek to 382 * 383 * The lower bits are the BYTE offset of the register to write. This 384 * allows writing multiple registers in a single call and having 385 * the returned size reflect that. 386 */ 387 static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __user *buf, 388 size_t size, loff_t *pos) 389 { 390 struct amdgpu_device *adev = file_inode(f)->i_private; 391 ssize_t result = 0; 392 int r; 393 394 if (size & 0x3 || *pos & 0x3) 395 return -EINVAL; 396 397 r = pm_runtime_get_sync(adev->ddev->dev); 398 if (r < 0) { 399 pm_runtime_put_autosuspend(adev->ddev->dev); 400 return r; 401 } 402 403 r = amdgpu_virt_enable_access_debugfs(adev); 404 if (r < 0) { 405 pm_runtime_put_autosuspend(adev->ddev->dev); 406 return r; 407 } 408 409 while (size) { 410 uint32_t value; 411 412 r = get_user(value, (uint32_t *)buf); 413 if (r) { 414 pm_runtime_mark_last_busy(adev->ddev->dev); 415 pm_runtime_put_autosuspend(adev->ddev->dev); 416 amdgpu_virt_disable_access_debugfs(adev); 417 return r; 418 } 419 420 WREG32_PCIE(*pos >> 2, value); 421 422 result += 4; 423 buf += 4; 424 *pos += 4; 425 size -= 4; 426 } 427 428 pm_runtime_mark_last_busy(adev->ddev->dev); 429 pm_runtime_put_autosuspend(adev->ddev->dev); 430 431 amdgpu_virt_disable_access_debugfs(adev); 432 return result; 433 } 434 435 /** 436 * amdgpu_debugfs_regs_didt_read - Read from a DIDT register 437 * 438 * @f: open file handle 439 * @buf: User buffer to store read data in 440 * @size: Number of bytes to read 441 * @pos: Offset to seek to 442 * 443 * The lower bits are the BYTE offset of the register to read. This 444 * allows reading multiple registers in a single call and having 445 * the returned size reflect that. 446 */ 447 static ssize_t amdgpu_debugfs_regs_didt_read(struct file *f, char __user *buf, 448 size_t size, loff_t *pos) 449 { 450 struct amdgpu_device *adev = file_inode(f)->i_private; 451 ssize_t result = 0; 452 int r; 453 454 if (size & 0x3 || *pos & 0x3) 455 return -EINVAL; 456 457 r = pm_runtime_get_sync(adev->ddev->dev); 458 if (r < 0) { 459 pm_runtime_put_autosuspend(adev->ddev->dev); 460 return r; 461 } 462 463 r = amdgpu_virt_enable_access_debugfs(adev); 464 if (r < 0) { 465 pm_runtime_put_autosuspend(adev->ddev->dev); 466 return r; 467 } 468 469 while (size) { 470 uint32_t value; 471 472 value = RREG32_DIDT(*pos >> 2); 473 r = put_user(value, (uint32_t *)buf); 474 if (r) { 475 pm_runtime_mark_last_busy(adev->ddev->dev); 476 pm_runtime_put_autosuspend(adev->ddev->dev); 477 amdgpu_virt_disable_access_debugfs(adev); 478 return r; 479 } 480 481 result += 4; 482 buf += 4; 483 *pos += 4; 484 size -= 4; 485 } 486 487 pm_runtime_mark_last_busy(adev->ddev->dev); 488 pm_runtime_put_autosuspend(adev->ddev->dev); 489 490 amdgpu_virt_disable_access_debugfs(adev); 491 return result; 492 } 493 494 /** 495 * amdgpu_debugfs_regs_didt_write - Write to a DIDT register 496 * 497 * @f: open file handle 498 * @buf: User buffer to write data from 499 * @size: Number of bytes to write 500 * @pos: Offset to seek to 501 * 502 * The lower bits are the BYTE offset of the register to write. This 503 * allows writing multiple registers in a single call and having 504 * the returned size reflect that. 505 */ 506 static ssize_t amdgpu_debugfs_regs_didt_write(struct file *f, const char __user *buf, 507 size_t size, loff_t *pos) 508 { 509 struct amdgpu_device *adev = file_inode(f)->i_private; 510 ssize_t result = 0; 511 int r; 512 513 if (size & 0x3 || *pos & 0x3) 514 return -EINVAL; 515 516 r = pm_runtime_get_sync(adev->ddev->dev); 517 if (r < 0) { 518 pm_runtime_put_autosuspend(adev->ddev->dev); 519 return r; 520 } 521 522 r = amdgpu_virt_enable_access_debugfs(adev); 523 if (r < 0) { 524 pm_runtime_put_autosuspend(adev->ddev->dev); 525 return r; 526 } 527 528 while (size) { 529 uint32_t value; 530 531 r = get_user(value, (uint32_t *)buf); 532 if (r) { 533 pm_runtime_mark_last_busy(adev->ddev->dev); 534 pm_runtime_put_autosuspend(adev->ddev->dev); 535 amdgpu_virt_disable_access_debugfs(adev); 536 return r; 537 } 538 539 WREG32_DIDT(*pos >> 2, value); 540 541 result += 4; 542 buf += 4; 543 *pos += 4; 544 size -= 4; 545 } 546 547 pm_runtime_mark_last_busy(adev->ddev->dev); 548 pm_runtime_put_autosuspend(adev->ddev->dev); 549 550 amdgpu_virt_disable_access_debugfs(adev); 551 return result; 552 } 553 554 /** 555 * amdgpu_debugfs_regs_smc_read - Read from a SMC register 556 * 557 * @f: open file handle 558 * @buf: User buffer to store read data in 559 * @size: Number of bytes to read 560 * @pos: Offset to seek to 561 * 562 * The lower bits are the BYTE offset of the register to read. This 563 * allows reading multiple registers in a single call and having 564 * the returned size reflect that. 565 */ 566 static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf, 567 size_t size, loff_t *pos) 568 { 569 struct amdgpu_device *adev = file_inode(f)->i_private; 570 ssize_t result = 0; 571 int r; 572 573 if (size & 0x3 || *pos & 0x3) 574 return -EINVAL; 575 576 r = pm_runtime_get_sync(adev->ddev->dev); 577 if (r < 0) { 578 pm_runtime_put_autosuspend(adev->ddev->dev); 579 return r; 580 } 581 582 r = amdgpu_virt_enable_access_debugfs(adev); 583 if (r < 0) { 584 pm_runtime_put_autosuspend(adev->ddev->dev); 585 return r; 586 } 587 588 while (size) { 589 uint32_t value; 590 591 value = RREG32_SMC(*pos); 592 r = put_user(value, (uint32_t *)buf); 593 if (r) { 594 pm_runtime_mark_last_busy(adev->ddev->dev); 595 pm_runtime_put_autosuspend(adev->ddev->dev); 596 amdgpu_virt_disable_access_debugfs(adev); 597 return r; 598 } 599 600 result += 4; 601 buf += 4; 602 *pos += 4; 603 size -= 4; 604 } 605 606 pm_runtime_mark_last_busy(adev->ddev->dev); 607 pm_runtime_put_autosuspend(adev->ddev->dev); 608 609 amdgpu_virt_disable_access_debugfs(adev); 610 return result; 611 } 612 613 /** 614 * amdgpu_debugfs_regs_smc_write - Write to a SMC register 615 * 616 * @f: open file handle 617 * @buf: User buffer to write data from 618 * @size: Number of bytes to write 619 * @pos: Offset to seek to 620 * 621 * The lower bits are the BYTE offset of the register to write. This 622 * allows writing multiple registers in a single call and having 623 * the returned size reflect that. 624 */ 625 static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *buf, 626 size_t size, loff_t *pos) 627 { 628 struct amdgpu_device *adev = file_inode(f)->i_private; 629 ssize_t result = 0; 630 int r; 631 632 if (size & 0x3 || *pos & 0x3) 633 return -EINVAL; 634 635 r = pm_runtime_get_sync(adev->ddev->dev); 636 if (r < 0) { 637 pm_runtime_put_autosuspend(adev->ddev->dev); 638 return r; 639 } 640 641 r = amdgpu_virt_enable_access_debugfs(adev); 642 if (r < 0) { 643 pm_runtime_put_autosuspend(adev->ddev->dev); 644 return r; 645 } 646 647 while (size) { 648 uint32_t value; 649 650 r = get_user(value, (uint32_t *)buf); 651 if (r) { 652 pm_runtime_mark_last_busy(adev->ddev->dev); 653 pm_runtime_put_autosuspend(adev->ddev->dev); 654 amdgpu_virt_disable_access_debugfs(adev); 655 return r; 656 } 657 658 WREG32_SMC(*pos, value); 659 660 result += 4; 661 buf += 4; 662 *pos += 4; 663 size -= 4; 664 } 665 666 pm_runtime_mark_last_busy(adev->ddev->dev); 667 pm_runtime_put_autosuspend(adev->ddev->dev); 668 669 amdgpu_virt_disable_access_debugfs(adev); 670 return result; 671 } 672 673 /** 674 * amdgpu_debugfs_gca_config_read - Read from gfx config data 675 * 676 * @f: open file handle 677 * @buf: User buffer to store read data in 678 * @size: Number of bytes to read 679 * @pos: Offset to seek to 680 * 681 * This file is used to access configuration data in a somewhat 682 * stable fashion. The format is a series of DWORDs with the first 683 * indicating which revision it is. New content is appended to the 684 * end so that older software can still read the data. 685 */ 686 687 static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf, 688 size_t size, loff_t *pos) 689 { 690 struct amdgpu_device *adev = file_inode(f)->i_private; 691 ssize_t result = 0; 692 int r; 693 uint32_t *config, no_regs = 0; 694 695 if (size & 0x3 || *pos & 0x3) 696 return -EINVAL; 697 698 config = kmalloc_array(256, sizeof(*config), GFP_KERNEL); 699 if (!config) 700 return -ENOMEM; 701 702 /* version, increment each time something is added */ 703 config[no_regs++] = 3; 704 config[no_regs++] = adev->gfx.config.max_shader_engines; 705 config[no_regs++] = adev->gfx.config.max_tile_pipes; 706 config[no_regs++] = adev->gfx.config.max_cu_per_sh; 707 config[no_regs++] = adev->gfx.config.max_sh_per_se; 708 config[no_regs++] = adev->gfx.config.max_backends_per_se; 709 config[no_regs++] = adev->gfx.config.max_texture_channel_caches; 710 config[no_regs++] = adev->gfx.config.max_gprs; 711 config[no_regs++] = adev->gfx.config.max_gs_threads; 712 config[no_regs++] = adev->gfx.config.max_hw_contexts; 713 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend; 714 config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend; 715 config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size; 716 config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size; 717 config[no_regs++] = adev->gfx.config.num_tile_pipes; 718 config[no_regs++] = adev->gfx.config.backend_enable_mask; 719 config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes; 720 config[no_regs++] = adev->gfx.config.mem_row_size_in_kb; 721 config[no_regs++] = adev->gfx.config.shader_engine_tile_size; 722 config[no_regs++] = adev->gfx.config.num_gpus; 723 config[no_regs++] = adev->gfx.config.multi_gpu_tile_size; 724 config[no_regs++] = adev->gfx.config.mc_arb_ramcfg; 725 config[no_regs++] = adev->gfx.config.gb_addr_config; 726 config[no_regs++] = adev->gfx.config.num_rbs; 727 728 /* rev==1 */ 729 config[no_regs++] = adev->rev_id; 730 config[no_regs++] = adev->pg_flags; 731 config[no_regs++] = adev->cg_flags; 732 733 /* rev==2 */ 734 config[no_regs++] = adev->family; 735 config[no_regs++] = adev->external_rev_id; 736 737 /* rev==3 */ 738 config[no_regs++] = adev->pdev->device; 739 config[no_regs++] = adev->pdev->revision; 740 config[no_regs++] = adev->pdev->subsystem_device; 741 config[no_regs++] = adev->pdev->subsystem_vendor; 742 743 while (size && (*pos < no_regs * 4)) { 744 uint32_t value; 745 746 value = config[*pos >> 2]; 747 r = put_user(value, (uint32_t *)buf); 748 if (r) { 749 kfree(config); 750 return r; 751 } 752 753 result += 4; 754 buf += 4; 755 *pos += 4; 756 size -= 4; 757 } 758 759 kfree(config); 760 return result; 761 } 762 763 /** 764 * amdgpu_debugfs_sensor_read - Read from the powerplay sensors 765 * 766 * @f: open file handle 767 * @buf: User buffer to store read data in 768 * @size: Number of bytes to read 769 * @pos: Offset to seek to 770 * 771 * The offset is treated as the BYTE address of one of the sensors 772 * enumerated in amd/include/kgd_pp_interface.h under the 773 * 'amd_pp_sensors' enumeration. For instance to read the UVD VCLK 774 * you would use the offset 3 * 4 = 12. 775 */ 776 static ssize_t amdgpu_debugfs_sensor_read(struct file *f, char __user *buf, 777 size_t size, loff_t *pos) 778 { 779 struct amdgpu_device *adev = file_inode(f)->i_private; 780 int idx, x, outsize, r, valuesize; 781 uint32_t values[16]; 782 783 if (size & 3 || *pos & 0x3) 784 return -EINVAL; 785 786 if (!adev->pm.dpm_enabled) 787 return -EINVAL; 788 789 /* convert offset to sensor number */ 790 idx = *pos >> 2; 791 792 valuesize = sizeof(values); 793 794 r = pm_runtime_get_sync(adev->ddev->dev); 795 if (r < 0) { 796 pm_runtime_put_autosuspend(adev->ddev->dev); 797 return r; 798 } 799 800 r = amdgpu_virt_enable_access_debugfs(adev); 801 if (r < 0) { 802 pm_runtime_put_autosuspend(adev->ddev->dev); 803 return r; 804 } 805 806 r = amdgpu_dpm_read_sensor(adev, idx, &values[0], &valuesize); 807 808 pm_runtime_mark_last_busy(adev->ddev->dev); 809 pm_runtime_put_autosuspend(adev->ddev->dev); 810 811 if (r) { 812 amdgpu_virt_disable_access_debugfs(adev); 813 return r; 814 } 815 816 if (size > valuesize) { 817 amdgpu_virt_disable_access_debugfs(adev); 818 return -EINVAL; 819 } 820 821 outsize = 0; 822 x = 0; 823 if (!r) { 824 while (size) { 825 r = put_user(values[x++], (int32_t *)buf); 826 buf += 4; 827 size -= 4; 828 outsize += 4; 829 } 830 } 831 832 amdgpu_virt_disable_access_debugfs(adev); 833 return !r ? outsize : r; 834 } 835 836 /** amdgpu_debugfs_wave_read - Read WAVE STATUS data 837 * 838 * @f: open file handle 839 * @buf: User buffer to store read data in 840 * @size: Number of bytes to read 841 * @pos: Offset to seek to 842 * 843 * The offset being sought changes which wave that the status data 844 * will be returned for. The bits are used as follows: 845 * 846 * Bits 0..6: Byte offset into data 847 * Bits 7..14: SE selector 848 * Bits 15..22: SH/SA selector 849 * Bits 23..30: CU/{WGP+SIMD} selector 850 * Bits 31..36: WAVE ID selector 851 * Bits 37..44: SIMD ID selector 852 * 853 * The returned data begins with one DWORD of version information 854 * Followed by WAVE STATUS registers relevant to the GFX IP version 855 * being used. See gfx_v8_0_read_wave_data() for an example output. 856 */ 857 static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf, 858 size_t size, loff_t *pos) 859 { 860 struct amdgpu_device *adev = f->f_inode->i_private; 861 int r, x; 862 ssize_t result=0; 863 uint32_t offset, se, sh, cu, wave, simd, data[32]; 864 865 if (size & 3 || *pos & 3) 866 return -EINVAL; 867 868 /* decode offset */ 869 offset = (*pos & GENMASK_ULL(6, 0)); 870 se = (*pos & GENMASK_ULL(14, 7)) >> 7; 871 sh = (*pos & GENMASK_ULL(22, 15)) >> 15; 872 cu = (*pos & GENMASK_ULL(30, 23)) >> 23; 873 wave = (*pos & GENMASK_ULL(36, 31)) >> 31; 874 simd = (*pos & GENMASK_ULL(44, 37)) >> 37; 875 876 r = pm_runtime_get_sync(adev->ddev->dev); 877 if (r < 0) { 878 pm_runtime_put_autosuspend(adev->ddev->dev); 879 return r; 880 } 881 882 r = amdgpu_virt_enable_access_debugfs(adev); 883 if (r < 0) { 884 pm_runtime_put_autosuspend(adev->ddev->dev); 885 return r; 886 } 887 888 /* switch to the specific se/sh/cu */ 889 mutex_lock(&adev->grbm_idx_mutex); 890 amdgpu_gfx_select_se_sh(adev, se, sh, cu); 891 892 x = 0; 893 if (adev->gfx.funcs->read_wave_data) 894 adev->gfx.funcs->read_wave_data(adev, simd, wave, data, &x); 895 896 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); 897 mutex_unlock(&adev->grbm_idx_mutex); 898 899 pm_runtime_mark_last_busy(adev->ddev->dev); 900 pm_runtime_put_autosuspend(adev->ddev->dev); 901 902 if (!x) { 903 amdgpu_virt_disable_access_debugfs(adev); 904 return -EINVAL; 905 } 906 907 while (size && (offset < x * 4)) { 908 uint32_t value; 909 910 value = data[offset >> 2]; 911 r = put_user(value, (uint32_t *)buf); 912 if (r) { 913 amdgpu_virt_disable_access_debugfs(adev); 914 return r; 915 } 916 917 result += 4; 918 buf += 4; 919 offset += 4; 920 size -= 4; 921 } 922 923 amdgpu_virt_disable_access_debugfs(adev); 924 return result; 925 } 926 927 /** amdgpu_debugfs_gpr_read - Read wave gprs 928 * 929 * @f: open file handle 930 * @buf: User buffer to store read data in 931 * @size: Number of bytes to read 932 * @pos: Offset to seek to 933 * 934 * The offset being sought changes which wave that the status data 935 * will be returned for. The bits are used as follows: 936 * 937 * Bits 0..11: Byte offset into data 938 * Bits 12..19: SE selector 939 * Bits 20..27: SH/SA selector 940 * Bits 28..35: CU/{WGP+SIMD} selector 941 * Bits 36..43: WAVE ID selector 942 * Bits 37..44: SIMD ID selector 943 * Bits 52..59: Thread selector 944 * Bits 60..61: Bank selector (VGPR=0,SGPR=1) 945 * 946 * The return data comes from the SGPR or VGPR register bank for 947 * the selected operational unit. 948 */ 949 static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, 950 size_t size, loff_t *pos) 951 { 952 struct amdgpu_device *adev = f->f_inode->i_private; 953 int r; 954 ssize_t result = 0; 955 uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data; 956 957 if (size > 4096 || size & 3 || *pos & 3) 958 return -EINVAL; 959 960 /* decode offset */ 961 offset = (*pos & GENMASK_ULL(11, 0)) >> 2; 962 se = (*pos & GENMASK_ULL(19, 12)) >> 12; 963 sh = (*pos & GENMASK_ULL(27, 20)) >> 20; 964 cu = (*pos & GENMASK_ULL(35, 28)) >> 28; 965 wave = (*pos & GENMASK_ULL(43, 36)) >> 36; 966 simd = (*pos & GENMASK_ULL(51, 44)) >> 44; 967 thread = (*pos & GENMASK_ULL(59, 52)) >> 52; 968 bank = (*pos & GENMASK_ULL(61, 60)) >> 60; 969 970 data = kcalloc(1024, sizeof(*data), GFP_KERNEL); 971 if (!data) 972 return -ENOMEM; 973 974 r = pm_runtime_get_sync(adev->ddev->dev); 975 if (r < 0) 976 goto err; 977 978 r = amdgpu_virt_enable_access_debugfs(adev); 979 if (r < 0) 980 goto err; 981 982 /* switch to the specific se/sh/cu */ 983 mutex_lock(&adev->grbm_idx_mutex); 984 amdgpu_gfx_select_se_sh(adev, se, sh, cu); 985 986 if (bank == 0) { 987 if (adev->gfx.funcs->read_wave_vgprs) 988 adev->gfx.funcs->read_wave_vgprs(adev, simd, wave, thread, offset, size>>2, data); 989 } else { 990 if (adev->gfx.funcs->read_wave_sgprs) 991 adev->gfx.funcs->read_wave_sgprs(adev, simd, wave, offset, size>>2, data); 992 } 993 994 amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); 995 mutex_unlock(&adev->grbm_idx_mutex); 996 997 pm_runtime_mark_last_busy(adev->ddev->dev); 998 pm_runtime_put_autosuspend(adev->ddev->dev); 999 1000 while (size) { 1001 uint32_t value; 1002 1003 value = data[result >> 2]; 1004 r = put_user(value, (uint32_t *)buf); 1005 if (r) { 1006 amdgpu_virt_disable_access_debugfs(adev); 1007 goto err; 1008 } 1009 1010 result += 4; 1011 buf += 4; 1012 size -= 4; 1013 } 1014 1015 kfree(data); 1016 amdgpu_virt_disable_access_debugfs(adev); 1017 return result; 1018 1019 err: 1020 pm_runtime_put_autosuspend(adev->ddev->dev); 1021 kfree(data); 1022 return r; 1023 } 1024 1025 /** 1026 * amdgpu_debugfs_regs_gfxoff_write - Enable/disable GFXOFF 1027 * 1028 * @f: open file handle 1029 * @buf: User buffer to write data from 1030 * @size: Number of bytes to write 1031 * @pos: Offset to seek to 1032 * 1033 * Write a 32-bit zero to disable or a 32-bit non-zero to enable 1034 */ 1035 static ssize_t amdgpu_debugfs_gfxoff_write(struct file *f, const char __user *buf, 1036 size_t size, loff_t *pos) 1037 { 1038 struct amdgpu_device *adev = file_inode(f)->i_private; 1039 ssize_t result = 0; 1040 int r; 1041 1042 if (size & 0x3 || *pos & 0x3) 1043 return -EINVAL; 1044 1045 r = pm_runtime_get_sync(adev->ddev->dev); 1046 if (r < 0) { 1047 pm_runtime_put_autosuspend(adev->ddev->dev); 1048 return r; 1049 } 1050 1051 while (size) { 1052 uint32_t value; 1053 1054 r = get_user(value, (uint32_t *)buf); 1055 if (r) { 1056 pm_runtime_mark_last_busy(adev->ddev->dev); 1057 pm_runtime_put_autosuspend(adev->ddev->dev); 1058 return r; 1059 } 1060 1061 amdgpu_gfx_off_ctrl(adev, value ? true : false); 1062 1063 result += 4; 1064 buf += 4; 1065 *pos += 4; 1066 size -= 4; 1067 } 1068 1069 pm_runtime_mark_last_busy(adev->ddev->dev); 1070 pm_runtime_put_autosuspend(adev->ddev->dev); 1071 1072 return result; 1073 } 1074 1075 1076 /** 1077 * amdgpu_debugfs_regs_gfxoff_status - read gfxoff status 1078 * 1079 * @f: open file handle 1080 * @buf: User buffer to store read data in 1081 * @size: Number of bytes to read 1082 * @pos: Offset to seek to 1083 */ 1084 static ssize_t amdgpu_debugfs_gfxoff_read(struct file *f, char __user *buf, 1085 size_t size, loff_t *pos) 1086 { 1087 struct amdgpu_device *adev = file_inode(f)->i_private; 1088 ssize_t result = 0; 1089 int r; 1090 1091 if (size & 0x3 || *pos & 0x3) 1092 return -EINVAL; 1093 1094 r = pm_runtime_get_sync(adev->ddev->dev); 1095 if (r < 0) 1096 return r; 1097 1098 while (size) { 1099 uint32_t value; 1100 1101 r = amdgpu_get_gfx_off_status(adev, &value); 1102 if (r) { 1103 pm_runtime_mark_last_busy(adev->ddev->dev); 1104 pm_runtime_put_autosuspend(adev->ddev->dev); 1105 return r; 1106 } 1107 1108 r = put_user(value, (uint32_t *)buf); 1109 if (r) { 1110 pm_runtime_mark_last_busy(adev->ddev->dev); 1111 pm_runtime_put_autosuspend(adev->ddev->dev); 1112 return r; 1113 } 1114 1115 result += 4; 1116 buf += 4; 1117 *pos += 4; 1118 size -= 4; 1119 } 1120 1121 pm_runtime_mark_last_busy(adev->ddev->dev); 1122 pm_runtime_put_autosuspend(adev->ddev->dev); 1123 1124 return result; 1125 } 1126 1127 static const struct file_operations amdgpu_debugfs_regs_fops = { 1128 .owner = THIS_MODULE, 1129 .read = amdgpu_debugfs_regs_read, 1130 .write = amdgpu_debugfs_regs_write, 1131 .llseek = default_llseek 1132 }; 1133 static const struct file_operations amdgpu_debugfs_regs_didt_fops = { 1134 .owner = THIS_MODULE, 1135 .read = amdgpu_debugfs_regs_didt_read, 1136 .write = amdgpu_debugfs_regs_didt_write, 1137 .llseek = default_llseek 1138 }; 1139 static const struct file_operations amdgpu_debugfs_regs_pcie_fops = { 1140 .owner = THIS_MODULE, 1141 .read = amdgpu_debugfs_regs_pcie_read, 1142 .write = amdgpu_debugfs_regs_pcie_write, 1143 .llseek = default_llseek 1144 }; 1145 static const struct file_operations amdgpu_debugfs_regs_smc_fops = { 1146 .owner = THIS_MODULE, 1147 .read = amdgpu_debugfs_regs_smc_read, 1148 .write = amdgpu_debugfs_regs_smc_write, 1149 .llseek = default_llseek 1150 }; 1151 1152 static const struct file_operations amdgpu_debugfs_gca_config_fops = { 1153 .owner = THIS_MODULE, 1154 .read = amdgpu_debugfs_gca_config_read, 1155 .llseek = default_llseek 1156 }; 1157 1158 static const struct file_operations amdgpu_debugfs_sensors_fops = { 1159 .owner = THIS_MODULE, 1160 .read = amdgpu_debugfs_sensor_read, 1161 .llseek = default_llseek 1162 }; 1163 1164 static const struct file_operations amdgpu_debugfs_wave_fops = { 1165 .owner = THIS_MODULE, 1166 .read = amdgpu_debugfs_wave_read, 1167 .llseek = default_llseek 1168 }; 1169 static const struct file_operations amdgpu_debugfs_gpr_fops = { 1170 .owner = THIS_MODULE, 1171 .read = amdgpu_debugfs_gpr_read, 1172 .llseek = default_llseek 1173 }; 1174 1175 static const struct file_operations amdgpu_debugfs_gfxoff_fops = { 1176 .owner = THIS_MODULE, 1177 .read = amdgpu_debugfs_gfxoff_read, 1178 .write = amdgpu_debugfs_gfxoff_write, 1179 .llseek = default_llseek 1180 }; 1181 1182 static const struct file_operations *debugfs_regs[] = { 1183 &amdgpu_debugfs_regs_fops, 1184 &amdgpu_debugfs_regs_didt_fops, 1185 &amdgpu_debugfs_regs_pcie_fops, 1186 &amdgpu_debugfs_regs_smc_fops, 1187 &amdgpu_debugfs_gca_config_fops, 1188 &amdgpu_debugfs_sensors_fops, 1189 &amdgpu_debugfs_wave_fops, 1190 &amdgpu_debugfs_gpr_fops, 1191 &amdgpu_debugfs_gfxoff_fops, 1192 }; 1193 1194 static const char *debugfs_regs_names[] = { 1195 "amdgpu_regs", 1196 "amdgpu_regs_didt", 1197 "amdgpu_regs_pcie", 1198 "amdgpu_regs_smc", 1199 "amdgpu_gca_config", 1200 "amdgpu_sensors", 1201 "amdgpu_wave", 1202 "amdgpu_gpr", 1203 "amdgpu_gfxoff", 1204 }; 1205 1206 /** 1207 * amdgpu_debugfs_regs_init - Initialize debugfs entries that provide 1208 * register access. 1209 * 1210 * @adev: The device to attach the debugfs entries to 1211 */ 1212 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) 1213 { 1214 struct drm_minor *minor = adev->ddev->primary; 1215 struct dentry *ent, *root = minor->debugfs_root; 1216 unsigned int i; 1217 1218 for (i = 0; i < ARRAY_SIZE(debugfs_regs); i++) { 1219 ent = debugfs_create_file(debugfs_regs_names[i], 1220 S_IFREG | S_IRUGO, root, 1221 adev, debugfs_regs[i]); 1222 if (!i && !IS_ERR_OR_NULL(ent)) 1223 i_size_write(ent->d_inode, adev->rmmio_size); 1224 adev->debugfs_regs[i] = ent; 1225 } 1226 1227 return 0; 1228 } 1229 1230 static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data) 1231 { 1232 struct drm_info_node *node = (struct drm_info_node *) m->private; 1233 struct drm_device *dev = node->minor->dev; 1234 struct amdgpu_device *adev = dev->dev_private; 1235 int r = 0, i; 1236 1237 r = pm_runtime_get_sync(dev->dev); 1238 if (r < 0) { 1239 pm_runtime_put_autosuspend(adev->ddev->dev); 1240 return r; 1241 } 1242 1243 /* Avoid accidently unparking the sched thread during GPU reset */ 1244 mutex_lock(&adev->lock_reset); 1245 1246 /* hold on the scheduler */ 1247 for (i = 0; i < AMDGPU_MAX_RINGS; i++) { 1248 struct amdgpu_ring *ring = adev->rings[i]; 1249 1250 if (!ring || !ring->sched.thread) 1251 continue; 1252 kthread_park(ring->sched.thread); 1253 } 1254 1255 seq_printf(m, "run ib test:\n"); 1256 r = amdgpu_ib_ring_tests(adev); 1257 if (r) 1258 seq_printf(m, "ib ring tests failed (%d).\n", r); 1259 else 1260 seq_printf(m, "ib ring tests passed.\n"); 1261 1262 /* go on the scheduler */ 1263 for (i = 0; i < AMDGPU_MAX_RINGS; i++) { 1264 struct amdgpu_ring *ring = adev->rings[i]; 1265 1266 if (!ring || !ring->sched.thread) 1267 continue; 1268 kthread_unpark(ring->sched.thread); 1269 } 1270 1271 mutex_unlock(&adev->lock_reset); 1272 1273 pm_runtime_mark_last_busy(dev->dev); 1274 pm_runtime_put_autosuspend(dev->dev); 1275 1276 return 0; 1277 } 1278 1279 static int amdgpu_debugfs_get_vbios_dump(struct seq_file *m, void *data) 1280 { 1281 struct drm_info_node *node = (struct drm_info_node *) m->private; 1282 struct drm_device *dev = node->minor->dev; 1283 struct amdgpu_device *adev = dev->dev_private; 1284 1285 seq_write(m, adev->bios, adev->bios_size); 1286 return 0; 1287 } 1288 1289 static int amdgpu_debugfs_evict_vram(struct seq_file *m, void *data) 1290 { 1291 struct drm_info_node *node = (struct drm_info_node *)m->private; 1292 struct drm_device *dev = node->minor->dev; 1293 struct amdgpu_device *adev = dev->dev_private; 1294 int r; 1295 1296 r = pm_runtime_get_sync(dev->dev); 1297 if (r < 0) { 1298 pm_runtime_put_autosuspend(adev->ddev->dev); 1299 return r; 1300 } 1301 1302 seq_printf(m, "(%d)\n", amdgpu_bo_evict_vram(adev)); 1303 1304 pm_runtime_mark_last_busy(dev->dev); 1305 pm_runtime_put_autosuspend(dev->dev); 1306 1307 return 0; 1308 } 1309 1310 static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data) 1311 { 1312 struct drm_info_node *node = (struct drm_info_node *)m->private; 1313 struct drm_device *dev = node->minor->dev; 1314 struct amdgpu_device *adev = dev->dev_private; 1315 int r; 1316 1317 r = pm_runtime_get_sync(dev->dev); 1318 if (r < 0) { 1319 pm_runtime_put_autosuspend(adev->ddev->dev); 1320 return r; 1321 } 1322 1323 seq_printf(m, "(%d)\n", ttm_bo_evict_mm(&adev->mman.bdev, TTM_PL_TT)); 1324 1325 pm_runtime_mark_last_busy(dev->dev); 1326 pm_runtime_put_autosuspend(dev->dev); 1327 1328 return 0; 1329 } 1330 1331 static const struct drm_info_list amdgpu_debugfs_list[] = { 1332 {"amdgpu_vbios", amdgpu_debugfs_get_vbios_dump}, 1333 {"amdgpu_test_ib", &amdgpu_debugfs_test_ib}, 1334 {"amdgpu_evict_vram", &amdgpu_debugfs_evict_vram}, 1335 {"amdgpu_evict_gtt", &amdgpu_debugfs_evict_gtt}, 1336 }; 1337 1338 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring, 1339 struct dma_fence **fences) 1340 { 1341 struct amdgpu_fence_driver *drv = &ring->fence_drv; 1342 uint32_t sync_seq, last_seq; 1343 1344 last_seq = atomic_read(&ring->fence_drv.last_seq); 1345 sync_seq = ring->fence_drv.sync_seq; 1346 1347 last_seq &= drv->num_fences_mask; 1348 sync_seq &= drv->num_fences_mask; 1349 1350 do { 1351 struct dma_fence *fence, **ptr; 1352 1353 ++last_seq; 1354 last_seq &= drv->num_fences_mask; 1355 ptr = &drv->fences[last_seq]; 1356 1357 fence = rcu_dereference_protected(*ptr, 1); 1358 RCU_INIT_POINTER(*ptr, NULL); 1359 1360 if (!fence) 1361 continue; 1362 1363 fences[last_seq] = fence; 1364 1365 } while (last_seq != sync_seq); 1366 } 1367 1368 static void amdgpu_ib_preempt_signal_fences(struct dma_fence **fences, 1369 int length) 1370 { 1371 int i; 1372 struct dma_fence *fence; 1373 1374 for (i = 0; i < length; i++) { 1375 fence = fences[i]; 1376 if (!fence) 1377 continue; 1378 dma_fence_signal(fence); 1379 dma_fence_put(fence); 1380 } 1381 } 1382 1383 static void amdgpu_ib_preempt_job_recovery(struct drm_gpu_scheduler *sched) 1384 { 1385 struct drm_sched_job *s_job; 1386 struct dma_fence *fence; 1387 1388 spin_lock(&sched->job_list_lock); 1389 list_for_each_entry(s_job, &sched->ring_mirror_list, node) { 1390 fence = sched->ops->run_job(s_job); 1391 dma_fence_put(fence); 1392 } 1393 spin_unlock(&sched->job_list_lock); 1394 } 1395 1396 static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring) 1397 { 1398 struct amdgpu_job *job; 1399 struct drm_sched_job *s_job, *tmp; 1400 uint32_t preempt_seq; 1401 struct dma_fence *fence, **ptr; 1402 struct amdgpu_fence_driver *drv = &ring->fence_drv; 1403 struct drm_gpu_scheduler *sched = &ring->sched; 1404 bool preempted = true; 1405 1406 if (ring->funcs->type != AMDGPU_RING_TYPE_GFX) 1407 return; 1408 1409 preempt_seq = le32_to_cpu(*(drv->cpu_addr + 2)); 1410 if (preempt_seq <= atomic_read(&drv->last_seq)) { 1411 preempted = false; 1412 goto no_preempt; 1413 } 1414 1415 preempt_seq &= drv->num_fences_mask; 1416 ptr = &drv->fences[preempt_seq]; 1417 fence = rcu_dereference_protected(*ptr, 1); 1418 1419 no_preempt: 1420 spin_lock(&sched->job_list_lock); 1421 list_for_each_entry_safe(s_job, tmp, &sched->ring_mirror_list, node) { 1422 if (dma_fence_is_signaled(&s_job->s_fence->finished)) { 1423 /* remove job from ring_mirror_list */ 1424 list_del_init(&s_job->node); 1425 sched->ops->free_job(s_job); 1426 continue; 1427 } 1428 job = to_amdgpu_job(s_job); 1429 if (preempted && job->fence == fence) 1430 /* mark the job as preempted */ 1431 job->preemption_status |= AMDGPU_IB_PREEMPTED; 1432 } 1433 spin_unlock(&sched->job_list_lock); 1434 } 1435 1436 static int amdgpu_debugfs_ib_preempt(void *data, u64 val) 1437 { 1438 int r, resched, length; 1439 struct amdgpu_ring *ring; 1440 struct dma_fence **fences = NULL; 1441 struct amdgpu_device *adev = (struct amdgpu_device *)data; 1442 1443 if (val >= AMDGPU_MAX_RINGS) 1444 return -EINVAL; 1445 1446 ring = adev->rings[val]; 1447 1448 if (!ring || !ring->funcs->preempt_ib || !ring->sched.thread) 1449 return -EINVAL; 1450 1451 /* the last preemption failed */ 1452 if (ring->trail_seq != le32_to_cpu(*ring->trail_fence_cpu_addr)) 1453 return -EBUSY; 1454 1455 length = ring->fence_drv.num_fences_mask + 1; 1456 fences = kcalloc(length, sizeof(void *), GFP_KERNEL); 1457 if (!fences) 1458 return -ENOMEM; 1459 1460 /* Avoid accidently unparking the sched thread during GPU reset */ 1461 mutex_lock(&adev->lock_reset); 1462 1463 /* stop the scheduler */ 1464 kthread_park(ring->sched.thread); 1465 1466 resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); 1467 1468 /* preempt the IB */ 1469 r = amdgpu_ring_preempt_ib(ring); 1470 if (r) { 1471 DRM_WARN("failed to preempt ring %d\n", ring->idx); 1472 goto failure; 1473 } 1474 1475 amdgpu_fence_process(ring); 1476 1477 if (atomic_read(&ring->fence_drv.last_seq) != 1478 ring->fence_drv.sync_seq) { 1479 DRM_INFO("ring %d was preempted\n", ring->idx); 1480 1481 amdgpu_ib_preempt_mark_partial_job(ring); 1482 1483 /* swap out the old fences */ 1484 amdgpu_ib_preempt_fences_swap(ring, fences); 1485 1486 amdgpu_fence_driver_force_completion(ring); 1487 1488 /* resubmit unfinished jobs */ 1489 amdgpu_ib_preempt_job_recovery(&ring->sched); 1490 1491 /* wait for jobs finished */ 1492 amdgpu_fence_wait_empty(ring); 1493 1494 /* signal the old fences */ 1495 amdgpu_ib_preempt_signal_fences(fences, length); 1496 } 1497 1498 failure: 1499 /* restart the scheduler */ 1500 kthread_unpark(ring->sched.thread); 1501 1502 mutex_unlock(&adev->lock_reset); 1503 1504 ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); 1505 1506 kfree(fences); 1507 1508 return 0; 1509 } 1510 1511 static int amdgpu_debugfs_sclk_set(void *data, u64 val) 1512 { 1513 int ret = 0; 1514 uint32_t max_freq, min_freq; 1515 struct amdgpu_device *adev = (struct amdgpu_device *)data; 1516 1517 if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev)) 1518 return -EINVAL; 1519 1520 ret = pm_runtime_get_sync(adev->ddev->dev); 1521 if (ret < 0) { 1522 pm_runtime_put_autosuspend(adev->ddev->dev); 1523 return ret; 1524 } 1525 1526 if (is_support_sw_smu(adev)) { 1527 ret = smu_get_dpm_freq_range(&adev->smu, SMU_SCLK, &min_freq, &max_freq); 1528 if (ret || val > max_freq || val < min_freq) 1529 return -EINVAL; 1530 ret = smu_set_soft_freq_range(&adev->smu, SMU_SCLK, (uint32_t)val, (uint32_t)val); 1531 } else { 1532 return 0; 1533 } 1534 1535 pm_runtime_mark_last_busy(adev->ddev->dev); 1536 pm_runtime_put_autosuspend(adev->ddev->dev); 1537 1538 if (ret) 1539 return -EINVAL; 1540 1541 return 0; 1542 } 1543 1544 DEFINE_SIMPLE_ATTRIBUTE(fops_ib_preempt, NULL, 1545 amdgpu_debugfs_ib_preempt, "%llu\n"); 1546 1547 DEFINE_SIMPLE_ATTRIBUTE(fops_sclk_set, NULL, 1548 amdgpu_debugfs_sclk_set, "%llu\n"); 1549 1550 int amdgpu_debugfs_init(struct amdgpu_device *adev) 1551 { 1552 int r, i; 1553 1554 adev->debugfs_preempt = 1555 debugfs_create_file("amdgpu_preempt_ib", 0600, 1556 adev->ddev->primary->debugfs_root, adev, 1557 &fops_ib_preempt); 1558 if (!(adev->debugfs_preempt)) { 1559 DRM_ERROR("unable to create amdgpu_preempt_ib debugsfs file\n"); 1560 return -EIO; 1561 } 1562 1563 adev->smu.debugfs_sclk = 1564 debugfs_create_file("amdgpu_force_sclk", 0200, 1565 adev->ddev->primary->debugfs_root, adev, 1566 &fops_sclk_set); 1567 if (!(adev->smu.debugfs_sclk)) { 1568 DRM_ERROR("unable to create amdgpu_set_sclk debugsfs file\n"); 1569 return -EIO; 1570 } 1571 1572 /* Register debugfs entries for amdgpu_ttm */ 1573 r = amdgpu_ttm_debugfs_init(adev); 1574 if (r) { 1575 DRM_ERROR("Failed to init debugfs\n"); 1576 return r; 1577 } 1578 1579 r = amdgpu_debugfs_pm_init(adev); 1580 if (r) { 1581 DRM_ERROR("Failed to register debugfs file for dpm!\n"); 1582 return r; 1583 } 1584 1585 if (amdgpu_debugfs_sa_init(adev)) { 1586 dev_err(adev->dev, "failed to register debugfs file for SA\n"); 1587 } 1588 1589 if (amdgpu_debugfs_fence_init(adev)) 1590 dev_err(adev->dev, "fence debugfs file creation failed\n"); 1591 1592 r = amdgpu_debugfs_gem_init(adev); 1593 if (r) 1594 DRM_ERROR("registering gem debugfs failed (%d).\n", r); 1595 1596 r = amdgpu_debugfs_regs_init(adev); 1597 if (r) 1598 DRM_ERROR("registering register debugfs failed (%d).\n", r); 1599 1600 r = amdgpu_debugfs_firmware_init(adev); 1601 if (r) 1602 DRM_ERROR("registering firmware debugfs failed (%d).\n", r); 1603 1604 #if defined(CONFIG_DRM_AMD_DC) 1605 if (amdgpu_device_has_dc_support(adev)) { 1606 if (dtn_debugfs_init(adev)) 1607 DRM_ERROR("amdgpu: failed initialize dtn debugfs support.\n"); 1608 } 1609 #endif 1610 1611 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { 1612 struct amdgpu_ring *ring = adev->rings[i]; 1613 1614 if (!ring) 1615 continue; 1616 1617 if (amdgpu_debugfs_ring_init(adev, ring)) { 1618 DRM_ERROR("Failed to register debugfs file for rings !\n"); 1619 } 1620 } 1621 1622 amdgpu_ras_debugfs_create_all(adev); 1623 1624 amdgpu_debugfs_autodump_init(adev); 1625 1626 return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_list, 1627 ARRAY_SIZE(amdgpu_debugfs_list)); 1628 } 1629 1630 #else 1631 int amdgpu_debugfs_init(struct amdgpu_device *adev) 1632 { 1633 return 0; 1634 } 1635 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) 1636 { 1637 return 0; 1638 } 1639 #endif 1640