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