File Index
Files and directories
Sign in
FILE

aie2_msg_priv.h

File preview with syntax highlighting.

linux-6.19.14/drivers/accel/amdxdna/aie2_msg_priv.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (C) 2022-2024, Advanced Micro Devices, Inc.
  4 */
  5
  6#ifndef _AIE2_MSG_PRIV_H_
  7#define _AIE2_MSG_PRIV_H_
  8
  9enum aie2_msg_opcode {
 10	MSG_OP_CREATE_CONTEXT              = 0x2,
 11	MSG_OP_DESTROY_CONTEXT             = 0x3,
 12	MSG_OP_GET_TELEMETRY               = 0x4,
 13	MSG_OP_SYNC_BO                     = 0x7,
 14	MSG_OP_EXECUTE_BUFFER_CF           = 0xC,
 15	MSG_OP_QUERY_COL_STATUS            = 0xD,
 16	MSG_OP_QUERY_AIE_TILE_INFO         = 0xE,
 17	MSG_OP_QUERY_AIE_VERSION           = 0xF,
 18	MSG_OP_EXEC_DPU                    = 0x10,
 19	MSG_OP_CONFIG_CU                   = 0x11,
 20	MSG_OP_CHAIN_EXEC_BUFFER_CF        = 0x12,
 21	MSG_OP_CHAIN_EXEC_DPU              = 0x13,
 22	MSG_OP_CONFIG_DEBUG_BO             = 0x14,
 23	MSG_OP_CHAIN_EXEC_NPU              = 0x18,
 24	MSG_OP_MAX_XRT_OPCODE,
 25	MSG_OP_SUSPEND                     = 0x101,
 26	MSG_OP_RESUME                      = 0x102,
 27	MSG_OP_ASSIGN_MGMT_PASID           = 0x103,
 28	MSG_OP_INVOKE_SELF_TEST            = 0x104,
 29	MSG_OP_MAP_HOST_BUFFER             = 0x106,
 30	MSG_OP_GET_FIRMWARE_VERSION        = 0x108,
 31	MSG_OP_SET_RUNTIME_CONFIG          = 0x10A,
 32	MSG_OP_GET_RUNTIME_CONFIG          = 0x10B,
 33	MSG_OP_REGISTER_ASYNC_EVENT_MSG    = 0x10C,
 34	MSG_OP_MAX_DRV_OPCODE,
 35	MSG_OP_GET_PROTOCOL_VERSION        = 0x301,
 36	MSG_OP_MAX_OPCODE
 37};
 38
 39enum aie2_msg_status {
 40	AIE2_STATUS_SUCCESS				= 0x0,
 41	/* AIE Error codes */
 42	AIE2_STATUS_AIE_SATURATION_ERROR		= 0x1000001,
 43	AIE2_STATUS_AIE_FP_ERROR			= 0x1000002,
 44	AIE2_STATUS_AIE_STREAM_ERROR			= 0x1000003,
 45	AIE2_STATUS_AIE_ACCESS_ERROR			= 0x1000004,
 46	AIE2_STATUS_AIE_BUS_ERROR			= 0x1000005,
 47	AIE2_STATUS_AIE_INSTRUCTION_ERROR		= 0x1000006,
 48	AIE2_STATUS_AIE_ECC_ERROR			= 0x1000007,
 49	AIE2_STATUS_AIE_LOCK_ERROR			= 0x1000008,
 50	AIE2_STATUS_AIE_DMA_ERROR			= 0x1000009,
 51	AIE2_STATUS_AIE_MEM_PARITY_ERROR		= 0x100000a,
 52	AIE2_STATUS_AIE_PWR_CFG_ERROR			= 0x100000b,
 53	AIE2_STATUS_AIE_BACKTRACK_ERROR			= 0x100000c,
 54	AIE2_STATUS_MAX_AIE_STATUS_CODE,
 55	/* MGMT ERT Error codes */
 56	AIE2_STATUS_MGMT_ERT_SELF_TEST_FAILURE		= 0x2000001,
 57	AIE2_STATUS_MGMT_ERT_HASH_MISMATCH,
 58	AIE2_STATUS_MGMT_ERT_NOAVAIL,
 59	AIE2_STATUS_MGMT_ERT_INVALID_PARAM,
 60	AIE2_STATUS_MGMT_ERT_ENTER_SUSPEND_FAILURE,
 61	AIE2_STATUS_MGMT_ERT_BUSY,
 62	AIE2_STATUS_MGMT_ERT_APPLICATION_ACTIVE,
 63	MAX_MGMT_ERT_STATUS_CODE,
 64	/* APP ERT Error codes */
 65	AIE2_STATUS_APP_ERT_FIRST_ERROR			= 0x3000001,
 66	AIE2_STATUS_APP_INVALID_INSTR,
 67	AIE2_STATUS_APP_LOAD_PDI_FAIL,
 68	MAX_APP_ERT_STATUS_CODE,
 69	/* NPU RTOS Error Codes */
 70	AIE2_STATUS_INVALID_INPUT_BUFFER		= 0x4000001,
 71	AIE2_STATUS_INVALID_COMMAND,
 72	AIE2_STATUS_INVALID_PARAM,
 73	AIE2_STATUS_INVALID_OPERATION			= 0x4000006,
 74	AIE2_STATUS_ASYNC_EVENT_MSGS_FULL,
 75	AIE2_STATUS_MAX_RTOS_STATUS_CODE,
 76	MAX_AIE2_STATUS_CODE
 77};
 78
 79struct assign_mgmt_pasid_req {
 80	__u16	pasid;
 81	__u16	reserved;
 82} __packed;
 83
 84struct assign_mgmt_pasid_resp {
 85	enum aie2_msg_status	status;
 86} __packed;
 87
 88struct map_host_buffer_req {
 89	__u32		context_id;
 90	__u64		buf_addr;
 91	__u64		buf_size;
 92} __packed;
 93
 94struct map_host_buffer_resp {
 95	enum aie2_msg_status	status;
 96} __packed;
 97
 98#define MAX_CQ_PAIRS		2
 99struct cq_info {
100	__u32 head_addr;
101	__u32 tail_addr;
102	__u32 buf_addr;
103	__u32 buf_size;
104};
105
106struct cq_pair {
107	struct cq_info x2i_q;
108	struct cq_info i2x_q;
109};
110
111struct create_ctx_req {
112	__u32	aie_type;
113	__u8	start_col;
114	__u8	num_col;
115	__u8    num_unused_col;
116	__u8	reserved;
117	__u8	num_cq_pairs_requested;
118	__u8	reserved1;
119	__u16	pasid;
120	__u32	pad[2];
121	__u32	sec_comm_target_type;
122	__u32	context_priority;
123} __packed;
124
125struct create_ctx_resp {
126	enum aie2_msg_status	status;
127	__u32			context_id;
128	__u16			msix_id;
129	__u8			num_cq_pairs_allocated;
130	__u8			reserved;
131	struct cq_pair		cq_pair[MAX_CQ_PAIRS];
132} __packed;
133
134struct destroy_ctx_req {
135	__u32	context_id;
136} __packed;
137
138struct destroy_ctx_resp {
139	enum aie2_msg_status	status;
140} __packed;
141
142enum telemetry_type {
143	TELEMETRY_TYPE_DISABLED,
144	TELEMETRY_TYPE_HEALTH,
145	TELEMETRY_TYPE_ERROR_INFO,
146	TELEMETRY_TYPE_PROFILING,
147	TELEMETRY_TYPE_DEBUG,
148	MAX_TELEMETRY_TYPE
149};
150
151struct get_telemetry_req {
152	enum telemetry_type	type;
153	__u64	buf_addr;
154	__u32	buf_size;
155} __packed;
156
157struct get_telemetry_resp {
158	__u32	major;
159	__u32	minor;
160	__u32	size;
161	enum aie2_msg_status	status;
162} __packed;
163
164struct execute_buffer_req {
165	__u32	cu_idx;
166	__u32	payload[19];
167} __packed;
168
169struct exec_dpu_req {
170	__u64	inst_buf_addr;
171	__u32	inst_size;
172	__u32	inst_prop_cnt;
173	__u32	cu_idx;
174	__u32	payload[35];
175} __packed;
176
177enum exec_npu_type {
178	EXEC_NPU_TYPE_NON_ELF		= 0x1,
179	EXEC_NPU_TYPE_PARTIAL_ELF	= 0x2,
180	EXEC_NPU_TYPE_PREEMPT		= 0x3,
181	EXEC_NPU_TYPE_ELF		= 0x4,
182};
183
184union exec_req {
185	struct execute_buffer_req ebuf;
186	struct exec_dpu_req dpu_req;
187};
188
189struct execute_buffer_resp {
190	enum aie2_msg_status	status;
191} __packed;
192
193struct aie_tile_info {
194	__u32		size;
195	__u16		major;
196	__u16		minor;
197	__u16		cols;
198	__u16		rows;
199	__u16		core_rows;
200	__u16		mem_rows;
201	__u16		shim_rows;
202	__u16		core_row_start;
203	__u16		mem_row_start;
204	__u16		shim_row_start;
205	__u16		core_dma_channels;
206	__u16		mem_dma_channels;
207	__u16		shim_dma_channels;
208	__u16		core_locks;
209	__u16		mem_locks;
210	__u16		shim_locks;
211	__u16		core_events;
212	__u16		mem_events;
213	__u16		shim_events;
214	__u16		reserved;
215};
216
217struct aie_tile_info_req {
218	__u32	reserved;
219} __packed;
220
221struct aie_tile_info_resp {
222	enum aie2_msg_status	status;
223	struct aie_tile_info	info;
224} __packed;
225
226struct aie_version_info_req {
227	__u32		reserved;
228} __packed;
229
230struct aie_version_info_resp {
231	enum aie2_msg_status	status;
232	__u16			major;
233	__u16			minor;
234} __packed;
235
236struct aie_column_info_req {
237	__u64 dump_buff_addr;
238	__u32 dump_buff_size;
239	__u32 num_cols;
240	__u32 aie_bitmap;
241} __packed;
242
243struct aie_column_info_resp {
244	enum aie2_msg_status	status;
245	__u32 size;
246} __packed;
247
248struct suspend_req {
249	__u32		place_holder;
250} __packed;
251
252struct suspend_resp {
253	enum aie2_msg_status	status;
254} __packed;
255
256struct resume_req {
257	__u32		place_holder;
258} __packed;
259
260struct resume_resp {
261	enum aie2_msg_status	status;
262} __packed;
263
264struct check_header_hash_req {
265	__u64		hash_high;
266	__u64		hash_low;
267} __packed;
268
269struct check_header_hash_resp {
270	enum aie2_msg_status	status;
271} __packed;
272
273struct query_error_req {
274	__u64		buf_addr;
275	__u32		buf_size;
276	__u32		next_row;
277	__u32		next_column;
278	__u32		next_module;
279} __packed;
280
281struct query_error_resp {
282	enum aie2_msg_status	status;
283	__u32			num_err;
284	__u32			has_next_err;
285	__u32			next_row;
286	__u32			next_column;
287	__u32			next_module;
288} __packed;
289
290struct protocol_version_req {
291	__u32		reserved;
292} __packed;
293
294struct protocol_version_resp {
295	enum aie2_msg_status	status;
296	__u32			major;
297	__u32			minor;
298} __packed;
299
300struct firmware_version_req {
301	__u32		reserved;
302} __packed;
303
304struct firmware_version_resp {
305	enum aie2_msg_status	status;
306	__u32			major;
307	__u32			minor;
308	__u32			sub;
309	__u32			build;
310} __packed;
311
312#define MAX_NUM_CUS			32
313#define AIE2_MSG_CFG_CU_PDI_ADDR	GENMASK(16, 0)
314#define AIE2_MSG_CFG_CU_FUNC		GENMASK(24, 17)
315struct config_cu_req {
316	__u32	num_cus;
317	__u32	cfgs[MAX_NUM_CUS];
318} __packed;
319
320struct config_cu_resp {
321	enum aie2_msg_status	status;
322} __packed;
323
324struct set_runtime_cfg_req {
325	__u32	type;
326	__u64	value;
327} __packed;
328
329struct set_runtime_cfg_resp {
330	enum aie2_msg_status	status;
331} __packed;
332
333struct get_runtime_cfg_req {
334	__u32	type;
335} __packed;
336
337struct get_runtime_cfg_resp {
338	enum aie2_msg_status	status;
339	__u64			value;
340} __packed;
341
342enum async_event_type {
343	ASYNC_EVENT_TYPE_AIE_ERROR,
344	ASYNC_EVENT_TYPE_EXCEPTION,
345	MAX_ASYNC_EVENT_TYPE
346};
347
348#define ASYNC_BUF_SIZE SZ_8K
349struct async_event_msg_req {
350	__u64 buf_addr;
351	__u32 buf_size;
352} __packed;
353
354struct async_event_msg_resp {
355	enum aie2_msg_status	status;
356	enum async_event_type	type;
357} __packed;
358
359#define MAX_CHAIN_CMDBUF_SIZE SZ_4K
360
361struct cmd_chain_slot_execbuf_cf {
362	__u32 cu_idx;
363	__u32 arg_cnt;
364	__u32 args[] __counted_by(arg_cnt);
365};
366
367struct cmd_chain_slot_dpu {
368	__u64 inst_buf_addr;
369	__u32 inst_size;
370	__u32 inst_prop_cnt;
371	__u32 cu_idx;
372	__u32 arg_cnt;
373#define MAX_DPU_ARGS_SIZE (34 * sizeof(__u32))
374	__u32 args[] __counted_by(arg_cnt);
375};
376
377#define MAX_NPU_ARGS_SIZE (26 * sizeof(__u32))
378#define AIE2_EXEC_BUFFER_KERNEL_OP_TXN	3
379struct cmd_chain_slot_npu {
380	enum exec_npu_type type;
381	u64 inst_buf_addr;
382	u64 save_buf_addr;
383	u64 restore_buf_addr;
384	u32 inst_size;
385	u32 save_size;
386	u32 restore_size;
387	u32 inst_prop_cnt;
388	u32 cu_idx;
389	u32 arg_cnt;
390	u32 args[] __counted_by(arg_cnt);
391} __packed;
392
393struct cmd_chain_req {
394	__u64 buf_addr;
395	__u32 buf_size;
396	__u32 count;
397} __packed;
398
399struct cmd_chain_npu_req {
400	u32 flags;
401	u32 reserved;
402	u64 buf_addr;
403	u32 buf_size;
404	u32 count;
405} __packed;
406
407union exec_chain_req {
408	struct cmd_chain_npu_req npu_req;
409	struct cmd_chain_req req;
410};
411
412struct cmd_chain_resp {
413	enum aie2_msg_status	status;
414	__u32			fail_cmd_idx;
415	enum aie2_msg_status	fail_cmd_status;
416} __packed;
417
418#define AIE2_MSG_SYNC_BO_SRC_TYPE	GENMASK(3, 0)
419#define AIE2_MSG_SYNC_BO_DST_TYPE	GENMASK(7, 4)
420struct sync_bo_req {
421	__u64 src_addr;
422	__u64 dst_addr;
423	__u32 size;
424#define SYNC_BO_DEV_MEM  0
425#define SYNC_BO_HOST_MEM 2
426	__u32 type;
427} __packed;
428
429struct sync_bo_resp {
430	enum aie2_msg_status	status;
431} __packed;
432
433#define DEBUG_BO_UNREGISTER 0
434#define DEBUG_BO_REGISTER   1
435struct config_debug_bo_req {
436	__u64	offset;
437	__u64	size;
438	/*
439	 * config operations.
440	 *   DEBUG_BO_REGISTER: Register debug buffer
441	 *   DEBUG_BO_UNREGISTER: Unregister debug buffer
442	 */
443	__u32	config;
444} __packed;
445
446struct config_debug_bo_resp {
447	enum aie2_msg_status	status;
448} __packed;
449#endif /* _AIE2_MSG_PRIV_H_ */
~/ Read-only file preview.