xref: /openbmc/linux/include/linux/mlx5/mlx5_ifc_fpga.h (revision 6062118d5cd2b90369278cdf831aeffb84ae3943)
1e29341fbSIlan Tayari /*
2e29341fbSIlan Tayari  * Copyright (c) 2017, Mellanox Technologies, Ltd.  All rights reserved.
3e29341fbSIlan Tayari  *
4e29341fbSIlan Tayari  * This software is available to you under a choice of one of two
5e29341fbSIlan Tayari  * licenses.  You may choose to be licensed under the terms of the GNU
6e29341fbSIlan Tayari  * General Public License (GPL) Version 2, available from the file
7e29341fbSIlan Tayari  * COPYING in the main directory of this source tree, or the
8e29341fbSIlan Tayari  * OpenIB.org BSD license below:
9e29341fbSIlan Tayari  *
10e29341fbSIlan Tayari  *     Redistribution and use in source and binary forms, with or
11e29341fbSIlan Tayari  *     without modification, are permitted provided that the following
12e29341fbSIlan Tayari  *     conditions are met:
13e29341fbSIlan Tayari  *
14e29341fbSIlan Tayari  *      - Redistributions of source code must retain the above
15e29341fbSIlan Tayari  *        copyright notice, this list of conditions and the following
16e29341fbSIlan Tayari  *        disclaimer.
17e29341fbSIlan Tayari  *
18e29341fbSIlan Tayari  *      - Redistributions in binary form must reproduce the above
19e29341fbSIlan Tayari  *        copyright notice, this list of conditions and the following
20e29341fbSIlan Tayari  *        disclaimer in the documentation and/or other materials
21e29341fbSIlan Tayari  *        provided with the distribution.
22e29341fbSIlan Tayari  *
23e29341fbSIlan Tayari  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24e29341fbSIlan Tayari  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25e29341fbSIlan Tayari  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26e29341fbSIlan Tayari  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27e29341fbSIlan Tayari  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28e29341fbSIlan Tayari  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29e29341fbSIlan Tayari  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30e29341fbSIlan Tayari  * SOFTWARE.
31e29341fbSIlan Tayari  */
32e29341fbSIlan Tayari #ifndef MLX5_IFC_FPGA_H
33e29341fbSIlan Tayari #define MLX5_IFC_FPGA_H
34e29341fbSIlan Tayari 
35e29341fbSIlan Tayari struct mlx5_ifc_fpga_shell_caps_bits {
36e29341fbSIlan Tayari 	u8         max_num_qps[0x10];
37e29341fbSIlan Tayari 	u8         reserved_at_10[0x8];
38e29341fbSIlan Tayari 	u8         total_rcv_credits[0x8];
39e29341fbSIlan Tayari 
40e29341fbSIlan Tayari 	u8         reserved_at_20[0xe];
41e29341fbSIlan Tayari 	u8         qp_type[0x2];
42e29341fbSIlan Tayari 	u8         reserved_at_30[0x5];
43e29341fbSIlan Tayari 	u8         rae[0x1];
44e29341fbSIlan Tayari 	u8         rwe[0x1];
45e29341fbSIlan Tayari 	u8         rre[0x1];
46e29341fbSIlan Tayari 	u8         reserved_at_38[0x4];
47e29341fbSIlan Tayari 	u8         dc[0x1];
48e29341fbSIlan Tayari 	u8         ud[0x1];
49e29341fbSIlan Tayari 	u8         uc[0x1];
50e29341fbSIlan Tayari 	u8         rc[0x1];
51e29341fbSIlan Tayari 
52e29341fbSIlan Tayari 	u8         reserved_at_40[0x1a];
53e29341fbSIlan Tayari 	u8         log_ddr_size[0x6];
54e29341fbSIlan Tayari 
55e29341fbSIlan Tayari 	u8         max_fpga_qp_msg_size[0x20];
56e29341fbSIlan Tayari 
57e29341fbSIlan Tayari 	u8         reserved_at_80[0x180];
58e29341fbSIlan Tayari };
59e29341fbSIlan Tayari 
60e29341fbSIlan Tayari struct mlx5_ifc_fpga_cap_bits {
61e29341fbSIlan Tayari 	u8         fpga_id[0x8];
62e29341fbSIlan Tayari 	u8         fpga_device[0x18];
63e29341fbSIlan Tayari 
64e29341fbSIlan Tayari 	u8         register_file_ver[0x20];
65e29341fbSIlan Tayari 
66e29341fbSIlan Tayari 	u8         fpga_ctrl_modify[0x1];
67e29341fbSIlan Tayari 	u8         reserved_at_41[0x5];
68e29341fbSIlan Tayari 	u8         access_reg_query_mode[0x2];
69e29341fbSIlan Tayari 	u8         reserved_at_48[0x6];
70e29341fbSIlan Tayari 	u8         access_reg_modify_mode[0x2];
71e29341fbSIlan Tayari 	u8         reserved_at_50[0x10];
72e29341fbSIlan Tayari 
73e29341fbSIlan Tayari 	u8         reserved_at_60[0x20];
74e29341fbSIlan Tayari 
75e29341fbSIlan Tayari 	u8         image_version[0x20];
76e29341fbSIlan Tayari 
77e29341fbSIlan Tayari 	u8         image_date[0x20];
78e29341fbSIlan Tayari 
79e29341fbSIlan Tayari 	u8         image_time[0x20];
80e29341fbSIlan Tayari 
81e29341fbSIlan Tayari 	u8         shell_version[0x20];
82e29341fbSIlan Tayari 
83e29341fbSIlan Tayari 	u8         reserved_at_100[0x80];
84e29341fbSIlan Tayari 
85e29341fbSIlan Tayari 	struct mlx5_ifc_fpga_shell_caps_bits shell_caps;
86e29341fbSIlan Tayari 
87e29341fbSIlan Tayari 	u8         reserved_at_380[0x8];
88e29341fbSIlan Tayari 	u8         ieee_vendor_id[0x18];
89e29341fbSIlan Tayari 
90e29341fbSIlan Tayari 	u8         sandbox_product_version[0x10];
91e29341fbSIlan Tayari 	u8         sandbox_product_id[0x10];
92e29341fbSIlan Tayari 
93e29341fbSIlan Tayari 	u8         sandbox_basic_caps[0x20];
94e29341fbSIlan Tayari 
95e29341fbSIlan Tayari 	u8         reserved_at_3e0[0x10];
96e29341fbSIlan Tayari 	u8         sandbox_extended_caps_len[0x10];
97e29341fbSIlan Tayari 
98e29341fbSIlan Tayari 	u8         sandbox_extended_caps_addr[0x40];
99e29341fbSIlan Tayari 
100e29341fbSIlan Tayari 	u8         fpga_ddr_start_addr[0x40];
101e29341fbSIlan Tayari 
102e29341fbSIlan Tayari 	u8         fpga_cr_space_start_addr[0x40];
103e29341fbSIlan Tayari 
104e29341fbSIlan Tayari 	u8         fpga_ddr_size[0x20];
105e29341fbSIlan Tayari 
106e29341fbSIlan Tayari 	u8         fpga_cr_space_size[0x20];
107e29341fbSIlan Tayari 
108e29341fbSIlan Tayari 	u8         reserved_at_500[0x300];
109e29341fbSIlan Tayari };
110e29341fbSIlan Tayari 
111e29341fbSIlan Tayari struct mlx5_ifc_fpga_ctrl_bits {
112e29341fbSIlan Tayari 	u8         reserved_at_0[0x8];
113e29341fbSIlan Tayari 	u8         operation[0x8];
114e29341fbSIlan Tayari 	u8         reserved_at_10[0x8];
115e29341fbSIlan Tayari 	u8         status[0x8];
116e29341fbSIlan Tayari 
117e29341fbSIlan Tayari 	u8         reserved_at_20[0x8];
118e29341fbSIlan Tayari 	u8         flash_select_admin[0x8];
119e29341fbSIlan Tayari 	u8         reserved_at_30[0x8];
120e29341fbSIlan Tayari 	u8         flash_select_oper[0x8];
121e29341fbSIlan Tayari 
122e29341fbSIlan Tayari 	u8         reserved_at_40[0x40];
123e29341fbSIlan Tayari };
124e29341fbSIlan Tayari 
125e29341fbSIlan Tayari enum {
126e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_CORRUPTED_DDR        = 0x1,
127e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_FLASH_TIMEOUT        = 0x2,
128e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_INTERNAL_LINK_ERROR  = 0x3,
129e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_WATCHDOG_FAILURE     = 0x4,
130e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_I2C_FAILURE          = 0x5,
131e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_IMAGE_CHANGED        = 0x6,
132e29341fbSIlan Tayari 	MLX5_FPGA_ERROR_EVENT_SYNDROME_TEMPERATURE_CRITICAL = 0x7,
133e29341fbSIlan Tayari };
134e29341fbSIlan Tayari 
135e29341fbSIlan Tayari struct mlx5_ifc_fpga_error_event_bits {
136e29341fbSIlan Tayari 	u8         reserved_at_0[0x40];
137e29341fbSIlan Tayari 
138e29341fbSIlan Tayari 	u8         reserved_at_40[0x18];
139e29341fbSIlan Tayari 	u8         syndrome[0x8];
140e29341fbSIlan Tayari 
141e29341fbSIlan Tayari 	u8         reserved_at_60[0x80];
142e29341fbSIlan Tayari };
143e29341fbSIlan Tayari 
144*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_state {
145*6062118dSIlan Tayari 	MLX5_FPGA_QPC_STATE_INIT    = 0x0,
146*6062118dSIlan Tayari 	MLX5_FPGA_QPC_STATE_ACTIVE  = 0x1,
147*6062118dSIlan Tayari 	MLX5_FPGA_QPC_STATE_ERROR   = 0x2,
148*6062118dSIlan Tayari };
149*6062118dSIlan Tayari 
150*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_type {
151*6062118dSIlan Tayari 	MLX5_FPGA_QPC_QP_TYPE_SHELL_QP    = 0x0,
152*6062118dSIlan Tayari 	MLX5_FPGA_QPC_QP_TYPE_SANDBOX_QP  = 0x1,
153*6062118dSIlan Tayari };
154*6062118dSIlan Tayari 
155*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_service_type {
156*6062118dSIlan Tayari 	MLX5_FPGA_QPC_ST_RC  = 0x0,
157*6062118dSIlan Tayari };
158*6062118dSIlan Tayari 
159*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits {
160*6062118dSIlan Tayari 	u8         state[0x4];
161*6062118dSIlan Tayari 	u8         reserved_at_4[0x1b];
162*6062118dSIlan Tayari 	u8         qp_type[0x1];
163*6062118dSIlan Tayari 
164*6062118dSIlan Tayari 	u8         reserved_at_20[0x4];
165*6062118dSIlan Tayari 	u8         st[0x4];
166*6062118dSIlan Tayari 	u8         reserved_at_28[0x10];
167*6062118dSIlan Tayari 	u8         traffic_class[0x8];
168*6062118dSIlan Tayari 
169*6062118dSIlan Tayari 	u8         ether_type[0x10];
170*6062118dSIlan Tayari 	u8         prio[0x3];
171*6062118dSIlan Tayari 	u8         dei[0x1];
172*6062118dSIlan Tayari 	u8         vid[0xc];
173*6062118dSIlan Tayari 
174*6062118dSIlan Tayari 	u8         reserved_at_60[0x20];
175*6062118dSIlan Tayari 
176*6062118dSIlan Tayari 	u8         reserved_at_80[0x8];
177*6062118dSIlan Tayari 	u8         next_rcv_psn[0x18];
178*6062118dSIlan Tayari 
179*6062118dSIlan Tayari 	u8         reserved_at_a0[0x8];
180*6062118dSIlan Tayari 	u8         next_send_psn[0x18];
181*6062118dSIlan Tayari 
182*6062118dSIlan Tayari 	u8         reserved_at_c0[0x10];
183*6062118dSIlan Tayari 	u8         pkey[0x10];
184*6062118dSIlan Tayari 
185*6062118dSIlan Tayari 	u8         reserved_at_e0[0x8];
186*6062118dSIlan Tayari 	u8         remote_qpn[0x18];
187*6062118dSIlan Tayari 
188*6062118dSIlan Tayari 	u8         reserved_at_100[0x15];
189*6062118dSIlan Tayari 	u8         rnr_retry[0x3];
190*6062118dSIlan Tayari 	u8         reserved_at_118[0x5];
191*6062118dSIlan Tayari 	u8         retry_count[0x3];
192*6062118dSIlan Tayari 
193*6062118dSIlan Tayari 	u8         reserved_at_120[0x20];
194*6062118dSIlan Tayari 
195*6062118dSIlan Tayari 	u8         reserved_at_140[0x10];
196*6062118dSIlan Tayari 	u8         remote_mac_47_32[0x10];
197*6062118dSIlan Tayari 
198*6062118dSIlan Tayari 	u8         remote_mac_31_0[0x20];
199*6062118dSIlan Tayari 
200*6062118dSIlan Tayari 	u8         remote_ip[16][0x8];
201*6062118dSIlan Tayari 
202*6062118dSIlan Tayari 	u8         reserved_at_200[0x40];
203*6062118dSIlan Tayari 
204*6062118dSIlan Tayari 	u8         reserved_at_240[0x10];
205*6062118dSIlan Tayari 	u8         fpga_mac_47_32[0x10];
206*6062118dSIlan Tayari 
207*6062118dSIlan Tayari 	u8         fpga_mac_31_0[0x20];
208*6062118dSIlan Tayari 
209*6062118dSIlan Tayari 	u8         fpga_ip[16][0x8];
210*6062118dSIlan Tayari };
211*6062118dSIlan Tayari 
212*6062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_in_bits {
213*6062118dSIlan Tayari 	u8         opcode[0x10];
214*6062118dSIlan Tayari 	u8         reserved_at_10[0x10];
215*6062118dSIlan Tayari 
216*6062118dSIlan Tayari 	u8         reserved_at_20[0x10];
217*6062118dSIlan Tayari 	u8         op_mod[0x10];
218*6062118dSIlan Tayari 
219*6062118dSIlan Tayari 	u8         reserved_at_40[0x40];
220*6062118dSIlan Tayari 
221*6062118dSIlan Tayari 	struct mlx5_ifc_fpga_qpc_bits fpga_qpc;
222*6062118dSIlan Tayari };
223*6062118dSIlan Tayari 
224*6062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_out_bits {
225*6062118dSIlan Tayari 	u8         status[0x8];
226*6062118dSIlan Tayari 	u8         reserved_at_8[0x18];
227*6062118dSIlan Tayari 
228*6062118dSIlan Tayari 	u8         syndrome[0x20];
229*6062118dSIlan Tayari 
230*6062118dSIlan Tayari 	u8         reserved_at_40[0x8];
231*6062118dSIlan Tayari 	u8         fpga_qpn[0x18];
232*6062118dSIlan Tayari 
233*6062118dSIlan Tayari 	u8         reserved_at_60[0x20];
234*6062118dSIlan Tayari 
235*6062118dSIlan Tayari 	struct mlx5_ifc_fpga_qpc_bits fpga_qpc;
236*6062118dSIlan Tayari };
237*6062118dSIlan Tayari 
238*6062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_in_bits {
239*6062118dSIlan Tayari 	u8         opcode[0x10];
240*6062118dSIlan Tayari 	u8         reserved_at_10[0x10];
241*6062118dSIlan Tayari 
242*6062118dSIlan Tayari 	u8         reserved_at_20[0x10];
243*6062118dSIlan Tayari 	u8         op_mod[0x10];
244*6062118dSIlan Tayari 
245*6062118dSIlan Tayari 	u8         reserved_at_40[0x8];
246*6062118dSIlan Tayari 	u8         fpga_qpn[0x18];
247*6062118dSIlan Tayari 
248*6062118dSIlan Tayari 	u8         field_select[0x20];
249*6062118dSIlan Tayari 
250*6062118dSIlan Tayari 	struct mlx5_ifc_fpga_qpc_bits fpga_qpc;
251*6062118dSIlan Tayari };
252*6062118dSIlan Tayari 
253*6062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_out_bits {
254*6062118dSIlan Tayari 	u8         status[0x8];
255*6062118dSIlan Tayari 	u8         reserved_at_8[0x18];
256*6062118dSIlan Tayari 
257*6062118dSIlan Tayari 	u8         syndrome[0x20];
258*6062118dSIlan Tayari 
259*6062118dSIlan Tayari 	u8         reserved_at_40[0x40];
260*6062118dSIlan Tayari };
261*6062118dSIlan Tayari 
262*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_in_bits {
263*6062118dSIlan Tayari 	u8         opcode[0x10];
264*6062118dSIlan Tayari 	u8         reserved_at_10[0x10];
265*6062118dSIlan Tayari 
266*6062118dSIlan Tayari 	u8         reserved_at_20[0x10];
267*6062118dSIlan Tayari 	u8         op_mod[0x10];
268*6062118dSIlan Tayari 
269*6062118dSIlan Tayari 	u8         reserved_at_40[0x8];
270*6062118dSIlan Tayari 	u8         fpga_qpn[0x18];
271*6062118dSIlan Tayari 
272*6062118dSIlan Tayari 	u8         reserved_at_60[0x20];
273*6062118dSIlan Tayari };
274*6062118dSIlan Tayari 
275*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_out_bits {
276*6062118dSIlan Tayari 	u8         status[0x8];
277*6062118dSIlan Tayari 	u8         reserved_at_8[0x18];
278*6062118dSIlan Tayari 
279*6062118dSIlan Tayari 	u8         syndrome[0x20];
280*6062118dSIlan Tayari 
281*6062118dSIlan Tayari 	u8         reserved_at_40[0x40];
282*6062118dSIlan Tayari 
283*6062118dSIlan Tayari 	struct mlx5_ifc_fpga_qpc_bits fpga_qpc;
284*6062118dSIlan Tayari };
285*6062118dSIlan Tayari 
286*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_in_bits {
287*6062118dSIlan Tayari 	u8         opcode[0x10];
288*6062118dSIlan Tayari 	u8         reserved_at_10[0x10];
289*6062118dSIlan Tayari 
290*6062118dSIlan Tayari 	u8         reserved_at_20[0x10];
291*6062118dSIlan Tayari 	u8         op_mod[0x10];
292*6062118dSIlan Tayari 
293*6062118dSIlan Tayari 	u8         clear[0x1];
294*6062118dSIlan Tayari 	u8         reserved_at_41[0x7];
295*6062118dSIlan Tayari 	u8         fpga_qpn[0x18];
296*6062118dSIlan Tayari 
297*6062118dSIlan Tayari 	u8         reserved_at_60[0x20];
298*6062118dSIlan Tayari };
299*6062118dSIlan Tayari 
300*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_out_bits {
301*6062118dSIlan Tayari 	u8         status[0x8];
302*6062118dSIlan Tayari 	u8         reserved_at_8[0x18];
303*6062118dSIlan Tayari 
304*6062118dSIlan Tayari 	u8         syndrome[0x20];
305*6062118dSIlan Tayari 
306*6062118dSIlan Tayari 	u8         reserved_at_40[0x40];
307*6062118dSIlan Tayari 
308*6062118dSIlan Tayari 	u8         rx_ack_packets[0x40];
309*6062118dSIlan Tayari 
310*6062118dSIlan Tayari 	u8         rx_send_packets[0x40];
311*6062118dSIlan Tayari 
312*6062118dSIlan Tayari 	u8         tx_ack_packets[0x40];
313*6062118dSIlan Tayari 
314*6062118dSIlan Tayari 	u8         tx_send_packets[0x40];
315*6062118dSIlan Tayari 
316*6062118dSIlan Tayari 	u8         rx_total_drop[0x40];
317*6062118dSIlan Tayari 
318*6062118dSIlan Tayari 	u8         reserved_at_1c0[0x1c0];
319*6062118dSIlan Tayari };
320*6062118dSIlan Tayari 
321*6062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_in_bits {
322*6062118dSIlan Tayari 	u8         opcode[0x10];
323*6062118dSIlan Tayari 	u8         reserved_at_10[0x10];
324*6062118dSIlan Tayari 
325*6062118dSIlan Tayari 	u8         reserved_at_20[0x10];
326*6062118dSIlan Tayari 	u8         op_mod[0x10];
327*6062118dSIlan Tayari 
328*6062118dSIlan Tayari 	u8         reserved_at_40[0x8];
329*6062118dSIlan Tayari 	u8         fpga_qpn[0x18];
330*6062118dSIlan Tayari 
331*6062118dSIlan Tayari 	u8         reserved_at_60[0x20];
332*6062118dSIlan Tayari };
333*6062118dSIlan Tayari 
334*6062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_out_bits {
335*6062118dSIlan Tayari 	u8         status[0x8];
336*6062118dSIlan Tayari 	u8         reserved_at_8[0x18];
337*6062118dSIlan Tayari 
338*6062118dSIlan Tayari 	u8         syndrome[0x20];
339*6062118dSIlan Tayari 
340*6062118dSIlan Tayari 	u8         reserved_at_40[0x40];
341*6062118dSIlan Tayari };
342*6062118dSIlan Tayari 
343e29341fbSIlan Tayari #endif /* MLX5_IFC_FPGA_H */
344