New upstream version 18.08
[deb_dpdk.git] / drivers / net / qede / base / ecore_hsi_init_tool.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2016 - 2018 Cavium Inc.
3  * All rights reserved.
4  * www.cavium.com
5  */
6
7 #ifndef __ECORE_HSI_INIT_TOOL__
8 #define __ECORE_HSI_INIT_TOOL__
9 /**************************************/
10 /* Init Tool HSI constants and macros */
11 /**************************************/
12
13 /* Width of GRC address in bits (addresses are specified in dwords) */
14 #define GRC_ADDR_BITS                   23
15 #define MAX_GRC_ADDR                    ((1 << GRC_ADDR_BITS) - 1)
16
17 /* indicates an init that should be applied to any phase ID */
18 #define ANY_PHASE_ID                    0xffff
19
20 /* Max size in dwords of a zipped array */
21 #define MAX_ZIPPED_SIZE                 8192
22
23 enum chip_ids {
24         CHIP_BB,
25         CHIP_K2,
26         CHIP_E5,
27         MAX_CHIP_IDS
28 };
29
30
31 /*
32  * Binary buffer header
33  */
34 struct bin_buffer_hdr {
35 /* buffer offset in bytes from the beginning of the binary file */
36         u32 offset;
37         u32 length /* buffer length in bytes */;
38 };
39
40
41 /*
42  * binary init buffer types
43  */
44 enum bin_init_buffer_type {
45         BIN_BUF_INIT_FW_VER_INFO /* fw_ver_info struct */,
46         BIN_BUF_INIT_CMD /* init commands */,
47         BIN_BUF_INIT_VAL /* init data */,
48         BIN_BUF_INIT_MODE_TREE /* init modes tree */,
49         BIN_BUF_INIT_IRO /* internal RAM offsets */,
50         MAX_BIN_INIT_BUFFER_TYPE
51 };
52
53
54 /*
55  * init array header: raw
56  */
57 struct init_array_raw_hdr {
58         u32 data;
59 /* Init array type, from init_array_types enum */
60 #define INIT_ARRAY_RAW_HDR_TYPE_MASK    0xF
61 #define INIT_ARRAY_RAW_HDR_TYPE_SHIFT   0
62 /* init array params */
63 #define INIT_ARRAY_RAW_HDR_PARAMS_MASK  0xFFFFFFF
64 #define INIT_ARRAY_RAW_HDR_PARAMS_SHIFT 4
65 };
66
67 /*
68  * init array header: standard
69  */
70 struct init_array_standard_hdr {
71         u32 data;
72 /* Init array type, from init_array_types enum */
73 #define INIT_ARRAY_STANDARD_HDR_TYPE_MASK  0xF
74 #define INIT_ARRAY_STANDARD_HDR_TYPE_SHIFT 0
75 /* Init array size (in dwords) */
76 #define INIT_ARRAY_STANDARD_HDR_SIZE_MASK  0xFFFFFFF
77 #define INIT_ARRAY_STANDARD_HDR_SIZE_SHIFT 4
78 };
79
80 /*
81  * init array header: zipped
82  */
83 struct init_array_zipped_hdr {
84         u32 data;
85 /* Init array type, from init_array_types enum */
86 #define INIT_ARRAY_ZIPPED_HDR_TYPE_MASK         0xF
87 #define INIT_ARRAY_ZIPPED_HDR_TYPE_SHIFT        0
88 /* Init array zipped size (in bytes) */
89 #define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_MASK  0xFFFFFFF
90 #define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_SHIFT 4
91 };
92
93 /*
94  * init array header: pattern
95  */
96 struct init_array_pattern_hdr {
97         u32 data;
98 /* Init array type, from init_array_types enum */
99 #define INIT_ARRAY_PATTERN_HDR_TYPE_MASK          0xF
100 #define INIT_ARRAY_PATTERN_HDR_TYPE_SHIFT         0
101 /* pattern size in dword */
102 #define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_MASK  0xF
103 #define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_SHIFT 4
104 /* pattern repetitions */
105 #define INIT_ARRAY_PATTERN_HDR_REPETITIONS_MASK   0xFFFFFF
106 #define INIT_ARRAY_PATTERN_HDR_REPETITIONS_SHIFT  8
107 };
108
109 /*
110  * init array header union
111  */
112 union init_array_hdr {
113         struct init_array_raw_hdr raw /* raw init array header */;
114 /* standard init array header */
115         struct init_array_standard_hdr standard;
116         struct init_array_zipped_hdr zipped /* zipped init array header */;
117         struct init_array_pattern_hdr pattern /* pattern init array header */;
118 };
119
120
121 enum init_modes {
122         MODE_BB_A0_DEPRECATED,
123         MODE_BB,
124         MODE_K2,
125         MODE_ASIC,
126         MODE_EMUL_REDUCED,
127         MODE_EMUL_FULL,
128         MODE_FPGA,
129         MODE_CHIPSIM,
130         MODE_SF,
131         MODE_MF_SD,
132         MODE_MF_SI,
133         MODE_PORTS_PER_ENG_1,
134         MODE_PORTS_PER_ENG_2,
135         MODE_PORTS_PER_ENG_4,
136         MODE_100G,
137         MODE_E5,
138         MAX_INIT_MODES
139 };
140
141
142 enum init_phases {
143         PHASE_ENGINE,
144         PHASE_PORT,
145         PHASE_PF,
146         PHASE_VF,
147         PHASE_QM_PF,
148         MAX_INIT_PHASES
149 };
150
151
152 enum init_split_types {
153         SPLIT_TYPE_NONE,
154         SPLIT_TYPE_PORT,
155         SPLIT_TYPE_PF,
156         SPLIT_TYPE_PORT_PF,
157         SPLIT_TYPE_VF,
158         MAX_INIT_SPLIT_TYPES
159 };
160
161
162 /*
163  * init array types
164  */
165 enum init_array_types {
166         INIT_ARR_STANDARD /* standard init array */,
167         INIT_ARR_ZIPPED /* zipped init array */,
168         INIT_ARR_PATTERN /* a repeated pattern */,
169         MAX_INIT_ARRAY_TYPES
170 };
171
172
173
174 /*
175  * init operation: callback
176  */
177 struct init_callback_op {
178         u32 op_data;
179 /* Init operation, from init_op_types enum */
180 #define INIT_CALLBACK_OP_OP_MASK        0xF
181 #define INIT_CALLBACK_OP_OP_SHIFT       0
182 #define INIT_CALLBACK_OP_RESERVED_MASK  0xFFFFFFF
183 #define INIT_CALLBACK_OP_RESERVED_SHIFT 4
184         u16 callback_id /* Callback ID */;
185         u16 block_id /* Blocks ID */;
186 };
187
188
189 /*
190  * init operation: delay
191  */
192 struct init_delay_op {
193         u32 op_data;
194 /* Init operation, from init_op_types enum */
195 #define INIT_DELAY_OP_OP_MASK        0xF
196 #define INIT_DELAY_OP_OP_SHIFT       0
197 #define INIT_DELAY_OP_RESERVED_MASK  0xFFFFFFF
198 #define INIT_DELAY_OP_RESERVED_SHIFT 4
199         __le32 delay /* delay in us */;
200 };
201
202
203 /*
204  * init operation: if_mode
205  */
206 struct init_if_mode_op {
207         u32 op_data;
208 /* Init operation, from init_op_types enum */
209 #define INIT_IF_MODE_OP_OP_MASK          0xF
210 #define INIT_IF_MODE_OP_OP_SHIFT         0
211 #define INIT_IF_MODE_OP_RESERVED1_MASK   0xFFF
212 #define INIT_IF_MODE_OP_RESERVED1_SHIFT  4
213 /* Commands to skip if the modes dont match */
214 #define INIT_IF_MODE_OP_CMD_OFFSET_MASK  0xFFFF
215 #define INIT_IF_MODE_OP_CMD_OFFSET_SHIFT 16
216         u16 reserved2;
217         u16 modes_buf_offset /* offset (in bytes) in modes expression buffer */;
218 };
219
220
221 /*
222  * init operation: if_phase
223  */
224 struct init_if_phase_op {
225         u32 op_data;
226 /* Init operation, from init_op_types enum */
227 #define INIT_IF_PHASE_OP_OP_MASK           0xF
228 #define INIT_IF_PHASE_OP_OP_SHIFT          0
229 /* Indicates if DMAE is enabled in this phase */
230 #define INIT_IF_PHASE_OP_DMAE_ENABLE_MASK  0x1
231 #define INIT_IF_PHASE_OP_DMAE_ENABLE_SHIFT 4
232 #define INIT_IF_PHASE_OP_RESERVED1_MASK    0x7FF
233 #define INIT_IF_PHASE_OP_RESERVED1_SHIFT   5
234 /* Commands to skip if the phases dont match */
235 #define INIT_IF_PHASE_OP_CMD_OFFSET_MASK   0xFFFF
236 #define INIT_IF_PHASE_OP_CMD_OFFSET_SHIFT  16
237         u32 phase_data;
238 #define INIT_IF_PHASE_OP_PHASE_MASK        0xFF /* Init phase */
239 #define INIT_IF_PHASE_OP_PHASE_SHIFT       0
240 #define INIT_IF_PHASE_OP_RESERVED2_MASK    0xFF
241 #define INIT_IF_PHASE_OP_RESERVED2_SHIFT   8
242 #define INIT_IF_PHASE_OP_PHASE_ID_MASK     0xFFFF /* Init phase ID */
243 #define INIT_IF_PHASE_OP_PHASE_ID_SHIFT    16
244 };
245
246
247 /*
248  * init mode operators
249  */
250 enum init_mode_ops {
251         INIT_MODE_OP_NOT /* init mode not operator */,
252         INIT_MODE_OP_OR /* init mode or operator */,
253         INIT_MODE_OP_AND /* init mode and operator */,
254         MAX_INIT_MODE_OPS
255 };
256
257
258 /*
259  * init operation: raw
260  */
261 struct init_raw_op {
262         u32 op_data;
263 /* Init operation, from init_op_types enum */
264 #define INIT_RAW_OP_OP_MASK      0xF
265 #define INIT_RAW_OP_OP_SHIFT     0
266 #define INIT_RAW_OP_PARAM1_MASK  0xFFFFFFF /* init param 1 */
267 #define INIT_RAW_OP_PARAM1_SHIFT 4
268         u32 param2 /* Init param 2 */;
269 };
270
271 /*
272  * init array params
273  */
274 struct init_op_array_params {
275         u16 size /* array size in dwords */;
276         u16 offset /* array start offset in dwords */;
277 };
278
279 /*
280  * Write init operation arguments
281  */
282 union init_write_args {
283 /* value to write, used when init source is INIT_SRC_INLINE */
284         u32 inline_val;
285 /* number of zeros to write, used when init source is INIT_SRC_ZEROS */
286         u32 zeros_count;
287 /* array offset to write, used when init source is INIT_SRC_ARRAY */
288         u32 array_offset;
289 /* runtime array params to write, used when init source is INIT_SRC_RUNTIME */
290         struct init_op_array_params runtime;
291 };
292
293 /*
294  * init operation: write
295  */
296 struct init_write_op {
297         u32 data;
298 /* init operation, from init_op_types enum */
299 #define INIT_WRITE_OP_OP_MASK        0xF
300 #define INIT_WRITE_OP_OP_SHIFT       0
301 /* init source type, taken from init_source_types enum */
302 #define INIT_WRITE_OP_SOURCE_MASK    0x7
303 #define INIT_WRITE_OP_SOURCE_SHIFT   4
304 #define INIT_WRITE_OP_RESERVED_MASK  0x1
305 #define INIT_WRITE_OP_RESERVED_SHIFT 7
306 /* indicates if the register is wide-bus */
307 #define INIT_WRITE_OP_WIDE_BUS_MASK  0x1
308 #define INIT_WRITE_OP_WIDE_BUS_SHIFT 8
309 /* internal (absolute) GRC address, in dwords */
310 #define INIT_WRITE_OP_ADDRESS_MASK   0x7FFFFF
311 #define INIT_WRITE_OP_ADDRESS_SHIFT  9
312         union init_write_args args /* Write init operation arguments */;
313 };
314
315 /*
316  * init operation: read
317  */
318 struct init_read_op {
319         u32 op_data;
320 /* init operation, from init_op_types enum */
321 #define INIT_READ_OP_OP_MASK         0xF
322 #define INIT_READ_OP_OP_SHIFT        0
323 /* polling type, from init_poll_types enum */
324 #define INIT_READ_OP_POLL_TYPE_MASK  0xF
325 #define INIT_READ_OP_POLL_TYPE_SHIFT 4
326 #define INIT_READ_OP_RESERVED_MASK   0x1
327 #define INIT_READ_OP_RESERVED_SHIFT  8
328 /* internal (absolute) GRC address, in dwords */
329 #define INIT_READ_OP_ADDRESS_MASK    0x7FFFFF
330 #define INIT_READ_OP_ADDRESS_SHIFT   9
331 /* expected polling value, used only when polling is done */
332         u32 expected_val;
333 };
334
335 /*
336  * Init operations union
337  */
338 union init_op {
339         struct init_raw_op raw /* raw init operation */;
340         struct init_write_op write /* write init operation */;
341         struct init_read_op read /* read init operation */;
342         struct init_if_mode_op if_mode /* if_mode init operation */;
343         struct init_if_phase_op if_phase /* if_phase init operation */;
344         struct init_callback_op callback /* callback init operation */;
345         struct init_delay_op delay /* delay init operation */;
346 };
347
348
349
350 /*
351  * Init command operation types
352  */
353 enum init_op_types {
354         INIT_OP_READ /* GRC read init command */,
355         INIT_OP_WRITE /* GRC write init command */,
356 /* Skip init commands if the init modes expression doesn't match */
357         INIT_OP_IF_MODE,
358 /* Skip init commands if the init phase doesn't match */
359         INIT_OP_IF_PHASE,
360         INIT_OP_DELAY /* delay init command */,
361         INIT_OP_CALLBACK /* callback init command */,
362         MAX_INIT_OP_TYPES
363 };
364
365
366 /*
367  * init polling types
368  */
369 enum init_poll_types {
370         INIT_POLL_NONE /* No polling */,
371         INIT_POLL_EQ /* init value is included in the init command */,
372         INIT_POLL_OR /* init value is all zeros */,
373         INIT_POLL_AND /* init value is an array of values */,
374         MAX_INIT_POLL_TYPES
375 };
376
377
378
379
380 /*
381  * init source types
382  */
383 enum init_source_types {
384         INIT_SRC_INLINE /* init value is included in the init command */,
385         INIT_SRC_ZEROS /* init value is all zeros */,
386         INIT_SRC_ARRAY /* init value is an array of values */,
387         INIT_SRC_RUNTIME /* init value is provided during runtime */,
388         MAX_INIT_SOURCE_TYPES
389 };
390
391
392
393
394 /*
395  * Internal RAM Offsets macro data
396  */
397 struct iro {
398         u32 base /* RAM field offset */;
399         u16 m1 /* multiplier 1 */;
400         u16 m2 /* multiplier 2 */;
401         u16 m3 /* multiplier 3 */;
402         u16 size /* RAM field size */;
403 };
404
405 #endif /* __ECORE_HSI_INIT_TOOL__ */