1e65e175bSOded Gabbay /* SPDX-License-Identifier: GPL-2.0
2e65e175bSOded Gabbay  *
3e65e175bSOded Gabbay  * Copyright 2020 HabanaLabs, Ltd.
4e65e175bSOded Gabbay  * All Rights Reserved.
5e65e175bSOded Gabbay  *
6e65e175bSOded Gabbay  */
7e65e175bSOded Gabbay 
8e65e175bSOded Gabbay #ifndef GAUDI2_PACKETS_H
9e65e175bSOded Gabbay #define GAUDI2_PACKETS_H
10e65e175bSOded Gabbay 
11e65e175bSOded Gabbay #include <linux/types.h>
12e65e175bSOded Gabbay 
13e65e175bSOded Gabbay #define PACKET_HEADER_PACKET_ID_SHIFT		56
14e65e175bSOded Gabbay #define PACKET_HEADER_PACKET_ID_MASK		0x1F00000000000000ull
15e65e175bSOded Gabbay 
16e65e175bSOded Gabbay enum packet_id {
17e65e175bSOded Gabbay 	PACKET_WREG_32 = 0x1,
18e65e175bSOded Gabbay 	PACKET_WREG_BULK = 0x2,
19e65e175bSOded Gabbay 	PACKET_MSG_LONG = 0x3,
20e65e175bSOded Gabbay 	PACKET_MSG_SHORT = 0x4,
21e65e175bSOded Gabbay 	PACKET_CP_DMA = 0x5,
22e65e175bSOded Gabbay 	PACKET_REPEAT = 0x6,
23e65e175bSOded Gabbay 	PACKET_MSG_PROT = 0x7,
24e65e175bSOded Gabbay 	PACKET_FENCE = 0x8,
25e65e175bSOded Gabbay 	PACKET_LIN_DMA = 0x9,
26e65e175bSOded Gabbay 	PACKET_NOP = 0xA,
27e65e175bSOded Gabbay 	PACKET_STOP = 0xB,
28e65e175bSOded Gabbay 	PACKET_ARB_POINT = 0xC,
29e65e175bSOded Gabbay 	PACKET_WAIT = 0xD,
30e65e175bSOded Gabbay 	PACKET_CB_LIST = 0xE,
31e65e175bSOded Gabbay 	PACKET_LOAD_AND_EXE = 0xF,
32e65e175bSOded Gabbay 	PACKET_WRITE_ARC_STREAM = 0x10,
33e65e175bSOded Gabbay 	PACKET_LAST_READ_FROM_ARC = 0x11,
34e65e175bSOded Gabbay 	PACKET_WREG_64_SHORT = 0x12,
35e65e175bSOded Gabbay 	PACKET_WREG_64_LONG = 0x13,
36e65e175bSOded Gabbay 	MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
37e65e175bSOded Gabbay 				PACKET_HEADER_PACKET_ID_SHIFT) + 1
38e65e175bSOded Gabbay };
39e65e175bSOded Gabbay 
40e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_OPCODE_SHIFT	24
41e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_OPCODE_MASK	0x1F000000
42e65e175bSOded Gabbay 
43e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_EB_SHIFT		29
44e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_EB_MASK		0x20000000
45e65e175bSOded Gabbay 
46e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_RB_SHIFT		30
47e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_RB_MASK		0x40000000
48e65e175bSOded Gabbay 
49e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_MB_SHIFT		31
50e65e175bSOded Gabbay #define GAUDI2_PKT_CTL_MB_MASK		0x80000000
51e65e175bSOded Gabbay 
52e65e175bSOded Gabbay /* All packets have, at least, an 8-byte header, which contains
53e65e175bSOded Gabbay  * the packet type. The kernel driver uses the packet header for packet
54e65e175bSOded Gabbay  * validation and to perform any necessary required preparation before
55e65e175bSOded Gabbay  * sending them off to the hardware.
56e65e175bSOded Gabbay  */
57e65e175bSOded Gabbay struct gaudi2_packet {
58e65e175bSOded Gabbay 	__le64 header;
59e65e175bSOded Gabbay 	/* The rest of the packet data follows. Use the corresponding
60e65e175bSOded Gabbay 	 * packet_XXX struct to deference the data, based on packet type
61e65e175bSOded Gabbay 	 */
62*7d352a81SGustavo A. R. Silva 	u8 contents[];
63e65e175bSOded Gabbay };
64e65e175bSOded Gabbay 
65e65e175bSOded Gabbay struct packet_nop {
66e65e175bSOded Gabbay 	__le32 reserved;
67e65e175bSOded Gabbay 	__le32 ctl;
68e65e175bSOded Gabbay };
69e65e175bSOded Gabbay 
70e65e175bSOded Gabbay struct packet_stop {
71e65e175bSOded Gabbay 	__le32 reserved;
72e65e175bSOded Gabbay 	__le32 ctl;
73e65e175bSOded Gabbay };
74e65e175bSOded Gabbay 
75e65e175bSOded Gabbay struct packet_wreg32 {
76e65e175bSOded Gabbay 	__le32 value;
77e65e175bSOded Gabbay 	__le32 ctl;
78e65e175bSOded Gabbay };
79e65e175bSOded Gabbay 
80e65e175bSOded Gabbay struct packet_wreg_bulk {
81e65e175bSOded Gabbay 	__le32 size64;
82e65e175bSOded Gabbay 	__le32 ctl;
83*7d352a81SGustavo A. R. Silva 	__le64 values[]; /* data starts here */
84e65e175bSOded Gabbay };
85e65e175bSOded Gabbay 
86e65e175bSOded Gabbay struct packet_msg_long {
87e65e175bSOded Gabbay 	__le32 value;
88e65e175bSOded Gabbay 	__le32 ctl;
89e65e175bSOded Gabbay 	__le64 addr;
90e65e175bSOded Gabbay };
91e65e175bSOded Gabbay 
92e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT	0
93e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK	0x00007FFF
94e65e175bSOded Gabbay 
95e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_SOB_MOD_SHIFT	31
96e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_SOB_MOD_MASK	0x80000000
97e65e175bSOded Gabbay 
98e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT	0
99e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_MASK	0x000000FF
100e65e175bSOded Gabbay 
101e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_MASK_SHIFT	8
102e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_MASK_MASK	0x0000FF00
103e65e175bSOded Gabbay 
104e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_MODE_SHIFT	16
105e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_MODE_MASK	0x00010000
106e65e175bSOded Gabbay 
107e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT	17
108e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_MASK	0xFFFE0000
109e65e175bSOded Gabbay 
110e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_CTL_ADDR_SHIFT		0
111e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_CTL_ADDR_MASK		0x0000FFFF
112e65e175bSOded Gabbay 
113e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_CTL_BASE_SHIFT		22
114e65e175bSOded Gabbay #define GAUDI2_PKT_SHORT_CTL_BASE_MASK		0x00C00000
115e65e175bSOded Gabbay 
116e65e175bSOded Gabbay struct packet_msg_short {
117e65e175bSOded Gabbay 	__le32 value;
118e65e175bSOded Gabbay 	__le32 ctl;
119e65e175bSOded Gabbay };
120e65e175bSOded Gabbay 
121e65e175bSOded Gabbay struct packet_msg_prot {
122e65e175bSOded Gabbay 	__le32 value;
123e65e175bSOded Gabbay 	__le32 ctl;
124e65e175bSOded Gabbay 	__le64 addr;
125e65e175bSOded Gabbay };
126e65e175bSOded Gabbay 
127e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_DEC_VAL_SHIFT	0
128e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_DEC_VAL_MASK	0x0000000F
129e65e175bSOded Gabbay 
130e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_SHIFT	16
131e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_MASK	0x00FF0000
132e65e175bSOded Gabbay 
133e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_ID_SHIFT		30
134e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CFG_ID_MASK		0xC0000000
135e65e175bSOded Gabbay 
136e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CTL_PRED_SHIFT		0
137e65e175bSOded Gabbay #define GAUDI2_PKT_FENCE_CTL_PRED_MASK		0x0000001F
138e65e175bSOded Gabbay 
139e65e175bSOded Gabbay struct packet_fence {
140e65e175bSOded Gabbay 	__le32 cfg;
141e65e175bSOded Gabbay 	__le32 ctl;
142e65e175bSOded Gabbay };
143e65e175bSOded Gabbay 
144e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_SHIFT	0
145e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_MASK	0x00000001
146e65e175bSOded Gabbay 
147e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_SHIFT	1
148e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_MASK	0x00000006
149e65e175bSOded Gabbay 
150e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_SHIFT	4
151e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000010
152e65e175bSOded Gabbay 
153e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_SHIFT	8
154e65e175bSOded Gabbay #define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_MASK	0x00FFFF00
155e65e175bSOded Gabbay 
156e65e175bSOded Gabbay struct packet_lin_dma {
157e65e175bSOded Gabbay 	__le32 tsize;
158e65e175bSOded Gabbay 	__le32 ctl;
159e65e175bSOded Gabbay 	__le64 src_addr;
160e65e175bSOded Gabbay 	__le64 dst_addr;
161e65e175bSOded Gabbay };
162e65e175bSOded Gabbay 
163e65e175bSOded Gabbay struct packet_arb_point {
164e65e175bSOded Gabbay 	__le32 cfg;
165e65e175bSOded Gabbay 	__le32 ctl;
166e65e175bSOded Gabbay };
167e65e175bSOded Gabbay 
168e65e175bSOded Gabbay struct packet_repeat {
169e65e175bSOded Gabbay 	__le32 cfg;
170e65e175bSOded Gabbay 	__le32 ctl;
171e65e175bSOded Gabbay };
172e65e175bSOded Gabbay 
173e65e175bSOded Gabbay struct packet_wait {
174e65e175bSOded Gabbay 	__le32 cfg;
175e65e175bSOded Gabbay 	__le32 ctl;
176e65e175bSOded Gabbay };
177e65e175bSOded Gabbay 
178e65e175bSOded Gabbay struct packet_cb_list {
179e65e175bSOded Gabbay 	__le32 reserved;
180e65e175bSOded Gabbay 	__le32 ctl;
181e65e175bSOded Gabbay 	__le64 index_addr;
182e65e175bSOded Gabbay 	__le64 table_addr;
183e65e175bSOded Gabbay };
184e65e175bSOded Gabbay 
185e65e175bSOded Gabbay struct packet_load_and_exe {
186e65e175bSOded Gabbay 	__le32 cfg;
187e65e175bSOded Gabbay 	__le32 ctl;
188e65e175bSOded Gabbay 	__le64 src_addr;
189e65e175bSOded Gabbay };
190e65e175bSOded Gabbay 
191e65e175bSOded Gabbay struct packet_cp_dma {
192e65e175bSOded Gabbay 	__le32 tsize;
193e65e175bSOded Gabbay 	__le32 ctl;
194e65e175bSOded Gabbay 	__le64 src_addr;
195e65e175bSOded Gabbay };
196e65e175bSOded Gabbay 
197e65e175bSOded Gabbay #endif /* GAUDI2_PACKETS_H */
198