aie2_msg_priv.h 9.3 KB

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