1*61046927SAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */ 2*61046927SAndroid Build Coastguard Worker /* Copyright (C) 2023 Collabora ltd. */ 3*61046927SAndroid Build Coastguard Worker #ifndef _PANTHOR_DRM_H_ 4*61046927SAndroid Build Coastguard Worker #define _PANTHOR_DRM_H_ 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker #include "drm.h" 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 9*61046927SAndroid Build Coastguard Worker extern "C" { 10*61046927SAndroid Build Coastguard Worker #endif 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker /** 13*61046927SAndroid Build Coastguard Worker * DOC: Introduction 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * This documentation describes the Panthor IOCTLs. 16*61046927SAndroid Build Coastguard Worker * 17*61046927SAndroid Build Coastguard Worker * Just a few generic rules about the data passed to the Panthor IOCTLs: 18*61046927SAndroid Build Coastguard Worker * 19*61046927SAndroid Build Coastguard Worker * - Structures must be aligned on 64-bit/8-byte. If the object is not 20*61046927SAndroid Build Coastguard Worker * naturally aligned, a padding field must be added. 21*61046927SAndroid Build Coastguard Worker * - Fields must be explicitly aligned to their natural type alignment with 22*61046927SAndroid Build Coastguard Worker * pad[0..N] fields. 23*61046927SAndroid Build Coastguard Worker * - All padding fields will be checked by the driver to make sure they are 24*61046927SAndroid Build Coastguard Worker * zeroed. 25*61046927SAndroid Build Coastguard Worker * - Flags can be added, but not removed/replaced. 26*61046927SAndroid Build Coastguard Worker * - New fields can be added to the main structures (the structures 27*61046927SAndroid Build Coastguard Worker * directly passed to the ioctl). Those fields can be added at the end of 28*61046927SAndroid Build Coastguard Worker * the structure, or replace existing padding fields. Any new field being 29*61046927SAndroid Build Coastguard Worker * added must preserve the behavior that existed before those fields were 30*61046927SAndroid Build Coastguard Worker * added when a value of zero is passed. 31*61046927SAndroid Build Coastguard Worker * - New fields can be added to indirect objects (objects pointed by the 32*61046927SAndroid Build Coastguard Worker * main structure), iff those objects are passed a size to reflect the 33*61046927SAndroid Build Coastguard Worker * size known by the userspace driver (see drm_panthor_obj_array::stride 34*61046927SAndroid Build Coastguard Worker * or drm_panthor_dev_query::size). 35*61046927SAndroid Build Coastguard Worker * - If the kernel driver is too old to know some fields, those will be 36*61046927SAndroid Build Coastguard Worker * ignored if zero, and otherwise rejected (and so will be zero on output). 37*61046927SAndroid Build Coastguard Worker * - If userspace is too old to know some fields, those will be zeroed 38*61046927SAndroid Build Coastguard Worker * (input) before the structure is parsed by the kernel driver. 39*61046927SAndroid Build Coastguard Worker * - Each new flag/field addition must come with a driver version update so 40*61046927SAndroid Build Coastguard Worker * the userspace driver doesn't have to trial and error to know which 41*61046927SAndroid Build Coastguard Worker * flags are supported. 42*61046927SAndroid Build Coastguard Worker * - Structures should not contain unions, as this would defeat the 43*61046927SAndroid Build Coastguard Worker * extensibility of such structures. 44*61046927SAndroid Build Coastguard Worker * - IOCTLs can't be removed or replaced. New IOCTL IDs should be placed 45*61046927SAndroid Build Coastguard Worker * at the end of the drm_panthor_ioctl_id enum. 46*61046927SAndroid Build Coastguard Worker */ 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker /** 49*61046927SAndroid Build Coastguard Worker * DOC: MMIO regions exposed to userspace. 50*61046927SAndroid Build Coastguard Worker * 51*61046927SAndroid Build Coastguard Worker * .. c:macro:: DRM_PANTHOR_USER_MMIO_OFFSET 52*61046927SAndroid Build Coastguard Worker * 53*61046927SAndroid Build Coastguard Worker * File offset for all MMIO regions being exposed to userspace. Don't use 54*61046927SAndroid Build Coastguard Worker * this value directly, use DRM_PANTHOR_USER_<name>_OFFSET values instead. 55*61046927SAndroid Build Coastguard Worker * pgoffset passed to mmap2() is an unsigned long, which forces us to use a 56*61046927SAndroid Build Coastguard Worker * different offset on 32-bit and 64-bit systems. 57*61046927SAndroid Build Coastguard Worker * 58*61046927SAndroid Build Coastguard Worker * .. c:macro:: DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET 59*61046927SAndroid Build Coastguard Worker * 60*61046927SAndroid Build Coastguard Worker * File offset for the LATEST_FLUSH_ID register. The Userspace driver controls 61*61046927SAndroid Build Coastguard Worker * GPU cache flushing through CS instructions, but the flush reduction 62*61046927SAndroid Build Coastguard Worker * mechanism requires a flush_id. This flush_id could be queried with an 63*61046927SAndroid Build Coastguard Worker * ioctl, but Arm provides a well-isolated register page containing only this 64*61046927SAndroid Build Coastguard Worker * read-only register, so let's expose this page through a static mmap offset 65*61046927SAndroid Build Coastguard Worker * and allow direct mapping of this MMIO region so we can avoid the 66*61046927SAndroid Build Coastguard Worker * user <-> kernel round-trip. 67*61046927SAndroid Build Coastguard Worker */ 68*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_USER_MMIO_OFFSET_32BIT (1ull << 43) 69*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_USER_MMIO_OFFSET_64BIT (1ull << 56) 70*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_USER_MMIO_OFFSET (sizeof(unsigned long) < 8 ? \ 71*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_USER_MMIO_OFFSET_32BIT : \ 72*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_USER_MMIO_OFFSET_64BIT) 73*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET (DRM_PANTHOR_USER_MMIO_OFFSET | 0) 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker /** 76*61046927SAndroid Build Coastguard Worker * DOC: IOCTL IDs 77*61046927SAndroid Build Coastguard Worker * 78*61046927SAndroid Build Coastguard Worker * enum drm_panthor_ioctl_id - IOCTL IDs 79*61046927SAndroid Build Coastguard Worker * 80*61046927SAndroid Build Coastguard Worker * Place new ioctls at the end, don't re-order, don't replace or remove entries. 81*61046927SAndroid Build Coastguard Worker * 82*61046927SAndroid Build Coastguard Worker * These IDs are not meant to be used directly. Use the DRM_IOCTL_PANTHOR_xxx 83*61046927SAndroid Build Coastguard Worker * definitions instead. 84*61046927SAndroid Build Coastguard Worker */ 85*61046927SAndroid Build Coastguard Worker enum drm_panthor_ioctl_id { 86*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_DEV_QUERY: Query device information. */ 87*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_DEV_QUERY = 0, 88*61046927SAndroid Build Coastguard Worker 89*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_CREATE: Create a VM. */ 90*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_CREATE, 91*61046927SAndroid Build Coastguard Worker 92*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_DESTROY: Destroy a VM. */ 93*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_DESTROY, 94*61046927SAndroid Build Coastguard Worker 95*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_BIND: Bind/unbind memory to a VM. */ 96*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND, 97*61046927SAndroid Build Coastguard Worker 98*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_GET_STATE: Get VM state. */ 99*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_GET_STATE, 100*61046927SAndroid Build Coastguard Worker 101*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_BO_CREATE: Create a buffer object. */ 102*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_BO_CREATE, 103*61046927SAndroid Build Coastguard Worker 104*61046927SAndroid Build Coastguard Worker /** 105*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_BO_MMAP_OFFSET: Get the file offset to pass to 106*61046927SAndroid Build Coastguard Worker * mmap to map a GEM object. 107*61046927SAndroid Build Coastguard Worker */ 108*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_BO_MMAP_OFFSET, 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_GROUP_CREATE: Create a scheduling group. */ 111*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_CREATE, 112*61046927SAndroid Build Coastguard Worker 113*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_GROUP_DESTROY: Destroy a scheduling group. */ 114*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_DESTROY, 115*61046927SAndroid Build Coastguard Worker 116*61046927SAndroid Build Coastguard Worker /** 117*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_GROUP_SUBMIT: Submit jobs to queues belonging 118*61046927SAndroid Build Coastguard Worker * to a specific scheduling group. 119*61046927SAndroid Build Coastguard Worker */ 120*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_SUBMIT, 121*61046927SAndroid Build Coastguard Worker 122*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_GROUP_GET_STATE: Get the state of a scheduling group. */ 123*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_GET_STATE, 124*61046927SAndroid Build Coastguard Worker 125*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_TILER_HEAP_CREATE: Create a tiler heap. */ 126*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_TILER_HEAP_CREATE, 127*61046927SAndroid Build Coastguard Worker 128*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_TILER_HEAP_DESTROY: Destroy a tiler heap. */ 129*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_TILER_HEAP_DESTROY, 130*61046927SAndroid Build Coastguard Worker }; 131*61046927SAndroid Build Coastguard Worker 132*61046927SAndroid Build Coastguard Worker /** 133*61046927SAndroid Build Coastguard Worker * DRM_IOCTL_PANTHOR() - Build a Panthor IOCTL number 134*61046927SAndroid Build Coastguard Worker * @__access: Access type. Must be R, W or RW. 135*61046927SAndroid Build Coastguard Worker * @__id: One of the DRM_PANTHOR_xxx id. 136*61046927SAndroid Build Coastguard Worker * @__type: Suffix of the type being passed to the IOCTL. 137*61046927SAndroid Build Coastguard Worker * 138*61046927SAndroid Build Coastguard Worker * Don't use this macro directly, use the DRM_IOCTL_PANTHOR_xxx 139*61046927SAndroid Build Coastguard Worker * values instead. 140*61046927SAndroid Build Coastguard Worker * 141*61046927SAndroid Build Coastguard Worker * Return: An IOCTL number to be passed to ioctl() from userspace. 142*61046927SAndroid Build Coastguard Worker */ 143*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR(__access, __id, __type) \ 144*61046927SAndroid Build Coastguard Worker DRM_IO ## __access(DRM_COMMAND_BASE + DRM_PANTHOR_ ## __id, \ 145*61046927SAndroid Build Coastguard Worker struct drm_panthor_ ## __type) 146*61046927SAndroid Build Coastguard Worker 147*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_DEV_QUERY \ 148*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, DEV_QUERY, dev_query) 149*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_VM_CREATE \ 150*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, VM_CREATE, vm_create) 151*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_VM_DESTROY \ 152*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, VM_DESTROY, vm_destroy) 153*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_VM_BIND \ 154*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, VM_BIND, vm_bind) 155*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_VM_GET_STATE \ 156*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, VM_GET_STATE, vm_get_state) 157*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_BO_CREATE \ 158*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, BO_CREATE, bo_create) 159*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET \ 160*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, BO_MMAP_OFFSET, bo_mmap_offset) 161*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_GROUP_CREATE \ 162*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, GROUP_CREATE, group_create) 163*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_GROUP_DESTROY \ 164*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, GROUP_DESTROY, group_destroy) 165*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_GROUP_SUBMIT \ 166*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, GROUP_SUBMIT, group_submit) 167*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_GROUP_GET_STATE \ 168*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, GROUP_GET_STATE, group_get_state) 169*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE \ 170*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, TILER_HEAP_CREATE, tiler_heap_create) 171*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY \ 172*61046927SAndroid Build Coastguard Worker DRM_IOCTL_PANTHOR(WR, TILER_HEAP_DESTROY, tiler_heap_destroy) 173*61046927SAndroid Build Coastguard Worker 174*61046927SAndroid Build Coastguard Worker /** 175*61046927SAndroid Build Coastguard Worker * DOC: IOCTL arguments 176*61046927SAndroid Build Coastguard Worker */ 177*61046927SAndroid Build Coastguard Worker 178*61046927SAndroid Build Coastguard Worker /** 179*61046927SAndroid Build Coastguard Worker * struct drm_panthor_obj_array - Object array. 180*61046927SAndroid Build Coastguard Worker * 181*61046927SAndroid Build Coastguard Worker * This object is used to pass an array of objects whose size is subject to changes in 182*61046927SAndroid Build Coastguard Worker * future versions of the driver. In order to support this mutability, we pass a stride 183*61046927SAndroid Build Coastguard Worker * describing the size of the object as known by userspace. 184*61046927SAndroid Build Coastguard Worker * 185*61046927SAndroid Build Coastguard Worker * You shouldn't fill drm_panthor_obj_array fields directly. You should instead use 186*61046927SAndroid Build Coastguard Worker * the DRM_PANTHOR_OBJ_ARRAY() macro that takes care of initializing the stride to 187*61046927SAndroid Build Coastguard Worker * the object size. 188*61046927SAndroid Build Coastguard Worker */ 189*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array { 190*61046927SAndroid Build Coastguard Worker /** @stride: Stride of object struct. Used for versioning. */ 191*61046927SAndroid Build Coastguard Worker __u32 stride; 192*61046927SAndroid Build Coastguard Worker 193*61046927SAndroid Build Coastguard Worker /** @count: Number of objects in the array. */ 194*61046927SAndroid Build Coastguard Worker __u32 count; 195*61046927SAndroid Build Coastguard Worker 196*61046927SAndroid Build Coastguard Worker /** @array: User pointer to an array of objects. */ 197*61046927SAndroid Build Coastguard Worker __u64 array; 198*61046927SAndroid Build Coastguard Worker }; 199*61046927SAndroid Build Coastguard Worker 200*61046927SAndroid Build Coastguard Worker /** 201*61046927SAndroid Build Coastguard Worker * DRM_PANTHOR_OBJ_ARRAY() - Initialize a drm_panthor_obj_array field. 202*61046927SAndroid Build Coastguard Worker * @cnt: Number of elements in the array. 203*61046927SAndroid Build Coastguard Worker * @ptr: Pointer to the array to pass to the kernel. 204*61046927SAndroid Build Coastguard Worker * 205*61046927SAndroid Build Coastguard Worker * Macro initializing a drm_panthor_obj_array based on the object size as known 206*61046927SAndroid Build Coastguard Worker * by userspace. 207*61046927SAndroid Build Coastguard Worker */ 208*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_OBJ_ARRAY(cnt, ptr) \ 209*61046927SAndroid Build Coastguard Worker { .stride = sizeof((ptr)[0]), .count = (cnt), .array = (__u64)(uintptr_t)(ptr) } 210*61046927SAndroid Build Coastguard Worker 211*61046927SAndroid Build Coastguard Worker /** 212*61046927SAndroid Build Coastguard Worker * enum drm_panthor_sync_op_flags - Synchronization operation flags. 213*61046927SAndroid Build Coastguard Worker */ 214*61046927SAndroid Build Coastguard Worker enum drm_panthor_sync_op_flags { 215*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK: Synchronization handle type mask. */ 216*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK = 0xff, 217*61046927SAndroid Build Coastguard Worker 218*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ: Synchronization object type. */ 219*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ = 0, 220*61046927SAndroid Build Coastguard Worker 221*61046927SAndroid Build Coastguard Worker /** 222*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ: Timeline synchronization 223*61046927SAndroid Build Coastguard Worker * object type. 224*61046927SAndroid Build Coastguard Worker */ 225*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ = 1, 226*61046927SAndroid Build Coastguard Worker 227*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_SYNC_OP_WAIT: Wait operation. */ 228*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_SYNC_OP_WAIT = 0 << 31, 229*61046927SAndroid Build Coastguard Worker 230*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_SYNC_OP_SIGNAL: Signal operation. */ 231*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_SYNC_OP_SIGNAL = (int)(1u << 31), 232*61046927SAndroid Build Coastguard Worker }; 233*61046927SAndroid Build Coastguard Worker 234*61046927SAndroid Build Coastguard Worker /** 235*61046927SAndroid Build Coastguard Worker * struct drm_panthor_sync_op - Synchronization operation. 236*61046927SAndroid Build Coastguard Worker */ 237*61046927SAndroid Build Coastguard Worker struct drm_panthor_sync_op { 238*61046927SAndroid Build Coastguard Worker /** @flags: Synchronization operation flags. Combination of DRM_PANTHOR_SYNC_OP values. */ 239*61046927SAndroid Build Coastguard Worker __u32 flags; 240*61046927SAndroid Build Coastguard Worker 241*61046927SAndroid Build Coastguard Worker /** @handle: Sync handle. */ 242*61046927SAndroid Build Coastguard Worker __u32 handle; 243*61046927SAndroid Build Coastguard Worker 244*61046927SAndroid Build Coastguard Worker /** 245*61046927SAndroid Build Coastguard Worker * @timeline_value: MBZ if 246*61046927SAndroid Build Coastguard Worker * (flags & DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK) != 247*61046927SAndroid Build Coastguard Worker * DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ. 248*61046927SAndroid Build Coastguard Worker */ 249*61046927SAndroid Build Coastguard Worker __u64 timeline_value; 250*61046927SAndroid Build Coastguard Worker }; 251*61046927SAndroid Build Coastguard Worker 252*61046927SAndroid Build Coastguard Worker /** 253*61046927SAndroid Build Coastguard Worker * enum drm_panthor_dev_query_type - Query type 254*61046927SAndroid Build Coastguard Worker * 255*61046927SAndroid Build Coastguard Worker * Place new types at the end, don't re-order, don't remove or replace. 256*61046927SAndroid Build Coastguard Worker */ 257*61046927SAndroid Build Coastguard Worker enum drm_panthor_dev_query_type { 258*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_DEV_QUERY_GPU_INFO: Query GPU information. */ 259*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_DEV_QUERY_GPU_INFO = 0, 260*61046927SAndroid Build Coastguard Worker 261*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_DEV_QUERY_CSIF_INFO: Query command-stream interface information. */ 262*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_DEV_QUERY_CSIF_INFO, 263*61046927SAndroid Build Coastguard Worker 264*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */ 265*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO, 266*61046927SAndroid Build Coastguard Worker }; 267*61046927SAndroid Build Coastguard Worker 268*61046927SAndroid Build Coastguard Worker /** 269*61046927SAndroid Build Coastguard Worker * struct drm_panthor_gpu_info - GPU information 270*61046927SAndroid Build Coastguard Worker * 271*61046927SAndroid Build Coastguard Worker * Structure grouping all queryable information relating to the GPU. 272*61046927SAndroid Build Coastguard Worker */ 273*61046927SAndroid Build Coastguard Worker struct drm_panthor_gpu_info { 274*61046927SAndroid Build Coastguard Worker /** @gpu_id : GPU ID. */ 275*61046927SAndroid Build Coastguard Worker __u32 gpu_id; 276*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_ARCH_MAJOR(x) ((x) >> 28) 277*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_ARCH_MINOR(x) (((x) >> 24) & 0xf) 278*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_ARCH_REV(x) (((x) >> 20) & 0xf) 279*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_PRODUCT_MAJOR(x) (((x) >> 16) & 0xf) 280*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_VERSION_MAJOR(x) (((x) >> 12) & 0xf) 281*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_VERSION_MINOR(x) (((x) >> 4) & 0xff) 282*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_VERSION_STATUS(x) ((x) & 0xf) 283*61046927SAndroid Build Coastguard Worker 284*61046927SAndroid Build Coastguard Worker /** @gpu_rev: GPU revision. */ 285*61046927SAndroid Build Coastguard Worker __u32 gpu_rev; 286*61046927SAndroid Build Coastguard Worker 287*61046927SAndroid Build Coastguard Worker /** @csf_id: Command stream frontend ID. */ 288*61046927SAndroid Build Coastguard Worker __u32 csf_id; 289*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_CSHW_MAJOR(x) (((x) >> 26) & 0x3f) 290*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_CSHW_MINOR(x) (((x) >> 20) & 0x3f) 291*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_CSHW_REV(x) (((x) >> 16) & 0xf) 292*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_MCU_MAJOR(x) (((x) >> 10) & 0x3f) 293*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_MCU_MINOR(x) (((x) >> 4) & 0x3f) 294*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_MCU_REV(x) ((x) & 0xf) 295*61046927SAndroid Build Coastguard Worker 296*61046927SAndroid Build Coastguard Worker /** @l2_features: L2-cache features. */ 297*61046927SAndroid Build Coastguard Worker __u32 l2_features; 298*61046927SAndroid Build Coastguard Worker 299*61046927SAndroid Build Coastguard Worker /** @tiler_features: Tiler features. */ 300*61046927SAndroid Build Coastguard Worker __u32 tiler_features; 301*61046927SAndroid Build Coastguard Worker 302*61046927SAndroid Build Coastguard Worker /** @mem_features: Memory features. */ 303*61046927SAndroid Build Coastguard Worker __u32 mem_features; 304*61046927SAndroid Build Coastguard Worker 305*61046927SAndroid Build Coastguard Worker /** @mmu_features: MMU features. */ 306*61046927SAndroid Build Coastguard Worker __u32 mmu_features; 307*61046927SAndroid Build Coastguard Worker #define DRM_PANTHOR_MMU_VA_BITS(x) ((x) & 0xff) 308*61046927SAndroid Build Coastguard Worker 309*61046927SAndroid Build Coastguard Worker /** @thread_features: Thread features. */ 310*61046927SAndroid Build Coastguard Worker __u32 thread_features; 311*61046927SAndroid Build Coastguard Worker 312*61046927SAndroid Build Coastguard Worker /** @max_threads: Maximum number of threads. */ 313*61046927SAndroid Build Coastguard Worker __u32 max_threads; 314*61046927SAndroid Build Coastguard Worker 315*61046927SAndroid Build Coastguard Worker /** @thread_max_workgroup_size: Maximum workgroup size. */ 316*61046927SAndroid Build Coastguard Worker __u32 thread_max_workgroup_size; 317*61046927SAndroid Build Coastguard Worker 318*61046927SAndroid Build Coastguard Worker /** 319*61046927SAndroid Build Coastguard Worker * @thread_max_barrier_size: Maximum number of threads that can wait 320*61046927SAndroid Build Coastguard Worker * simultaneously on a barrier. 321*61046927SAndroid Build Coastguard Worker */ 322*61046927SAndroid Build Coastguard Worker __u32 thread_max_barrier_size; 323*61046927SAndroid Build Coastguard Worker 324*61046927SAndroid Build Coastguard Worker /** @coherency_features: Coherency features. */ 325*61046927SAndroid Build Coastguard Worker __u32 coherency_features; 326*61046927SAndroid Build Coastguard Worker 327*61046927SAndroid Build Coastguard Worker /** @texture_features: Texture features. */ 328*61046927SAndroid Build Coastguard Worker __u32 texture_features[4]; 329*61046927SAndroid Build Coastguard Worker 330*61046927SAndroid Build Coastguard Worker /** @as_present: Bitmask encoding the number of address-space exposed by the MMU. */ 331*61046927SAndroid Build Coastguard Worker __u32 as_present; 332*61046927SAndroid Build Coastguard Worker 333*61046927SAndroid Build Coastguard Worker /** @shader_present: Bitmask encoding the shader cores exposed by the GPU. */ 334*61046927SAndroid Build Coastguard Worker __u64 shader_present; 335*61046927SAndroid Build Coastguard Worker 336*61046927SAndroid Build Coastguard Worker /** @l2_present: Bitmask encoding the L2 caches exposed by the GPU. */ 337*61046927SAndroid Build Coastguard Worker __u64 l2_present; 338*61046927SAndroid Build Coastguard Worker 339*61046927SAndroid Build Coastguard Worker /** @tiler_present: Bitmask encoding the tiler units exposed by the GPU. */ 340*61046927SAndroid Build Coastguard Worker __u64 tiler_present; 341*61046927SAndroid Build Coastguard Worker 342*61046927SAndroid Build Coastguard Worker /** @core_features: Used to discriminate core variants when they exist. */ 343*61046927SAndroid Build Coastguard Worker __u32 core_features; 344*61046927SAndroid Build Coastguard Worker 345*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 346*61046927SAndroid Build Coastguard Worker __u32 pad; 347*61046927SAndroid Build Coastguard Worker }; 348*61046927SAndroid Build Coastguard Worker 349*61046927SAndroid Build Coastguard Worker /** 350*61046927SAndroid Build Coastguard Worker * struct drm_panthor_csif_info - Command stream interface information 351*61046927SAndroid Build Coastguard Worker * 352*61046927SAndroid Build Coastguard Worker * Structure grouping all queryable information relating to the command stream interface. 353*61046927SAndroid Build Coastguard Worker */ 354*61046927SAndroid Build Coastguard Worker struct drm_panthor_csif_info { 355*61046927SAndroid Build Coastguard Worker /** @csg_slot_count: Number of command stream group slots exposed by the firmware. */ 356*61046927SAndroid Build Coastguard Worker __u32 csg_slot_count; 357*61046927SAndroid Build Coastguard Worker 358*61046927SAndroid Build Coastguard Worker /** @cs_slot_count: Number of command stream slots per group. */ 359*61046927SAndroid Build Coastguard Worker __u32 cs_slot_count; 360*61046927SAndroid Build Coastguard Worker 361*61046927SAndroid Build Coastguard Worker /** @cs_reg_count: Number of command stream registers. */ 362*61046927SAndroid Build Coastguard Worker __u32 cs_reg_count; 363*61046927SAndroid Build Coastguard Worker 364*61046927SAndroid Build Coastguard Worker /** @scoreboard_slot_count: Number of scoreboard slots. */ 365*61046927SAndroid Build Coastguard Worker __u32 scoreboard_slot_count; 366*61046927SAndroid Build Coastguard Worker 367*61046927SAndroid Build Coastguard Worker /** 368*61046927SAndroid Build Coastguard Worker * @unpreserved_cs_reg_count: Number of command stream registers reserved by 369*61046927SAndroid Build Coastguard Worker * the kernel driver to call a userspace command stream. 370*61046927SAndroid Build Coastguard Worker * 371*61046927SAndroid Build Coastguard Worker * All registers can be used by a userspace command stream, but the 372*61046927SAndroid Build Coastguard Worker * [cs_slot_count - unpreserved_cs_reg_count .. cs_slot_count] registers are 373*61046927SAndroid Build Coastguard Worker * used by the kernel when DRM_PANTHOR_IOCTL_GROUP_SUBMIT is called. 374*61046927SAndroid Build Coastguard Worker */ 375*61046927SAndroid Build Coastguard Worker __u32 unpreserved_cs_reg_count; 376*61046927SAndroid Build Coastguard Worker 377*61046927SAndroid Build Coastguard Worker /** 378*61046927SAndroid Build Coastguard Worker * @pad: Padding field, set to zero. 379*61046927SAndroid Build Coastguard Worker */ 380*61046927SAndroid Build Coastguard Worker __u32 pad; 381*61046927SAndroid Build Coastguard Worker }; 382*61046927SAndroid Build Coastguard Worker 383*61046927SAndroid Build Coastguard Worker /** 384*61046927SAndroid Build Coastguard Worker * struct drm_panthor_timestamp_info - Timestamp information 385*61046927SAndroid Build Coastguard Worker * 386*61046927SAndroid Build Coastguard Worker * Structure grouping all queryable information relating to the GPU timestamp. 387*61046927SAndroid Build Coastguard Worker */ 388*61046927SAndroid Build Coastguard Worker struct drm_panthor_timestamp_info { 389*61046927SAndroid Build Coastguard Worker /** 390*61046927SAndroid Build Coastguard Worker * @timestamp_frequency: The frequency of the timestamp timer or 0 if 391*61046927SAndroid Build Coastguard Worker * unknown. 392*61046927SAndroid Build Coastguard Worker */ 393*61046927SAndroid Build Coastguard Worker __u64 timestamp_frequency; 394*61046927SAndroid Build Coastguard Worker 395*61046927SAndroid Build Coastguard Worker /** @current_timestamp: The current timestamp. */ 396*61046927SAndroid Build Coastguard Worker __u64 current_timestamp; 397*61046927SAndroid Build Coastguard Worker 398*61046927SAndroid Build Coastguard Worker /** @timestamp_offset: The offset of the timestamp timer. */ 399*61046927SAndroid Build Coastguard Worker __u64 timestamp_offset; 400*61046927SAndroid Build Coastguard Worker }; 401*61046927SAndroid Build Coastguard Worker 402*61046927SAndroid Build Coastguard Worker /** 403*61046927SAndroid Build Coastguard Worker * struct drm_panthor_dev_query - Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY 404*61046927SAndroid Build Coastguard Worker */ 405*61046927SAndroid Build Coastguard Worker struct drm_panthor_dev_query { 406*61046927SAndroid Build Coastguard Worker /** @type: the query type (see drm_panthor_dev_query_type). */ 407*61046927SAndroid Build Coastguard Worker __u32 type; 408*61046927SAndroid Build Coastguard Worker 409*61046927SAndroid Build Coastguard Worker /** 410*61046927SAndroid Build Coastguard Worker * @size: size of the type being queried. 411*61046927SAndroid Build Coastguard Worker * 412*61046927SAndroid Build Coastguard Worker * If pointer is NULL, size is updated by the driver to provide the 413*61046927SAndroid Build Coastguard Worker * output structure size. If pointer is not NULL, the driver will 414*61046927SAndroid Build Coastguard Worker * only copy min(size, actual_structure_size) bytes to the pointer, 415*61046927SAndroid Build Coastguard Worker * and update the size accordingly. This allows us to extend query 416*61046927SAndroid Build Coastguard Worker * types without breaking userspace. 417*61046927SAndroid Build Coastguard Worker */ 418*61046927SAndroid Build Coastguard Worker __u32 size; 419*61046927SAndroid Build Coastguard Worker 420*61046927SAndroid Build Coastguard Worker /** 421*61046927SAndroid Build Coastguard Worker * @pointer: user pointer to a query type struct. 422*61046927SAndroid Build Coastguard Worker * 423*61046927SAndroid Build Coastguard Worker * Pointer can be NULL, in which case, nothing is copied, but the 424*61046927SAndroid Build Coastguard Worker * actual structure size is returned. If not NULL, it must point to 425*61046927SAndroid Build Coastguard Worker * a location that's large enough to hold size bytes. 426*61046927SAndroid Build Coastguard Worker */ 427*61046927SAndroid Build Coastguard Worker __u64 pointer; 428*61046927SAndroid Build Coastguard Worker }; 429*61046927SAndroid Build Coastguard Worker 430*61046927SAndroid Build Coastguard Worker /** 431*61046927SAndroid Build Coastguard Worker * struct drm_panthor_vm_create - Arguments passed to DRM_PANTHOR_IOCTL_VM_CREATE 432*61046927SAndroid Build Coastguard Worker */ 433*61046927SAndroid Build Coastguard Worker struct drm_panthor_vm_create { 434*61046927SAndroid Build Coastguard Worker /** @flags: VM flags, MBZ. */ 435*61046927SAndroid Build Coastguard Worker __u32 flags; 436*61046927SAndroid Build Coastguard Worker 437*61046927SAndroid Build Coastguard Worker /** @id: Returned VM ID. */ 438*61046927SAndroid Build Coastguard Worker __u32 id; 439*61046927SAndroid Build Coastguard Worker 440*61046927SAndroid Build Coastguard Worker /** 441*61046927SAndroid Build Coastguard Worker * @user_va_range: Size of the VA space reserved for user objects. 442*61046927SAndroid Build Coastguard Worker * 443*61046927SAndroid Build Coastguard Worker * The kernel will pick the remaining space to map kernel-only objects to the 444*61046927SAndroid Build Coastguard Worker * VM (heap chunks, heap context, ring buffers, kernel synchronization objects, 445*61046927SAndroid Build Coastguard Worker * ...). If the space left for kernel objects is too small, kernel object 446*61046927SAndroid Build Coastguard Worker * allocation will fail further down the road. One can use 447*61046927SAndroid Build Coastguard Worker * drm_panthor_gpu_info::mmu_features to extract the total virtual address 448*61046927SAndroid Build Coastguard Worker * range, and chose a user_va_range that leaves some space to the kernel. 449*61046927SAndroid Build Coastguard Worker * 450*61046927SAndroid Build Coastguard Worker * If user_va_range is zero, the kernel will pick a sensible value based on 451*61046927SAndroid Build Coastguard Worker * TASK_SIZE and the virtual range supported by the GPU MMU (the kernel/user 452*61046927SAndroid Build Coastguard Worker * split should leave enough VA space for userspace processes to support SVM, 453*61046927SAndroid Build Coastguard Worker * while still allowing the kernel to map some amount of kernel objects in 454*61046927SAndroid Build Coastguard Worker * the kernel VA range). The value chosen by the driver will be returned in 455*61046927SAndroid Build Coastguard Worker * @user_va_range. 456*61046927SAndroid Build Coastguard Worker * 457*61046927SAndroid Build Coastguard Worker * User VA space always starts at 0x0, kernel VA space is always placed after 458*61046927SAndroid Build Coastguard Worker * the user VA range. 459*61046927SAndroid Build Coastguard Worker */ 460*61046927SAndroid Build Coastguard Worker __u64 user_va_range; 461*61046927SAndroid Build Coastguard Worker }; 462*61046927SAndroid Build Coastguard Worker 463*61046927SAndroid Build Coastguard Worker /** 464*61046927SAndroid Build Coastguard Worker * struct drm_panthor_vm_destroy - Arguments passed to DRM_PANTHOR_IOCTL_VM_DESTROY 465*61046927SAndroid Build Coastguard Worker */ 466*61046927SAndroid Build Coastguard Worker struct drm_panthor_vm_destroy { 467*61046927SAndroid Build Coastguard Worker /** @id: ID of the VM to destroy. */ 468*61046927SAndroid Build Coastguard Worker __u32 id; 469*61046927SAndroid Build Coastguard Worker 470*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 471*61046927SAndroid Build Coastguard Worker __u32 pad; 472*61046927SAndroid Build Coastguard Worker }; 473*61046927SAndroid Build Coastguard Worker 474*61046927SAndroid Build Coastguard Worker /** 475*61046927SAndroid Build Coastguard Worker * enum drm_panthor_vm_bind_op_flags - VM bind operation flags 476*61046927SAndroid Build Coastguard Worker */ 477*61046927SAndroid Build Coastguard Worker enum drm_panthor_vm_bind_op_flags { 478*61046927SAndroid Build Coastguard Worker /** 479*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_OP_MAP_READONLY: Map the memory read-only. 480*61046927SAndroid Build Coastguard Worker * 481*61046927SAndroid Build Coastguard Worker * Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. 482*61046927SAndroid Build Coastguard Worker */ 483*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_MAP_READONLY = 1 << 0, 484*61046927SAndroid Build Coastguard Worker 485*61046927SAndroid Build Coastguard Worker /** 486*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC: Map the memory not-executable. 487*61046927SAndroid Build Coastguard Worker * 488*61046927SAndroid Build Coastguard Worker * Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. 489*61046927SAndroid Build Coastguard Worker */ 490*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC = 1 << 1, 491*61046927SAndroid Build Coastguard Worker 492*61046927SAndroid Build Coastguard Worker /** 493*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED: Map the memory uncached. 494*61046927SAndroid Build Coastguard Worker * 495*61046927SAndroid Build Coastguard Worker * Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. 496*61046927SAndroid Build Coastguard Worker */ 497*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED = 1 << 2, 498*61046927SAndroid Build Coastguard Worker 499*61046927SAndroid Build Coastguard Worker /** 500*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_OP_TYPE_MASK: Mask used to determine the type of operation. 501*61046927SAndroid Build Coastguard Worker */ 502*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_TYPE_MASK = (int)(0xfu << 28), 503*61046927SAndroid Build Coastguard Worker 504*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_BIND_OP_TYPE_MAP: Map operation. */ 505*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_TYPE_MAP = 0 << 28, 506*61046927SAndroid Build Coastguard Worker 507*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP: Unmap operation. */ 508*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP = 1 << 28, 509*61046927SAndroid Build Coastguard Worker 510*61046927SAndroid Build Coastguard Worker /** 511*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY: No VM operation. 512*61046927SAndroid Build Coastguard Worker * 513*61046927SAndroid Build Coastguard Worker * Just serves as a synchronization point on a VM queue. 514*61046927SAndroid Build Coastguard Worker * 515*61046927SAndroid Build Coastguard Worker * Only valid if %DRM_PANTHOR_VM_BIND_ASYNC is set in drm_panthor_vm_bind::flags, 516*61046927SAndroid Build Coastguard Worker * and drm_panthor_vm_bind_op::syncs contains at least one element. 517*61046927SAndroid Build Coastguard Worker */ 518*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY = 2 << 28, 519*61046927SAndroid Build Coastguard Worker }; 520*61046927SAndroid Build Coastguard Worker 521*61046927SAndroid Build Coastguard Worker /** 522*61046927SAndroid Build Coastguard Worker * struct drm_panthor_vm_bind_op - VM bind operation 523*61046927SAndroid Build Coastguard Worker */ 524*61046927SAndroid Build Coastguard Worker struct drm_panthor_vm_bind_op { 525*61046927SAndroid Build Coastguard Worker /** @flags: Combination of drm_panthor_vm_bind_op_flags flags. */ 526*61046927SAndroid Build Coastguard Worker __u32 flags; 527*61046927SAndroid Build Coastguard Worker 528*61046927SAndroid Build Coastguard Worker /** 529*61046927SAndroid Build Coastguard Worker * @bo_handle: Handle of the buffer object to map. 530*61046927SAndroid Build Coastguard Worker * MBZ for unmap or sync-only operations. 531*61046927SAndroid Build Coastguard Worker */ 532*61046927SAndroid Build Coastguard Worker __u32 bo_handle; 533*61046927SAndroid Build Coastguard Worker 534*61046927SAndroid Build Coastguard Worker /** 535*61046927SAndroid Build Coastguard Worker * @bo_offset: Buffer object offset. 536*61046927SAndroid Build Coastguard Worker * MBZ for unmap or sync-only operations. 537*61046927SAndroid Build Coastguard Worker */ 538*61046927SAndroid Build Coastguard Worker __u64 bo_offset; 539*61046927SAndroid Build Coastguard Worker 540*61046927SAndroid Build Coastguard Worker /** 541*61046927SAndroid Build Coastguard Worker * @va: Virtual address to map/unmap. 542*61046927SAndroid Build Coastguard Worker * MBZ for sync-only operations. 543*61046927SAndroid Build Coastguard Worker */ 544*61046927SAndroid Build Coastguard Worker __u64 va; 545*61046927SAndroid Build Coastguard Worker 546*61046927SAndroid Build Coastguard Worker /** 547*61046927SAndroid Build Coastguard Worker * @size: Size to map/unmap. 548*61046927SAndroid Build Coastguard Worker * MBZ for sync-only operations. 549*61046927SAndroid Build Coastguard Worker */ 550*61046927SAndroid Build Coastguard Worker __u64 size; 551*61046927SAndroid Build Coastguard Worker 552*61046927SAndroid Build Coastguard Worker /** 553*61046927SAndroid Build Coastguard Worker * @syncs: Array of struct drm_panthor_sync_op synchronization 554*61046927SAndroid Build Coastguard Worker * operations. 555*61046927SAndroid Build Coastguard Worker * 556*61046927SAndroid Build Coastguard Worker * This array must be empty if %DRM_PANTHOR_VM_BIND_ASYNC is not set on 557*61046927SAndroid Build Coastguard Worker * the drm_panthor_vm_bind object containing this VM bind operation. 558*61046927SAndroid Build Coastguard Worker * 559*61046927SAndroid Build Coastguard Worker * This array shall not be empty for sync-only operations. 560*61046927SAndroid Build Coastguard Worker */ 561*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array syncs; 562*61046927SAndroid Build Coastguard Worker 563*61046927SAndroid Build Coastguard Worker }; 564*61046927SAndroid Build Coastguard Worker 565*61046927SAndroid Build Coastguard Worker /** 566*61046927SAndroid Build Coastguard Worker * enum drm_panthor_vm_bind_flags - VM bind flags 567*61046927SAndroid Build Coastguard Worker */ 568*61046927SAndroid Build Coastguard Worker enum drm_panthor_vm_bind_flags { 569*61046927SAndroid Build Coastguard Worker /** 570*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_BIND_ASYNC: VM bind operations are queued to the VM 571*61046927SAndroid Build Coastguard Worker * queue instead of being executed synchronously. 572*61046927SAndroid Build Coastguard Worker */ 573*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_BIND_ASYNC = 1 << 0, 574*61046927SAndroid Build Coastguard Worker }; 575*61046927SAndroid Build Coastguard Worker 576*61046927SAndroid Build Coastguard Worker /** 577*61046927SAndroid Build Coastguard Worker * struct drm_panthor_vm_bind - Arguments passed to DRM_IOCTL_PANTHOR_VM_BIND 578*61046927SAndroid Build Coastguard Worker */ 579*61046927SAndroid Build Coastguard Worker struct drm_panthor_vm_bind { 580*61046927SAndroid Build Coastguard Worker /** @vm_id: VM targeted by the bind request. */ 581*61046927SAndroid Build Coastguard Worker __u32 vm_id; 582*61046927SAndroid Build Coastguard Worker 583*61046927SAndroid Build Coastguard Worker /** @flags: Combination of drm_panthor_vm_bind_flags flags. */ 584*61046927SAndroid Build Coastguard Worker __u32 flags; 585*61046927SAndroid Build Coastguard Worker 586*61046927SAndroid Build Coastguard Worker /** @ops: Array of struct drm_panthor_vm_bind_op bind operations. */ 587*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array ops; 588*61046927SAndroid Build Coastguard Worker }; 589*61046927SAndroid Build Coastguard Worker 590*61046927SAndroid Build Coastguard Worker /** 591*61046927SAndroid Build Coastguard Worker * enum drm_panthor_vm_state - VM states. 592*61046927SAndroid Build Coastguard Worker */ 593*61046927SAndroid Build Coastguard Worker enum drm_panthor_vm_state { 594*61046927SAndroid Build Coastguard Worker /** 595*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_STATE_USABLE: VM is usable. 596*61046927SAndroid Build Coastguard Worker * 597*61046927SAndroid Build Coastguard Worker * New VM operations will be accepted on this VM. 598*61046927SAndroid Build Coastguard Worker */ 599*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_STATE_USABLE, 600*61046927SAndroid Build Coastguard Worker 601*61046927SAndroid Build Coastguard Worker /** 602*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_VM_STATE_UNUSABLE: VM is unusable. 603*61046927SAndroid Build Coastguard Worker * 604*61046927SAndroid Build Coastguard Worker * Something put the VM in an unusable state (like an asynchronous 605*61046927SAndroid Build Coastguard Worker * VM_BIND request failing for any reason). 606*61046927SAndroid Build Coastguard Worker * 607*61046927SAndroid Build Coastguard Worker * Once the VM is in this state, all new MAP operations will be 608*61046927SAndroid Build Coastguard Worker * rejected, and any GPU job targeting this VM will fail. 609*61046927SAndroid Build Coastguard Worker * UNMAP operations are still accepted. 610*61046927SAndroid Build Coastguard Worker * 611*61046927SAndroid Build Coastguard Worker * The only way to recover from an unusable VM is to create a new 612*61046927SAndroid Build Coastguard Worker * VM, and destroy the old one. 613*61046927SAndroid Build Coastguard Worker */ 614*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_VM_STATE_UNUSABLE, 615*61046927SAndroid Build Coastguard Worker }; 616*61046927SAndroid Build Coastguard Worker 617*61046927SAndroid Build Coastguard Worker /** 618*61046927SAndroid Build Coastguard Worker * struct drm_panthor_vm_get_state - Get VM state. 619*61046927SAndroid Build Coastguard Worker */ 620*61046927SAndroid Build Coastguard Worker struct drm_panthor_vm_get_state { 621*61046927SAndroid Build Coastguard Worker /** @vm_id: VM targeted by the get_state request. */ 622*61046927SAndroid Build Coastguard Worker __u32 vm_id; 623*61046927SAndroid Build Coastguard Worker 624*61046927SAndroid Build Coastguard Worker /** 625*61046927SAndroid Build Coastguard Worker * @state: state returned by the driver. 626*61046927SAndroid Build Coastguard Worker * 627*61046927SAndroid Build Coastguard Worker * Must be one of the enum drm_panthor_vm_state values. 628*61046927SAndroid Build Coastguard Worker */ 629*61046927SAndroid Build Coastguard Worker __u32 state; 630*61046927SAndroid Build Coastguard Worker }; 631*61046927SAndroid Build Coastguard Worker 632*61046927SAndroid Build Coastguard Worker /** 633*61046927SAndroid Build Coastguard Worker * enum drm_panthor_bo_flags - Buffer object flags, passed at creation time. 634*61046927SAndroid Build Coastguard Worker */ 635*61046927SAndroid Build Coastguard Worker enum drm_panthor_bo_flags { 636*61046927SAndroid Build Coastguard Worker /** @DRM_PANTHOR_BO_NO_MMAP: The buffer object will never be CPU-mapped in userspace. */ 637*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_BO_NO_MMAP = (1 << 0), 638*61046927SAndroid Build Coastguard Worker }; 639*61046927SAndroid Build Coastguard Worker 640*61046927SAndroid Build Coastguard Worker /** 641*61046927SAndroid Build Coastguard Worker * struct drm_panthor_bo_create - Arguments passed to DRM_IOCTL_PANTHOR_BO_CREATE. 642*61046927SAndroid Build Coastguard Worker */ 643*61046927SAndroid Build Coastguard Worker struct drm_panthor_bo_create { 644*61046927SAndroid Build Coastguard Worker /** 645*61046927SAndroid Build Coastguard Worker * @size: Requested size for the object 646*61046927SAndroid Build Coastguard Worker * 647*61046927SAndroid Build Coastguard Worker * The (page-aligned) allocated size for the object will be returned. 648*61046927SAndroid Build Coastguard Worker */ 649*61046927SAndroid Build Coastguard Worker __u64 size; 650*61046927SAndroid Build Coastguard Worker 651*61046927SAndroid Build Coastguard Worker /** 652*61046927SAndroid Build Coastguard Worker * @flags: Flags. Must be a combination of drm_panthor_bo_flags flags. 653*61046927SAndroid Build Coastguard Worker */ 654*61046927SAndroid Build Coastguard Worker __u32 flags; 655*61046927SAndroid Build Coastguard Worker 656*61046927SAndroid Build Coastguard Worker /** 657*61046927SAndroid Build Coastguard Worker * @exclusive_vm_id: Exclusive VM this buffer object will be mapped to. 658*61046927SAndroid Build Coastguard Worker * 659*61046927SAndroid Build Coastguard Worker * If not zero, the field must refer to a valid VM ID, and implies that: 660*61046927SAndroid Build Coastguard Worker * - the buffer object will only ever be bound to that VM 661*61046927SAndroid Build Coastguard Worker * - cannot be exported as a PRIME fd 662*61046927SAndroid Build Coastguard Worker */ 663*61046927SAndroid Build Coastguard Worker __u32 exclusive_vm_id; 664*61046927SAndroid Build Coastguard Worker 665*61046927SAndroid Build Coastguard Worker /** 666*61046927SAndroid Build Coastguard Worker * @handle: Returned handle for the object. 667*61046927SAndroid Build Coastguard Worker * 668*61046927SAndroid Build Coastguard Worker * Object handles are nonzero. 669*61046927SAndroid Build Coastguard Worker */ 670*61046927SAndroid Build Coastguard Worker __u32 handle; 671*61046927SAndroid Build Coastguard Worker 672*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 673*61046927SAndroid Build Coastguard Worker __u32 pad; 674*61046927SAndroid Build Coastguard Worker }; 675*61046927SAndroid Build Coastguard Worker 676*61046927SAndroid Build Coastguard Worker /** 677*61046927SAndroid Build Coastguard Worker * struct drm_panthor_bo_mmap_offset - Arguments passed to DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET. 678*61046927SAndroid Build Coastguard Worker */ 679*61046927SAndroid Build Coastguard Worker struct drm_panthor_bo_mmap_offset { 680*61046927SAndroid Build Coastguard Worker /** @handle: Handle of the object we want an mmap offset for. */ 681*61046927SAndroid Build Coastguard Worker __u32 handle; 682*61046927SAndroid Build Coastguard Worker 683*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 684*61046927SAndroid Build Coastguard Worker __u32 pad; 685*61046927SAndroid Build Coastguard Worker 686*61046927SAndroid Build Coastguard Worker /** @offset: The fake offset to use for subsequent mmap calls. */ 687*61046927SAndroid Build Coastguard Worker __u64 offset; 688*61046927SAndroid Build Coastguard Worker }; 689*61046927SAndroid Build Coastguard Worker 690*61046927SAndroid Build Coastguard Worker /** 691*61046927SAndroid Build Coastguard Worker * struct drm_panthor_queue_create - Queue creation arguments. 692*61046927SAndroid Build Coastguard Worker */ 693*61046927SAndroid Build Coastguard Worker struct drm_panthor_queue_create { 694*61046927SAndroid Build Coastguard Worker /** 695*61046927SAndroid Build Coastguard Worker * @priority: Defines the priority of queues inside a group. Goes from 0 to 15, 696*61046927SAndroid Build Coastguard Worker * 15 being the highest priority. 697*61046927SAndroid Build Coastguard Worker */ 698*61046927SAndroid Build Coastguard Worker __u8 priority; 699*61046927SAndroid Build Coastguard Worker 700*61046927SAndroid Build Coastguard Worker /** @pad: Padding fields, MBZ. */ 701*61046927SAndroid Build Coastguard Worker __u8 pad[3]; 702*61046927SAndroid Build Coastguard Worker 703*61046927SAndroid Build Coastguard Worker /** @ringbuf_size: Size of the ring buffer to allocate to this queue. */ 704*61046927SAndroid Build Coastguard Worker __u32 ringbuf_size; 705*61046927SAndroid Build Coastguard Worker }; 706*61046927SAndroid Build Coastguard Worker 707*61046927SAndroid Build Coastguard Worker /** 708*61046927SAndroid Build Coastguard Worker * enum drm_panthor_group_priority - Scheduling group priority 709*61046927SAndroid Build Coastguard Worker */ 710*61046927SAndroid Build Coastguard Worker enum drm_panthor_group_priority { 711*61046927SAndroid Build Coastguard Worker /** @PANTHOR_GROUP_PRIORITY_LOW: Low priority group. */ 712*61046927SAndroid Build Coastguard Worker PANTHOR_GROUP_PRIORITY_LOW = 0, 713*61046927SAndroid Build Coastguard Worker 714*61046927SAndroid Build Coastguard Worker /** @PANTHOR_GROUP_PRIORITY_MEDIUM: Medium priority group. */ 715*61046927SAndroid Build Coastguard Worker PANTHOR_GROUP_PRIORITY_MEDIUM, 716*61046927SAndroid Build Coastguard Worker 717*61046927SAndroid Build Coastguard Worker /** @PANTHOR_GROUP_PRIORITY_HIGH: High priority group. */ 718*61046927SAndroid Build Coastguard Worker PANTHOR_GROUP_PRIORITY_HIGH, 719*61046927SAndroid Build Coastguard Worker }; 720*61046927SAndroid Build Coastguard Worker 721*61046927SAndroid Build Coastguard Worker /** 722*61046927SAndroid Build Coastguard Worker * struct drm_panthor_group_create - Arguments passed to DRM_IOCTL_PANTHOR_GROUP_CREATE 723*61046927SAndroid Build Coastguard Worker */ 724*61046927SAndroid Build Coastguard Worker struct drm_panthor_group_create { 725*61046927SAndroid Build Coastguard Worker /** @queues: Array of drm_panthor_queue_create elements. */ 726*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array queues; 727*61046927SAndroid Build Coastguard Worker 728*61046927SAndroid Build Coastguard Worker /** 729*61046927SAndroid Build Coastguard Worker * @max_compute_cores: Maximum number of cores that can be used by compute 730*61046927SAndroid Build Coastguard Worker * jobs across CS queues bound to this group. 731*61046927SAndroid Build Coastguard Worker * 732*61046927SAndroid Build Coastguard Worker * Must be less or equal to the number of bits set in @compute_core_mask. 733*61046927SAndroid Build Coastguard Worker */ 734*61046927SAndroid Build Coastguard Worker __u8 max_compute_cores; 735*61046927SAndroid Build Coastguard Worker 736*61046927SAndroid Build Coastguard Worker /** 737*61046927SAndroid Build Coastguard Worker * @max_fragment_cores: Maximum number of cores that can be used by fragment 738*61046927SAndroid Build Coastguard Worker * jobs across CS queues bound to this group. 739*61046927SAndroid Build Coastguard Worker * 740*61046927SAndroid Build Coastguard Worker * Must be less or equal to the number of bits set in @fragment_core_mask. 741*61046927SAndroid Build Coastguard Worker */ 742*61046927SAndroid Build Coastguard Worker __u8 max_fragment_cores; 743*61046927SAndroid Build Coastguard Worker 744*61046927SAndroid Build Coastguard Worker /** 745*61046927SAndroid Build Coastguard Worker * @max_tiler_cores: Maximum number of tilers that can be used by tiler jobs 746*61046927SAndroid Build Coastguard Worker * across CS queues bound to this group. 747*61046927SAndroid Build Coastguard Worker * 748*61046927SAndroid Build Coastguard Worker * Must be less or equal to the number of bits set in @tiler_core_mask. 749*61046927SAndroid Build Coastguard Worker */ 750*61046927SAndroid Build Coastguard Worker __u8 max_tiler_cores; 751*61046927SAndroid Build Coastguard Worker 752*61046927SAndroid Build Coastguard Worker /** @priority: Group priority (see enum drm_panthor_group_priority). */ 753*61046927SAndroid Build Coastguard Worker __u8 priority; 754*61046927SAndroid Build Coastguard Worker 755*61046927SAndroid Build Coastguard Worker /** @pad: Padding field, MBZ. */ 756*61046927SAndroid Build Coastguard Worker __u32 pad; 757*61046927SAndroid Build Coastguard Worker 758*61046927SAndroid Build Coastguard Worker /** 759*61046927SAndroid Build Coastguard Worker * @compute_core_mask: Mask encoding cores that can be used for compute jobs. 760*61046927SAndroid Build Coastguard Worker * 761*61046927SAndroid Build Coastguard Worker * This field must have at least @max_compute_cores bits set. 762*61046927SAndroid Build Coastguard Worker * 763*61046927SAndroid Build Coastguard Worker * The bits set here should also be set in drm_panthor_gpu_info::shader_present. 764*61046927SAndroid Build Coastguard Worker */ 765*61046927SAndroid Build Coastguard Worker __u64 compute_core_mask; 766*61046927SAndroid Build Coastguard Worker 767*61046927SAndroid Build Coastguard Worker /** 768*61046927SAndroid Build Coastguard Worker * @fragment_core_mask: Mask encoding cores that can be used for fragment jobs. 769*61046927SAndroid Build Coastguard Worker * 770*61046927SAndroid Build Coastguard Worker * This field must have at least @max_fragment_cores bits set. 771*61046927SAndroid Build Coastguard Worker * 772*61046927SAndroid Build Coastguard Worker * The bits set here should also be set in drm_panthor_gpu_info::shader_present. 773*61046927SAndroid Build Coastguard Worker */ 774*61046927SAndroid Build Coastguard Worker __u64 fragment_core_mask; 775*61046927SAndroid Build Coastguard Worker 776*61046927SAndroid Build Coastguard Worker /** 777*61046927SAndroid Build Coastguard Worker * @tiler_core_mask: Mask encoding cores that can be used for tiler jobs. 778*61046927SAndroid Build Coastguard Worker * 779*61046927SAndroid Build Coastguard Worker * This field must have at least @max_tiler_cores bits set. 780*61046927SAndroid Build Coastguard Worker * 781*61046927SAndroid Build Coastguard Worker * The bits set here should also be set in drm_panthor_gpu_info::tiler_present. 782*61046927SAndroid Build Coastguard Worker */ 783*61046927SAndroid Build Coastguard Worker __u64 tiler_core_mask; 784*61046927SAndroid Build Coastguard Worker 785*61046927SAndroid Build Coastguard Worker /** 786*61046927SAndroid Build Coastguard Worker * @vm_id: VM ID to bind this group to. 787*61046927SAndroid Build Coastguard Worker * 788*61046927SAndroid Build Coastguard Worker * All submission to queues bound to this group will use this VM. 789*61046927SAndroid Build Coastguard Worker */ 790*61046927SAndroid Build Coastguard Worker __u32 vm_id; 791*61046927SAndroid Build Coastguard Worker 792*61046927SAndroid Build Coastguard Worker /** 793*61046927SAndroid Build Coastguard Worker * @group_handle: Returned group handle. Passed back when submitting jobs or 794*61046927SAndroid Build Coastguard Worker * destroying a group. 795*61046927SAndroid Build Coastguard Worker */ 796*61046927SAndroid Build Coastguard Worker __u32 group_handle; 797*61046927SAndroid Build Coastguard Worker }; 798*61046927SAndroid Build Coastguard Worker 799*61046927SAndroid Build Coastguard Worker /** 800*61046927SAndroid Build Coastguard Worker * struct drm_panthor_group_destroy - Arguments passed to DRM_IOCTL_PANTHOR_GROUP_DESTROY 801*61046927SAndroid Build Coastguard Worker */ 802*61046927SAndroid Build Coastguard Worker struct drm_panthor_group_destroy { 803*61046927SAndroid Build Coastguard Worker /** @group_handle: Group to destroy */ 804*61046927SAndroid Build Coastguard Worker __u32 group_handle; 805*61046927SAndroid Build Coastguard Worker 806*61046927SAndroid Build Coastguard Worker /** @pad: Padding field, MBZ. */ 807*61046927SAndroid Build Coastguard Worker __u32 pad; 808*61046927SAndroid Build Coastguard Worker }; 809*61046927SAndroid Build Coastguard Worker 810*61046927SAndroid Build Coastguard Worker /** 811*61046927SAndroid Build Coastguard Worker * struct drm_panthor_queue_submit - Job submission arguments. 812*61046927SAndroid Build Coastguard Worker * 813*61046927SAndroid Build Coastguard Worker * This is describing the userspace command stream to call from the kernel 814*61046927SAndroid Build Coastguard Worker * command stream ring-buffer. Queue submission is always part of a group 815*61046927SAndroid Build Coastguard Worker * submission, taking one or more jobs to submit to the underlying queues. 816*61046927SAndroid Build Coastguard Worker */ 817*61046927SAndroid Build Coastguard Worker struct drm_panthor_queue_submit { 818*61046927SAndroid Build Coastguard Worker /** @queue_index: Index of the queue inside a group. */ 819*61046927SAndroid Build Coastguard Worker __u32 queue_index; 820*61046927SAndroid Build Coastguard Worker 821*61046927SAndroid Build Coastguard Worker /** 822*61046927SAndroid Build Coastguard Worker * @stream_size: Size of the command stream to execute. 823*61046927SAndroid Build Coastguard Worker * 824*61046927SAndroid Build Coastguard Worker * Must be 64-bit/8-byte aligned (the size of a CS instruction) 825*61046927SAndroid Build Coastguard Worker * 826*61046927SAndroid Build Coastguard Worker * Can be zero if stream_addr is zero too. 827*61046927SAndroid Build Coastguard Worker * 828*61046927SAndroid Build Coastguard Worker * When the stream size is zero, the queue submit serves as a 829*61046927SAndroid Build Coastguard Worker * synchronization point. 830*61046927SAndroid Build Coastguard Worker */ 831*61046927SAndroid Build Coastguard Worker __u32 stream_size; 832*61046927SAndroid Build Coastguard Worker 833*61046927SAndroid Build Coastguard Worker /** 834*61046927SAndroid Build Coastguard Worker * @stream_addr: GPU address of the command stream to execute. 835*61046927SAndroid Build Coastguard Worker * 836*61046927SAndroid Build Coastguard Worker * Must be aligned on 64-byte. 837*61046927SAndroid Build Coastguard Worker * 838*61046927SAndroid Build Coastguard Worker * Can be zero is stream_size is zero too. 839*61046927SAndroid Build Coastguard Worker */ 840*61046927SAndroid Build Coastguard Worker __u64 stream_addr; 841*61046927SAndroid Build Coastguard Worker 842*61046927SAndroid Build Coastguard Worker /** 843*61046927SAndroid Build Coastguard Worker * @latest_flush: FLUSH_ID read at the time the stream was built. 844*61046927SAndroid Build Coastguard Worker * 845*61046927SAndroid Build Coastguard Worker * This allows cache flush elimination for the automatic 846*61046927SAndroid Build Coastguard Worker * flush+invalidate(all) done at submission time, which is needed to 847*61046927SAndroid Build Coastguard Worker * ensure the GPU doesn't get garbage when reading the indirect command 848*61046927SAndroid Build Coastguard Worker * stream buffers. If you want the cache flush to happen 849*61046927SAndroid Build Coastguard Worker * unconditionally, pass a zero here. 850*61046927SAndroid Build Coastguard Worker * 851*61046927SAndroid Build Coastguard Worker * Ignored when stream_size is zero. 852*61046927SAndroid Build Coastguard Worker */ 853*61046927SAndroid Build Coastguard Worker __u32 latest_flush; 854*61046927SAndroid Build Coastguard Worker 855*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 856*61046927SAndroid Build Coastguard Worker __u32 pad; 857*61046927SAndroid Build Coastguard Worker 858*61046927SAndroid Build Coastguard Worker /** @syncs: Array of struct drm_panthor_sync_op sync operations. */ 859*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array syncs; 860*61046927SAndroid Build Coastguard Worker }; 861*61046927SAndroid Build Coastguard Worker 862*61046927SAndroid Build Coastguard Worker /** 863*61046927SAndroid Build Coastguard Worker * struct drm_panthor_group_submit - Arguments passed to DRM_IOCTL_PANTHOR_GROUP_SUBMIT 864*61046927SAndroid Build Coastguard Worker */ 865*61046927SAndroid Build Coastguard Worker struct drm_panthor_group_submit { 866*61046927SAndroid Build Coastguard Worker /** @group_handle: Handle of the group to queue jobs to. */ 867*61046927SAndroid Build Coastguard Worker __u32 group_handle; 868*61046927SAndroid Build Coastguard Worker 869*61046927SAndroid Build Coastguard Worker /** @pad: MBZ. */ 870*61046927SAndroid Build Coastguard Worker __u32 pad; 871*61046927SAndroid Build Coastguard Worker 872*61046927SAndroid Build Coastguard Worker /** @queue_submits: Array of drm_panthor_queue_submit objects. */ 873*61046927SAndroid Build Coastguard Worker struct drm_panthor_obj_array queue_submits; 874*61046927SAndroid Build Coastguard Worker }; 875*61046927SAndroid Build Coastguard Worker 876*61046927SAndroid Build Coastguard Worker /** 877*61046927SAndroid Build Coastguard Worker * enum drm_panthor_group_state_flags - Group state flags 878*61046927SAndroid Build Coastguard Worker */ 879*61046927SAndroid Build Coastguard Worker enum drm_panthor_group_state_flags { 880*61046927SAndroid Build Coastguard Worker /** 881*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_GROUP_STATE_TIMEDOUT: Group had unfinished jobs. 882*61046927SAndroid Build Coastguard Worker * 883*61046927SAndroid Build Coastguard Worker * When a group ends up with this flag set, no jobs can be submitted to its queues. 884*61046927SAndroid Build Coastguard Worker */ 885*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_STATE_TIMEDOUT = 1 << 0, 886*61046927SAndroid Build Coastguard Worker 887*61046927SAndroid Build Coastguard Worker /** 888*61046927SAndroid Build Coastguard Worker * @DRM_PANTHOR_GROUP_STATE_FATAL_FAULT: Group had fatal faults. 889*61046927SAndroid Build Coastguard Worker * 890*61046927SAndroid Build Coastguard Worker * When a group ends up with this flag set, no jobs can be submitted to its queues. 891*61046927SAndroid Build Coastguard Worker */ 892*61046927SAndroid Build Coastguard Worker DRM_PANTHOR_GROUP_STATE_FATAL_FAULT = 1 << 1, 893*61046927SAndroid Build Coastguard Worker }; 894*61046927SAndroid Build Coastguard Worker 895*61046927SAndroid Build Coastguard Worker /** 896*61046927SAndroid Build Coastguard Worker * struct drm_panthor_group_get_state - Arguments passed to DRM_IOCTL_PANTHOR_GROUP_GET_STATE 897*61046927SAndroid Build Coastguard Worker * 898*61046927SAndroid Build Coastguard Worker * Used to query the state of a group and decide whether a new group should be created to 899*61046927SAndroid Build Coastguard Worker * replace it. 900*61046927SAndroid Build Coastguard Worker */ 901*61046927SAndroid Build Coastguard Worker struct drm_panthor_group_get_state { 902*61046927SAndroid Build Coastguard Worker /** @group_handle: Handle of the group to query state on */ 903*61046927SAndroid Build Coastguard Worker __u32 group_handle; 904*61046927SAndroid Build Coastguard Worker 905*61046927SAndroid Build Coastguard Worker /** 906*61046927SAndroid Build Coastguard Worker * @state: Combination of DRM_PANTHOR_GROUP_STATE_* flags encoding the 907*61046927SAndroid Build Coastguard Worker * group state. 908*61046927SAndroid Build Coastguard Worker */ 909*61046927SAndroid Build Coastguard Worker __u32 state; 910*61046927SAndroid Build Coastguard Worker 911*61046927SAndroid Build Coastguard Worker /** @fatal_queues: Bitmask of queues that faced fatal faults. */ 912*61046927SAndroid Build Coastguard Worker __u32 fatal_queues; 913*61046927SAndroid Build Coastguard Worker 914*61046927SAndroid Build Coastguard Worker /** @pad: MBZ */ 915*61046927SAndroid Build Coastguard Worker __u32 pad; 916*61046927SAndroid Build Coastguard Worker }; 917*61046927SAndroid Build Coastguard Worker 918*61046927SAndroid Build Coastguard Worker /** 919*61046927SAndroid Build Coastguard Worker * struct drm_panthor_tiler_heap_create - Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE 920*61046927SAndroid Build Coastguard Worker */ 921*61046927SAndroid Build Coastguard Worker struct drm_panthor_tiler_heap_create { 922*61046927SAndroid Build Coastguard Worker /** @vm_id: VM ID the tiler heap should be mapped to */ 923*61046927SAndroid Build Coastguard Worker __u32 vm_id; 924*61046927SAndroid Build Coastguard Worker 925*61046927SAndroid Build Coastguard Worker /** @initial_chunk_count: Initial number of chunks to allocate. Must be at least one. */ 926*61046927SAndroid Build Coastguard Worker __u32 initial_chunk_count; 927*61046927SAndroid Build Coastguard Worker 928*61046927SAndroid Build Coastguard Worker /** 929*61046927SAndroid Build Coastguard Worker * @chunk_size: Chunk size. 930*61046927SAndroid Build Coastguard Worker * 931*61046927SAndroid Build Coastguard Worker * Must be page-aligned and lie in the [128k:8M] range. 932*61046927SAndroid Build Coastguard Worker */ 933*61046927SAndroid Build Coastguard Worker __u32 chunk_size; 934*61046927SAndroid Build Coastguard Worker 935*61046927SAndroid Build Coastguard Worker /** 936*61046927SAndroid Build Coastguard Worker * @max_chunks: Maximum number of chunks that can be allocated. 937*61046927SAndroid Build Coastguard Worker * 938*61046927SAndroid Build Coastguard Worker * Must be at least @initial_chunk_count. 939*61046927SAndroid Build Coastguard Worker */ 940*61046927SAndroid Build Coastguard Worker __u32 max_chunks; 941*61046927SAndroid Build Coastguard Worker 942*61046927SAndroid Build Coastguard Worker /** 943*61046927SAndroid Build Coastguard Worker * @target_in_flight: Maximum number of in-flight render passes. 944*61046927SAndroid Build Coastguard Worker * 945*61046927SAndroid Build Coastguard Worker * If the heap has more than tiler jobs in-flight, the FW will wait for render 946*61046927SAndroid Build Coastguard Worker * passes to finish before queuing new tiler jobs. 947*61046927SAndroid Build Coastguard Worker */ 948*61046927SAndroid Build Coastguard Worker __u32 target_in_flight; 949*61046927SAndroid Build Coastguard Worker 950*61046927SAndroid Build Coastguard Worker /** @handle: Returned heap handle. Passed back to DESTROY_TILER_HEAP. */ 951*61046927SAndroid Build Coastguard Worker __u32 handle; 952*61046927SAndroid Build Coastguard Worker 953*61046927SAndroid Build Coastguard Worker /** @tiler_heap_ctx_gpu_va: Returned heap GPU virtual address returned */ 954*61046927SAndroid Build Coastguard Worker __u64 tiler_heap_ctx_gpu_va; 955*61046927SAndroid Build Coastguard Worker 956*61046927SAndroid Build Coastguard Worker /** 957*61046927SAndroid Build Coastguard Worker * @first_heap_chunk_gpu_va: First heap chunk. 958*61046927SAndroid Build Coastguard Worker * 959*61046927SAndroid Build Coastguard Worker * The tiler heap is formed of heap chunks forming a single-link list. This 960*61046927SAndroid Build Coastguard Worker * is the first element in the list. 961*61046927SAndroid Build Coastguard Worker */ 962*61046927SAndroid Build Coastguard Worker __u64 first_heap_chunk_gpu_va; 963*61046927SAndroid Build Coastguard Worker }; 964*61046927SAndroid Build Coastguard Worker 965*61046927SAndroid Build Coastguard Worker /** 966*61046927SAndroid Build Coastguard Worker * struct drm_panthor_tiler_heap_destroy - Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY 967*61046927SAndroid Build Coastguard Worker */ 968*61046927SAndroid Build Coastguard Worker struct drm_panthor_tiler_heap_destroy { 969*61046927SAndroid Build Coastguard Worker /** 970*61046927SAndroid Build Coastguard Worker * @handle: Handle of the tiler heap to destroy. 971*61046927SAndroid Build Coastguard Worker * 972*61046927SAndroid Build Coastguard Worker * Must be a valid heap handle returned by DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE. 973*61046927SAndroid Build Coastguard Worker */ 974*61046927SAndroid Build Coastguard Worker __u32 handle; 975*61046927SAndroid Build Coastguard Worker 976*61046927SAndroid Build Coastguard Worker /** @pad: Padding field, MBZ. */ 977*61046927SAndroid Build Coastguard Worker __u32 pad; 978*61046927SAndroid Build Coastguard Worker }; 979*61046927SAndroid Build Coastguard Worker 980*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 981*61046927SAndroid Build Coastguard Worker } 982*61046927SAndroid Build Coastguard Worker #endif 983*61046927SAndroid Build Coastguard Worker 984*61046927SAndroid Build Coastguard Worker #endif /* _PANTHOR_DRM_H_ */ 985