1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2014-2018 Broadcom 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*61046927SAndroid Build Coastguard Worker * 11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*61046927SAndroid Build Coastguard Worker * Software. 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21*61046927SAndroid Build Coastguard Worker * IN THE SOFTWARE. 22*61046927SAndroid Build Coastguard Worker */ 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker #ifndef _V3D_DRM_H_ 25*61046927SAndroid Build Coastguard Worker #define _V3D_DRM_H_ 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #include "drm.h" 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 30*61046927SAndroid Build Coastguard Worker extern "C" { 31*61046927SAndroid Build Coastguard Worker #endif 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_CL 0x00 34*61046927SAndroid Build Coastguard Worker #define DRM_V3D_WAIT_BO 0x01 35*61046927SAndroid Build Coastguard Worker #define DRM_V3D_CREATE_BO 0x02 36*61046927SAndroid Build Coastguard Worker #define DRM_V3D_MMAP_BO 0x03 37*61046927SAndroid Build Coastguard Worker #define DRM_V3D_GET_PARAM 0x04 38*61046927SAndroid Build Coastguard Worker #define DRM_V3D_GET_BO_OFFSET 0x05 39*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_TFU 0x06 40*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_CSD 0x07 41*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFMON_CREATE 0x08 42*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFMON_DESTROY 0x09 43*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFMON_GET_VALUES 0x0a 44*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_CPU 0x0b 45*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFMON_GET_COUNTER 0x0c 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CL, struct drm_v3d_submit_cl) 48*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_WAIT_BO, struct drm_v3d_wait_bo) 49*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_CREATE_BO, struct drm_v3d_create_bo) 50*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_MMAP_BO, struct drm_v3d_mmap_bo) 51*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_PARAM, struct drm_v3d_get_param) 52*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_BO_OFFSET, struct drm_v3d_get_bo_offset) 53*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_SUBMIT_TFU DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_TFU, struct drm_v3d_submit_tfu) 54*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_SUBMIT_CSD DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CSD, struct drm_v3d_submit_csd) 55*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_CREATE, \ 56*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_create) 57*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_DESTROY, \ 58*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_destroy) 59*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_GET_VALUES, \ 60*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_get_values) 61*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_SUBMIT_CPU DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CPU, struct drm_v3d_submit_cpu) 62*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_V3D_PERFMON_GET_COUNTER DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_GET_COUNTER, \ 63*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_get_counter) 64*61046927SAndroid Build Coastguard Worker 65*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_CL_FLUSH_CACHE 0x01 66*61046927SAndroid Build Coastguard Worker #define DRM_V3D_SUBMIT_EXTENSION 0x02 67*61046927SAndroid Build Coastguard Worker 68*61046927SAndroid Build Coastguard Worker /* struct drm_v3d_extension - ioctl extensions 69*61046927SAndroid Build Coastguard Worker * 70*61046927SAndroid Build Coastguard Worker * Linked-list of generic extensions where the id identify which struct is 71*61046927SAndroid Build Coastguard Worker * pointed by ext_data. Therefore, DRM_V3D_EXT_ID_* is used on id to identify 72*61046927SAndroid Build Coastguard Worker * the extension type. 73*61046927SAndroid Build Coastguard Worker */ 74*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension { 75*61046927SAndroid Build Coastguard Worker __u64 next; 76*61046927SAndroid Build Coastguard Worker __u32 id; 77*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_MULTI_SYNC 0x01 78*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_INDIRECT_CSD 0x02 79*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_TIMESTAMP_QUERY 0x03 80*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_RESET_TIMESTAMP_QUERY 0x04 81*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_COPY_TIMESTAMP_QUERY 0x05 82*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_RESET_PERFORMANCE_QUERY 0x06 83*61046927SAndroid Build Coastguard Worker #define DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY 0x07 84*61046927SAndroid Build Coastguard Worker __u32 flags; /* mbz */ 85*61046927SAndroid Build Coastguard Worker }; 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker /* struct drm_v3d_sem - wait/signal semaphore 88*61046927SAndroid Build Coastguard Worker * 89*61046927SAndroid Build Coastguard Worker * If binary semaphore, it only takes syncobj handle and ignores flags and 90*61046927SAndroid Build Coastguard Worker * point fields. Point is defined for timeline syncobj feature. 91*61046927SAndroid Build Coastguard Worker */ 92*61046927SAndroid Build Coastguard Worker struct drm_v3d_sem { 93*61046927SAndroid Build Coastguard Worker __u32 handle; /* syncobj */ 94*61046927SAndroid Build Coastguard Worker /* rsv below, for future uses */ 95*61046927SAndroid Build Coastguard Worker __u32 flags; 96*61046927SAndroid Build Coastguard Worker __u64 point; /* for timeline sem support */ 97*61046927SAndroid Build Coastguard Worker __u64 mbz[2]; /* must be zero, rsv */ 98*61046927SAndroid Build Coastguard Worker }; 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Worker /* Enum for each of the V3D queues. */ 101*61046927SAndroid Build Coastguard Worker enum v3d_queue { 102*61046927SAndroid Build Coastguard Worker V3D_BIN, 103*61046927SAndroid Build Coastguard Worker V3D_RENDER, 104*61046927SAndroid Build Coastguard Worker V3D_TFU, 105*61046927SAndroid Build Coastguard Worker V3D_CSD, 106*61046927SAndroid Build Coastguard Worker V3D_CACHE_CLEAN, 107*61046927SAndroid Build Coastguard Worker V3D_CPU, 108*61046927SAndroid Build Coastguard Worker }; 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker /** 111*61046927SAndroid Build Coastguard Worker * struct drm_v3d_multi_sync - ioctl extension to add support multiples 112*61046927SAndroid Build Coastguard Worker * syncobjs for commands submission. 113*61046927SAndroid Build Coastguard Worker * 114*61046927SAndroid Build Coastguard Worker * When an extension of DRM_V3D_EXT_ID_MULTI_SYNC id is defined, it points to 115*61046927SAndroid Build Coastguard Worker * this extension to define wait and signal dependencies, instead of single 116*61046927SAndroid Build Coastguard Worker * in/out sync entries on submitting commands. The field flags is used to 117*61046927SAndroid Build Coastguard Worker * determine the stage to set wait dependencies. 118*61046927SAndroid Build Coastguard Worker */ 119*61046927SAndroid Build Coastguard Worker struct drm_v3d_multi_sync { 120*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 121*61046927SAndroid Build Coastguard Worker /* Array of wait and signal semaphores */ 122*61046927SAndroid Build Coastguard Worker __u64 in_syncs; 123*61046927SAndroid Build Coastguard Worker __u64 out_syncs; 124*61046927SAndroid Build Coastguard Worker 125*61046927SAndroid Build Coastguard Worker /* Number of entries */ 126*61046927SAndroid Build Coastguard Worker __u32 in_sync_count; 127*61046927SAndroid Build Coastguard Worker __u32 out_sync_count; 128*61046927SAndroid Build Coastguard Worker 129*61046927SAndroid Build Coastguard Worker /* set the stage (v3d_queue) to sync */ 130*61046927SAndroid Build Coastguard Worker __u32 wait_stage; 131*61046927SAndroid Build Coastguard Worker 132*61046927SAndroid Build Coastguard Worker __u32 pad; /* mbz */ 133*61046927SAndroid Build Coastguard Worker }; 134*61046927SAndroid Build Coastguard Worker 135*61046927SAndroid Build Coastguard Worker /** 136*61046927SAndroid Build Coastguard Worker * struct drm_v3d_submit_cl - ioctl argument for submitting commands to the 3D 137*61046927SAndroid Build Coastguard Worker * engine. 138*61046927SAndroid Build Coastguard Worker * 139*61046927SAndroid Build Coastguard Worker * This asks the kernel to have the GPU execute an optional binner 140*61046927SAndroid Build Coastguard Worker * command list, and a render command list. 141*61046927SAndroid Build Coastguard Worker * 142*61046927SAndroid Build Coastguard Worker * The L1T, slice, L2C, L2T, and GCA caches will be flushed before 143*61046927SAndroid Build Coastguard Worker * each CL executes. The VCD cache should be flushed (if necessary) 144*61046927SAndroid Build Coastguard Worker * by the submitted CLs. The TLB writes are guaranteed to have been 145*61046927SAndroid Build Coastguard Worker * flushed by the time the render done IRQ happens, which is the 146*61046927SAndroid Build Coastguard Worker * trigger for out_sync. Any dirtying of cachelines by the job (only 147*61046927SAndroid Build Coastguard Worker * possible using TMU writes) must be flushed by the caller using the 148*61046927SAndroid Build Coastguard Worker * DRM_V3D_SUBMIT_CL_FLUSH_CACHE_FLAG flag. 149*61046927SAndroid Build Coastguard Worker */ 150*61046927SAndroid Build Coastguard Worker struct drm_v3d_submit_cl { 151*61046927SAndroid Build Coastguard Worker /* Pointer to the binner command list. 152*61046927SAndroid Build Coastguard Worker * 153*61046927SAndroid Build Coastguard Worker * This is the first set of commands executed, which runs the 154*61046927SAndroid Build Coastguard Worker * coordinate shader to determine where primitives land on the screen, 155*61046927SAndroid Build Coastguard Worker * then writes out the state updates and draw calls necessary per tile 156*61046927SAndroid Build Coastguard Worker * to the tile allocation BO. 157*61046927SAndroid Build Coastguard Worker * 158*61046927SAndroid Build Coastguard Worker * This BCL will block on any previous BCL submitted on the 159*61046927SAndroid Build Coastguard Worker * same FD, but not on any RCL or BCLs submitted by other 160*61046927SAndroid Build Coastguard Worker * clients -- that is left up to the submitter to control 161*61046927SAndroid Build Coastguard Worker * using in_sync_bcl if necessary. 162*61046927SAndroid Build Coastguard Worker */ 163*61046927SAndroid Build Coastguard Worker __u32 bcl_start; 164*61046927SAndroid Build Coastguard Worker 165*61046927SAndroid Build Coastguard Worker /** End address of the BCL (first byte after the BCL) */ 166*61046927SAndroid Build Coastguard Worker __u32 bcl_end; 167*61046927SAndroid Build Coastguard Worker 168*61046927SAndroid Build Coastguard Worker /* Offset of the render command list. 169*61046927SAndroid Build Coastguard Worker * 170*61046927SAndroid Build Coastguard Worker * This is the second set of commands executed, which will either 171*61046927SAndroid Build Coastguard Worker * execute the tiles that have been set up by the BCL, or a fixed set 172*61046927SAndroid Build Coastguard Worker * of tiles (in the case of RCL-only blits). 173*61046927SAndroid Build Coastguard Worker * 174*61046927SAndroid Build Coastguard Worker * This RCL will block on this submit's BCL, and any previous 175*61046927SAndroid Build Coastguard Worker * RCL submitted on the same FD, but not on any RCL or BCLs 176*61046927SAndroid Build Coastguard Worker * submitted by other clients -- that is left up to the 177*61046927SAndroid Build Coastguard Worker * submitter to control using in_sync_rcl if necessary. 178*61046927SAndroid Build Coastguard Worker */ 179*61046927SAndroid Build Coastguard Worker __u32 rcl_start; 180*61046927SAndroid Build Coastguard Worker 181*61046927SAndroid Build Coastguard Worker /** End address of the RCL (first byte after the RCL) */ 182*61046927SAndroid Build Coastguard Worker __u32 rcl_end; 183*61046927SAndroid Build Coastguard Worker 184*61046927SAndroid Build Coastguard Worker /** An optional sync object to wait on before starting the BCL. */ 185*61046927SAndroid Build Coastguard Worker __u32 in_sync_bcl; 186*61046927SAndroid Build Coastguard Worker /** An optional sync object to wait on before starting the RCL. */ 187*61046927SAndroid Build Coastguard Worker __u32 in_sync_rcl; 188*61046927SAndroid Build Coastguard Worker /** An optional sync object to place the completion fence in. */ 189*61046927SAndroid Build Coastguard Worker __u32 out_sync; 190*61046927SAndroid Build Coastguard Worker 191*61046927SAndroid Build Coastguard Worker /* Offset of the tile alloc memory 192*61046927SAndroid Build Coastguard Worker * 193*61046927SAndroid Build Coastguard Worker * This is optional on V3D 3.3 (where the CL can set the value) but 194*61046927SAndroid Build Coastguard Worker * required on V3D 4.1. 195*61046927SAndroid Build Coastguard Worker */ 196*61046927SAndroid Build Coastguard Worker __u32 qma; 197*61046927SAndroid Build Coastguard Worker 198*61046927SAndroid Build Coastguard Worker /** Size of the tile alloc memory. */ 199*61046927SAndroid Build Coastguard Worker __u32 qms; 200*61046927SAndroid Build Coastguard Worker 201*61046927SAndroid Build Coastguard Worker /** Offset of the tile state data array. */ 202*61046927SAndroid Build Coastguard Worker __u32 qts; 203*61046927SAndroid Build Coastguard Worker 204*61046927SAndroid Build Coastguard Worker /* Pointer to a u32 array of the BOs that are referenced by the job. 205*61046927SAndroid Build Coastguard Worker */ 206*61046927SAndroid Build Coastguard Worker __u64 bo_handles; 207*61046927SAndroid Build Coastguard Worker 208*61046927SAndroid Build Coastguard Worker /* Number of BO handles passed in (size is that times 4). */ 209*61046927SAndroid Build Coastguard Worker __u32 bo_handle_count; 210*61046927SAndroid Build Coastguard Worker 211*61046927SAndroid Build Coastguard Worker /* DRM_V3D_SUBMIT_* properties */ 212*61046927SAndroid Build Coastguard Worker __u32 flags; 213*61046927SAndroid Build Coastguard Worker 214*61046927SAndroid Build Coastguard Worker /* ID of the perfmon to attach to this job. 0 means no perfmon. */ 215*61046927SAndroid Build Coastguard Worker __u32 perfmon_id; 216*61046927SAndroid Build Coastguard Worker 217*61046927SAndroid Build Coastguard Worker __u32 pad; 218*61046927SAndroid Build Coastguard Worker 219*61046927SAndroid Build Coastguard Worker /* Pointer to an array of ioctl extensions*/ 220*61046927SAndroid Build Coastguard Worker __u64 extensions; 221*61046927SAndroid Build Coastguard Worker }; 222*61046927SAndroid Build Coastguard Worker 223*61046927SAndroid Build Coastguard Worker /** 224*61046927SAndroid Build Coastguard Worker * struct drm_v3d_wait_bo - ioctl argument for waiting for 225*61046927SAndroid Build Coastguard Worker * completion of the last DRM_V3D_SUBMIT_CL on a BO. 226*61046927SAndroid Build Coastguard Worker * 227*61046927SAndroid Build Coastguard Worker * This is useful for cases where multiple processes might be 228*61046927SAndroid Build Coastguard Worker * rendering to a BO and you want to wait for all rendering to be 229*61046927SAndroid Build Coastguard Worker * completed. 230*61046927SAndroid Build Coastguard Worker */ 231*61046927SAndroid Build Coastguard Worker struct drm_v3d_wait_bo { 232*61046927SAndroid Build Coastguard Worker __u32 handle; 233*61046927SAndroid Build Coastguard Worker __u32 pad; 234*61046927SAndroid Build Coastguard Worker __u64 timeout_ns; 235*61046927SAndroid Build Coastguard Worker }; 236*61046927SAndroid Build Coastguard Worker 237*61046927SAndroid Build Coastguard Worker /** 238*61046927SAndroid Build Coastguard Worker * struct drm_v3d_create_bo - ioctl argument for creating V3D BOs. 239*61046927SAndroid Build Coastguard Worker * 240*61046927SAndroid Build Coastguard Worker * There are currently no values for the flags argument, but it may be 241*61046927SAndroid Build Coastguard Worker * used in a future extension. 242*61046927SAndroid Build Coastguard Worker */ 243*61046927SAndroid Build Coastguard Worker struct drm_v3d_create_bo { 244*61046927SAndroid Build Coastguard Worker __u32 size; 245*61046927SAndroid Build Coastguard Worker __u32 flags; 246*61046927SAndroid Build Coastguard Worker /** Returned GEM handle for the BO. */ 247*61046927SAndroid Build Coastguard Worker __u32 handle; 248*61046927SAndroid Build Coastguard Worker /** 249*61046927SAndroid Build Coastguard Worker * Returned offset for the BO in the V3D address space. This offset 250*61046927SAndroid Build Coastguard Worker * is private to the DRM fd and is valid for the lifetime of the GEM 251*61046927SAndroid Build Coastguard Worker * handle. 252*61046927SAndroid Build Coastguard Worker * 253*61046927SAndroid Build Coastguard Worker * This offset value will always be nonzero, since various HW 254*61046927SAndroid Build Coastguard Worker * units treat 0 specially. 255*61046927SAndroid Build Coastguard Worker */ 256*61046927SAndroid Build Coastguard Worker __u32 offset; 257*61046927SAndroid Build Coastguard Worker }; 258*61046927SAndroid Build Coastguard Worker 259*61046927SAndroid Build Coastguard Worker /** 260*61046927SAndroid Build Coastguard Worker * struct drm_v3d_mmap_bo - ioctl argument for mapping V3D BOs. 261*61046927SAndroid Build Coastguard Worker * 262*61046927SAndroid Build Coastguard Worker * This doesn't actually perform an mmap. Instead, it returns the 263*61046927SAndroid Build Coastguard Worker * offset you need to use in an mmap on the DRM device node. This 264*61046927SAndroid Build Coastguard Worker * means that tools like valgrind end up knowing about the mapped 265*61046927SAndroid Build Coastguard Worker * memory. 266*61046927SAndroid Build Coastguard Worker * 267*61046927SAndroid Build Coastguard Worker * There are currently no values for the flags argument, but it may be 268*61046927SAndroid Build Coastguard Worker * used in a future extension. 269*61046927SAndroid Build Coastguard Worker */ 270*61046927SAndroid Build Coastguard Worker struct drm_v3d_mmap_bo { 271*61046927SAndroid Build Coastguard Worker /** Handle for the object being mapped. */ 272*61046927SAndroid Build Coastguard Worker __u32 handle; 273*61046927SAndroid Build Coastguard Worker __u32 flags; 274*61046927SAndroid Build Coastguard Worker /** offset into the drm node to use for subsequent mmap call. */ 275*61046927SAndroid Build Coastguard Worker __u64 offset; 276*61046927SAndroid Build Coastguard Worker }; 277*61046927SAndroid Build Coastguard Worker 278*61046927SAndroid Build Coastguard Worker enum drm_v3d_param { 279*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_UIFCFG, 280*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_HUB_IDENT1, 281*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_HUB_IDENT2, 282*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_HUB_IDENT3, 283*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_CORE0_IDENT0, 284*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_CORE0_IDENT1, 285*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_V3D_CORE0_IDENT2, 286*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_TFU, 287*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_CSD, 288*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_CACHE_FLUSH, 289*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_PERFMON, 290*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT, 291*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_SUPPORTS_CPU_QUEUE, 292*61046927SAndroid Build Coastguard Worker DRM_V3D_PARAM_MAX_PERF_COUNTERS, 293*61046927SAndroid Build Coastguard Worker }; 294*61046927SAndroid Build Coastguard Worker 295*61046927SAndroid Build Coastguard Worker struct drm_v3d_get_param { 296*61046927SAndroid Build Coastguard Worker __u32 param; 297*61046927SAndroid Build Coastguard Worker __u32 pad; 298*61046927SAndroid Build Coastguard Worker __u64 value; 299*61046927SAndroid Build Coastguard Worker }; 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Worker /** 302*61046927SAndroid Build Coastguard Worker * Returns the offset for the BO in the V3D address space for this DRM fd. 303*61046927SAndroid Build Coastguard Worker * This is the same value returned by drm_v3d_create_bo, if that was called 304*61046927SAndroid Build Coastguard Worker * from this DRM fd. 305*61046927SAndroid Build Coastguard Worker */ 306*61046927SAndroid Build Coastguard Worker struct drm_v3d_get_bo_offset { 307*61046927SAndroid Build Coastguard Worker __u32 handle; 308*61046927SAndroid Build Coastguard Worker __u32 offset; 309*61046927SAndroid Build Coastguard Worker }; 310*61046927SAndroid Build Coastguard Worker 311*61046927SAndroid Build Coastguard Worker struct drm_v3d_submit_tfu { 312*61046927SAndroid Build Coastguard Worker __u32 icfg; 313*61046927SAndroid Build Coastguard Worker __u32 iia; 314*61046927SAndroid Build Coastguard Worker __u32 iis; 315*61046927SAndroid Build Coastguard Worker __u32 ica; 316*61046927SAndroid Build Coastguard Worker __u32 iua; 317*61046927SAndroid Build Coastguard Worker __u32 ioa; 318*61046927SAndroid Build Coastguard Worker __u32 ios; 319*61046927SAndroid Build Coastguard Worker __u32 coef[4]; 320*61046927SAndroid Build Coastguard Worker /* First handle is the output BO, following are other inputs. 321*61046927SAndroid Build Coastguard Worker * 0 for unused. 322*61046927SAndroid Build Coastguard Worker */ 323*61046927SAndroid Build Coastguard Worker __u32 bo_handles[4]; 324*61046927SAndroid Build Coastguard Worker /* sync object to block on before running the TFU job. Each TFU 325*61046927SAndroid Build Coastguard Worker * job will execute in the order submitted to its FD. Synchronization 326*61046927SAndroid Build Coastguard Worker * against rendering jobs requires using sync objects. 327*61046927SAndroid Build Coastguard Worker */ 328*61046927SAndroid Build Coastguard Worker __u32 in_sync; 329*61046927SAndroid Build Coastguard Worker /* Sync object to signal when the TFU job is done. */ 330*61046927SAndroid Build Coastguard Worker __u32 out_sync; 331*61046927SAndroid Build Coastguard Worker 332*61046927SAndroid Build Coastguard Worker __u32 flags; 333*61046927SAndroid Build Coastguard Worker 334*61046927SAndroid Build Coastguard Worker /* Pointer to an array of ioctl extensions*/ 335*61046927SAndroid Build Coastguard Worker __u64 extensions; 336*61046927SAndroid Build Coastguard Worker 337*61046927SAndroid Build Coastguard Worker struct { 338*61046927SAndroid Build Coastguard Worker __u32 ioc; 339*61046927SAndroid Build Coastguard Worker __u32 pad; 340*61046927SAndroid Build Coastguard Worker } v71; 341*61046927SAndroid Build Coastguard Worker }; 342*61046927SAndroid Build Coastguard Worker 343*61046927SAndroid Build Coastguard Worker /* Submits a compute shader for dispatch. This job will block on any 344*61046927SAndroid Build Coastguard Worker * previous compute shaders submitted on this fd, and any other 345*61046927SAndroid Build Coastguard Worker * synchronization must be performed with in_sync/out_sync. 346*61046927SAndroid Build Coastguard Worker */ 347*61046927SAndroid Build Coastguard Worker struct drm_v3d_submit_csd { 348*61046927SAndroid Build Coastguard Worker __u32 cfg[7]; 349*61046927SAndroid Build Coastguard Worker __u32 coef[4]; 350*61046927SAndroid Build Coastguard Worker 351*61046927SAndroid Build Coastguard Worker /* Pointer to a u32 array of the BOs that are referenced by the job. 352*61046927SAndroid Build Coastguard Worker */ 353*61046927SAndroid Build Coastguard Worker __u64 bo_handles; 354*61046927SAndroid Build Coastguard Worker 355*61046927SAndroid Build Coastguard Worker /* Number of BO handles passed in (size is that times 4). */ 356*61046927SAndroid Build Coastguard Worker __u32 bo_handle_count; 357*61046927SAndroid Build Coastguard Worker 358*61046927SAndroid Build Coastguard Worker /* sync object to block on before running the CSD job. Each 359*61046927SAndroid Build Coastguard Worker * CSD job will execute in the order submitted to its FD. 360*61046927SAndroid Build Coastguard Worker * Synchronization against rendering/TFU jobs or CSD from 361*61046927SAndroid Build Coastguard Worker * other fds requires using sync objects. 362*61046927SAndroid Build Coastguard Worker */ 363*61046927SAndroid Build Coastguard Worker __u32 in_sync; 364*61046927SAndroid Build Coastguard Worker /* Sync object to signal when the CSD job is done. */ 365*61046927SAndroid Build Coastguard Worker __u32 out_sync; 366*61046927SAndroid Build Coastguard Worker 367*61046927SAndroid Build Coastguard Worker /* ID of the perfmon to attach to this job. 0 means no perfmon. */ 368*61046927SAndroid Build Coastguard Worker __u32 perfmon_id; 369*61046927SAndroid Build Coastguard Worker 370*61046927SAndroid Build Coastguard Worker /* Pointer to an array of ioctl extensions*/ 371*61046927SAndroid Build Coastguard Worker __u64 extensions; 372*61046927SAndroid Build Coastguard Worker 373*61046927SAndroid Build Coastguard Worker __u32 flags; 374*61046927SAndroid Build Coastguard Worker 375*61046927SAndroid Build Coastguard Worker __u32 pad; 376*61046927SAndroid Build Coastguard Worker }; 377*61046927SAndroid Build Coastguard Worker 378*61046927SAndroid Build Coastguard Worker /** 379*61046927SAndroid Build Coastguard Worker * struct drm_v3d_indirect_csd - ioctl extension for the CPU job to create an 380*61046927SAndroid Build Coastguard Worker * indirect CSD 381*61046927SAndroid Build Coastguard Worker * 382*61046927SAndroid Build Coastguard Worker * When an extension of DRM_V3D_EXT_ID_CPU_INDIRECT_CSD id is defined, it 383*61046927SAndroid Build Coastguard Worker * points to this extension to define a indirect CSD submission. It creates a 384*61046927SAndroid Build Coastguard Worker * CPU job linked to a CSD job. The CPU job waits for the indirect CSD 385*61046927SAndroid Build Coastguard Worker * dependencies and, once they are signaled, it updates the CSD job config 386*61046927SAndroid Build Coastguard Worker * before allowing the CSD job execution. 387*61046927SAndroid Build Coastguard Worker */ 388*61046927SAndroid Build Coastguard Worker struct drm_v3d_indirect_csd { 389*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 390*61046927SAndroid Build Coastguard Worker 391*61046927SAndroid Build Coastguard Worker /* Indirect CSD */ 392*61046927SAndroid Build Coastguard Worker struct drm_v3d_submit_csd submit; 393*61046927SAndroid Build Coastguard Worker 394*61046927SAndroid Build Coastguard Worker /* Handle of the indirect BO, that should be also attached to the 395*61046927SAndroid Build Coastguard Worker * indirect CSD. 396*61046927SAndroid Build Coastguard Worker */ 397*61046927SAndroid Build Coastguard Worker __u32 indirect; 398*61046927SAndroid Build Coastguard Worker 399*61046927SAndroid Build Coastguard Worker /* Offset within the BO where the workgroup counts are stored */ 400*61046927SAndroid Build Coastguard Worker __u32 offset; 401*61046927SAndroid Build Coastguard Worker 402*61046927SAndroid Build Coastguard Worker /* Workgroups size */ 403*61046927SAndroid Build Coastguard Worker __u32 wg_size; 404*61046927SAndroid Build Coastguard Worker 405*61046927SAndroid Build Coastguard Worker /* Indices of the uniforms with the workgroup dispatch counts 406*61046927SAndroid Build Coastguard Worker * in the uniform stream. If the uniform rewrite is not needed, 407*61046927SAndroid Build Coastguard Worker * the offset must be 0xffffffff. 408*61046927SAndroid Build Coastguard Worker */ 409*61046927SAndroid Build Coastguard Worker __u32 wg_uniform_offsets[3]; 410*61046927SAndroid Build Coastguard Worker }; 411*61046927SAndroid Build Coastguard Worker 412*61046927SAndroid Build Coastguard Worker /** 413*61046927SAndroid Build Coastguard Worker * struct drm_v3d_timestamp_query - ioctl extension for the CPU job to calculate 414*61046927SAndroid Build Coastguard Worker * a timestamp query 415*61046927SAndroid Build Coastguard Worker * 416*61046927SAndroid Build Coastguard Worker * When an extension DRM_V3D_EXT_ID_TIMESTAMP_QUERY is defined, it points to 417*61046927SAndroid Build Coastguard Worker * this extension to define a timestamp query submission. This CPU job will 418*61046927SAndroid Build Coastguard Worker * calculate the timestamp query and update the query value within the 419*61046927SAndroid Build Coastguard Worker * timestamp BO. Moreover, it will signal the timestamp syncobj to indicate 420*61046927SAndroid Build Coastguard Worker * query availability. 421*61046927SAndroid Build Coastguard Worker */ 422*61046927SAndroid Build Coastguard Worker struct drm_v3d_timestamp_query { 423*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 424*61046927SAndroid Build Coastguard Worker 425*61046927SAndroid Build Coastguard Worker /* Array of queries' offsets within the timestamp BO for their value */ 426*61046927SAndroid Build Coastguard Worker __u64 offsets; 427*61046927SAndroid Build Coastguard Worker 428*61046927SAndroid Build Coastguard Worker /* Array of timestamp's syncobjs to indicate its availability */ 429*61046927SAndroid Build Coastguard Worker __u64 syncs; 430*61046927SAndroid Build Coastguard Worker 431*61046927SAndroid Build Coastguard Worker /* Number of queries */ 432*61046927SAndroid Build Coastguard Worker __u32 count; 433*61046927SAndroid Build Coastguard Worker 434*61046927SAndroid Build Coastguard Worker /* mbz */ 435*61046927SAndroid Build Coastguard Worker __u32 pad; 436*61046927SAndroid Build Coastguard Worker }; 437*61046927SAndroid Build Coastguard Worker 438*61046927SAndroid Build Coastguard Worker /** 439*61046927SAndroid Build Coastguard Worker * struct drm_v3d_reset_timestamp_query - ioctl extension for the CPU job to 440*61046927SAndroid Build Coastguard Worker * reset timestamp queries 441*61046927SAndroid Build Coastguard Worker * 442*61046927SAndroid Build Coastguard Worker * When an extension DRM_V3D_EXT_ID_CPU_RESET_TIMESTAMP_QUERY is defined, it 443*61046927SAndroid Build Coastguard Worker * points to this extension to define a reset timestamp submission. This CPU 444*61046927SAndroid Build Coastguard Worker * job will reset the timestamp queries based on value offset of the first 445*61046927SAndroid Build Coastguard Worker * query. Moreover, it will reset the timestamp syncobj to reset query 446*61046927SAndroid Build Coastguard Worker * availability. 447*61046927SAndroid Build Coastguard Worker */ 448*61046927SAndroid Build Coastguard Worker struct drm_v3d_reset_timestamp_query { 449*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 450*61046927SAndroid Build Coastguard Worker 451*61046927SAndroid Build Coastguard Worker /* Array of timestamp's syncobjs to indicate its availability */ 452*61046927SAndroid Build Coastguard Worker __u64 syncs; 453*61046927SAndroid Build Coastguard Worker 454*61046927SAndroid Build Coastguard Worker /* Offset of the first query within the timestamp BO for its value */ 455*61046927SAndroid Build Coastguard Worker __u32 offset; 456*61046927SAndroid Build Coastguard Worker 457*61046927SAndroid Build Coastguard Worker /* Number of queries */ 458*61046927SAndroid Build Coastguard Worker __u32 count; 459*61046927SAndroid Build Coastguard Worker }; 460*61046927SAndroid Build Coastguard Worker 461*61046927SAndroid Build Coastguard Worker /** 462*61046927SAndroid Build Coastguard Worker * struct drm_v3d_copy_timestamp_query - ioctl extension for the CPU job to copy 463*61046927SAndroid Build Coastguard Worker * query results to a buffer 464*61046927SAndroid Build Coastguard Worker * 465*61046927SAndroid Build Coastguard Worker * When an extension DRM_V3D_EXT_ID_CPU_COPY_TIMESTAMP_QUERY is defined, it 466*61046927SAndroid Build Coastguard Worker * points to this extension to define a copy timestamp query submission. This 467*61046927SAndroid Build Coastguard Worker * CPU job will copy the timestamp queries results to a BO with the offset 468*61046927SAndroid Build Coastguard Worker * and stride defined in the extension. 469*61046927SAndroid Build Coastguard Worker */ 470*61046927SAndroid Build Coastguard Worker struct drm_v3d_copy_timestamp_query { 471*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 472*61046927SAndroid Build Coastguard Worker 473*61046927SAndroid Build Coastguard Worker /* Define if should write to buffer using 64 or 32 bits */ 474*61046927SAndroid Build Coastguard Worker __u8 do_64bit; 475*61046927SAndroid Build Coastguard Worker 476*61046927SAndroid Build Coastguard Worker /* Define if it can write to buffer even if the query is not available */ 477*61046927SAndroid Build Coastguard Worker __u8 do_partial; 478*61046927SAndroid Build Coastguard Worker 479*61046927SAndroid Build Coastguard Worker /* Define if it should write availability bit to buffer */ 480*61046927SAndroid Build Coastguard Worker __u8 availability_bit; 481*61046927SAndroid Build Coastguard Worker 482*61046927SAndroid Build Coastguard Worker /* mbz */ 483*61046927SAndroid Build Coastguard Worker __u8 pad; 484*61046927SAndroid Build Coastguard Worker 485*61046927SAndroid Build Coastguard Worker /* Offset of the buffer in the BO */ 486*61046927SAndroid Build Coastguard Worker __u32 offset; 487*61046927SAndroid Build Coastguard Worker 488*61046927SAndroid Build Coastguard Worker /* Stride of the buffer in the BO */ 489*61046927SAndroid Build Coastguard Worker __u32 stride; 490*61046927SAndroid Build Coastguard Worker 491*61046927SAndroid Build Coastguard Worker /* Number of queries */ 492*61046927SAndroid Build Coastguard Worker __u32 count; 493*61046927SAndroid Build Coastguard Worker 494*61046927SAndroid Build Coastguard Worker /* Array of queries' offsets within the timestamp BO for their value */ 495*61046927SAndroid Build Coastguard Worker __u64 offsets; 496*61046927SAndroid Build Coastguard Worker 497*61046927SAndroid Build Coastguard Worker /* Array of timestamp's syncobjs to indicate its availability */ 498*61046927SAndroid Build Coastguard Worker __u64 syncs; 499*61046927SAndroid Build Coastguard Worker }; 500*61046927SAndroid Build Coastguard Worker 501*61046927SAndroid Build Coastguard Worker /** 502*61046927SAndroid Build Coastguard Worker * struct drm_v3d_reset_performance_query - ioctl extension for the CPU job to 503*61046927SAndroid Build Coastguard Worker * reset performance queries 504*61046927SAndroid Build Coastguard Worker * 505*61046927SAndroid Build Coastguard Worker * When an extension DRM_V3D_EXT_ID_CPU_RESET_PERFORMANCE_QUERY is defined, it 506*61046927SAndroid Build Coastguard Worker * points to this extension to define a reset performance submission. This CPU 507*61046927SAndroid Build Coastguard Worker * job will reset the performance queries by resetting the values of the 508*61046927SAndroid Build Coastguard Worker * performance monitors. Moreover, it will reset the syncobj to reset query 509*61046927SAndroid Build Coastguard Worker * availability. 510*61046927SAndroid Build Coastguard Worker */ 511*61046927SAndroid Build Coastguard Worker struct drm_v3d_reset_performance_query { 512*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 513*61046927SAndroid Build Coastguard Worker 514*61046927SAndroid Build Coastguard Worker /* Array of performance queries's syncobjs to indicate its availability */ 515*61046927SAndroid Build Coastguard Worker __u64 syncs; 516*61046927SAndroid Build Coastguard Worker 517*61046927SAndroid Build Coastguard Worker /* Number of queries */ 518*61046927SAndroid Build Coastguard Worker __u32 count; 519*61046927SAndroid Build Coastguard Worker 520*61046927SAndroid Build Coastguard Worker /* Number of performance monitors */ 521*61046927SAndroid Build Coastguard Worker __u32 nperfmons; 522*61046927SAndroid Build Coastguard Worker 523*61046927SAndroid Build Coastguard Worker /* Array of u64 user-pointers that point to an array of kperfmon_ids */ 524*61046927SAndroid Build Coastguard Worker __u64 kperfmon_ids; 525*61046927SAndroid Build Coastguard Worker }; 526*61046927SAndroid Build Coastguard Worker 527*61046927SAndroid Build Coastguard Worker /** 528*61046927SAndroid Build Coastguard Worker * struct drm_v3d_copy_performance_query - ioctl extension for the CPU job to copy 529*61046927SAndroid Build Coastguard Worker * performance query results to a buffer 530*61046927SAndroid Build Coastguard Worker * 531*61046927SAndroid Build Coastguard Worker * When an extension DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY is defined, it 532*61046927SAndroid Build Coastguard Worker * points to this extension to define a copy performance query submission. This 533*61046927SAndroid Build Coastguard Worker * CPU job will copy the performance queries results to a BO with the offset 534*61046927SAndroid Build Coastguard Worker * and stride defined in the extension. 535*61046927SAndroid Build Coastguard Worker */ 536*61046927SAndroid Build Coastguard Worker struct drm_v3d_copy_performance_query { 537*61046927SAndroid Build Coastguard Worker struct drm_v3d_extension base; 538*61046927SAndroid Build Coastguard Worker 539*61046927SAndroid Build Coastguard Worker /* Define if should write to buffer using 64 or 32 bits */ 540*61046927SAndroid Build Coastguard Worker __u8 do_64bit; 541*61046927SAndroid Build Coastguard Worker 542*61046927SAndroid Build Coastguard Worker /* Define if it can write to buffer even if the query is not available */ 543*61046927SAndroid Build Coastguard Worker __u8 do_partial; 544*61046927SAndroid Build Coastguard Worker 545*61046927SAndroid Build Coastguard Worker /* Define if it should write availability bit to buffer */ 546*61046927SAndroid Build Coastguard Worker __u8 availability_bit; 547*61046927SAndroid Build Coastguard Worker 548*61046927SAndroid Build Coastguard Worker /* mbz */ 549*61046927SAndroid Build Coastguard Worker __u8 pad; 550*61046927SAndroid Build Coastguard Worker 551*61046927SAndroid Build Coastguard Worker /* Offset of the buffer in the BO */ 552*61046927SAndroid Build Coastguard Worker __u32 offset; 553*61046927SAndroid Build Coastguard Worker 554*61046927SAndroid Build Coastguard Worker /* Stride of the buffer in the BO */ 555*61046927SAndroid Build Coastguard Worker __u32 stride; 556*61046927SAndroid Build Coastguard Worker 557*61046927SAndroid Build Coastguard Worker /* Number of performance monitors */ 558*61046927SAndroid Build Coastguard Worker __u32 nperfmons; 559*61046927SAndroid Build Coastguard Worker 560*61046927SAndroid Build Coastguard Worker /* Number of performance counters related to this query pool */ 561*61046927SAndroid Build Coastguard Worker __u32 ncounters; 562*61046927SAndroid Build Coastguard Worker 563*61046927SAndroid Build Coastguard Worker /* Number of queries */ 564*61046927SAndroid Build Coastguard Worker __u32 count; 565*61046927SAndroid Build Coastguard Worker 566*61046927SAndroid Build Coastguard Worker /* Array of performance queries's syncobjs to indicate its availability */ 567*61046927SAndroid Build Coastguard Worker __u64 syncs; 568*61046927SAndroid Build Coastguard Worker 569*61046927SAndroid Build Coastguard Worker /* Array of u64 user-pointers that point to an array of kperfmon_ids */ 570*61046927SAndroid Build Coastguard Worker __u64 kperfmon_ids; 571*61046927SAndroid Build Coastguard Worker }; 572*61046927SAndroid Build Coastguard Worker 573*61046927SAndroid Build Coastguard Worker struct drm_v3d_submit_cpu { 574*61046927SAndroid Build Coastguard Worker /* Pointer to a u32 array of the BOs that are referenced by the job. 575*61046927SAndroid Build Coastguard Worker * 576*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_CPU_INDIRECT_CSD, it must contain only one BO, 577*61046927SAndroid Build Coastguard Worker * that contains the workgroup counts. 578*61046927SAndroid Build Coastguard Worker * 579*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_TIMESTAMP_QUERY, it must contain only one BO, 580*61046927SAndroid Build Coastguard Worker * that will contain the timestamp. 581*61046927SAndroid Build Coastguard Worker * 582*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_CPU_RESET_TIMESTAMP_QUERY, it must contain only 583*61046927SAndroid Build Coastguard Worker * one BO, that contains the timestamp. 584*61046927SAndroid Build Coastguard Worker * 585*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_CPU_COPY_TIMESTAMP_QUERY, it must contain two 586*61046927SAndroid Build Coastguard Worker * BOs. The first is the BO where the timestamp queries will be written 587*61046927SAndroid Build Coastguard Worker * to. The second is the BO that contains the timestamp. 588*61046927SAndroid Build Coastguard Worker * 589*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_CPU_RESET_PERFORMANCE_QUERY, it must contain no 590*61046927SAndroid Build Coastguard Worker * BOs. 591*61046927SAndroid Build Coastguard Worker * 592*61046927SAndroid Build Coastguard Worker * For DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY, it must contain one 593*61046927SAndroid Build Coastguard Worker * BO, where the performance queries will be written. 594*61046927SAndroid Build Coastguard Worker */ 595*61046927SAndroid Build Coastguard Worker __u64 bo_handles; 596*61046927SAndroid Build Coastguard Worker 597*61046927SAndroid Build Coastguard Worker /* Number of BO handles passed in (size is that times 4). */ 598*61046927SAndroid Build Coastguard Worker __u32 bo_handle_count; 599*61046927SAndroid Build Coastguard Worker 600*61046927SAndroid Build Coastguard Worker __u32 flags; 601*61046927SAndroid Build Coastguard Worker 602*61046927SAndroid Build Coastguard Worker /* Pointer to an array of ioctl extensions*/ 603*61046927SAndroid Build Coastguard Worker __u64 extensions; 604*61046927SAndroid Build Coastguard Worker }; 605*61046927SAndroid Build Coastguard Worker 606*61046927SAndroid Build Coastguard Worker /* The performance counters index represented by this enum are deprecated and 607*61046927SAndroid Build Coastguard Worker * must no longer be used. These counters are only valid for V3D 4.2. 608*61046927SAndroid Build Coastguard Worker * 609*61046927SAndroid Build Coastguard Worker * In order to check for performance counter information, 610*61046927SAndroid Build Coastguard Worker * use DRM_IOCTL_V3D_PERFMON_GET_COUNTER. 611*61046927SAndroid Build Coastguard Worker * 612*61046927SAndroid Build Coastguard Worker * Don't use V3D_PERFCNT_NUM to retrieve the maximum number of performance 613*61046927SAndroid Build Coastguard Worker * counters. You should use DRM_IOCTL_V3D_GET_PARAM with the following 614*61046927SAndroid Build Coastguard Worker * parameter: DRM_V3D_PARAM_MAX_PERF_COUNTERS. 615*61046927SAndroid Build Coastguard Worker */ 616*61046927SAndroid Build Coastguard Worker enum { 617*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_FEP_VALID_PRIMTS_NO_PIXELS, 618*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_FEP_VALID_PRIMS, 619*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_FEP_EZ_NFCLIP_QUADS, 620*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_FEP_VALID_QUADS, 621*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_STENCIL_FAIL, 622*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_STENCILZ_FAIL, 623*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_STENCILZ_PASS, 624*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_ZERO_COV, 625*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_NONZERO_COV, 626*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_QUADS_WRITTEN, 627*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_PRIM_VIEWPOINT_DISCARD, 628*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_PRIM_CLIP, 629*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_PRIM_REV, 630*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_IDLE_CYCLES, 631*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_ACTIVE_CYCLES_VERTEX_COORD_USER, 632*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_ACTIVE_CYCLES_FRAG, 633*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_VALID_INSTR, 634*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_TMU_STALL, 635*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_SCOREBOARD_STALL, 636*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_VARYINGS_STALL, 637*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_IC_HIT, 638*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_IC_MISS, 639*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_UC_HIT, 640*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_UC_MISS, 641*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_TCACHE_ACCESS, 642*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_TCACHE_MISS, 643*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_VPM_VDW_STALL, 644*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_VPM_VCD_STALL, 645*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_BIN_ACTIVE, 646*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_RDR_ACTIVE, 647*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_HITS, 648*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_MISSES, 649*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_CYCLE_COUNT, 650*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_STALLED_VERTEX_COORD_USER, 651*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_QPU_CYCLES_STALLED_FRAGMENT, 652*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_PRIMS_BINNED, 653*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITES_WATCH_0, 654*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READS_WATCH_0, 655*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITE_STALLS_WATCH_0, 656*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READ_STALLS_WATCH_0, 657*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITE_BYTES_WATCH_0, 658*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READ_BYTES_WATCH_0, 659*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITES_WATCH_1, 660*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READS_WATCH_1, 661*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITE_STALLS_WATCH_1, 662*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READ_STALLS_WATCH_1, 663*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_WRITE_BYTES_WATCH_1, 664*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_AXI_READ_BYTES_WATCH_1, 665*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_PARTIAL_QUADS, 666*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_CONFIG_ACCESSES, 667*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_NO_ID_STALL, 668*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_COM_QUE_STALL, 669*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMU_WRITES, 670*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_ACTIVE_CYCLES, 671*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_STALLED_CYCLES, 672*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_CLE_ACTIVE, 673*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMU_READS, 674*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_CLE_READS, 675*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_VCD_READS, 676*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMUCFG_READS, 677*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC0_READS, 678*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC1_READS, 679*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC2_READS, 680*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMU_W_MISSES, 681*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMU_R_MISSES, 682*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_CLE_MISSES, 683*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_VCD_MISSES, 684*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_TMUCFG_MISSES, 685*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC0_MISSES, 686*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC1_MISSES, 687*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_SLC2_MISSES, 688*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_CORE_MEM_WRITES, 689*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_MEM_WRITES, 690*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_MEM_WRITES, 691*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_MEM_WRITES, 692*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_CORE_MEM_READS, 693*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_L2T_MEM_READS, 694*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_MEM_READS, 695*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PSE_MEM_READS, 696*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_MEM_READS, 697*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_GMP_MEM_READS, 698*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PTB_W_MEM_WORDS, 699*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_W_MEM_WORDS, 700*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_PSE_R_MEM_WORDS, 701*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TLB_R_MEM_WORDS, 702*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_TMU_MRU_HITS, 703*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_COMPUTE_ACTIVE, 704*61046927SAndroid Build Coastguard Worker V3D_PERFCNT_NUM, 705*61046927SAndroid Build Coastguard Worker }; 706*61046927SAndroid Build Coastguard Worker 707*61046927SAndroid Build Coastguard Worker #define DRM_V3D_MAX_PERF_COUNTERS 32 708*61046927SAndroid Build Coastguard Worker 709*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_create { 710*61046927SAndroid Build Coastguard Worker __u32 id; 711*61046927SAndroid Build Coastguard Worker __u32 ncounters; 712*61046927SAndroid Build Coastguard Worker __u8 counters[DRM_V3D_MAX_PERF_COUNTERS]; 713*61046927SAndroid Build Coastguard Worker }; 714*61046927SAndroid Build Coastguard Worker 715*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_destroy { 716*61046927SAndroid Build Coastguard Worker __u32 id; 717*61046927SAndroid Build Coastguard Worker }; 718*61046927SAndroid Build Coastguard Worker 719*61046927SAndroid Build Coastguard Worker /* 720*61046927SAndroid Build Coastguard Worker * Returns the values of the performance counters tracked by this 721*61046927SAndroid Build Coastguard Worker * perfmon (as an array of ncounters u64 values). 722*61046927SAndroid Build Coastguard Worker * 723*61046927SAndroid Build Coastguard Worker * No implicit synchronization is performed, so the user has to 724*61046927SAndroid Build Coastguard Worker * guarantee that any jobs using this perfmon have already been 725*61046927SAndroid Build Coastguard Worker * completed (probably by blocking on the seqno returned by the 726*61046927SAndroid Build Coastguard Worker * last exec that used the perfmon). 727*61046927SAndroid Build Coastguard Worker */ 728*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_get_values { 729*61046927SAndroid Build Coastguard Worker __u32 id; 730*61046927SAndroid Build Coastguard Worker __u32 pad; 731*61046927SAndroid Build Coastguard Worker __u64 values_ptr; 732*61046927SAndroid Build Coastguard Worker }; 733*61046927SAndroid Build Coastguard Worker 734*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFCNT_MAX_NAME 64 735*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFCNT_MAX_CATEGORY 32 736*61046927SAndroid Build Coastguard Worker #define DRM_V3D_PERFCNT_MAX_DESCRIPTION 256 737*61046927SAndroid Build Coastguard Worker 738*61046927SAndroid Build Coastguard Worker /** 739*61046927SAndroid Build Coastguard Worker * struct drm_v3d_perfmon_get_counter - ioctl to get the description of a 740*61046927SAndroid Build Coastguard Worker * performance counter 741*61046927SAndroid Build Coastguard Worker * 742*61046927SAndroid Build Coastguard Worker * As userspace needs to retrieve information about the performance counters 743*61046927SAndroid Build Coastguard Worker * available, this IOCTL allows users to get information about a performance 744*61046927SAndroid Build Coastguard Worker * counter (name, category and description). 745*61046927SAndroid Build Coastguard Worker */ 746*61046927SAndroid Build Coastguard Worker struct drm_v3d_perfmon_get_counter { 747*61046927SAndroid Build Coastguard Worker /* 748*61046927SAndroid Build Coastguard Worker * Counter ID 749*61046927SAndroid Build Coastguard Worker * 750*61046927SAndroid Build Coastguard Worker * Must be smaller than the maximum number of performance counters, which 751*61046927SAndroid Build Coastguard Worker * can be retrieve through DRM_V3D_PARAM_MAX_PERF_COUNTERS. 752*61046927SAndroid Build Coastguard Worker */ 753*61046927SAndroid Build Coastguard Worker __u8 counter; 754*61046927SAndroid Build Coastguard Worker 755*61046927SAndroid Build Coastguard Worker /* Name of the counter */ 756*61046927SAndroid Build Coastguard Worker __u8 name[DRM_V3D_PERFCNT_MAX_NAME]; 757*61046927SAndroid Build Coastguard Worker 758*61046927SAndroid Build Coastguard Worker /* Category of the counter */ 759*61046927SAndroid Build Coastguard Worker __u8 category[DRM_V3D_PERFCNT_MAX_CATEGORY]; 760*61046927SAndroid Build Coastguard Worker 761*61046927SAndroid Build Coastguard Worker /* Description of the counter */ 762*61046927SAndroid Build Coastguard Worker __u8 description[DRM_V3D_PERFCNT_MAX_DESCRIPTION]; 763*61046927SAndroid Build Coastguard Worker 764*61046927SAndroid Build Coastguard Worker /* mbz */ 765*61046927SAndroid Build Coastguard Worker __u8 reserved[7]; 766*61046927SAndroid Build Coastguard Worker }; 767*61046927SAndroid Build Coastguard Worker 768*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 769*61046927SAndroid Build Coastguard Worker } 770*61046927SAndroid Build Coastguard Worker #endif 771*61046927SAndroid Build Coastguard Worker 772*61046927SAndroid Build Coastguard Worker #endif /* _V3D_DRM_H_ */ 773