1*d83cc019SAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */ 2*d83cc019SAndroid Build Coastguard Worker /* 3*d83cc019SAndroid Build Coastguard Worker * Copyright © 2014-2018 Broadcom 4*d83cc019SAndroid Build Coastguard Worker * Copyright © 2019 Collabora ltd. 5*d83cc019SAndroid Build Coastguard Worker */ 6*d83cc019SAndroid Build Coastguard Worker #ifndef _PANFROST_DRM_H_ 7*d83cc019SAndroid Build Coastguard Worker #define _PANFROST_DRM_H_ 8*d83cc019SAndroid Build Coastguard Worker 9*d83cc019SAndroid Build Coastguard Worker #include "drm.h" 10*d83cc019SAndroid Build Coastguard Worker 11*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus) 12*d83cc019SAndroid Build Coastguard Worker extern "C" { 13*d83cc019SAndroid Build Coastguard Worker #endif 14*d83cc019SAndroid Build Coastguard Worker 15*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_SUBMIT 0x00 16*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_WAIT_BO 0x01 17*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_CREATE_BO 0x02 18*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_MMAP_BO 0x03 19*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_GET_PARAM 0x04 20*d83cc019SAndroid Build Coastguard Worker #define DRM_PANFROST_GET_BO_OFFSET 0x05 21*d83cc019SAndroid Build Coastguard Worker 22*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_SUBMIT DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_SUBMIT, struct drm_panfrost_submit) 23*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_WAIT_BO DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_WAIT_BO, struct drm_panfrost_wait_bo) 24*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_CREATE_BO, struct drm_panfrost_create_bo) 25*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_MMAP_BO, struct drm_panfrost_mmap_bo) 26*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_GET_PARAM, struct drm_panfrost_get_param) 27*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_PANFROST_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_GET_BO_OFFSET, struct drm_panfrost_get_bo_offset) 28*d83cc019SAndroid Build Coastguard Worker 29*d83cc019SAndroid Build Coastguard Worker #define PANFROST_JD_REQ_FS (1 << 0) 30*d83cc019SAndroid Build Coastguard Worker /** 31*d83cc019SAndroid Build Coastguard Worker * struct drm_panfrost_submit - ioctl argument for submitting commands to the 3D 32*d83cc019SAndroid Build Coastguard Worker * engine. 33*d83cc019SAndroid Build Coastguard Worker * 34*d83cc019SAndroid Build Coastguard Worker * This asks the kernel to have the GPU execute a render command list. 35*d83cc019SAndroid Build Coastguard Worker */ 36*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_submit { 37*d83cc019SAndroid Build Coastguard Worker 38*d83cc019SAndroid Build Coastguard Worker /** Address to GPU mapping of job descriptor */ 39*d83cc019SAndroid Build Coastguard Worker __u64 jc; 40*d83cc019SAndroid Build Coastguard Worker 41*d83cc019SAndroid Build Coastguard Worker /** An optional array of sync objects to wait on before starting this job. */ 42*d83cc019SAndroid Build Coastguard Worker __u64 in_syncs; 43*d83cc019SAndroid Build Coastguard Worker 44*d83cc019SAndroid Build Coastguard Worker /** Number of sync objects to wait on before starting this job. */ 45*d83cc019SAndroid Build Coastguard Worker __u32 in_sync_count; 46*d83cc019SAndroid Build Coastguard Worker 47*d83cc019SAndroid Build Coastguard Worker /** An optional sync object to place the completion fence in. */ 48*d83cc019SAndroid Build Coastguard Worker __u32 out_sync; 49*d83cc019SAndroid Build Coastguard Worker 50*d83cc019SAndroid Build Coastguard Worker /** Pointer to a u32 array of the BOs that are referenced by the job. */ 51*d83cc019SAndroid Build Coastguard Worker __u64 bo_handles; 52*d83cc019SAndroid Build Coastguard Worker 53*d83cc019SAndroid Build Coastguard Worker /** Number of BO handles passed in (size is that times 4). */ 54*d83cc019SAndroid Build Coastguard Worker __u32 bo_handle_count; 55*d83cc019SAndroid Build Coastguard Worker 56*d83cc019SAndroid Build Coastguard Worker /** A combination of PANFROST_JD_REQ_* */ 57*d83cc019SAndroid Build Coastguard Worker __u32 requirements; 58*d83cc019SAndroid Build Coastguard Worker }; 59*d83cc019SAndroid Build Coastguard Worker 60*d83cc019SAndroid Build Coastguard Worker /** 61*d83cc019SAndroid Build Coastguard Worker * struct drm_panfrost_wait_bo - ioctl argument for waiting for 62*d83cc019SAndroid Build Coastguard Worker * completion of the last DRM_PANFROST_SUBMIT on a BO. 63*d83cc019SAndroid Build Coastguard Worker * 64*d83cc019SAndroid Build Coastguard Worker * This is useful for cases where multiple processes might be 65*d83cc019SAndroid Build Coastguard Worker * rendering to a BO and you want to wait for all rendering to be 66*d83cc019SAndroid Build Coastguard Worker * completed. 67*d83cc019SAndroid Build Coastguard Worker */ 68*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_wait_bo { 69*d83cc019SAndroid Build Coastguard Worker __u32 handle; 70*d83cc019SAndroid Build Coastguard Worker __u32 pad; 71*d83cc019SAndroid Build Coastguard Worker __s64 timeout_ns; /* absolute */ 72*d83cc019SAndroid Build Coastguard Worker }; 73*d83cc019SAndroid Build Coastguard Worker 74*d83cc019SAndroid Build Coastguard Worker /** 75*d83cc019SAndroid Build Coastguard Worker * struct drm_panfrost_create_bo - ioctl argument for creating Panfrost BOs. 76*d83cc019SAndroid Build Coastguard Worker * 77*d83cc019SAndroid Build Coastguard Worker * There are currently no values for the flags argument, but it may be 78*d83cc019SAndroid Build Coastguard Worker * used in a future extension. 79*d83cc019SAndroid Build Coastguard Worker */ 80*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_create_bo { 81*d83cc019SAndroid Build Coastguard Worker __u32 size; 82*d83cc019SAndroid Build Coastguard Worker __u32 flags; 83*d83cc019SAndroid Build Coastguard Worker /** Returned GEM handle for the BO. */ 84*d83cc019SAndroid Build Coastguard Worker __u32 handle; 85*d83cc019SAndroid Build Coastguard Worker /* Pad, must be zero-filled. */ 86*d83cc019SAndroid Build Coastguard Worker __u32 pad; 87*d83cc019SAndroid Build Coastguard Worker /** 88*d83cc019SAndroid Build Coastguard Worker * Returned offset for the BO in the GPU address space. This offset 89*d83cc019SAndroid Build Coastguard Worker * is private to the DRM fd and is valid for the lifetime of the GEM 90*d83cc019SAndroid Build Coastguard Worker * handle. 91*d83cc019SAndroid Build Coastguard Worker * 92*d83cc019SAndroid Build Coastguard Worker * This offset value will always be nonzero, since various HW 93*d83cc019SAndroid Build Coastguard Worker * units treat 0 specially. 94*d83cc019SAndroid Build Coastguard Worker */ 95*d83cc019SAndroid Build Coastguard Worker __u64 offset; 96*d83cc019SAndroid Build Coastguard Worker }; 97*d83cc019SAndroid Build Coastguard Worker 98*d83cc019SAndroid Build Coastguard Worker /** 99*d83cc019SAndroid Build Coastguard Worker * struct drm_panfrost_mmap_bo - ioctl argument for mapping Panfrost BOs. 100*d83cc019SAndroid Build Coastguard Worker * 101*d83cc019SAndroid Build Coastguard Worker * This doesn't actually perform an mmap. Instead, it returns the 102*d83cc019SAndroid Build Coastguard Worker * offset you need to use in an mmap on the DRM device node. This 103*d83cc019SAndroid Build Coastguard Worker * means that tools like valgrind end up knowing about the mapped 104*d83cc019SAndroid Build Coastguard Worker * memory. 105*d83cc019SAndroid Build Coastguard Worker * 106*d83cc019SAndroid Build Coastguard Worker * There are currently no values for the flags argument, but it may be 107*d83cc019SAndroid Build Coastguard Worker * used in a future extension. 108*d83cc019SAndroid Build Coastguard Worker */ 109*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_mmap_bo { 110*d83cc019SAndroid Build Coastguard Worker /** Handle for the object being mapped. */ 111*d83cc019SAndroid Build Coastguard Worker __u32 handle; 112*d83cc019SAndroid Build Coastguard Worker __u32 flags; 113*d83cc019SAndroid Build Coastguard Worker /** offset into the drm node to use for subsequent mmap call. */ 114*d83cc019SAndroid Build Coastguard Worker __u64 offset; 115*d83cc019SAndroid Build Coastguard Worker }; 116*d83cc019SAndroid Build Coastguard Worker 117*d83cc019SAndroid Build Coastguard Worker enum drm_panfrost_param { 118*d83cc019SAndroid Build Coastguard Worker DRM_PANFROST_PARAM_GPU_PROD_ID, 119*d83cc019SAndroid Build Coastguard Worker }; 120*d83cc019SAndroid Build Coastguard Worker 121*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_get_param { 122*d83cc019SAndroid Build Coastguard Worker __u32 param; 123*d83cc019SAndroid Build Coastguard Worker __u32 pad; 124*d83cc019SAndroid Build Coastguard Worker __u64 value; 125*d83cc019SAndroid Build Coastguard Worker }; 126*d83cc019SAndroid Build Coastguard Worker 127*d83cc019SAndroid Build Coastguard Worker /** 128*d83cc019SAndroid Build Coastguard Worker * Returns the offset for the BO in the GPU address space for this DRM fd. 129*d83cc019SAndroid Build Coastguard Worker * This is the same value returned by drm_panfrost_create_bo, if that was called 130*d83cc019SAndroid Build Coastguard Worker * from this DRM fd. 131*d83cc019SAndroid Build Coastguard Worker */ 132*d83cc019SAndroid Build Coastguard Worker struct drm_panfrost_get_bo_offset { 133*d83cc019SAndroid Build Coastguard Worker __u32 handle; 134*d83cc019SAndroid Build Coastguard Worker __u32 pad; 135*d83cc019SAndroid Build Coastguard Worker __u64 offset; 136*d83cc019SAndroid Build Coastguard Worker }; 137*d83cc019SAndroid Build Coastguard Worker 138*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus) 139*d83cc019SAndroid Build Coastguard Worker } 140*d83cc019SAndroid Build Coastguard Worker #endif 141*d83cc019SAndroid Build Coastguard Worker 142*d83cc019SAndroid Build Coastguard Worker #endif /* _PANFROST_DRM_H_ */ 143