Path: blob/master/drivers/accel/amdxdna/aie2_msg_priv.h
50951 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2022-2024, Advanced Micro Devices, Inc.3*/45#ifndef _AIE2_MSG_PRIV_H_6#define _AIE2_MSG_PRIV_H_78enum aie2_msg_opcode {9MSG_OP_CREATE_CONTEXT = 0x2,10MSG_OP_DESTROY_CONTEXT = 0x3,11MSG_OP_GET_TELEMETRY = 0x4,12MSG_OP_SYNC_BO = 0x7,13MSG_OP_EXECUTE_BUFFER_CF = 0xC,14MSG_OP_QUERY_COL_STATUS = 0xD,15MSG_OP_QUERY_AIE_TILE_INFO = 0xE,16MSG_OP_QUERY_AIE_VERSION = 0xF,17MSG_OP_EXEC_DPU = 0x10,18MSG_OP_CONFIG_CU = 0x11,19MSG_OP_CHAIN_EXEC_BUFFER_CF = 0x12,20MSG_OP_CHAIN_EXEC_DPU = 0x13,21MSG_OP_CONFIG_DEBUG_BO = 0x14,22MSG_OP_CHAIN_EXEC_NPU = 0x18,23MSG_OP_MAX_XRT_OPCODE,24MSG_OP_SUSPEND = 0x101,25MSG_OP_RESUME = 0x102,26MSG_OP_ASSIGN_MGMT_PASID = 0x103,27MSG_OP_INVOKE_SELF_TEST = 0x104,28MSG_OP_MAP_HOST_BUFFER = 0x106,29MSG_OP_GET_FIRMWARE_VERSION = 0x108,30MSG_OP_SET_RUNTIME_CONFIG = 0x10A,31MSG_OP_GET_RUNTIME_CONFIG = 0x10B,32MSG_OP_REGISTER_ASYNC_EVENT_MSG = 0x10C,33MSG_OP_MAX_DRV_OPCODE,34MSG_OP_GET_PROTOCOL_VERSION = 0x301,35MSG_OP_MAX_OPCODE36};3738enum aie2_msg_status {39AIE2_STATUS_SUCCESS = 0x0,40/* AIE Error codes */41AIE2_STATUS_AIE_SATURATION_ERROR = 0x1000001,42AIE2_STATUS_AIE_FP_ERROR = 0x1000002,43AIE2_STATUS_AIE_STREAM_ERROR = 0x1000003,44AIE2_STATUS_AIE_ACCESS_ERROR = 0x1000004,45AIE2_STATUS_AIE_BUS_ERROR = 0x1000005,46AIE2_STATUS_AIE_INSTRUCTION_ERROR = 0x1000006,47AIE2_STATUS_AIE_ECC_ERROR = 0x1000007,48AIE2_STATUS_AIE_LOCK_ERROR = 0x1000008,49AIE2_STATUS_AIE_DMA_ERROR = 0x1000009,50AIE2_STATUS_AIE_MEM_PARITY_ERROR = 0x100000a,51AIE2_STATUS_AIE_PWR_CFG_ERROR = 0x100000b,52AIE2_STATUS_AIE_BACKTRACK_ERROR = 0x100000c,53AIE2_STATUS_MAX_AIE_STATUS_CODE,54/* MGMT ERT Error codes */55AIE2_STATUS_MGMT_ERT_SELF_TEST_FAILURE = 0x2000001,56AIE2_STATUS_MGMT_ERT_HASH_MISMATCH,57AIE2_STATUS_MGMT_ERT_NOAVAIL,58AIE2_STATUS_MGMT_ERT_INVALID_PARAM,59AIE2_STATUS_MGMT_ERT_ENTER_SUSPEND_FAILURE,60AIE2_STATUS_MGMT_ERT_BUSY,61AIE2_STATUS_MGMT_ERT_APPLICATION_ACTIVE,62MAX_MGMT_ERT_STATUS_CODE,63/* APP ERT Error codes */64AIE2_STATUS_APP_ERT_FIRST_ERROR = 0x3000001,65AIE2_STATUS_APP_INVALID_INSTR,66AIE2_STATUS_APP_LOAD_PDI_FAIL,67MAX_APP_ERT_STATUS_CODE,68/* NPU RTOS Error Codes */69AIE2_STATUS_INVALID_INPUT_BUFFER = 0x4000001,70AIE2_STATUS_INVALID_COMMAND,71AIE2_STATUS_INVALID_PARAM,72AIE2_STATUS_INVALID_OPERATION = 0x4000006,73AIE2_STATUS_ASYNC_EVENT_MSGS_FULL,74AIE2_STATUS_MAX_RTOS_STATUS_CODE,75MAX_AIE2_STATUS_CODE76};7778struct assign_mgmt_pasid_req {79__u16 pasid;80__u16 reserved;81} __packed;8283struct assign_mgmt_pasid_resp {84enum aie2_msg_status status;85} __packed;8687struct map_host_buffer_req {88__u32 context_id;89__u64 buf_addr;90__u64 buf_size;91} __packed;9293struct map_host_buffer_resp {94enum aie2_msg_status status;95} __packed;9697#define MAX_CQ_PAIRS 298struct cq_info {99__u32 head_addr;100__u32 tail_addr;101__u32 buf_addr;102__u32 buf_size;103};104105struct cq_pair {106struct cq_info x2i_q;107struct cq_info i2x_q;108};109110#define PRIORITY_REALTIME 1111#define PRIORITY_HIGH 2112#define PRIORITY_NORMAL 3113#define PRIORITY_LOW 4114115struct create_ctx_req {116__u32 aie_type;117__u8 start_col;118__u8 num_col;119__u8 num_unused_col;120__u8 reserved;121__u8 num_cq_pairs_requested;122__u8 reserved1;123__u16 pasid;124__u32 pad[2];125__u32 sec_comm_target_type;126__u32 context_priority;127} __packed;128129struct create_ctx_resp {130enum aie2_msg_status status;131__u32 context_id;132__u16 msix_id;133__u8 num_cq_pairs_allocated;134__u8 reserved;135struct cq_pair cq_pair[MAX_CQ_PAIRS];136} __packed;137138struct destroy_ctx_req {139__u32 context_id;140} __packed;141142struct destroy_ctx_resp {143enum aie2_msg_status status;144} __packed;145146enum telemetry_type {147TELEMETRY_TYPE_DISABLED,148TELEMETRY_TYPE_HEALTH,149TELEMETRY_TYPE_ERROR_INFO,150TELEMETRY_TYPE_PROFILING,151TELEMETRY_TYPE_DEBUG,152MAX_TELEMETRY_TYPE153};154155struct get_telemetry_req {156enum telemetry_type type;157__u64 buf_addr;158__u32 buf_size;159} __packed;160161struct get_telemetry_resp {162__u32 major;163__u32 minor;164__u32 size;165enum aie2_msg_status status;166} __packed;167168struct execute_buffer_req {169__u32 cu_idx;170__u32 payload[19];171} __packed;172173struct exec_dpu_req {174__u64 inst_buf_addr;175__u32 inst_size;176__u32 inst_prop_cnt;177__u32 cu_idx;178__u32 payload[35];179} __packed;180181enum exec_npu_type {182EXEC_NPU_TYPE_NON_ELF = 0x1,183EXEC_NPU_TYPE_PARTIAL_ELF = 0x2,184EXEC_NPU_TYPE_PREEMPT = 0x3,185EXEC_NPU_TYPE_ELF = 0x4,186};187188union exec_req {189struct execute_buffer_req ebuf;190struct exec_dpu_req dpu_req;191};192193struct execute_buffer_resp {194enum aie2_msg_status status;195} __packed;196197struct aie_tile_info {198__u32 size;199__u16 major;200__u16 minor;201__u16 cols;202__u16 rows;203__u16 core_rows;204__u16 mem_rows;205__u16 shim_rows;206__u16 core_row_start;207__u16 mem_row_start;208__u16 shim_row_start;209__u16 core_dma_channels;210__u16 mem_dma_channels;211__u16 shim_dma_channels;212__u16 core_locks;213__u16 mem_locks;214__u16 shim_locks;215__u16 core_events;216__u16 mem_events;217__u16 shim_events;218__u16 reserved;219};220221struct aie_tile_info_req {222__u32 reserved;223} __packed;224225struct aie_tile_info_resp {226enum aie2_msg_status status;227struct aie_tile_info info;228} __packed;229230struct aie_version_info_req {231__u32 reserved;232} __packed;233234struct aie_version_info_resp {235enum aie2_msg_status status;236__u16 major;237__u16 minor;238} __packed;239240struct aie_column_info_req {241__u64 dump_buff_addr;242__u32 dump_buff_size;243__u32 num_cols;244__u32 aie_bitmap;245} __packed;246247struct aie_column_info_resp {248enum aie2_msg_status status;249__u32 size;250} __packed;251252struct suspend_req {253__u32 place_holder;254} __packed;255256struct suspend_resp {257enum aie2_msg_status status;258} __packed;259260struct resume_req {261__u32 place_holder;262} __packed;263264struct resume_resp {265enum aie2_msg_status status;266} __packed;267268struct check_header_hash_req {269__u64 hash_high;270__u64 hash_low;271} __packed;272273struct check_header_hash_resp {274enum aie2_msg_status status;275} __packed;276277struct query_error_req {278__u64 buf_addr;279__u32 buf_size;280__u32 next_row;281__u32 next_column;282__u32 next_module;283} __packed;284285struct query_error_resp {286enum aie2_msg_status status;287__u32 num_err;288__u32 has_next_err;289__u32 next_row;290__u32 next_column;291__u32 next_module;292} __packed;293294struct protocol_version_req {295__u32 reserved;296} __packed;297298struct protocol_version_resp {299enum aie2_msg_status status;300__u32 major;301__u32 minor;302} __packed;303304struct firmware_version_req {305__u32 reserved;306} __packed;307308struct firmware_version_resp {309enum aie2_msg_status status;310__u32 major;311__u32 minor;312__u32 sub;313__u32 build;314} __packed;315316#define MAX_NUM_CUS 32317#define AIE2_MSG_CFG_CU_PDI_ADDR GENMASK(16, 0)318#define AIE2_MSG_CFG_CU_FUNC GENMASK(24, 17)319struct config_cu_req {320__u32 num_cus;321__u32 cfgs[MAX_NUM_CUS];322} __packed;323324struct config_cu_resp {325enum aie2_msg_status status;326} __packed;327328struct set_runtime_cfg_req {329__u32 type;330__u64 value;331} __packed;332333struct set_runtime_cfg_resp {334enum aie2_msg_status status;335} __packed;336337struct get_runtime_cfg_req {338__u32 type;339} __packed;340341struct get_runtime_cfg_resp {342enum aie2_msg_status status;343__u64 value;344} __packed;345346enum async_event_type {347ASYNC_EVENT_TYPE_AIE_ERROR,348ASYNC_EVENT_TYPE_EXCEPTION,349MAX_ASYNC_EVENT_TYPE350};351352#define ASYNC_BUF_SIZE SZ_8K353struct async_event_msg_req {354__u64 buf_addr;355__u32 buf_size;356} __packed;357358struct async_event_msg_resp {359enum aie2_msg_status status;360enum async_event_type type;361} __packed;362363#define MAX_CHAIN_CMDBUF_SIZE SZ_4K364365struct cmd_chain_slot_execbuf_cf {366__u32 cu_idx;367__u32 arg_cnt;368__u32 args[] __counted_by(arg_cnt);369};370371struct cmd_chain_slot_dpu {372__u64 inst_buf_addr;373__u32 inst_size;374__u32 inst_prop_cnt;375__u32 cu_idx;376__u32 arg_cnt;377#define MAX_DPU_ARGS_SIZE (34 * sizeof(__u32))378__u32 args[] __counted_by(arg_cnt);379};380381#define MAX_NPU_ARGS_SIZE (26 * sizeof(__u32))382#define AIE2_EXEC_BUFFER_KERNEL_OP_TXN 3383struct cmd_chain_slot_npu {384enum exec_npu_type type;385u64 inst_buf_addr;386u64 save_buf_addr;387u64 restore_buf_addr;388u32 inst_size;389u32 save_size;390u32 restore_size;391u32 inst_prop_cnt;392u32 cu_idx;393u32 arg_cnt;394u32 args[] __counted_by(arg_cnt);395} __packed;396397struct cmd_chain_req {398__u64 buf_addr;399__u32 buf_size;400__u32 count;401} __packed;402403struct cmd_chain_npu_req {404u32 flags;405u32 reserved;406u64 buf_addr;407u32 buf_size;408u32 count;409} __packed;410411union exec_chain_req {412struct cmd_chain_npu_req npu_req;413struct cmd_chain_req req;414};415416struct cmd_chain_resp {417enum aie2_msg_status status;418__u32 fail_cmd_idx;419enum aie2_msg_status fail_cmd_status;420} __packed;421422#define AIE2_MSG_SYNC_BO_SRC_TYPE GENMASK(3, 0)423#define AIE2_MSG_SYNC_BO_DST_TYPE GENMASK(7, 4)424struct sync_bo_req {425__u64 src_addr;426__u64 dst_addr;427__u32 size;428#define SYNC_BO_DEV_MEM 0429#define SYNC_BO_HOST_MEM 2430__u32 type;431} __packed;432433struct sync_bo_resp {434enum aie2_msg_status status;435} __packed;436437#define DEBUG_BO_UNREGISTER 0438#define DEBUG_BO_REGISTER 1439struct config_debug_bo_req {440__u64 offset;441__u64 size;442/*443* config operations.444* DEBUG_BO_REGISTER: Register debug buffer445* DEBUG_BO_UNREGISTER: Unregister debug buffer446*/447__u32 config;448} __packed;449450struct config_debug_bo_resp {451enum aie2_msg_status status;452} __packed;453#endif /* _AIE2_MSG_PRIV_H_ */454455456