0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef _V3D_DRM_H_
0025 #define _V3D_DRM_H_
0026
0027 #include "drm.h"
0028
0029 #if defined(__cplusplus)
0030 extern "C" {
0031 #endif
0032
0033 #define DRM_V3D_SUBMIT_CL 0x00
0034 #define DRM_V3D_WAIT_BO 0x01
0035 #define DRM_V3D_CREATE_BO 0x02
0036 #define DRM_V3D_MMAP_BO 0x03
0037 #define DRM_V3D_GET_PARAM 0x04
0038 #define DRM_V3D_GET_BO_OFFSET 0x05
0039 #define DRM_V3D_SUBMIT_TFU 0x06
0040 #define DRM_V3D_SUBMIT_CSD 0x07
0041 #define DRM_V3D_PERFMON_CREATE 0x08
0042 #define DRM_V3D_PERFMON_DESTROY 0x09
0043 #define DRM_V3D_PERFMON_GET_VALUES 0x0a
0044
0045 #define DRM_IOCTL_V3D_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CL, struct drm_v3d_submit_cl)
0046 #define DRM_IOCTL_V3D_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_WAIT_BO, struct drm_v3d_wait_bo)
0047 #define DRM_IOCTL_V3D_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_CREATE_BO, struct drm_v3d_create_bo)
0048 #define DRM_IOCTL_V3D_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_MMAP_BO, struct drm_v3d_mmap_bo)
0049 #define DRM_IOCTL_V3D_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_PARAM, struct drm_v3d_get_param)
0050 #define DRM_IOCTL_V3D_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_BO_OFFSET, struct drm_v3d_get_bo_offset)
0051 #define DRM_IOCTL_V3D_SUBMIT_TFU DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_TFU, struct drm_v3d_submit_tfu)
0052 #define DRM_IOCTL_V3D_SUBMIT_CSD DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CSD, struct drm_v3d_submit_csd)
0053 #define DRM_IOCTL_V3D_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_CREATE, \
0054 struct drm_v3d_perfmon_create)
0055 #define DRM_IOCTL_V3D_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_DESTROY, \
0056 struct drm_v3d_perfmon_destroy)
0057 #define DRM_IOCTL_V3D_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_GET_VALUES, \
0058 struct drm_v3d_perfmon_get_values)
0059
0060 #define DRM_V3D_SUBMIT_CL_FLUSH_CACHE 0x01
0061 #define DRM_V3D_SUBMIT_EXTENSION 0x02
0062
0063
0064
0065
0066
0067
0068
0069 struct drm_v3d_extension {
0070 __u64 next;
0071 __u32 id;
0072 #define DRM_V3D_EXT_ID_MULTI_SYNC 0x01
0073 __u32 flags;
0074 };
0075
0076
0077
0078
0079
0080
0081 struct drm_v3d_sem {
0082 __u32 handle;
0083
0084 __u32 flags;
0085 __u64 point;
0086 __u64 mbz[2];
0087 };
0088
0089
0090 enum v3d_queue {
0091 V3D_BIN,
0092 V3D_RENDER,
0093 V3D_TFU,
0094 V3D_CSD,
0095 V3D_CACHE_CLEAN,
0096 };
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107 struct drm_v3d_multi_sync {
0108 struct drm_v3d_extension base;
0109
0110 __u64 in_syncs;
0111 __u64 out_syncs;
0112
0113
0114 __u32 in_sync_count;
0115 __u32 out_sync_count;
0116
0117
0118 __u32 wait_stage;
0119
0120 __u32 pad;
0121 };
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138 struct drm_v3d_submit_cl {
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151 __u32 bcl_start;
0152
0153
0154 __u32 bcl_end;
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167 __u32 rcl_start;
0168
0169
0170 __u32 rcl_end;
0171
0172
0173 __u32 in_sync_bcl;
0174
0175 __u32 in_sync_rcl;
0176
0177 __u32 out_sync;
0178
0179
0180
0181
0182
0183
0184 __u32 qma;
0185
0186
0187 __u32 qms;
0188
0189
0190 __u32 qts;
0191
0192
0193
0194 __u64 bo_handles;
0195
0196
0197 __u32 bo_handle_count;
0198
0199
0200 __u32 flags;
0201
0202
0203 __u32 perfmon_id;
0204
0205 __u32 pad;
0206
0207
0208 __u64 extensions;
0209 };
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219 struct drm_v3d_wait_bo {
0220 __u32 handle;
0221 __u32 pad;
0222 __u64 timeout_ns;
0223 };
0224
0225
0226
0227
0228
0229
0230
0231 struct drm_v3d_create_bo {
0232 __u32 size;
0233 __u32 flags;
0234
0235 __u32 handle;
0236
0237
0238
0239
0240
0241
0242
0243
0244 __u32 offset;
0245 };
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258 struct drm_v3d_mmap_bo {
0259
0260 __u32 handle;
0261 __u32 flags;
0262
0263 __u64 offset;
0264 };
0265
0266 enum drm_v3d_param {
0267 DRM_V3D_PARAM_V3D_UIFCFG,
0268 DRM_V3D_PARAM_V3D_HUB_IDENT1,
0269 DRM_V3D_PARAM_V3D_HUB_IDENT2,
0270 DRM_V3D_PARAM_V3D_HUB_IDENT3,
0271 DRM_V3D_PARAM_V3D_CORE0_IDENT0,
0272 DRM_V3D_PARAM_V3D_CORE0_IDENT1,
0273 DRM_V3D_PARAM_V3D_CORE0_IDENT2,
0274 DRM_V3D_PARAM_SUPPORTS_TFU,
0275 DRM_V3D_PARAM_SUPPORTS_CSD,
0276 DRM_V3D_PARAM_SUPPORTS_CACHE_FLUSH,
0277 DRM_V3D_PARAM_SUPPORTS_PERFMON,
0278 DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT,
0279 };
0280
0281 struct drm_v3d_get_param {
0282 __u32 param;
0283 __u32 pad;
0284 __u64 value;
0285 };
0286
0287
0288
0289
0290
0291
0292 struct drm_v3d_get_bo_offset {
0293 __u32 handle;
0294 __u32 offset;
0295 };
0296
0297 struct drm_v3d_submit_tfu {
0298 __u32 icfg;
0299 __u32 iia;
0300 __u32 iis;
0301 __u32 ica;
0302 __u32 iua;
0303 __u32 ioa;
0304 __u32 ios;
0305 __u32 coef[4];
0306
0307
0308
0309 __u32 bo_handles[4];
0310
0311
0312
0313
0314 __u32 in_sync;
0315
0316 __u32 out_sync;
0317
0318 __u32 flags;
0319
0320
0321 __u64 extensions;
0322 };
0323
0324
0325
0326
0327
0328 struct drm_v3d_submit_csd {
0329 __u32 cfg[7];
0330 __u32 coef[4];
0331
0332
0333
0334 __u64 bo_handles;
0335
0336
0337 __u32 bo_handle_count;
0338
0339
0340
0341
0342
0343
0344 __u32 in_sync;
0345
0346 __u32 out_sync;
0347
0348
0349 __u32 perfmon_id;
0350
0351
0352 __u64 extensions;
0353
0354 __u32 flags;
0355
0356 __u32 pad;
0357 };
0358
0359 enum {
0360 V3D_PERFCNT_FEP_VALID_PRIMTS_NO_PIXELS,
0361 V3D_PERFCNT_FEP_VALID_PRIMS,
0362 V3D_PERFCNT_FEP_EZ_NFCLIP_QUADS,
0363 V3D_PERFCNT_FEP_VALID_QUADS,
0364 V3D_PERFCNT_TLB_QUADS_STENCIL_FAIL,
0365 V3D_PERFCNT_TLB_QUADS_STENCILZ_FAIL,
0366 V3D_PERFCNT_TLB_QUADS_STENCILZ_PASS,
0367 V3D_PERFCNT_TLB_QUADS_ZERO_COV,
0368 V3D_PERFCNT_TLB_QUADS_NONZERO_COV,
0369 V3D_PERFCNT_TLB_QUADS_WRITTEN,
0370 V3D_PERFCNT_PTB_PRIM_VIEWPOINT_DISCARD,
0371 V3D_PERFCNT_PTB_PRIM_CLIP,
0372 V3D_PERFCNT_PTB_PRIM_REV,
0373 V3D_PERFCNT_QPU_IDLE_CYCLES,
0374 V3D_PERFCNT_QPU_ACTIVE_CYCLES_VERTEX_COORD_USER,
0375 V3D_PERFCNT_QPU_ACTIVE_CYCLES_FRAG,
0376 V3D_PERFCNT_QPU_CYCLES_VALID_INSTR,
0377 V3D_PERFCNT_QPU_CYCLES_TMU_STALL,
0378 V3D_PERFCNT_QPU_CYCLES_SCOREBOARD_STALL,
0379 V3D_PERFCNT_QPU_CYCLES_VARYINGS_STALL,
0380 V3D_PERFCNT_QPU_IC_HIT,
0381 V3D_PERFCNT_QPU_IC_MISS,
0382 V3D_PERFCNT_QPU_UC_HIT,
0383 V3D_PERFCNT_QPU_UC_MISS,
0384 V3D_PERFCNT_TMU_TCACHE_ACCESS,
0385 V3D_PERFCNT_TMU_TCACHE_MISS,
0386 V3D_PERFCNT_VPM_VDW_STALL,
0387 V3D_PERFCNT_VPM_VCD_STALL,
0388 V3D_PERFCNT_BIN_ACTIVE,
0389 V3D_PERFCNT_RDR_ACTIVE,
0390 V3D_PERFCNT_L2T_HITS,
0391 V3D_PERFCNT_L2T_MISSES,
0392 V3D_PERFCNT_CYCLE_COUNT,
0393 V3D_PERFCNT_QPU_CYCLES_STALLED_VERTEX_COORD_USER,
0394 V3D_PERFCNT_QPU_CYCLES_STALLED_FRAGMENT,
0395 V3D_PERFCNT_PTB_PRIMS_BINNED,
0396 V3D_PERFCNT_AXI_WRITES_WATCH_0,
0397 V3D_PERFCNT_AXI_READS_WATCH_0,
0398 V3D_PERFCNT_AXI_WRITE_STALLS_WATCH_0,
0399 V3D_PERFCNT_AXI_READ_STALLS_WATCH_0,
0400 V3D_PERFCNT_AXI_WRITE_BYTES_WATCH_0,
0401 V3D_PERFCNT_AXI_READ_BYTES_WATCH_0,
0402 V3D_PERFCNT_AXI_WRITES_WATCH_1,
0403 V3D_PERFCNT_AXI_READS_WATCH_1,
0404 V3D_PERFCNT_AXI_WRITE_STALLS_WATCH_1,
0405 V3D_PERFCNT_AXI_READ_STALLS_WATCH_1,
0406 V3D_PERFCNT_AXI_WRITE_BYTES_WATCH_1,
0407 V3D_PERFCNT_AXI_READ_BYTES_WATCH_1,
0408 V3D_PERFCNT_TLB_PARTIAL_QUADS,
0409 V3D_PERFCNT_TMU_CONFIG_ACCESSES,
0410 V3D_PERFCNT_L2T_NO_ID_STALL,
0411 V3D_PERFCNT_L2T_COM_QUE_STALL,
0412 V3D_PERFCNT_L2T_TMU_WRITES,
0413 V3D_PERFCNT_TMU_ACTIVE_CYCLES,
0414 V3D_PERFCNT_TMU_STALLED_CYCLES,
0415 V3D_PERFCNT_CLE_ACTIVE,
0416 V3D_PERFCNT_L2T_TMU_READS,
0417 V3D_PERFCNT_L2T_CLE_READS,
0418 V3D_PERFCNT_L2T_VCD_READS,
0419 V3D_PERFCNT_L2T_TMUCFG_READS,
0420 V3D_PERFCNT_L2T_SLC0_READS,
0421 V3D_PERFCNT_L2T_SLC1_READS,
0422 V3D_PERFCNT_L2T_SLC2_READS,
0423 V3D_PERFCNT_L2T_TMU_W_MISSES,
0424 V3D_PERFCNT_L2T_TMU_R_MISSES,
0425 V3D_PERFCNT_L2T_CLE_MISSES,
0426 V3D_PERFCNT_L2T_VCD_MISSES,
0427 V3D_PERFCNT_L2T_TMUCFG_MISSES,
0428 V3D_PERFCNT_L2T_SLC0_MISSES,
0429 V3D_PERFCNT_L2T_SLC1_MISSES,
0430 V3D_PERFCNT_L2T_SLC2_MISSES,
0431 V3D_PERFCNT_CORE_MEM_WRITES,
0432 V3D_PERFCNT_L2T_MEM_WRITES,
0433 V3D_PERFCNT_PTB_MEM_WRITES,
0434 V3D_PERFCNT_TLB_MEM_WRITES,
0435 V3D_PERFCNT_CORE_MEM_READS,
0436 V3D_PERFCNT_L2T_MEM_READS,
0437 V3D_PERFCNT_PTB_MEM_READS,
0438 V3D_PERFCNT_PSE_MEM_READS,
0439 V3D_PERFCNT_TLB_MEM_READS,
0440 V3D_PERFCNT_GMP_MEM_READS,
0441 V3D_PERFCNT_PTB_W_MEM_WORDS,
0442 V3D_PERFCNT_TLB_W_MEM_WORDS,
0443 V3D_PERFCNT_PSE_R_MEM_WORDS,
0444 V3D_PERFCNT_TLB_R_MEM_WORDS,
0445 V3D_PERFCNT_TMU_MRU_HITS,
0446 V3D_PERFCNT_COMPUTE_ACTIVE,
0447 V3D_PERFCNT_NUM,
0448 };
0449
0450 #define DRM_V3D_MAX_PERF_COUNTERS 32
0451
0452 struct drm_v3d_perfmon_create {
0453 __u32 id;
0454 __u32 ncounters;
0455 __u8 counters[DRM_V3D_MAX_PERF_COUNTERS];
0456 };
0457
0458 struct drm_v3d_perfmon_destroy {
0459 __u32 id;
0460 };
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471 struct drm_v3d_perfmon_get_values {
0472 __u32 id;
0473 __u32 pad;
0474 __u64 values_ptr;
0475 };
0476
0477 #if defined(__cplusplus)
0478 }
0479 #endif
0480
0481 #endif