Merge tag 'amd-drm-next-5.14-2021-05-19' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
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> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210520031258.231896-1-alexander.deucher@amd.com
This commit is contained in:
@@ -116,8 +116,6 @@ extern "C" {
|
||||
#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2)
|
||||
/* Flag that the memory should be in VRAM and cleared */
|
||||
#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3)
|
||||
/* Flag that create shadow bo(GTT) while allocating vram bo */
|
||||
#define AMDGPU_GEM_CREATE_SHADOW (1 << 4)
|
||||
/* Flag that allocating the BO should use linear VRAM */
|
||||
#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5)
|
||||
/* Flag that BO is always valid in this VM */
|
||||
|
||||
@@ -30,9 +30,10 @@
|
||||
* - 1.1 - initial version
|
||||
* - 1.3 - Add SMI events support
|
||||
* - 1.4 - Indicate new SRAM EDC bit in device properties
|
||||
* - 1.5 - Add SVM API
|
||||
*/
|
||||
#define KFD_IOCTL_MAJOR_VERSION 1
|
||||
#define KFD_IOCTL_MINOR_VERSION 4
|
||||
#define KFD_IOCTL_MINOR_VERSION 5
|
||||
|
||||
struct kfd_ioctl_get_version_args {
|
||||
__u32 major_version; /* from KFD */
|
||||
@@ -473,6 +474,167 @@ enum kfd_mmio_remap {
|
||||
KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4,
|
||||
};
|
||||
|
||||
/* Guarantee host access to memory */
|
||||
#define KFD_IOCTL_SVM_FLAG_HOST_ACCESS 0x00000001
|
||||
/* Fine grained coherency between all devices with access */
|
||||
#define KFD_IOCTL_SVM_FLAG_COHERENT 0x00000002
|
||||
/* Use any GPU in same hive as preferred device */
|
||||
#define KFD_IOCTL_SVM_FLAG_HIVE_LOCAL 0x00000004
|
||||
/* GPUs only read, allows replication */
|
||||
#define KFD_IOCTL_SVM_FLAG_GPU_RO 0x00000008
|
||||
/* Allow execution on GPU */
|
||||
#define KFD_IOCTL_SVM_FLAG_GPU_EXEC 0x00000010
|
||||
/* GPUs mostly read, may allow similar optimizations as RO, but writes fault */
|
||||
#define KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY 0x00000020
|
||||
|
||||
/**
|
||||
* kfd_ioctl_svm_op - SVM ioctl operations
|
||||
*
|
||||
* @KFD_IOCTL_SVM_OP_SET_ATTR: Modify one or more attributes
|
||||
* @KFD_IOCTL_SVM_OP_GET_ATTR: Query one or more attributes
|
||||
*/
|
||||
enum kfd_ioctl_svm_op {
|
||||
KFD_IOCTL_SVM_OP_SET_ATTR,
|
||||
KFD_IOCTL_SVM_OP_GET_ATTR
|
||||
};
|
||||
|
||||
/** kfd_ioctl_svm_location - Enum for preferred and prefetch locations
|
||||
*
|
||||
* GPU IDs are used to specify GPUs as preferred and prefetch locations.
|
||||
* Below definitions are used for system memory or for leaving the preferred
|
||||
* location unspecified.
|
||||
*/
|
||||
enum kfd_ioctl_svm_location {
|
||||
KFD_IOCTL_SVM_LOCATION_SYSMEM = 0,
|
||||
KFD_IOCTL_SVM_LOCATION_UNDEFINED = 0xffffffff
|
||||
};
|
||||
|
||||
/**
|
||||
* kfd_ioctl_svm_attr_type - SVM attribute types
|
||||
*
|
||||
* @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC: gpuid of the preferred location, 0 for
|
||||
* system memory
|
||||
* @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC: gpuid of the prefetch location, 0 for
|
||||
* system memory. Setting this triggers an
|
||||
* immediate prefetch (migration).
|
||||
* @KFD_IOCTL_SVM_ATTR_ACCESS:
|
||||
* @KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE:
|
||||
* @KFD_IOCTL_SVM_ATTR_NO_ACCESS: specify memory access for the gpuid given
|
||||
* by the attribute value
|
||||
* @KFD_IOCTL_SVM_ATTR_SET_FLAGS: bitmask of flags to set (see
|
||||
* KFD_IOCTL_SVM_FLAG_...)
|
||||
* @KFD_IOCTL_SVM_ATTR_CLR_FLAGS: bitmask of flags to clear
|
||||
* @KFD_IOCTL_SVM_ATTR_GRANULARITY: migration granularity
|
||||
* (log2 num pages)
|
||||
*/
|
||||
enum kfd_ioctl_svm_attr_type {
|
||||
KFD_IOCTL_SVM_ATTR_PREFERRED_LOC,
|
||||
KFD_IOCTL_SVM_ATTR_PREFETCH_LOC,
|
||||
KFD_IOCTL_SVM_ATTR_ACCESS,
|
||||
KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE,
|
||||
KFD_IOCTL_SVM_ATTR_NO_ACCESS,
|
||||
KFD_IOCTL_SVM_ATTR_SET_FLAGS,
|
||||
KFD_IOCTL_SVM_ATTR_CLR_FLAGS,
|
||||
KFD_IOCTL_SVM_ATTR_GRANULARITY
|
||||
};
|
||||
|
||||
/**
|
||||
* kfd_ioctl_svm_attribute - Attributes as pairs of type and value
|
||||
*
|
||||
* The meaning of the @value depends on the attribute type.
|
||||
*
|
||||
* @type: attribute type (see enum @kfd_ioctl_svm_attr_type)
|
||||
* @value: attribute value
|
||||
*/
|
||||
struct kfd_ioctl_svm_attribute {
|
||||
__u32 type;
|
||||
__u32 value;
|
||||
};
|
||||
|
||||
/**
|
||||
* kfd_ioctl_svm_args - Arguments for SVM ioctl
|
||||
*
|
||||
* @op specifies the operation to perform (see enum
|
||||
* @kfd_ioctl_svm_op). @start_addr and @size are common for all
|
||||
* operations.
|
||||
*
|
||||
* A variable number of attributes can be given in @attrs.
|
||||
* @nattr specifies the number of attributes. New attributes can be
|
||||
* added in the future without breaking the ABI. If unknown attributes
|
||||
* are given, the function returns -EINVAL.
|
||||
*
|
||||
* @KFD_IOCTL_SVM_OP_SET_ATTR sets attributes for a virtual address
|
||||
* range. It may overlap existing virtual address ranges. If it does,
|
||||
* the existing ranges will be split such that the attribute changes
|
||||
* only apply to the specified address range.
|
||||
*
|
||||
* @KFD_IOCTL_SVM_OP_GET_ATTR returns the intersection of attributes
|
||||
* over all memory in the given range and returns the result as the
|
||||
* attribute value. If different pages have different preferred or
|
||||
* prefetch locations, 0xffffffff will be returned for
|
||||
* @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC or
|
||||
* @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC resepctively. For
|
||||
* @KFD_IOCTL_SVM_ATTR_SET_FLAGS, flags of all pages will be
|
||||
* aggregated by bitwise AND. The minimum migration granularity
|
||||
* throughout the range will be returned for
|
||||
* @KFD_IOCTL_SVM_ATTR_GRANULARITY.
|
||||
*
|
||||
* Querying of accessibility attributes works by initializing the
|
||||
* attribute type to @KFD_IOCTL_SVM_ATTR_ACCESS and the value to the
|
||||
* GPUID being queried. Multiple attributes can be given to allow
|
||||
* querying multiple GPUIDs. The ioctl function overwrites the
|
||||
* attribute type to indicate the access for the specified GPU.
|
||||
*
|
||||
* @KFD_IOCTL_SVM_ATTR_CLR_FLAGS is invalid for
|
||||
* @KFD_IOCTL_SVM_OP_GET_ATTR.
|
||||
*/
|
||||
struct kfd_ioctl_svm_args {
|
||||
__u64 start_addr;
|
||||
__u64 size;
|
||||
__u32 op;
|
||||
__u32 nattr;
|
||||
/* Variable length array of attributes */
|
||||
struct kfd_ioctl_svm_attribute attrs[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* kfd_ioctl_set_xnack_mode_args - Arguments for set_xnack_mode
|
||||
*
|
||||
* @xnack_enabled: [in/out] Whether to enable XNACK mode for this process
|
||||
*
|
||||
* @xnack_enabled indicates whether recoverable page faults should be
|
||||
* enabled for the current process. 0 means disabled, positive means
|
||||
* enabled, negative means leave unchanged. If enabled, virtual address
|
||||
* translations on GFXv9 and later AMD GPUs can return XNACK and retry
|
||||
* the access until a valid PTE is available. This is used to implement
|
||||
* device page faults.
|
||||
*
|
||||
* On output, @xnack_enabled returns the (new) current mode (0 or
|
||||
* positive). Therefore, a negative input value can be used to query
|
||||
* the current mode without changing it.
|
||||
*
|
||||
* The XNACK mode fundamentally changes the way SVM managed memory works
|
||||
* in the driver, with subtle effects on application performance and
|
||||
* functionality.
|
||||
*
|
||||
* Enabling XNACK mode requires shader programs to be compiled
|
||||
* differently. Furthermore, not all GPUs support changing the mode
|
||||
* per-process. Therefore changing the mode is only allowed while no
|
||||
* user mode queues exist in the process. This ensure that no shader
|
||||
* code is running that may be compiled for the wrong mode. And GPUs
|
||||
* that cannot change to the requested mode will prevent the XNACK
|
||||
* mode from occurring. All GPUs used by the process must be in the
|
||||
* same XNACK mode.
|
||||
*
|
||||
* GFXv8 or older GPUs do not support 48 bit virtual addresses or SVM.
|
||||
* Therefore those GPUs are not considered for the XNACK mode switch.
|
||||
*
|
||||
* Return: 0 on success, -errno on failure
|
||||
*/
|
||||
struct kfd_ioctl_set_xnack_mode_args {
|
||||
__s32 xnack_enabled;
|
||||
};
|
||||
|
||||
#define AMDKFD_IOCTL_BASE 'K'
|
||||
#define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr)
|
||||
#define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type)
|
||||
@@ -573,7 +735,12 @@ enum kfd_mmio_remap {
|
||||
#define AMDKFD_IOC_SMI_EVENTS \
|
||||
AMDKFD_IOWR(0x1F, struct kfd_ioctl_smi_events_args)
|
||||
|
||||
#define AMDKFD_IOC_SVM AMDKFD_IOWR(0x20, struct kfd_ioctl_svm_args)
|
||||
|
||||
#define AMDKFD_IOC_SET_XNACK_MODE \
|
||||
AMDKFD_IOWR(0x21, struct kfd_ioctl_set_xnack_mode_args)
|
||||
|
||||
#define AMDKFD_COMMAND_START 0x01
|
||||
#define AMDKFD_COMMAND_END 0x20
|
||||
#define AMDKFD_COMMAND_END 0x22
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user