1 /*
2 * Copyright (c) 2017-2018 Cavium, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 *
27 * $FreeBSD$
28 *
29 */
30
31 #ifndef _DBG_FW_FUNCS_H
32 #define _DBG_FW_FUNCS_H
33 /**************************** Public Functions *******************************/
34
35 /**
36 * @brief ecore_dbg_set_bin_ptr - Sets a pointer to the binary data with debug
37 * arrays.
38 *
39 * @param bin_ptr - a pointer to the binary data with debug arrays.
40 */
41 enum dbg_status ecore_dbg_set_bin_ptr(const u8 * const bin_ptr);
42
43 /**
44 * @brief ecore_dbg_set_app_ver - Sets the version of the calling app.
45 *
46 * The application should call this function with the TOOLS_VERSION
47 * it compiles with. Must be called before all other debug functions.
48 *
49 * @return error if one of the following holds:
50 * - the specified app version is not supported
51 * Otherwise, returns ok.
52 */
53 enum dbg_status ecore_dbg_set_app_ver(u32 ver);
54
55 /**
56 * @brief ecore_dbg_get_fw_func_ver - Returns the FW func version.
57 *
58 * @return the FW func version.
59 */
60 u32 ecore_dbg_get_fw_func_ver(void);
61
62 /**
63 * @brief ecore_dbg_get_chip_id - Returns the FW func version.
64 *
65 * @param p_hwfn - HW device data
66 *
67 * @return the chip ID.
68 */
69 enum chip_ids ecore_dbg_get_chip_id(struct ecore_hwfn *p_hwfn);
70
71 /**
72 * @brief ecore_read_regs - Reads registers into a buffer (using GRC).
73 *
74 * @param p_hwfn - HW device data
75 * @param p_ptt - Ptt window used for writing the registers.
76 * @param buf - Destination buffer.
77 * @param addr - Source GRC address in dwords.
78 * @param len - Number of registers to read.
79 */
80 void ecore_read_regs(struct ecore_hwfn *p_hwfn,
81 struct ecore_ptt *p_ptt,
82 u32 *buf,
83 u32 addr,
84 u32 len);
85
86 /**
87 * @brief ecore_dbg_bus_reset - Resets the Debug block.
88 *
89 * After reset:
90 * - The last recording is erased.
91 * - Recording is directed to the internal buffer.
92 * - Wrap-around recording is selected.
93 * - All HW blocks are disabled.
94 * - All Storms are disabled and all SEM filters are cleared.
95 *
96 * @param p_hwfn - HW device data
97 * @param p_ptt - Ptt window used for writing the registers.
98 * @param one_shot_en - Enable/Disable one-shot recording. If disabled,
99 * wrap-around recording is used instead.
100 * @param force_hw_dwords - If set to 0, no. of HW/Storm dwords per cycle is
101 * chosen automatically based on the enabled inputs.
102 * Otherwise, no. of HW dwords per cycle is forced to
103 * the specified value. Valid values: 0/2/4/8.
104 * @param unify_inputs - If true, all recorded data is associated with a
105 * single input, as if all data was received from the
106 * same block. Otherwise, each data unit is associated
107 * with its original input.
108 * @param grc_input_en - Enable/Disable recording GRC input. If enabled, the
109 * GRC input is recorded to the lsb dword of a cycle.
110 *
111 * @return error if one of the following holds:
112 * - the version wasn't set
113 * - force_hw_dwords is invalid.
114 * Otherwise, returns ok.
115 */
116 enum dbg_status ecore_dbg_bus_reset(struct ecore_hwfn *p_hwfn,
117 struct ecore_ptt *p_ptt,
118 bool one_shot_en,
119 u8 force_hw_dwords,
120 bool unify_inputs,
121 bool grc_input_en);
122
123 /**
124 * @brief ecore_dbg_bus_set_pci_output - Directs debug output to a PCI buffer.
125 *
126 * @param p_hwfn - HW device data
127 * @param p_ptt - Ptt window used for writing the registers.
128 * @param buf_size_kb - Size of PCI buffer to allocate (in KB). Must be aligned
129 * to PCI request size.
130 *
131 * @return error if one of the following holds:
132 * - the Debug block wasn't reset since last recording
133 * - the version wasn't set
134 * - the output was already set
135 * - the PCI buffer size is not aligned to PCI packet size
136 * - the PCI buffer allocation failed
137 * Otherwise, returns ok.
138 */
139 enum dbg_status ecore_dbg_bus_set_pci_output(struct ecore_hwfn *p_hwfn,
140 struct ecore_ptt *p_ptt,
141 u16 buf_size_kb);
142
143 /**
144 * @brief ecore_dbg_bus_set_nw_output - Directs debug output to the network.
145 *
146 * @param p_hwfn - HW device data
147 * @param p_ptt - Ptt window used for writing the registers.
148 * @param port_id - Port ID to transmit the debug data on
149 * @param dest_addr_lo32 - Destination MAC address (for Eth header)
150 * @param dest_addr_hi16
151 * @param data_limit_size_kb - Data limit size in KB (valid only for one-shot)
152 * If set to 0, data limit won't be configured.
153 * @param send_to_other_engine -If true:
154 * 1) The NW output will be sent to the DBG block
155 * of the other engine.
156 * 2) port_id argument is ignored.
157 * 3) rcv_from_other_engine should be set to false
158 * The other engine DBG block should call this
159 * function with rcv_from_other_engine set to
160 * true.
161 * @param rcv_from_other_engine-If true:
162 * 1) the DBG block receives the NW output sent
163 * from the other engine DBG block, and sends
164 * it to a NW port in the current engine
165 * (according to port_id).
166 * 2) The src/dest addresses and eth_type
167 * arguments are ignored.
168 * 3) send_to_other_engine should be set to false.
169 * The other engine DBG block should call this
170 * function with send_to_other_engine set to
171 * true.
172 *
173 * @return error if one of the following holds:
174 * - the Debug block wasn't reset since last recording
175 * - the version wasn't set
176 * - the output was already set
177 * Otherwise, returns ok.
178 */
179 enum dbg_status ecore_dbg_bus_set_nw_output(struct ecore_hwfn *p_hwfn,
180 struct ecore_ptt *p_ptt,
181 u8 port_id,
182 u32 dest_addr_lo32,
183 u16 dest_addr_hi16,
184 u16 data_limit_size_kb,
185 bool send_to_other_engine,
186 bool rcv_from_other_engine);
187
188 /**
189 * @brief ecore_dbg_bus_enable_block - Enables recording of the specified block
190 *
191 * Each recording cycle contains 4 "units". If the recorded HW data requires up
192 * to 4 dwords per cycle, each unit is one dword (32 bits). Otherwise, each
193 * unit is 2 dwords (64 bits).
194 *
195 * @param p_hwfn - HW device data
196 * @param block - block to be enabled.
197 * @param line_num - debug line number to select.
198 * @param cycle_en - 4-bit value. If bit i is set, unit i is enabled.
199 * @param right_shift - number of units to right the debug data (0-3).
200 * @param force_valid - 4-bit value. If bit i is set, unit i is forced valid.
201 * @param force_frame - 4-bit value. If bit i is set, the frame bit of unit i
202 * is forced.
203 *
204 * @return error if one of the following holds:
205 * - the Debug block wasn't reset since last recording
206 * - the version wasn't set
207 * - block is not valid
208 * - block was already enabled
209 * - cycle_en, force_valid or force_frame are wider than 4 bits
210 * - right_shift is larger than 3
211 * - cycle unit 0 is enabled, but GRC or timestamp were also enabled.
212 * - Too many inputs were enabled.
213 * Otherwise, returns ok.
214 */
215 enum dbg_status ecore_dbg_bus_enable_block(struct ecore_hwfn *p_hwfn,
216 enum block_id block,
217 u8 line_num,
218 u8 cycle_en,
219 u8 right_shift,
220 u8 force_valid,
221 u8 force_frame);
222
223 /**
224 * @brief ecore_dbg_bus_enable_storm - Enables recording of the specified Storm
225 *
226 * @param p_hwfn - HW device data
227 * @param storm - Storm to be enabled.
228 * @param storm_mode- Storm mode
229 *
230 * @return error if one of the following holds:
231 * - the Debug block wasn't reset since last recording
232 * - the version wasn't set
233 * - the specified storm or mode is invalid
234 * - Storm was already enabled
235 * - only HW data can be recorded
236 * - Too many inputs were enabled.
237 * Otherwise, returns ok.
238 */
239 enum dbg_status ecore_dbg_bus_enable_storm(struct ecore_hwfn *p_hwfn,
240 enum dbg_storms storm,
241 enum dbg_bus_storm_modes storm_mode);
242
243 /**
244 * @brief ecore_dbg_bus_enable_timestamp - Enables timestamp recording.
245 *
246 * When enabled, the timestamp input is always recorded to the lsb dword of
247 * a cycle, with HW ID 0.
248 *
249 * @param p_hwfn - HW device data
250 * @param p_ptt - Ptt window used for writing the registers.
251 * @param valid_en - 3-bit value. The Timestamp will be recorded in a cycle if
252 * bit i is set and unit i+1 is valid.
253 * @param frame_en - 3-bit value. The Timestamp will be recorded in a cycle if
254 * bit i is set and unit i+1 has frame bit set.
255 * @param tick_len - timestamp tick length in cycles, minus 1. A value of 0
256 * means one cycle.
257 *
258 * @return error if one of the following holds:
259 * - the Debug block wasn't reset since last recording
260 * - the version wasn't set
261 * - valid_en or frame_en are wider than 4 bits
262 * - Both timestamp and GRC are enabled.
263 * Otherwise, returns ok.
264 */
265 enum dbg_status ecore_dbg_bus_enable_timestamp(struct ecore_hwfn *p_hwfn,
266 struct ecore_ptt *p_ptt,
267 u8 valid_en,
268 u8 frame_en,
269 u32 tick_len);
270
271 /**
272 * @brief ecore_dbg_bus_add_eid_range_sem_filter- Add Event ID range SEM filter
273 *
274 * @param p_hwfn - HW device data
275 * @param storm - Storm to be filtered.
276 * @param min_eid - minimal Event ID to filter on.
277 * @param max_eid - maximal Event ID to filter on.
278 *
279 * @return error if one of the following holds:
280 * - the specified Storm is invalid
281 * - the specified Storm wasn't enabled
282 * - the EID range is not valid
283 * Otherwise, returns ok.
284 */
285 enum dbg_status ecore_dbg_bus_add_eid_range_sem_filter(struct ecore_hwfn *p_hwfn,
286 enum dbg_storms storm,
287 u8 min_eid,
288 u8 max_eid);
289
290 /**
291 * @brief ecore_dbg_bus_add_eid_mask_sem_filter - Add Event ID mask SEM filter
292 *
293 * @param p_hwfn - HW device data
294 * @param storm - Storm to be filtered.
295 * @param eid_val - Event ID value.
296 * @param eid_mask - Event ID mask. 0's in the mask = don't care bits.
297 *
298 * @return error if one of the following holds:
299 * - the specified Storm is invalid
300 * - the specified Storm wasn't enabled
301 * Otherwise, returns ok.
302 */
303 enum dbg_status ecore_dbg_bus_add_eid_mask_sem_filter(struct ecore_hwfn *p_hwfn,
304 enum dbg_storms storm,
305 u8 eid_val,
306 u8 eid_mask);
307
308 /**
309 * @brief ecore_dbg_bus_add_cid_sem_filter - Adds a CID SEM filter.
310 *
311 * @param p_hwfn - HW device data
312 * @param storm - Storm to be filtered.
313 * @param cid - CID to filter on.
314 *
315 * @return error if one of the following holds:
316 * - the specified Storm is invalid
317 * - the specified Storm wasn't enabled
318 * Otherwise, returns ok.
319 */
320 enum dbg_status ecore_dbg_bus_add_cid_sem_filter(struct ecore_hwfn *p_hwfn,
321 enum dbg_storms storm,
322 u32 cid);
323
324 /**
325 * @brief ecore_dbg_bus_enable_filter - Enables the recording filter.
326 *
327 * A filter contains up to 4 constraints. The data is "filtered in" when the
328 * added constraints hold.
329 *
330 * @param p_hwfn - HW device data
331 * @param p_ptt - Ptt window used for writing the registers.
332 * @param block - block to filter on.
333 * @param const_msg_len - Constant message length (in cycles) to be used for
334 * message-based filter constraints. If set to 0,
335 * message length is based only on frame bit received
336 * from HW (no constant message length).
337 *
338 * @return error if one of the following holds:
339 * - the Debug block wasn't reset since last recording
340 * - the version wasn't set
341 * - the filter was already enabled
342 * - block is not valid or not enabled
343 * - more than 4 dwords are recorded per-cycle (forbids filters)
344 * Otherwise, returns ok.
345 */
346 enum dbg_status ecore_dbg_bus_enable_filter(struct ecore_hwfn *p_hwfn,
347 struct ecore_ptt *p_ptt,
348 enum block_id block,
349 u8 const_msg_len);
350
351 /**
352 * @brief ecore_dbg_bus_enable_trigger - Enables the recording trigger.
353 *
354 * A trigger contains up to 3 states, where each state contains up to
355 * 4 constraints. After the constraints of a state hold for a specified number
356 * of times, the DBG block moves to the next state. If there's no next state,
357 * the DBG block triggers.
358 *
359 * @param p_hwfn - HW device data
360 * @param p_ptt - Ptt window used for writing the registers.
361 * @param rec_pre_trigger - if true, recording starts before the trigger.
362 * if false, recording starts at the trigger.
363 * @param pre_chunks - max number of chunks to record before the
364 * trigger (1-47). If set to 0, recording starts
365 * from time 0. Ignored if rec_pre_trigger is
366 * false.
367 * @param rec_post_trigger - if true, recording ends after the trigger.
368 * if false, recording ends at the trigger.
369 * @param post_cycles - max number of cycles to record after the
370 * trigger (0x1-0xffffffff). If set to 0,
371 * recording ends only when stopped by the user.
372 * Ignored if rec_post_trigger is false.
373 * @param filter_pre_trigger - if true, data is filtered before the trigger.
374 * Ignored if the filter wasn't enabled.
375 * @param filter_post_trigger - if true, data is filtered after the trigger.
376 * Ignored if the filter wasn't enabled.
377 *
378 * @return error if one of the following holds:
379 * - the Debug block wasn't reset since last recording
380 * - the version wasn't set
381 * - the trigger was already enabled
382 * - more than 4 dwords are recorded per-cycle (forbids triggers)
383 * - pre_chunks is not in the range 0-47.
384 * Otherwise, returns ok.
385 */
386 enum dbg_status ecore_dbg_bus_enable_trigger(struct ecore_hwfn *p_hwfn,
387 struct ecore_ptt *p_ptt,
388 bool rec_pre_trigger,
389 u8 pre_chunks,
390 bool rec_post_trigger,
391 u32 post_cycles,
392 bool filter_pre_trigger,
393 bool filter_post_trigger);
394
395 /**
396 * @brief ecore_dbg_bus_add_trigger_state - Adds a trigger state.
397 *
398 * Up to 3 trigger states can be added, where each state contains up to
399 * 4 constraints. After the constraints of a state hold for the specified
400 * number of times, the DBG block moves to the next state. If there's no next
401 * state, the DBG block triggers.
402 *
403 * @param p_hwfn - HW device data
404 * @param p_ptt - Ptt window used for writing the registers.
405 * @param block - block to trigger on.
406 * @param const_msg_len - Constant message length (in cycles) to be used for
407 * message-based filter constraints. If set to 0,
408 * message length is based only on frame bit received
409 * from HW (no constant message length).
410 * @param count_to_next - The number of times the constraints of the state
411 * should hold before moving to the next state. Must be
412 * non-zero.
413 *
414 * @return error if one of the following holds:
415 * - The trigger wasn't enabled.
416 * - more than 3 trigger states were added
417 * - block is not valid or not enabled
418 * - count_to_next is 0
419 * Otherwise, returns ok.
420 */
421 enum dbg_status ecore_dbg_bus_add_trigger_state(struct ecore_hwfn *p_hwfn,
422 struct ecore_ptt *p_ptt,
423 enum block_id block,
424 u8 const_msg_len,
425 u16 count_to_next);
426
427 /**
428 * @brief ecore_dbg_bus_add_constraint - Adds a filter/trigger constraint.
429 *
430 * The constraint is added to a filter or trigger state, which ever was added
431 * last. The filter/trigger happens if both of the following hold:
432 * 1. All mandatory constraints are true.
433 * 2. At least one optional (non-mandatory) constraints is true.
434 *
435 * @param p_hwfn - HW device data
436 * @param p_ptt - Ptt window used for writing the registers.
437 * @param op - constraint operation
438 * @param data - 32-bit data to compare with the recorded
439 * data.
440 * @param data_mask - 32-bit mask for data comparison. If mask bit
441 * i is 1, data bit i is compared, otherwise
442 * it's ignored.
443 * For eq/ne operations: any mask can be used.
444 * For other operations: the mask must be
445 * non-zero, and the 1's in the mask must be
446 * continuous.
447 * @param compare_frame - indicates if the frame bit should be
448 * compared. Must be false for all operations
449 * other than eq/ne.
450 * @param frame_bit - frame bit to compare with the recorded data
451 * (0/1). ignored if compare_frame is false.
452 * @param cycle_offset - offset in cycles from the beginning of the
453 * message, where cycle = 4 dwords.
454 * @param dword_offset_in_cycle - offset in dwords from the beginning of the
455 * cycle (0-3).
456 * @param is_mandatory - indicates if this constraint is mandatory
457 * (true) or optional (false). The data is
458 * filtered-in if all mandatory constraints hold
459 * AND at least one optional constraint (if
460 * added) holds.
461 *
462 * @return error if one of the following holds:
463 * - a filter or trigger state weren't enabled
464 * - all 4 filter constraints were added already
465 * - the op string is invalid
466 * - the data mask is invalid.
467 * - frame bit is not 0/1.
468 * - cycle_offset and dword_offset are not in the range 0-3.
469 * - compare_frame is true and operation is not eq/ne.
470 * Otherwise, returns ok.
471 */
472 enum dbg_status ecore_dbg_bus_add_constraint(struct ecore_hwfn *p_hwfn,
473 struct ecore_ptt *p_ptt,
474 enum dbg_bus_constraint_ops constraint_op,
475 u32 data,
476 u32 data_mask,
477 bool compare_frame,
478 u8 frame_bit,
479 u8 cycle_offset,
480 u8 dword_offset_in_cycle,
481 bool is_mandatory);
482
483 /**
484 * @brief ecore_dbg_bus_start - Starts the recording.
485 *
486 * @param p_hwfn - HW device data
487 * @param p_ptt - Ptt window used for writing the registers.
488 *
489 * @return error if one of the following holds:
490 * - the Debug block wasn't reset since last recording
491 * - the version wasn't set
492 * Otherwise, returns ok.
493 */
494 enum dbg_status ecore_dbg_bus_start(struct ecore_hwfn *p_hwfn,
495 struct ecore_ptt *p_ptt);
496
497 /**
498 * @brief ecore_dbg_bus_stop - Stops the recording and flushes the internal
499 * buffer.
500 *
501 * @param p_hwfn - HW device data
502 * @param p_ptt - Ptt window used for writing the registers.
503 *
504 * @return error if a recording is not in progress, ok otherwise.
505 */
506 enum dbg_status ecore_dbg_bus_stop(struct ecore_hwfn *p_hwfn,
507 struct ecore_ptt *p_ptt);
508
509 /**
510 * @brief ecore_dbg_bus_get_dump_buf_size - Returns the required buffer size
511 * for Debug Bus recording.
512 *
513 * @param p_hwfn - HW device data
514 * @param p_ptt - Ptt window used for writing the registers.
515 * @param buf_size - OUT: the required size (in dwords) of the buffer for
516 * dumping the recorded Debug Bus data. If recording to the
517 * internal buffer, the size of the internal buffer is
518 * returned. If recording to PCI, the size of the PCI buffer
519 * is returned. Otherwise, 0 is returned.
520 *
521 * @return error if one of the following holds:
522 * - the version wasn't set
523 * Otherwise, returns ok.
524 */
525 enum dbg_status ecore_dbg_bus_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
526 struct ecore_ptt *p_ptt,
527 u32 *buf_size);
528
529 /**
530 * @brief ecore_dbg_bus_dump - Dumps the recorded Debug Bus data into the
531 * specified buffer.
532 *
533 * The dumped data starts with a header. If recording to NW, only a header is
534 * dumped. The dumped size is assigned to num_dumped_dwords.
535 *
536 * @param p_hwfn - HW device data
537 * @param p_ptt - Ptt window used for writing the registers.
538 * @param dump_buf - Pointer to copy the recorded data into.
539 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
540 * @param num_dumped_dwords - OUT: number of dumped dwords.
541 *
542 * @return error if one of the following holds:
543 * - a recording wasn't started/stopped
544 * - the specified dump buffer is too small
545 * Otherwise, returns ok.
546 */
547 enum dbg_status ecore_dbg_bus_dump(struct ecore_hwfn *p_hwfn,
548 struct ecore_ptt *p_ptt,
549 u32 *dump_buf,
550 u32 buf_size_in_dwords,
551 u32 *num_dumped_dwords);
552
553 /**
554 * @brief ecore_dbg_grc_config - Sets the value of a GRC parameter.
555 *
556 * @param p_hwfn - HW device data
557 * @param grc_param - GRC parameter
558 * @param val - Value to set.
559
560 * @return error if one of the following holds:
561 * - the version wasn't set
562 * - grc_param is invalid
563 * - val is outside the allowed boundaries
564 */
565 enum dbg_status ecore_dbg_grc_config(struct ecore_hwfn *p_hwfn,
566 enum dbg_grc_params grc_param,
567 u32 val);
568
569 /**
570 * @brief ecore_dbg_grc_set_params_default - Reverts all GRC parameters to their
571 * default value.
572 *
573 * @param p_hwfn - HW device data
574 */
575 void ecore_dbg_grc_set_params_default(struct ecore_hwfn *p_hwfn);
576
577 /**
578 * @brief ecore_dbg_grc_get_dump_buf_size - Returns the required buffer size
579 * for GRC Dump.
580 *
581 * @param p_hwfn - HW device data
582 * @param p_ptt - Ptt window used for writing the registers.
583 * @param buf_size - OUT: required buffer size (in dwords) for GRC Dump data.
584 *
585 * @return error if one of the following holds:
586 * - the version wasn't set
587 * Otherwise, returns ok.
588 */
589 enum dbg_status ecore_dbg_grc_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
590 struct ecore_ptt *p_ptt,
591 u32 *buf_size);
592
593 /**
594 * @brief ecore_dbg_grc_dump - Dumps GRC data into the specified buffer.
595 *
596 * @param p_hwfn - HW device data
597 * @param p_ptt - Ptt window used for writing the registers.
598 * @param dump_buf - Pointer to write the collected GRC data into.
599 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
600 * @param num_dumped_dwords - OUT: number of dumped dwords.
601 *
602 * @return error if one of the following holds:
603 * - the version wasn't set
604 * - the specified dump buffer is too small
605 * Otherwise, returns ok.
606 */
607 enum dbg_status ecore_dbg_grc_dump(struct ecore_hwfn *p_hwfn,
608 struct ecore_ptt *p_ptt,
609 u32 *dump_buf,
610 u32 buf_size_in_dwords,
611 u32 *num_dumped_dwords);
612
613 /**
614 * @brief ecore_dbg_idle_chk_get_dump_buf_size - Returns the required buffer
615 * size for idle check results.
616 *
617 * @param p_hwfn - HW device data
618 * @param p_ptt - Ptt window used for writing the registers.
619 * @param buf_size - OUT: required buffer size (in dwords) for idle check data.
620 *
621 * @return error if one of the following holds:
622 * - the version wasn't set
623 * Otherwise, returns ok.
624 */
625 enum dbg_status ecore_dbg_idle_chk_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
626 struct ecore_ptt *p_ptt,
627 u32 *buf_size);
628
629 /**
630 * @brief ecore_dbg_idle_chk_dump - Performs idle check and writes the results
631 * into the specified buffer.
632 *
633 * @param p_hwfn - HW device data
634 * @param p_ptt - Ptt window used for writing the registers.
635 * @param dump_buf - Pointer to write the idle check data into.
636 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
637 * @param num_dumped_dwords - OUT: number of dumped dwords.
638 *
639 * @return error if one of the following holds:
640 * - the version wasn't set
641 * - the specified buffer is too small
642 * Otherwise, returns ok.
643 */
644 enum dbg_status ecore_dbg_idle_chk_dump(struct ecore_hwfn *p_hwfn,
645 struct ecore_ptt *p_ptt,
646 u32 *dump_buf,
647 u32 buf_size_in_dwords,
648 u32 *num_dumped_dwords);
649
650 /**
651 * @brief ecore_dbg_mcp_trace_get_dump_buf_size - Returns the required buffer
652 * size for mcp trace results.
653 *
654 * @param p_hwfn - HW device data
655 * @param p_ptt - Ptt window used for writing the registers.
656 * @param buf_size - OUT: required buffer size (in dwords) for mcp trace data.
657 *
658 * @return error if one of the following holds:
659 * - the version wasn't set
660 * - the trace data in MCP scratchpad contain an invalid signature
661 * - the bundle ID in NVRAM is invalid
662 * - the trace meta data cannot be found (in NVRAM or image file)
663 * Otherwise, returns ok.
664 */
665 enum dbg_status ecore_dbg_mcp_trace_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
666 struct ecore_ptt *p_ptt,
667 u32 *buf_size);
668
669 /**
670 * @brief ecore_dbg_mcp_trace_dump - Performs mcp trace and writes the results
671 * into the specified buffer.
672 *
673 * @param p_hwfn - HW device data
674 * @param p_ptt - Ptt window used for writing the registers.
675 * @param dump_buf - Pointer to write the mcp trace data into.
676 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
677 * @param num_dumped_dwords - OUT: number of dumped dwords.
678 *
679 * @return error if one of the following holds:
680 * - the version wasn't set
681 * - the specified buffer is too small
682 * - the trace data in MCP scratchpad contain an invalid signature
683 * - the bundle ID in NVRAM is invalid
684 * - the trace meta data cannot be found (in NVRAM or image file)
685 * - the trace meta data cannot be read (from NVRAM or image file)
686 * Otherwise, returns ok.
687 */
688 enum dbg_status ecore_dbg_mcp_trace_dump(struct ecore_hwfn *p_hwfn,
689 struct ecore_ptt *p_ptt,
690 u32 *dump_buf,
691 u32 buf_size_in_dwords,
692 u32 *num_dumped_dwords);
693
694 /**
695 * @brief ecore_dbg_reg_fifo_get_dump_buf_size - Returns the required buffer
696 * size for grc trace fifo results.
697 *
698 * @param p_hwfn - HW device data
699 * @param p_ptt - Ptt window used for writing the registers.
700 * @param buf_size - OUT: required buffer size (in dwords) for reg fifo data.
701 *
702 * @return error if one of the following holds:
703 * - the version wasn't set
704 * Otherwise, returns ok.
705 */
706 enum dbg_status ecore_dbg_reg_fifo_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
707 struct ecore_ptt *p_ptt,
708 u32 *buf_size);
709
710 /**
711 * @brief ecore_dbg_reg_fifo_dump - Reads the reg fifo and writes the results
712 * into the specified buffer.
713 *
714 * @param p_hwfn - HW device data
715 * @param p_ptt - Ptt window used for writing the registers.
716 * @param dump_buf - Pointer to write the reg fifo data into.
717 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
718 * @param num_dumped_dwords - OUT: number of dumped dwords.
719 *
720 * @return error if one of the following holds:
721 * - the version wasn't set
722 * - the specified buffer is too small
723 * - DMAE transaction failed
724 * Otherwise, returns ok.
725 */
726 enum dbg_status ecore_dbg_reg_fifo_dump(struct ecore_hwfn *p_hwfn,
727 struct ecore_ptt *p_ptt,
728 u32 *dump_buf,
729 u32 buf_size_in_dwords,
730 u32 *num_dumped_dwords);
731
732 /**
733 * @brief ecore_dbg_igu_fifo_get_dump_buf_size - Returns the required buffer
734 * size for the IGU fifo results.
735 *
736 * @param p_hwfn - HW device data
737 * @param p_ptt - Ptt window used for writing the registers.
738 * @param buf_size - OUT: required buffer size (in dwords) for IGU fifo data.
739 *
740 * @return error if one of the following holds:
741 * - the version wasn't set
742 * Otherwise, returns ok.
743 */
744 enum dbg_status ecore_dbg_igu_fifo_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
745 struct ecore_ptt *p_ptt,
746 u32 *buf_size);
747
748 /**
749 * @brief ecore_dbg_igu_fifo_dump - Reads the IGU fifo and writes the results
750 * into the specified buffer.
751 *
752 * @param p_hwfn - HW device data
753 * @param p_ptt - Ptt window used for writing the registers.
754 * @param dump_buf - Pointer to write the IGU fifo data into.
755 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
756 * @param num_dumped_dwords - OUT: number of dumped dwords.
757 *
758 * @return error if one of the following holds:
759 * - the version wasn't set
760 * - the specified buffer is too small
761 * - DMAE transaction failed
762 * Otherwise, returns ok.
763 */
764 enum dbg_status ecore_dbg_igu_fifo_dump(struct ecore_hwfn *p_hwfn,
765 struct ecore_ptt *p_ptt,
766 u32 *dump_buf,
767 u32 buf_size_in_dwords,
768 u32 *num_dumped_dwords);
769
770 /**
771 * @brief ecore_dbg_protection_override_get_dump_buf_size - Return the required
772 * buffer size for protection override window results.
773 *
774 * @param p_hwfn - HW device data
775 * @param p_ptt - Ptt window used for writing the registers.
776 * @param buf_size - OUT: required buffer size (in dwords) for protection
777 * override data.
778 *
779 * @return error if one of the following holds:
780 * - the version wasn't set
781 * Otherwise, returns ok.
782 */
783 enum dbg_status ecore_dbg_protection_override_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
784 struct ecore_ptt *p_ptt,
785 u32 *buf_size);
786 /**
787 * @brief ecore_dbg_protection_override_dump - Reads protection override window
788 * entries and writes the results into the specified buffer.
789 *
790 * @param p_hwfn - HW device data
791 * @param p_ptt - Ptt window used for writing the registers.
792 * @param dump_buf - Pointer to write the protection override data
793 * into.
794 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
795 * @param num_dumped_dwords - OUT: number of dumped dwords.
796 *
797 * @return error if one of the following holds:
798 * - the version wasn't set
799 * - the specified buffer is too small
800 * - DMAE transaction failed
801 * Otherwise, returns ok.
802 */
803 enum dbg_status ecore_dbg_protection_override_dump(struct ecore_hwfn *p_hwfn,
804 struct ecore_ptt *p_ptt,
805 u32 *dump_buf,
806 u32 buf_size_in_dwords,
807 u32 *num_dumped_dwords);
808
809 /**
810 * @brief ecore_dbg_fw_asserts_get_dump_buf_size - Returns the required buffer
811 * size for FW Asserts results.
812 *
813 * @param p_hwfn - HW device data
814 * @param p_ptt - Ptt window used for writing the registers.
815 * @param buf_size - OUT: required buffer size (in dwords) for FW Asserts data.
816 *
817 * @return error if one of the following holds:
818 * - the version wasn't set
819 * Otherwise, returns ok.
820 */
821 enum dbg_status ecore_dbg_fw_asserts_get_dump_buf_size(struct ecore_hwfn *p_hwfn,
822 struct ecore_ptt *p_ptt,
823 u32 *buf_size);
824
825 /**
826 * @brief ecore_dbg_fw_asserts_dump - Reads the FW Asserts and writes the
827 * results into the specified buffer.
828 *
829 * @param p_hwfn - HW device data
830 * @param p_ptt - Ptt window used for writing the registers.
831 * @param dump_buf - Pointer to write the FW Asserts data into.
832 * @param buf_size_in_dwords - Size of the specified buffer in dwords.
833 * @param num_dumped_dwords - OUT: number of dumped dwords.
834 *
835 * @return error if one of the following holds:
836 * - the version wasn't set
837 * - the specified buffer is too small
838 * Otherwise, returns ok.
839 */
840 enum dbg_status ecore_dbg_fw_asserts_dump(struct ecore_hwfn *p_hwfn,
841 struct ecore_ptt *p_ptt,
842 u32 *dump_buf,
843 u32 buf_size_in_dwords,
844 u32 *num_dumped_dwords);
845
846 /**
847 * @brief ecore_dbg_read_attn - Reads the attention registers of the specified
848 * block and type, and writes the results into the specified buffer.
849 *
850 * @param p_hwfn - HW device data
851 * @param p_ptt - Ptt window used for writing the registers.
852 * @param block - Block ID.
853 * @param attn_type - Attention type.
854 * @param clear_status - Indicates if the attention status should be cleared.
855 * @param results - OUT: Pointer to write the read results into
856 *
857 * @return error if one of the following holds:
858 * - the version wasn't set
859 * Otherwise, returns ok.
860 */
861 enum dbg_status ecore_dbg_read_attn(struct ecore_hwfn *p_hwfn,
862 struct ecore_ptt *p_ptt,
863 enum block_id block,
864 enum dbg_attn_type attn_type,
865 bool clear_status,
866 struct dbg_attn_block_result *results);
867
868 /**
869 * @brief ecore_dbg_print_attn - Prints attention registers values in the
870 * specified results struct.
871 *
872 * @param p_hwfn - HW device data
873 * @param results - Pointer to the attention read results
874 *
875 * @return error if one of the following holds:
876 * - the version wasn't set
877 * Otherwise, returns ok.
878 */
879 enum dbg_status ecore_dbg_print_attn(struct ecore_hwfn *p_hwfn,
880 struct dbg_attn_block_result *results);
881
882 /**
883 * @brief ecore_is_block_in_reset - Returns true if the specified block is in
884 * reset, false otherwise.
885 *
886 * @param p_hwfn - HW device data
887 * @param p_ptt - Ptt window used for writing the registers.
888 * @param block - Block ID.
889 *
890 * @return true if the specified block is in reset, false otherwise.
891 */
892 bool ecore_is_block_in_reset(struct ecore_hwfn *p_hwfn,
893 struct ecore_ptt *p_ptt,
894 enum block_id block);
895
896 #endif
Cache object: 9e4dbfeea7da7756b8687a688f7d0b14
|