amd-drm-next-5.14-2021-05-19: amdgpu: - Aldebaran updates - More LTTPR display work - Vangogh updates - SDMA 5.x GCR fixes - RAS fixes - PCIe ASPM support - Modifier fixes - Enable TMZ on Renoir - Buffer object code cleanup - Display overlay fixes - Initial support for multiple eDP panels - Initial SR-IOV support for Aldebaran - DP link training refactor - Misc code cleanups and bug fixes - SMU regression fixes for variable sized arrays - MAINTAINERS fixes for amdgpu amdkfd: - Initial SR-IOV support for Aldebaran - Topology fixes - Initial HMM SVM support - Misc code cleanups and bug fixes radeon: - Misc code cleanups and bug fixes - SMU regression fixes for variable sized arrays - Flickering fix for Oland with multiple 4K displays UAPI: - amdgpu: Drop AMDGPU_GEM_CREATE_SHADOW flag. This was always a kernel internal flag and userspace use of it has always been blocked. It's no longer needed so remove it. - amdkgd: HMM SVM support Overview: https://patchwork.freedesktop.org/series/85562/ Porposed userspace: https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface/tree/fxkamd/hmm-wip Signed-off-by: Dave Airlie <airlied@redhat.com>
Showing the changes to include/uapi (2 of 159 files). Show all
Unified · Split
| @@ -116,8 +116,6 @@ extern "C" { · 115 unmodified lines | |||
| 116 | #define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) | 116 | #define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) |
| 117 | /* Flag that the memory should be in VRAM and cleared */ | 117 | /* Flag that the memory should be in VRAM and cleared */ |
| 118 | #define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) | 118 | #define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) |
| 119 | /* Flag that create shadow bo(GTT) while allocating vram bo */ | ||
| 120 | #define AMDGPU_GEM_CREATE_SHADOW (1 << 4) | ||
| 121 | /* Flag that allocating the BO should use linear VRAM */ | 119 | /* Flag that allocating the BO should use linear VRAM */ |
| 122 | #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) | 120 | #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) |
| 123 | /* Flag that BO is always valid in this VM */ | 121 | /* Flag that BO is always valid in this VM */ |
| @@ -30,9 +30,10 @@ · 29 unmodified lines | |||
| 30 | * - 1.1 - initial version | 30 | * - 1.1 - initial version |
| 31 | * - 1.3 - Add SMI events support | 31 | * - 1.3 - Add SMI events support |
| 32 | * - 1.4 - Indicate new SRAM EDC bit in device properties | 32 | * - 1.4 - Indicate new SRAM EDC bit in device properties |
| 33 | * - 1.5 - Add SVM API | ||
| 33 | */ | 34 | */ |
| 34 | #define KFD_IOCTL_MAJOR_VERSION 1 | 35 | #define KFD_IOCTL_MAJOR_VERSION 1 |
| 35 | #define KFD_IOCTL_MINOR_VERSION 4 | 36 | #define KFD_IOCTL_MINOR_VERSION 5 |
| 36 | 37 | ||
| 37 | struct kfd_ioctl_get_version_args { | 38 | struct kfd_ioctl_get_version_args { |
| 38 | __u32 major_version; /* from KFD */ | 39 | __u32 major_version; /* from KFD */ |
| @@ -473,6 +474,167 @@ enum kfd_mmio_remap { · 434 unmodified lines | |||
| 473 | KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4, | 474 | KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4, |
| 474 | }; | 475 | }; |
| 475 | 476 | ||
| 477 | /* Guarantee host access to memory */ | ||
| 478 | #define KFD_IOCTL_SVM_FLAG_HOST_ACCESS 0x00000001 | ||
| 479 | /* Fine grained coherency between all devices with access */ | ||
| 480 | #define KFD_IOCTL_SVM_FLAG_COHERENT 0x00000002 | ||
| 481 | /* Use any GPU in same hive as preferred device */ | ||
| 482 | #define KFD_IOCTL_SVM_FLAG_HIVE_LOCAL 0x00000004 | ||
| 483 | /* GPUs only read, allows replication */ | ||
| 484 | #define KFD_IOCTL_SVM_FLAG_GPU_RO 0x00000008 | ||
| 485 | /* Allow execution on GPU */ | ||
| 486 | #define KFD_IOCTL_SVM_FLAG_GPU_EXEC 0x00000010 | ||
| 487 | /* GPUs mostly read, may allow similar optimizations as RO, but writes fault */ | ||
| 488 | #define KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY 0x00000020 | ||
| 489 | |||
| 490 | /** | ||
| 491 | * kfd_ioctl_svm_op - SVM ioctl operations | ||
| 492 | * | ||
| 493 | * @KFD_IOCTL_SVM_OP_SET_ATTR: Modify one or more attributes | ||
| 494 | * @KFD_IOCTL_SVM_OP_GET_ATTR: Query one or more attributes | ||
| 495 | */ | ||
| 496 | enum kfd_ioctl_svm_op { | ||
| 497 | KFD_IOCTL_SVM_OP_SET_ATTR, | ||
| 498 | KFD_IOCTL_SVM_OP_GET_ATTR | ||
| 499 | }; | ||
| 500 | |||
| 501 | /** kfd_ioctl_svm_location - Enum for preferred and prefetch locations | ||
| 502 | * | ||
| 503 | * GPU IDs are used to specify GPUs as preferred and prefetch locations. | ||
| 504 | * Below definitions are used for system memory or for leaving the preferred | ||
| 505 | * location unspecified. | ||
| 506 | */ | ||
| 507 | enum kfd_ioctl_svm_location { | ||
| 508 | KFD_IOCTL_SVM_LOCATION_SYSMEM = 0, | ||
| 509 | KFD_IOCTL_SVM_LOCATION_UNDEFINED = 0xffffffff | ||
| 510 | }; | ||
| 511 | |||
| 512 | /** | ||
| 513 | * kfd_ioctl_svm_attr_type - SVM attribute types | ||
| 514 | * | ||
| 515 | * @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC: gpuid of the preferred location, 0 for | ||
| 516 | * system memory | ||
| 517 | * @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC: gpuid of the prefetch location, 0 for | ||
| 518 | * system memory. Setting this triggers an | ||
| 519 | * immediate prefetch (migration). | ||
| 520 | * @KFD_IOCTL_SVM_ATTR_ACCESS: | ||
| 521 | * @KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE: | ||
| 522 | * @KFD_IOCTL_SVM_ATTR_NO_ACCESS: specify memory access for the gpuid given | ||
| 523 | * by the attribute value | ||
| 524 | * @KFD_IOCTL_SVM_ATTR_SET_FLAGS: bitmask of flags to set (see | ||
| 525 | * KFD_IOCTL_SVM_FLAG_...) | ||
| 526 | * @KFD_IOCTL_SVM_ATTR_CLR_FLAGS: bitmask of flags to clear | ||
| 527 | * @KFD_IOCTL_SVM_ATTR_GRANULARITY: migration granularity | ||
| 528 | * (log2 num pages) | ||
| 529 | */ | ||
| 530 | enum kfd_ioctl_svm_attr_type { | ||
| 531 | KFD_IOCTL_SVM_ATTR_PREFERRED_LOC, | ||
| 532 | KFD_IOCTL_SVM_ATTR_PREFETCH_LOC, | ||
| 533 | KFD_IOCTL_SVM_ATTR_ACCESS, | ||
| 534 | KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE, | ||
| 535 | KFD_IOCTL_SVM_ATTR_NO_ACCESS, | ||
| 536 | KFD_IOCTL_SVM_ATTR_SET_FLAGS, | ||
| 537 | KFD_IOCTL_SVM_ATTR_CLR_FLAGS, | ||
| 538 | KFD_IOCTL_SVM_ATTR_GRANULARITY | ||
| 539 | }; | ||
| 540 | |||
| 541 | /** | ||
| 542 | * kfd_ioctl_svm_attribute - Attributes as pairs of type and value | ||
| 543 | * | ||
| 544 | * The meaning of the @value depends on the attribute type. | ||
| 545 | * | ||
| 546 | * @type: attribute type (see enum @kfd_ioctl_svm_attr_type) | ||
| 547 | * @value: attribute value | ||
| 548 | */ | ||
| 549 | struct kfd_ioctl_svm_attribute { | ||
| 550 | __u32 type; | ||
| 551 | __u32 value; | ||
| 552 | }; | ||
| 553 | |||
| 554 | /** | ||
| 555 | * kfd_ioctl_svm_args - Arguments for SVM ioctl | ||
| 556 | * | ||
| 557 | * @op specifies the operation to perform (see enum | ||
| 558 | * @kfd_ioctl_svm_op). @start_addr and @size are common for all | ||
| 559 | * operations. | ||
| 560 | * | ||
| 561 | * A variable number of attributes can be given in @attrs. | ||
| 562 | * @nattr specifies the number of attributes. New attributes can be | ||
| 563 | * added in the future without breaking the ABI. If unknown attributes | ||
| 564 | * are given, the function returns -EINVAL. | ||
| 565 | * | ||
| 566 | * @KFD_IOCTL_SVM_OP_SET_ATTR sets attributes for a virtual address | ||
| 567 | * range. It may overlap existing virtual address ranges. If it does, | ||
| 568 | * the existing ranges will be split such that the attribute changes | ||
| 569 | * only apply to the specified address range. | ||
| 570 | * | ||
| 571 | * @KFD_IOCTL_SVM_OP_GET_ATTR returns the intersection of attributes | ||
| 572 | * over all memory in the given range and returns the result as the | ||
| 573 | * attribute value. If different pages have different preferred or | ||
| 574 | * prefetch locations, 0xffffffff will be returned for | ||
| 575 | * @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC or | ||
| 576 | * @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC resepctively. For | ||
| 577 | * @KFD_IOCTL_SVM_ATTR_SET_FLAGS, flags of all pages will be | ||
| 578 | * aggregated by bitwise AND. The minimum migration granularity | ||
| 579 | * throughout the range will be returned for | ||
| 580 | * @KFD_IOCTL_SVM_ATTR_GRANULARITY. | ||
| 581 | * | ||
| 582 | * Querying of accessibility attributes works by initializing the | ||
| 583 | * attribute type to @KFD_IOCTL_SVM_ATTR_ACCESS and the value to the | ||
| 584 | * GPUID being queried. Multiple attributes can be given to allow | ||
| 585 | * querying multiple GPUIDs. The ioctl function overwrites the | ||
| 586 | * attribute type to indicate the access for the specified GPU. | ||
| 587 | * | ||
| 588 | * @KFD_IOCTL_SVM_ATTR_CLR_FLAGS is invalid for | ||
| 589 | * @KFD_IOCTL_SVM_OP_GET_ATTR. | ||
| 590 | */ | ||
| 591 | struct kfd_ioctl_svm_args { | ||
| 592 | __u64 start_addr; | ||
| 593 | __u64 size; | ||
| 594 | __u32 op; | ||
| 595 | __u32 nattr; | ||
| 596 | /* Variable length array of attributes */ | ||
| 597 | struct kfd_ioctl_svm_attribute attrs[0]; | ||
| 598 | }; | ||
| 599 | |||
| 600 | /** | ||
| 601 | * kfd_ioctl_set_xnack_mode_args - Arguments for set_xnack_mode | ||
| 602 | * | ||
| 603 | * @xnack_enabled: [in/out] Whether to enable XNACK mode for this process | ||
| 604 | * | ||
| 605 | * @xnack_enabled indicates whether recoverable page faults should be | ||
| 606 | * enabled for the current process. 0 means disabled, positive means | ||
| 607 | * enabled, negative means leave unchanged. If enabled, virtual address | ||
| 608 | * translations on GFXv9 and later AMD GPUs can return XNACK and retry | ||
| 609 | * the access until a valid PTE is available. This is used to implement | ||
| 610 | * device page faults. | ||
| 611 | * | ||
| 612 | * On output, @xnack_enabled returns the (new) current mode (0 or | ||
| 613 | * positive). Therefore, a negative input value can be used to query | ||
| 614 | * the current mode without changing it. | ||
| 615 | * | ||
| 616 | * The XNACK mode fundamentally changes the way SVM managed memory works | ||
| 617 | * in the driver, with subtle effects on application performance and | ||
| 618 | * functionality. | ||
| 619 | * | ||
| 620 | * Enabling XNACK mode requires shader programs to be compiled | ||
| 621 | * differently. Furthermore, not all GPUs support changing the mode | ||
| 622 | * per-process. Therefore changing the mode is only allowed while no | ||
| 623 | * user mode queues exist in the process. This ensure that no shader | ||
| 624 | * code is running that may be compiled for the wrong mode. And GPUs | ||
| 625 | * that cannot change to the requested mode will prevent the XNACK | ||
| 626 | * mode from occurring. All GPUs used by the process must be in the | ||
| 627 | * same XNACK mode. | ||
| 628 | * | ||
| 629 | * GFXv8 or older GPUs do not support 48 bit virtual addresses or SVM. | ||
| 630 | * Therefore those GPUs are not considered for the XNACK mode switch. | ||
| 631 | * | ||
| 632 | * Return: 0 on success, -errno on failure | ||
| 633 | */ | ||
| 634 | struct kfd_ioctl_set_xnack_mode_args { | ||
| 635 | __s32 xnack_enabled; | ||
| 636 | }; | ||
| 637 | |||
| 476 | #define AMDKFD_IOCTL_BASE 'K' | 638 | #define AMDKFD_IOCTL_BASE 'K' |
| 477 | #define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) | 639 | #define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) |
| 478 | #define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type) | 640 | #define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type) |
| @@ -573,7 +735,12 @@ enum kfd_mmio_remap { · 94 unmodified lines | |||
| 573 | #define AMDKFD_IOC_SMI_EVENTS \ | 735 | #define AMDKFD_IOC_SMI_EVENTS \ |
| 574 | AMDKFD_IOWR(0x1F, struct kfd_ioctl_smi_events_args) | 736 | AMDKFD_IOWR(0x1F, struct kfd_ioctl_smi_events_args) |
| 575 | 737 | ||
| 738 | #define AMDKFD_IOC_SVM AMDKFD_IOWR(0x20, struct kfd_ioctl_svm_args) | ||
| 739 | |||
| 740 | #define AMDKFD_IOC_SET_XNACK_MODE \ | ||
| 741 | AMDKFD_IOWR(0x21, struct kfd_ioctl_set_xnack_mode_args) | ||
| 742 | |||
| 576 | #define AMDKFD_COMMAND_START 0x01 | 743 | #define AMDKFD_COMMAND_START 0x01 |
| 577 | #define AMDKFD_COMMAND_END 0x20 | 744 | #define AMDKFD_COMMAND_END 0x22 |
| 578 | 745 | ||
| 579 | #endif | 746 | #endif |