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 
897 #endif
898