mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-28 02:16:50 +08:00
Merge tag 'drm-xe-next-2025-12-19' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next
[airlied: fix guc submit double definition] UAPI Changes: - Multi-Queue support (Niranjana) - Add DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE (Brost) - Add NO_COMPRESSION BO flag and query capability (Sanjay) - Add gt_id to struct drm_xe_oa_unit (Ashutosh) - Expose MERT OA unit (Ashutosh) - Sysfs Survivability refactor (Riana) Cross-subsystem Changes: - VFIO: Add device specific vfio_pci driver variant for Intel graphics (Winiarski) Driver Changes: - MAINTAINERS update (Lucas -> Matt) - Add helper to query compression enable status (Xin) - Xe_VM fixes and updates (Shuicheng, Himal) - Documentation fixes (Winiarski, Swaraj, Niranjana) - Kunit fix (Roper) - Fix potential leaks, uaf, null derref, and oversized allocations (Shuicheng, Sanjay, Mika, Tapani) - Other minor fixes like kbuild duplication and sysfs_emit (Shuicheng, Madhur) - Handle msix vector0 interrupt (Venkata) - Scope-based forcewake and runtime PM (Roper, Raag) - GuC/HuC related fixes and refactors (Lucas, Zhanjun, Brost, Julia, Wajdeczko) - Fix conversion from clock ticks to milliseconds (Harish) - SRIOV PF PF: Add support for MERT (Lukasz) - Enable SR-IOV VF migration and other SRIOV updates (Winiarski, Satya, Brost, Wajdeczko, Piotr, Tomasz, Daniele) - Optimize runtime suspend/resume and other PM improvements (Raag) - Some W/a additions and updates (Bala, Harish, Roper) - Use for_each_tlb_inval() to calculate invalidation fences (Roper) - Fix VFIO link error (Arnd) - Fix ix drm_gpusvm_init() arguments (Arnd) - Other OA refactor (Ashutosh) - Refactor PAT and expose debugfs (Xin) - Enable Indirect Ring State for xe3p_xpc (Niranjana) - MEI interrupt fix (Junxiao) - Add stats for mode switching on hw_engine_group (Francois) - DMA-Buf related changes (Thomas) - Multi Queue feature support (Niranjana) - Enable I2C controller for Crescent Island (Raag) - Enable NVM for Crescent Island (Sasha) - Increase TDF timeout (Jagmeet) - Restore engine registers before restarting schedulers after GT reset (Jan) - Page Reclamation Support for Xe3p Platforms (Brian, Brost, Oak) - Fix performance when pagefaults and 3d/display share resources (Brost) - More OA MERT work (Ashutosh) - Fix return values (Dan) - Some log level and messages improvements (Brost) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/aUXUhEgzs6hDLQuu@intel.com
This commit is contained in:
@@ -106,6 +106,7 @@ extern "C" {
|
||||
#define DRM_XE_OBSERVATION 0x0b
|
||||
#define DRM_XE_MADVISE 0x0c
|
||||
#define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e
|
||||
|
||||
/* Must be kept compact -- no holes */
|
||||
|
||||
@@ -123,6 +124,7 @@ extern "C" {
|
||||
#define DRM_IOCTL_XE_OBSERVATION DRM_IOW(DRM_COMMAND_BASE + DRM_XE_OBSERVATION, struct drm_xe_observation_param)
|
||||
#define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise)
|
||||
#define DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_QUERY_MEM_RANGE_ATTRS, struct drm_xe_vm_query_mem_range_attr)
|
||||
#define DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_SET_PROPERTY, struct drm_xe_exec_queue_set_property)
|
||||
|
||||
/**
|
||||
* DOC: Xe IOCTL Extensions
|
||||
@@ -210,8 +212,12 @@ struct drm_xe_ext_set_property {
|
||||
/** @pad: MBZ */
|
||||
__u32 pad;
|
||||
|
||||
/** @value: property value */
|
||||
__u64 value;
|
||||
union {
|
||||
/** @value: property value */
|
||||
__u64 value;
|
||||
/** @ptr: pointer to user value */
|
||||
__u64 ptr;
|
||||
};
|
||||
|
||||
/** @reserved: Reserved */
|
||||
__u64 reserved[2];
|
||||
@@ -403,6 +409,9 @@ struct drm_xe_query_mem_regions {
|
||||
* has low latency hint support
|
||||
* - %DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR - Flag is set if the
|
||||
* device has CPU address mirroring support
|
||||
* - %DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT - Flag is set if the
|
||||
* device supports the userspace hint %DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION.
|
||||
* This is exposed only on Xe2+.
|
||||
* - %DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT - Minimal memory alignment
|
||||
* required by this device, typically SZ_4K or SZ_64K
|
||||
* - %DRM_XE_QUERY_CONFIG_VA_BITS - Maximum bits of a virtual address
|
||||
@@ -421,6 +430,7 @@ struct drm_xe_query_config {
|
||||
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM (1 << 0)
|
||||
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY (1 << 1)
|
||||
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR (1 << 2)
|
||||
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT (1 << 3)
|
||||
#define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT 2
|
||||
#define DRM_XE_QUERY_CONFIG_VA_BITS 3
|
||||
#define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY 4
|
||||
@@ -791,6 +801,17 @@ struct drm_xe_device_query {
|
||||
* need to use VRAM for display surfaces, therefore the kernel requires
|
||||
* setting this flag for such objects, otherwise an error is thrown on
|
||||
* small-bar systems.
|
||||
* - %DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION - Allows userspace to
|
||||
* hint that compression (CCS) should be disabled for the buffer being
|
||||
* created. This can avoid unnecessary memory operations and CCS state
|
||||
* management.
|
||||
* On pre-Xe2 platforms, this flag is currently rejected as compression
|
||||
* control is not supported via PAT index. On Xe2+ platforms, compression
|
||||
* is controlled via PAT entries. If this flag is set, the driver will reject
|
||||
* any VM bind that requests a PAT index enabling compression for this BO.
|
||||
* Note: On dGPU platforms, there is currently no change in behavior with
|
||||
* this flag, but future improvements may leverage it. The current benefit is
|
||||
* primarily applicable to iGPU platforms.
|
||||
*
|
||||
* @cpu_caching supports the following values:
|
||||
* - %DRM_XE_GEM_CPU_CACHING_WB - Allocate the pages with write-back
|
||||
@@ -837,6 +858,7 @@ struct drm_xe_gem_create {
|
||||
#define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0)
|
||||
#define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1)
|
||||
#define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2)
|
||||
#define DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION (1 << 3)
|
||||
/**
|
||||
* @flags: Flags, currently a mask of memory instances of where BO can
|
||||
* be placed
|
||||
@@ -1252,6 +1274,20 @@ struct drm_xe_vm_bind {
|
||||
* Given that going into a power-saving state kills PXP HWDRM sessions,
|
||||
* runtime PM will be blocked while queues of this type are alive.
|
||||
* All PXP queues will be killed if a PXP invalidation event occurs.
|
||||
* - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP - Create a multi-queue group
|
||||
* or add secondary queues to a multi-queue group.
|
||||
* If the extension's 'value' field has %DRM_XE_MULTI_GROUP_CREATE flag set,
|
||||
* then a new multi-queue group is created with this queue as the primary queue
|
||||
* (Q0). Otherwise, the queue gets added to the multi-queue group whose primary
|
||||
* queue's exec_queue_id is specified in the lower 32 bits of the 'value' field.
|
||||
* If the extension's 'value' field has %DRM_XE_MULTI_GROUP_KEEP_ACTIVE flag
|
||||
* set, then the multi-queue group is kept active after the primary queue is
|
||||
* destroyed.
|
||||
* All the other non-relevant bits of extension's 'value' field while adding the
|
||||
* primary or the secondary queues of the group must be set to 0.
|
||||
* - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY - Set the queue
|
||||
* priority within the multi-queue group. Current valid priority values are 0–2
|
||||
* (default is 1), with higher values indicating higher priority.
|
||||
*
|
||||
* The example below shows how to use @drm_xe_exec_queue_create to create
|
||||
* a simple exec_queue (no parallel submission) of class
|
||||
@@ -1292,6 +1328,11 @@ struct drm_xe_exec_queue_create {
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2
|
||||
#define DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE 3
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP 4
|
||||
#define DRM_XE_MULTI_GROUP_CREATE (1ull << 63)
|
||||
#define DRM_XE_MULTI_GROUP_KEEP_ACTIVE (1ull << 62)
|
||||
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY 5
|
||||
/** @extensions: Pointer to the first extension struct, if any */
|
||||
__u64 extensions;
|
||||
|
||||
@@ -1655,6 +1696,9 @@ enum drm_xe_oa_unit_type {
|
||||
|
||||
/** @DRM_XE_OA_UNIT_TYPE_OAM_SAG: OAM_SAG OA unit */
|
||||
DRM_XE_OA_UNIT_TYPE_OAM_SAG,
|
||||
|
||||
/** @DRM_XE_OA_UNIT_TYPE_MERT: MERT OA unit */
|
||||
DRM_XE_OA_UNIT_TYPE_MERT,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1677,12 +1721,19 @@ struct drm_xe_oa_unit {
|
||||
#define DRM_XE_OA_CAPS_OA_BUFFER_SIZE (1 << 2)
|
||||
#define DRM_XE_OA_CAPS_WAIT_NUM_REPORTS (1 << 3)
|
||||
#define DRM_XE_OA_CAPS_OAM (1 << 4)
|
||||
#define DRM_XE_OA_CAPS_OA_UNIT_GT_ID (1 << 5)
|
||||
|
||||
/** @oa_timestamp_freq: OA timestamp freq */
|
||||
__u64 oa_timestamp_freq;
|
||||
|
||||
/** @gt_id: gt id for this OA unit */
|
||||
__u16 gt_id;
|
||||
|
||||
/** @reserved1: MBZ */
|
||||
__u16 reserved1[3];
|
||||
|
||||
/** @reserved: MBZ */
|
||||
__u64 reserved[4];
|
||||
__u64 reserved[3];
|
||||
|
||||
/** @num_engines: number of engines in @eci array */
|
||||
__u64 num_engines;
|
||||
@@ -2274,6 +2325,30 @@ struct drm_xe_vm_query_mem_range_attr {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_xe_exec_queue_set_property - exec queue set property
|
||||
*
|
||||
* Sets execution queue properties dynamically.
|
||||
* Currently only %DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY
|
||||
* property can be dynamically set.
|
||||
*/
|
||||
struct drm_xe_exec_queue_set_property {
|
||||
/** @extensions: Pointer to the first extension struct, if any */
|
||||
__u64 extensions;
|
||||
|
||||
/** @exec_queue_id: Exec queue ID */
|
||||
__u32 exec_queue_id;
|
||||
|
||||
/** @property: property to set */
|
||||
__u32 property;
|
||||
|
||||
/** @value: property value */
|
||||
__u64 value;
|
||||
|
||||
/** @reserved: Reserved */
|
||||
__u64 reserved[2];
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user