FILE
aie2_msg_priv.h
File preview with syntax highlighting.
linux-6.19.14/drivers/accel/amdxdna/aie2_msg_priv.h
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.