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