1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#ifndef KGD_KFD_INTERFACE_H_INCLUDED
29#define KGD_KFD_INTERFACE_H_INCLUDED
30
31#include <linux/types.h>
32#include <linux/bitmap.h>
33#include <linux/dma-fence.h>
34
35struct pci_dev;
36
37#define KFD_INTERFACE_VERSION 2
38#define KGD_MAX_QUEUES 128
39
40struct kfd_dev;
41struct kgd_dev;
42
43struct kgd_mem;
44
45enum kfd_preempt_type {
46 KFD_PREEMPT_TYPE_WAVEFRONT_DRAIN = 0,
47 KFD_PREEMPT_TYPE_WAVEFRONT_RESET,
48};
49
50struct kfd_vm_fault_info {
51 uint64_t page_addr;
52 uint32_t vmid;
53 uint32_t mc_id;
54 uint32_t status;
55 bool prot_valid;
56 bool prot_read;
57 bool prot_write;
58 bool prot_exec;
59};
60
61struct kfd_cu_info {
62 uint32_t num_shader_engines;
63 uint32_t num_shader_arrays_per_engine;
64 uint32_t num_cu_per_sh;
65 uint32_t cu_active_number;
66 uint32_t cu_ao_mask;
67 uint32_t simd_per_cu;
68 uint32_t max_waves_per_simd;
69 uint32_t wave_front_size;
70 uint32_t max_scratch_slots_per_cu;
71 uint32_t lds_size;
72 uint32_t cu_bitmap[4][4];
73};
74
75
76struct kfd_local_mem_info {
77 uint64_t local_mem_size_private;
78 uint64_t local_mem_size_public;
79 uint32_t vram_width;
80 uint32_t mem_clk_max;
81};
82
83enum kgd_memory_pool {
84 KGD_POOL_SYSTEM_CACHEABLE = 1,
85 KGD_POOL_SYSTEM_WRITECOMBINE = 2,
86 KGD_POOL_FRAMEBUFFER = 3,
87};
88
89enum kgd_engine_type {
90 KGD_ENGINE_PFP = 1,
91 KGD_ENGINE_ME,
92 KGD_ENGINE_CE,
93 KGD_ENGINE_MEC1,
94 KGD_ENGINE_MEC2,
95 KGD_ENGINE_RLC,
96 KGD_ENGINE_SDMA1,
97 KGD_ENGINE_SDMA2,
98 KGD_ENGINE_MAX
99};
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122enum kfd_sched_policy {
123 KFD_SCHED_POLICY_HWS = 0,
124 KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION,
125 KFD_SCHED_POLICY_NO_HWS
126};
127
128struct kgd2kfd_shared_resources {
129
130 unsigned int compute_vmid_bitmap;
131
132
133 uint32_t num_pipe_per_mec;
134
135
136 uint32_t num_queue_per_pipe;
137
138
139 DECLARE_BITMAP(queue_bitmap, KGD_MAX_QUEUES);
140
141
142
143
144
145
146
147
148
149
150
151
152 unsigned int sdma_doorbell[2][8];
153 unsigned int reserved_doorbell_mask;
154 unsigned int reserved_doorbell_val;
155
156
157 phys_addr_t doorbell_physical_address;
158
159
160 size_t doorbell_aperture_size;
161
162
163 size_t doorbell_start_offset;
164
165
166 uint64_t gpuvm_size;
167
168
169 int drm_render_minor;
170};
171
172struct tile_config {
173 uint32_t *tile_config_ptr;
174 uint32_t *macro_tile_config_ptr;
175 uint32_t num_tile_configs;
176 uint32_t num_macro_tile_configs;
177
178 uint32_t gb_addr_config;
179 uint32_t num_banks;
180 uint32_t num_ranks;
181};
182
183#define KFD_MAX_NUM_OF_QUEUES_PER_DEVICE_DEFAULT 4096
184
185
186
187
188
189#define ALLOC_MEM_FLAGS_VRAM (1 << 0)
190#define ALLOC_MEM_FLAGS_GTT (1 << 1)
191#define ALLOC_MEM_FLAGS_USERPTR (1 << 2)
192#define ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
193
194
195
196
197
198#define ALLOC_MEM_FLAGS_WRITABLE (1 << 31)
199#define ALLOC_MEM_FLAGS_EXECUTABLE (1 << 30)
200#define ALLOC_MEM_FLAGS_PUBLIC (1 << 29)
201#define ALLOC_MEM_FLAGS_NO_SUBSTITUTE (1 << 28)
202#define ALLOC_MEM_FLAGS_AQL_QUEUE_MEM (1 << 27)
203#define ALLOC_MEM_FLAGS_COHERENT (1 << 26)
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260struct kfd2kgd_calls {
261
262 void (*program_sh_mem_settings)(struct kgd_dev *kgd, uint32_t vmid,
263 uint32_t sh_mem_config, uint32_t sh_mem_ape1_base,
264 uint32_t sh_mem_ape1_limit, uint32_t sh_mem_bases);
265
266 int (*set_pasid_vmid_mapping)(struct kgd_dev *kgd, unsigned int pasid,
267 unsigned int vmid);
268
269 int (*init_interrupts)(struct kgd_dev *kgd, uint32_t pipe_id);
270
271 int (*hqd_load)(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
272 uint32_t queue_id, uint32_t __user *wptr,
273 uint32_t wptr_shift, uint32_t wptr_mask,
274 struct mm_struct *mm);
275
276 int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd,
277 uint32_t __user *wptr, struct mm_struct *mm);
278
279 int (*hqd_dump)(struct kgd_dev *kgd,
280 uint32_t pipe_id, uint32_t queue_id,
281 uint32_t (**dump)[2], uint32_t *n_regs);
282
283 int (*hqd_sdma_dump)(struct kgd_dev *kgd,
284 uint32_t engine_id, uint32_t queue_id,
285 uint32_t (**dump)[2], uint32_t *n_regs);
286
287 bool (*hqd_is_occupied)(struct kgd_dev *kgd, uint64_t queue_address,
288 uint32_t pipe_id, uint32_t queue_id);
289
290 int (*hqd_destroy)(struct kgd_dev *kgd, void *mqd, uint32_t reset_type,
291 unsigned int timeout, uint32_t pipe_id,
292 uint32_t queue_id);
293
294 bool (*hqd_sdma_is_occupied)(struct kgd_dev *kgd, void *mqd);
295
296 int (*hqd_sdma_destroy)(struct kgd_dev *kgd, void *mqd,
297 unsigned int timeout);
298
299 int (*address_watch_disable)(struct kgd_dev *kgd);
300 int (*address_watch_execute)(struct kgd_dev *kgd,
301 unsigned int watch_point_id,
302 uint32_t cntl_val,
303 uint32_t addr_hi,
304 uint32_t addr_lo);
305 int (*wave_control_execute)(struct kgd_dev *kgd,
306 uint32_t gfx_index_val,
307 uint32_t sq_cmd);
308 uint32_t (*address_watch_get_offset)(struct kgd_dev *kgd,
309 unsigned int watch_point_id,
310 unsigned int reg_offset);
311 bool (*get_atc_vmid_pasid_mapping_valid)(
312 struct kgd_dev *kgd,
313 uint8_t vmid);
314 uint16_t (*get_atc_vmid_pasid_mapping_pasid)(
315 struct kgd_dev *kgd,
316 uint8_t vmid);
317
318 uint16_t (*get_fw_version)(struct kgd_dev *kgd,
319 enum kgd_engine_type type);
320 void (*set_scratch_backing_va)(struct kgd_dev *kgd,
321 uint64_t va, uint32_t vmid);
322 int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config);
323
324 void (*set_vm_context_page_table_base)(struct kgd_dev *kgd,
325 uint32_t vmid, uint64_t page_table_base);
326 int (*invalidate_tlbs)(struct kgd_dev *kgd, uint16_t pasid);
327 int (*invalidate_tlbs_vmid)(struct kgd_dev *kgd, uint16_t vmid);
328 uint32_t (*read_vmid_from_vmfault_reg)(struct kgd_dev *kgd);
329 uint64_t (*get_hive_id)(struct kgd_dev *kgd);
330
331};
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364struct kgd2kfd_calls {
365 void (*exit)(void);
366 struct kfd_dev* (*probe)(struct kgd_dev *kgd, struct pci_dev *pdev,
367 const struct kfd2kgd_calls *f2g);
368 bool (*device_init)(struct kfd_dev *kfd,
369 const struct kgd2kfd_shared_resources *gpu_resources);
370 void (*device_exit)(struct kfd_dev *kfd);
371 void (*interrupt)(struct kfd_dev *kfd, const void *ih_ring_entry);
372 void (*suspend)(struct kfd_dev *kfd);
373 int (*resume)(struct kfd_dev *kfd);
374 int (*quiesce_mm)(struct mm_struct *mm);
375 int (*resume_mm)(struct mm_struct *mm);
376 int (*schedule_evict_and_restore_process)(struct mm_struct *mm,
377 struct dma_fence *fence);
378 int (*pre_reset)(struct kfd_dev *kfd);
379 int (*post_reset)(struct kfd_dev *kfd);
380};
381
382int kgd2kfd_init(unsigned interface_version,
383 const struct kgd2kfd_calls **g2f);
384
385#endif
386