1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2018 by Square, Inc. *
5 * Steven Stallion <stallion@squareup.com> *
6 ***************************************************************************/
8 #ifndef OPENOCD_TARGET_ESIRISC_TRACE_H
9 #define OPENOCD_TARGET_ESIRISC_TRACE_H
11 #include <helper/command.h>
12 #include <helper/types.h>
13 #include <target/target.h>
15 enum esirisc_trace_delay
{
16 ESIRISC_TRACE_DELAY_NONE
,
17 ESIRISC_TRACE_DELAY_START
,
18 ESIRISC_TRACE_DELAY_STOP
,
19 ESIRISC_TRACE_DELAY_BOTH
,
22 enum esirisc_trace_format
{
23 ESIRISC_TRACE_FORMAT_FULL
,
24 ESIRISC_TRACE_FORMAT_BRANCH
,
25 ESIRISC_TRACE_FORMAT_ICACHE
,
28 enum esirisc_trace_id
{
29 ESIRISC_TRACE_ID_EXECUTE
,
30 ESIRISC_TRACE_ID_STALL
,
31 ESIRISC_TRACE_ID_BRANCH
,
32 ESIRISC_TRACE_ID_EXTENDED
,
35 enum esirisc_trace_ext_id
{
36 ESIRISC_TRACE_EXT_ID_EXCEPTION
= 1,
37 ESIRISC_TRACE_EXT_ID_ERET
,
38 ESIRISC_TRACE_EXT_ID_STOP
,
39 ESIRISC_TRACE_EXT_ID_WAIT
,
40 ESIRISC_TRACE_EXT_ID_MULTICYCLE
,
41 ESIRISC_TRACE_EXT_ID_COUNT
,
42 ESIRISC_TRACE_EXT_ID_PC
,
43 ESIRISC_TRACE_EXT_ID_INDIRECT
,
44 ESIRISC_TRACE_EXT_ID_END
,
45 ESIRISC_TRACE_EXT_ID_END_PC
,
48 enum esirisc_trace_trigger
{
49 ESIRISC_TRACE_TRIGGER_NONE
,
50 ESIRISC_TRACE_TRIGGER_PC
,
51 ESIRISC_TRACE_TRIGGER_LOAD
,
52 ESIRISC_TRACE_TRIGGER_STORE
,
53 ESIRISC_TRACE_TRIGGER_EXCEPTION
,
54 ESIRISC_TRACE_TRIGGER_ERET
,
55 ESIRISC_TRACE_TRIGGER_WAIT
,
56 ESIRISC_TRACE_TRIGGER_STOP
,
57 ESIRISC_TRACE_TRIGGER_HIGH
,
58 ESIRISC_TRACE_TRIGGER_LOW
,
61 struct esirisc_trace
{
62 target_addr_t buffer_start
;
63 target_addr_t buffer_end
;
67 enum esirisc_trace_format format
;
70 enum esirisc_trace_trigger start_trigger
;
74 enum esirisc_trace_trigger stop_trigger
;
78 enum esirisc_trace_delay delay
;
79 uint32_t delay_cycles
;
82 extern const struct command_registration esirisc_trace_command_handlers
[];
84 static inline uint32_t esirisc_trace_buffer_size(struct esirisc_trace
*trace_info
)
86 return trace_info
->buffer_end
- trace_info
->buffer_start
;
89 static inline bool esirisc_trace_is_fifo(struct esirisc_trace
*trace_info
)
91 return trace_info
->buffer_start
== trace_info
->buffer_end
;
94 #endif /* OPENOCD_TARGET_ESIRISC_TRACE_H */