drm-uapi: Sync the panthor header

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36385>
This commit is contained in:
Faith Ekstrand 2025-07-24 17:53:45 +00:00 committed by Boris Brezillon
parent ef760d4c59
commit 8c8864baea

View file

@ -144,6 +144,16 @@ enum drm_panthor_ioctl_id {
* pgoff_t size.
*/
DRM_PANTHOR_SET_USER_MMIO_OFFSET,
/** @DRM_PANTHOR_BO_SYNC: Sync BO data to/from the device */
DRM_PANTHOR_BO_SYNC,
/**
* @DRM_PANTHOR_BO_QUERY_INFO: Query information about a BO.
*
* This is useful for imported BOs.
*/
DRM_PANTHOR_BO_QUERY_INFO,
};
/**
@ -245,6 +255,26 @@ enum drm_panthor_dev_query_type {
DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO,
};
/**
* enum drm_panthor_gpu_coherency: Type of GPU coherency
*/
enum drm_panthor_gpu_coherency {
/**
* @DRM_PANTHOR_GPU_COHERENCY_ACE_LITE: ACE Lite coherency.
*/
DRM_PANTHOR_GPU_COHERENCY_ACE_LITE = 0,
/**
* @DRM_PANTHOR_GPU_COHERENCY_ACE: ACE coherency.
*/
DRM_PANTHOR_GPU_COHERENCY_ACE = 1,
/**
* @DRM_PANTHOR_GPU_COHERENCY_NONE: No coherency.
*/
DRM_PANTHOR_GPU_COHERENCY_NONE = 31,
};
/**
* struct drm_panthor_gpu_info - GPU information
*
@ -301,7 +331,16 @@ struct drm_panthor_gpu_info {
*/
__u32 thread_max_barrier_size;
/** @coherency_features: Coherency features. */
/**
* @coherency_features: Coherency features.
*
* Combination of drm_panthor_gpu_coherency flags.
*
* Note that this is just what the coherency protocols supported by the
* GPU, but the actual coherency in place depends on the SoC
* integration and is reflected by
* drm_panthor_gpu_info::selected_coherency.
*/
__u32 coherency_features;
/** @texture_features: Texture features. */
@ -310,8 +349,12 @@ struct drm_panthor_gpu_info {
/** @as_present: Bitmask encoding the number of address-space exposed by the MMU. */
__u32 as_present;
/** @pad0: MBZ. */
__u32 pad0;
/**
* @select_coherency: Coherency selected for this device.
*
* One of drm_panthor_gpu_coherency.
*/
__u32 selected_coherency;
/** @shader_present: Bitmask encoding the shader cores exposed by the GPU. */
__u64 shader_present;
@ -327,6 +370,9 @@ struct drm_panthor_gpu_info {
/** @pad: MBZ. */
__u32 pad;
/** @gpu_features: Bitmask describing supported GPU-wide features */
__u64 gpu_features;
};
/**
@ -635,6 +681,15 @@ struct drm_panthor_vm_get_state {
enum drm_panthor_bo_flags {
/** @DRM_PANTHOR_BO_NO_MMAP: The buffer object will never be CPU-mapped in userspace. */
DRM_PANTHOR_BO_NO_MMAP = (1 << 0),
/**
* @DRM_PANTHOR_BO_WB_MMAP: Force "Write-Back Cacheable" CPU mapping.
*
* CPU map the buffer object in userspace by forcing the "Write-Back
* Cacheable" cacheability attribute. The mapping otherwise uses the
* "Non-Cacheable" attribute if the GPU is not IO coherent.
*/
DRM_PANTHOR_BO_WB_MMAP = (1 << 1),
};
/**
@ -1037,6 +1092,101 @@ struct drm_panthor_set_user_mmio_offset {
__u64 offset;
};
/**
* enum drm_panthor_bo_sync_op_type - BO sync type
*/
enum drm_panthor_bo_sync_op_type {
/** @DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH: Flush CPU caches. */
DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH = 0,
/** @DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE: Flush and invalidate CPU caches. */
DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE = 1,
};
/**
* struct drm_panthor_bo_sync_op - BO map sync op
*/
struct drm_panthor_bo_sync_op {
/** @handle: Handle of the buffer object to sync. */
__u32 handle;
/** @type: Type of operation. */
__u32 type;
/**
* @offset: Offset into the BO at which the sync range starts.
*
* This will be rounded down to the nearest cache line as needed.
*/
__u64 offset;
/**
* @size: Size of the range to sync
*
* @size + @offset will be rounded up to the nearest cache line as
* needed.
*/
__u64 size;
};
/**
* struct drm_panthor_bo_sync - BO map sync request
*/
struct drm_panthor_bo_sync {
/**
* @ops: Array of struct drm_panthor_bo_sync_op sync operations.
*/
struct drm_panthor_obj_array ops;
};
/**
* enum drm_panthor_bo_extra_flags - Set of flags returned on a BO_QUERY_INFO request
*
* Those are flags reflecting BO properties that are not directly coming from the flags
* passed are creation time, or information on BOs that were imported from other drivers.
*/
enum drm_panthor_bo_extra_flags {
/**
* @DRM_PANTHOR_BO_IS_IMPORTED: BO has been imported from an external driver.
*
* Note that imported dma-buf handles are not flagged as imported if they
* where exported by panthor. Only buffers that are coming from other drivers
* (dma heaps, other GPUs, display controllers, V4L, ...).
*
* It's also important to note that all imported BOs are mapped cached and can't
* be considered IO-coherent even if the GPU is. This means they require explicit
* syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache
* maintenance is not allowed in that case, because extra operations might be
* needed to make changes visible to the CPU/device, like buffer migration when the
* exporter is a GPU with its own VRAM).
*/
DRM_PANTHOR_BO_IS_IMPORTED = (1 << 0),
};
/**
* struct drm_panthor_bo_query_info - Query BO info
*/
struct drm_panthor_bo_query_info {
/** @handle: Handle of the buffer object to query flags on. */
__u32 handle;
/**
* @extra_flags: Combination of enum drm_panthor_bo_extra_flags flags.
*/
__u32 extra_flags;
/**
* @create_flags: Flags passed at creation time.
*
* Combination of enum drm_panthor_bo_flags flags.
* Will be zero if the buffer comes from a different driver.
*/
__u32 create_flags;
/** @pad: Will be zero on return. */
__u32 pad;
};
/**
* DRM_IOCTL_PANTHOR() - Build a Panthor IOCTL number
* @__access: Access type. Must be R, W or RW.
@ -1083,6 +1233,10 @@ enum {
DRM_IOCTL_PANTHOR(WR, BO_SET_LABEL, bo_set_label),
DRM_IOCTL_PANTHOR_SET_USER_MMIO_OFFSET =
DRM_IOCTL_PANTHOR(WR, SET_USER_MMIO_OFFSET, set_user_mmio_offset),
DRM_IOCTL_PANTHOR_BO_SYNC =
DRM_IOCTL_PANTHOR(WR, BO_SYNC, bo_sync),
DRM_IOCTL_PANTHOR_BO_QUERY_INFO =
DRM_IOCTL_PANTHOR(WR, BO_QUERY_INFO, bo_query_info),
};
#if defined(__cplusplus)