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