rk3288 gpu : update GPU driver r4p0_eac version
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / arm / midgard / mali_kbase_uku.h
1 /*
2  *
3  * (C) COPYRIGHT ARM Limited. All rights reserved.
4  *
5  * This program is free software and is provided to you under the terms of the
6  * GNU General Public License version 2 as published by the Free Software
7  * Foundation, and any use by you of this program is subject to the terms
8  * of such GNU licence.
9  *
10  * A copy of the licence is included with the program, and can also be obtained
11  * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
12  * Boston, MA  02110-1301, USA.
13  *
14  */
15
16
17
18
19
20 #ifndef _KBASE_UKU_H_
21 #define _KBASE_UKU_H_
22
23 #include "mali_uk.h"
24 #include <malisw/mali_malisw.h>
25 #include "mali_base_kernel.h"
26
27 /* This file needs to support being included from kernel and userside (which use different defines) */
28 #if defined(CONFIG_MALI_ERROR_INJECT)
29 #define SUPPORT_MALI_ERROR_INJECT
30 #elif defined(MALI_ERROR_INJECT)
31 #if MALI_ERROR_INJECT
32 #define SUPPORT_MALI_ERROR_INJECT
33 #endif
34 #endif
35 #if defined(CONFIG_MALI_NO_MALI)
36 #define SUPPORT_MALI_NO_MALI
37 #elif defined(MALI_NO_MALI)
38 #if MALI_NO_MALI
39 #define SUPPORT_MALI_NO_MALI
40 #endif
41 #endif
42
43 #if defined(SUPPORT_MALI_NO_MALI) || defined(SUPPORT_MALI_ERROR_INJECT)
44 #include "mali_kbase_model_dummy.h"
45 #endif
46
47 #include "mali_kbase_gpuprops_types.h"
48
49 #define BASE_UK_VERSION_MAJOR 6
50 #define BASE_UK_VERSION_MINOR 0
51
52 typedef struct kbase_uk_mem_alloc {
53         uk_header header;
54         /* IN */
55         u64 va_pages;
56         u64 commit_pages;
57         u64 extent;
58         /* IN/OUT */
59         u64 flags;
60         /* OUT */
61         u64 gpu_va;
62         u16 va_alignment;
63         u8  padding[6];
64 } kbase_uk_mem_alloc;
65
66 typedef struct kbase_uk_mem_free {
67         uk_header header;
68         /* IN */
69         mali_addr64 gpu_addr;
70         /* OUT */
71 } kbase_uk_mem_free;
72
73 /* used by both aliasing and importing */
74 #define KBASE_MEM_NEED_MMAP         (1UL << BASE_MEM_FLAGS_NR_BITS)
75
76 typedef struct kbase_uk_mem_alias {
77         uk_header header;
78         /* IN/OUT */
79         u64 flags;
80         /* IN */
81         u64 stride;
82         u64 nents;
83         kbase_pointer ai;
84         /* OUT */
85         u64         gpu_va;
86         u64         va_pages;
87 } kbase_uk_mem_alias;
88
89 typedef struct kbase_uk_mem_import {
90         uk_header header;
91         /* IN */
92         kbase_pointer phandle;
93         u32 type;
94         u32 padding;
95         /* IN/OUT */
96 #define KBASE_MEM_IMPORT_HAVE_PAGES   (1UL << (BASE_MEM_FLAGS_NR_BITS + 1))
97         u64         flags;
98         /* OUT */
99         mali_addr64 gpu_va;
100         u64         va_pages;
101 } kbase_uk_mem_import;
102
103 typedef struct kbase_uk_mem_flags_change {
104         uk_header header;
105         /* IN */
106         mali_addr64 gpu_va;
107         u64 flags;
108         u64 mask;
109 } kbase_uk_mem_flags_change;
110
111 typedef struct kbase_uk_job_submit {
112         uk_header header;
113         /* IN */
114         kbase_pointer addr;
115         u32 nr_atoms;
116         u32 stride;             /* bytes between atoms, i.e. sizeof(base_jd_atom_v2) */
117         /* OUT */
118 } kbase_uk_job_submit;
119
120 typedef struct kbase_uk_post_term {
121         uk_header header;
122 } kbase_uk_post_term;
123
124 typedef struct kbase_uk_sync_now {
125         uk_header header;
126
127         /* IN */
128         base_syncset sset;
129
130         /* OUT */
131 } kbase_uk_sync_now;
132
133 typedef struct kbase_uk_hwcnt_setup {
134         uk_header header;
135
136         /* IN */
137         mali_addr64 dump_buffer;
138         u32 jm_bm;
139         u32 shader_bm;
140         u32 tiler_bm;
141         u32 l3_cache_bm;
142         u32 mmu_l2_bm;
143         u32 padding;
144         /* OUT */
145 } kbase_uk_hwcnt_setup;
146
147 typedef struct kbase_uk_hwcnt_dump {
148         uk_header header;
149 } kbase_uk_hwcnt_dump;
150
151 typedef struct kbase_uk_hwcnt_clear {
152         uk_header header;
153 } kbase_uk_hwcnt_clear;
154
155 typedef struct kbase_uk_fence_validate {
156         uk_header header;
157         /* IN */
158         s32 fd;
159         u32 padding;
160         /* OUT */
161 } kbase_uk_fence_validate;
162
163 typedef struct kbase_uk_stream_create {
164         uk_header header;
165         /* IN */
166         char name[32];
167         /* OUT */
168         s32 fd;
169         u32 padding;
170 } kbase_uk_stream_create;
171
172 typedef struct kbase_uk_cpuprops {
173         uk_header header;
174
175         /* IN */
176         struct base_cpu_props props;
177         /* OUT */
178 } kbase_uk_cpuprops;
179
180 typedef struct kbase_uk_gpuprops {
181         uk_header header;
182
183         /* IN */
184         struct mali_base_gpu_props props;
185         /* OUT */
186 } kbase_uk_gpuprops;
187
188 typedef struct kbase_uk_mem_query {
189         uk_header header;
190         /* IN */
191         mali_addr64 gpu_addr;
192 #define KBASE_MEM_QUERY_COMMIT_SIZE  1
193 #define KBASE_MEM_QUERY_VA_SIZE      2
194 #define KBASE_MEM_QUERY_FLAGS        3
195         u64         query;
196         /* OUT */
197         u64         value;
198 } kbase_uk_mem_query;
199         
200 typedef struct kbase_uk_mem_commit {
201         uk_header header;
202         /* IN */
203         mali_addr64 gpu_addr;
204         u64         pages;
205         /* OUT */
206         u32 result_subcode;
207         u32 padding;
208 } kbase_uk_mem_commit;
209
210 typedef struct kbase_uk_find_cpu_offset {
211         uk_header header;
212         /* IN */
213         mali_addr64 gpu_addr;
214         u64 cpu_addr;
215         u64 size;
216         /* OUT */
217         mali_size64 offset;
218 } kbase_uk_find_cpu_offset;
219
220 #define KBASE_GET_VERSION_BUFFER_SIZE 64
221 typedef struct kbase_uk_get_ddk_version {
222         uk_header header;
223         /* OUT */
224         char version_buffer[KBASE_GET_VERSION_BUFFER_SIZE];
225         u32 version_string_size;
226         u32 padding;
227 } kbase_uk_get_ddk_version;
228
229 typedef struct kbase_uk_set_flags {
230         uk_header header;
231         /* IN */
232         u32 create_flags;
233         u32 padding;
234 } kbase_uk_set_flags;
235
236 #if MALI_UNIT_TEST
237 #define TEST_ADDR_COUNT 4
238 #define KBASE_TEST_BUFFER_SIZE 128
239 typedef struct kbase_exported_test_data {
240         mali_addr64 test_addr[TEST_ADDR_COUNT];         /**< memory address */
241         u32 test_addr_pages[TEST_ADDR_COUNT];           /**<  memory size in pages */
242         kbase_pointer kctx;                             /**<  base context created by process */
243         kbase_pointer mm;                               /**< pointer to process address space */
244         u8 buffer1[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
245         u8 buffer2[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
246 } kbase_exported_test_data;
247
248 typedef struct kbase_uk_set_test_data {
249         uk_header header;
250         /* IN */
251         kbase_exported_test_data test_data;
252 } kbase_uk_set_test_data;
253
254 #endif                          /* MALI_UNIT_TEST */
255
256 #ifdef SUPPORT_MALI_ERROR_INJECT
257 typedef struct kbase_uk_error_params {
258         uk_header header;
259         /* IN */
260         kbase_error_params params;
261 } kbase_uk_error_params;
262 #endif                          /* SUPPORT_MALI_ERROR_INJECT */
263
264 #ifdef SUPPORT_MALI_NO_MALI
265 typedef struct kbase_uk_model_control_params {
266         uk_header header;
267         /* IN */
268         kbase_model_control_params params;
269 } kbase_uk_model_control_params;
270 #endif                          /* SUPPORT_MALI_NO_MALI */
271
272 #define KBASE_MAXIMUM_EXT_RESOURCES       255
273
274 typedef struct kbase_uk_ext_buff_kds_data {
275         uk_header header;
276         kbase_pointer external_resource;
277         kbase_pointer file_descriptor;
278         u32 num_res;            /* limited to KBASE_MAXIMUM_EXT_RESOURCES */
279         u32 padding;
280 } kbase_uk_ext_buff_kds_data;
281
282 typedef struct kbase_uk_keep_gpu_powered {
283         uk_header header;
284         u32       enabled;
285         u32       padding;
286 } kbase_uk_keep_gpu_powered;
287
288 typedef struct kbase_uk_profiling_controls {
289         uk_header header;
290         u32 profiling_controls[FBDUMP_CONTROL_MAX];
291 } kbase_uk_profiling_controls;
292
293 typedef enum kbase_uk_function_id {
294         KBASE_FUNC_MEM_ALLOC = (UK_FUNC_ID + 0),
295         KBASE_FUNC_MEM_IMPORT,
296         KBASE_FUNC_MEM_COMMIT,
297         KBASE_FUNC_MEM_QUERY,
298         KBASE_FUNC_MEM_FREE,
299         KBASE_FUNC_MEM_FLAGS_CHANGE,
300         KBASE_FUNC_MEM_ALIAS,
301
302         KBASE_FUNC_JOB_SUBMIT,
303
304         KBASE_FUNC_SYNC,
305
306         KBASE_FUNC_POST_TERM,
307
308         KBASE_FUNC_HWCNT_SETUP,
309         KBASE_FUNC_HWCNT_DUMP,
310         KBASE_FUNC_HWCNT_CLEAR,
311
312         KBASE_FUNC_CPU_PROPS_REG_DUMP,
313         KBASE_FUNC_GPU_PROPS_REG_DUMP,
314
315         KBASE_FUNC_FIND_CPU_OFFSET,
316
317         KBASE_FUNC_GET_VERSION,
318         KBASE_FUNC_EXT_BUFFER_LOCK,
319         KBASE_FUNC_SET_FLAGS,
320
321         KBASE_FUNC_SET_TEST_DATA,
322         KBASE_FUNC_INJECT_ERROR,
323         KBASE_FUNC_MODEL_CONTROL,
324
325         KBASE_FUNC_KEEP_GPU_POWERED,
326
327         KBASE_FUNC_FENCE_VALIDATE,
328         KBASE_FUNC_STREAM_CREATE,
329         KBASE_FUNC_GET_PROFILING_CONTROLS,
330         KBASE_FUNC_SET_PROFILING_CONTROLS /* to be used only for testing
331                                            * purposes, otherwise these controls
332                                            * are set through gator API */
333 } kbase_uk_function_id;
334
335 #endif                          /* _KBASE_UKU_H_ */