xref: /linux/drivers/accel/amdxdna/aie4_msg_priv.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1c02697cbSDavid Zhang /* SPDX-License-Identifier: GPL-2.0 */
2c02697cbSDavid Zhang /*
3c02697cbSDavid Zhang  * Copyright (C) 2026, Advanced Micro Devices, Inc.
4c02697cbSDavid Zhang  */
5c02697cbSDavid Zhang 
6c02697cbSDavid Zhang #ifndef _AIE4_MSG_PRIV_H_
7c02697cbSDavid Zhang #define _AIE4_MSG_PRIV_H_
8c02697cbSDavid Zhang 
9*c0069781SNishad Saraf #include <linux/sizes.h>
10c02697cbSDavid Zhang #include <linux/types.h>
11c02697cbSDavid Zhang 
12c02697cbSDavid Zhang enum aie4_msg_opcode {
13c02697cbSDavid Zhang 	AIE4_MSG_OP_SUSPEND                          = 0x10003,
14*c0069781SNishad Saraf 	AIE4_MSG_OP_ATTACH_WORK_BUFFER               = 0x1000D,
15c02697cbSDavid Zhang 
16c02697cbSDavid Zhang 	AIE4_MSG_OP_CREATE_VFS                       = 0x20001,
17c02697cbSDavid Zhang 	AIE4_MSG_OP_DESTROY_VFS                      = 0x20002,
18ce9414d0SDavid Zhang 
19ce9414d0SDavid Zhang 	AIE4_MSG_OP_CREATE_PARTITION                 = 0x30001,
20ce9414d0SDavid Zhang 	AIE4_MSG_OP_DESTROY_PARTITION                = 0x30002,
2119361279SDavid Zhang 	AIE4_MSG_OP_CREATE_HW_CONTEXT                = 0x30003,
2219361279SDavid Zhang 	AIE4_MSG_OP_DESTROY_HW_CONTEXT               = 0x30004,
230b087e06SDavid Zhang 	AIE4_MSG_OP_AIE_TILE_INFO                    = 0x30006,
24c02697cbSDavid Zhang };
25c02697cbSDavid Zhang 
26c02697cbSDavid Zhang enum aie4_msg_status {
27c02697cbSDavid Zhang 	AIE4_MSG_STATUS_SUCCESS = 0x0,
28c02697cbSDavid Zhang 	AIE4_MSG_STATUS_ERROR = 0x1,
29c02697cbSDavid Zhang 	AIE4_MSG_STATUS_NOTSUPP = 0x2,
30c02697cbSDavid Zhang 	MAX_AIE4_MSG_STATUS_CODE = 0x4,
31c02697cbSDavid Zhang };
32c02697cbSDavid Zhang 
33c02697cbSDavid Zhang struct aie4_msg_suspend_req {
34c02697cbSDavid Zhang 	__u32 rsvd;
35c02697cbSDavid Zhang } __packed;
36c02697cbSDavid Zhang 
37c02697cbSDavid Zhang struct aie4_msg_suspend_resp {
38c02697cbSDavid Zhang 	enum aie4_msg_status status;
39c02697cbSDavid Zhang } __packed;
40c02697cbSDavid Zhang 
41c02697cbSDavid Zhang struct aie4_msg_create_vfs_req {
42c02697cbSDavid Zhang 	__u32 vf_cnt;
43c02697cbSDavid Zhang } __packed;
44c02697cbSDavid Zhang 
45c02697cbSDavid Zhang struct aie4_msg_create_vfs_resp {
46c02697cbSDavid Zhang 	enum aie4_msg_status status;
47c02697cbSDavid Zhang } __packed;
48c02697cbSDavid Zhang 
49c02697cbSDavid Zhang struct aie4_msg_destroy_vfs_req {
50c02697cbSDavid Zhang 	__u32 rsvd;
51c02697cbSDavid Zhang } __packed;
52c02697cbSDavid Zhang 
53c02697cbSDavid Zhang struct aie4_msg_destroy_vfs_resp {
54c02697cbSDavid Zhang 	enum aie4_msg_status status;
55c02697cbSDavid Zhang } __packed;
56c02697cbSDavid Zhang 
57ce9414d0SDavid Zhang struct aie4_msg_create_partition_req {
58ce9414d0SDavid Zhang 	__u32 partition_col_start;
59ce9414d0SDavid Zhang 	__u32 partition_col_count;
60ce9414d0SDavid Zhang } __packed;
61ce9414d0SDavid Zhang 
62ce9414d0SDavid Zhang struct aie4_msg_create_partition_resp {
63ce9414d0SDavid Zhang 	enum aie4_msg_status status;
64ce9414d0SDavid Zhang 	__u32 partition_id;
65ce9414d0SDavid Zhang } __packed;
66ce9414d0SDavid Zhang 
67ce9414d0SDavid Zhang struct aie4_msg_destroy_partition_req {
68ce9414d0SDavid Zhang 	__u32 partition_id;
69ce9414d0SDavid Zhang } __packed;
70ce9414d0SDavid Zhang 
71ce9414d0SDavid Zhang struct aie4_msg_destroy_partition_resp {
72ce9414d0SDavid Zhang 	enum aie4_msg_status status;
73ce9414d0SDavid Zhang } __packed;
74ce9414d0SDavid Zhang 
7519361279SDavid Zhang struct aie4_msg_create_hw_context_req {
7619361279SDavid Zhang 	__u32 partition_id;
7719361279SDavid Zhang 	__u32 request_num_tiles;
7819361279SDavid Zhang 	__u32 hsa_addr_high;
7919361279SDavid Zhang 	__u32 hsa_addr_low;
8019361279SDavid Zhang #define AIE4_MSG_PASID GENMASK(19, 0)
8119361279SDavid Zhang #define AIE4_MSG_PASID_VLD GENMASK(31, 31)
8219361279SDavid Zhang 	__u32 pasid;
8319361279SDavid Zhang 	__u32 priority_band;
8419361279SDavid Zhang } __packed;
8519361279SDavid Zhang 
8619361279SDavid Zhang struct aie4_msg_create_hw_context_resp {
8719361279SDavid Zhang 	enum aie4_msg_status status;
8819361279SDavid Zhang 	__u32 hw_context_id;
8919361279SDavid Zhang 	__u32 doorbell_offset;
9019361279SDavid Zhang 	__u32 job_complete_msix_idx;
9119361279SDavid Zhang } __packed;
9219361279SDavid Zhang 
9319361279SDavid Zhang struct aie4_msg_destroy_hw_context_req {
9419361279SDavid Zhang 	__u32 hw_context_id;
9519361279SDavid Zhang 	__u32 resvd1;
9619361279SDavid Zhang } __packed;
9719361279SDavid Zhang 
9819361279SDavid Zhang struct aie4_msg_destroy_hw_context_resp {
9919361279SDavid Zhang 	enum aie4_msg_status status;
10019361279SDavid Zhang } __packed;
10119361279SDavid Zhang 
1020b087e06SDavid Zhang struct aie4_tile_info {
1030b087e06SDavid Zhang 	__u32 size;
1040b087e06SDavid Zhang 	__u16 major;
1050b087e06SDavid Zhang 	__u16 minor;
1060b087e06SDavid Zhang 	__u16 cols;
1070b087e06SDavid Zhang 	__u16 rows;
1080b087e06SDavid Zhang 	__u16 core_rows;
1090b087e06SDavid Zhang 	__u16 mem_rows;
1100b087e06SDavid Zhang 	__u16 shim_rows;
1110b087e06SDavid Zhang 	__u16 core_row_start;
1120b087e06SDavid Zhang 	__u16 mem_row_start;
1130b087e06SDavid Zhang 	__u16 shim_row_start;
1140b087e06SDavid Zhang 	__u16 core_dma_channels;
1150b087e06SDavid Zhang 	__u16 mem_dma_channels;
1160b087e06SDavid Zhang 	__u16 shim_dma_channels;
1170b087e06SDavid Zhang 	__u16 core_locks;
1180b087e06SDavid Zhang 	__u16 mem_locks;
1190b087e06SDavid Zhang 	__u16 shim_locks;
1200b087e06SDavid Zhang 	__u16 core_events;
1210b087e06SDavid Zhang 	__u16 mem_events;
1220b087e06SDavid Zhang 	__u16 shim_events;
1230b087e06SDavid Zhang 	__u16 resvd;
1240b087e06SDavid Zhang } __packed;
1250b087e06SDavid Zhang 
1260b087e06SDavid Zhang struct aie4_msg_aie4_tile_info_req {
1270b087e06SDavid Zhang 	__u32 resvd;
1280b087e06SDavid Zhang } __packed;
1290b087e06SDavid Zhang 
1300b087e06SDavid Zhang struct aie4_msg_aie4_tile_info_resp {
1310b087e06SDavid Zhang 	enum aie4_msg_status status;
1320b087e06SDavid Zhang 	struct aie4_tile_info info;
1330b087e06SDavid Zhang } __packed;
1340b087e06SDavid Zhang 
135*c0069781SNishad Saraf #define AIE4_WORK_BUFFER_MIN_SIZE      SZ_4M
136*c0069781SNishad Saraf 
137*c0069781SNishad Saraf struct aie4_msg_attach_work_buffer_req {
138*c0069781SNishad Saraf 	__u64 buff_addr;
139*c0069781SNishad Saraf 	__u32 reserved;
140*c0069781SNishad Saraf 	__u32 buff_size;
141*c0069781SNishad Saraf } __packed;
142*c0069781SNishad Saraf 
143*c0069781SNishad Saraf struct aie4_msg_attach_work_buffer_resp {
144*c0069781SNishad Saraf 	enum aie4_msg_status status;
145*c0069781SNishad Saraf } __packed;
146*c0069781SNishad Saraf 
147c02697cbSDavid Zhang #endif /* _AIE4_MSG_PRIV_H_ */
148