xref: /aosp_15_r20/external/igt-gpu-tools/include/drm-uapi/panfrost_drm.h (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
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