1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef __CSS_TRACE_H_
17#define __CSS_TRACE_H_
18
19#include <type_support.h>
20#include "sh_css_internal.h"
21
22
23
24
25
26
27struct trace_item_t {
28 u8 major;
29 u8 minor;
30 u16 counter;
31};
32
33#define MAX_SCRATCH_DATA 4
34#define MAX_CMD_DATA 2
35
36
37struct trace_header_t {
38
39 u8 version;
40 u8 max_threads;
41 u16 max_tracer_points;
42
43
44 u32 command;
45
46 u32 data[MAX_CMD_DATA];
47
48
49 u32 debug_ptr_signature;
50 u32 debug_ptr_value;
51
52 u8 thr_status_byte[SH_CSS_MAX_SP_THREADS];
53 u16 thr_status_word[SH_CSS_MAX_SP_THREADS];
54 u32 thr_status_dword[SH_CSS_MAX_SP_THREADS];
55 u32 scratch_debug[MAX_SCRATCH_DATA];
56};
57
58
59#define HDR_HDR_OFFSET 0
60#define HDR_COMMAND_OFFSET offsetof(struct trace_header_t, command)
61#define HDR_DATA_OFFSET offsetof(struct trace_header_t, data)
62#define HDR_DEBUG_SIGNATURE_OFFSET offsetof(struct trace_header_t, debug_ptr_signature)
63#define HDR_DEBUG_POINTER_OFFSET offsetof(struct trace_header_t, debug_ptr_value)
64#define HDR_STATUS_OFFSET offsetof(struct trace_header_t, thr_status_byte)
65#define HDR_STATUS_OFFSET_BYTE offsetof(struct trace_header_t, thr_status_byte)
66#define HDR_STATUS_OFFSET_WORD offsetof(struct trace_header_t, thr_status_word)
67#define HDR_STATUS_OFFSET_DWORD offsetof(struct trace_header_t, thr_status_dword)
68#define HDR_STATUS_OFFSET_SCRATCH offsetof(struct trace_header_t, scratch_debug)
69
70
71
72
73
74
75
76
77#define TRACER_VER 4
78
79#define TRACE_BUFF_ADDR 0xA000
80#define TRACE_BUFF_SIZE 0x1000
81
82#define TRACE_ENABLE_SP0 0
83#define TRACE_ENABLE_SP1 0
84#define TRACE_ENABLE_ISP 0
85
86enum TRACE_CORE_ID {
87 TRACE_SP0_ID,
88 TRACE_SP1_ID,
89 TRACE_ISP_ID
90};
91
92
93enum TRACE_DUMP_FORMAT {
94 TRACE_DUMP_FORMAT_POINT_NO_TID,
95 TRACE_DUMP_FORMAT_VALUE24,
96 TRACE_DUMP_FORMAT_VALUE24_TIMING,
97 TRACE_DUMP_FORMAT_VALUE24_TIMING_DELTA,
98 TRACE_DUMP_FORMAT_POINT
99};
100
101
102#if (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 3)
103
104#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 4)
105#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 4)
106#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2)
107#elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 2)
108#if TRACE_ENABLE_SP0
109#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 2)
110#else
111#define TRACE_SP0_SIZE (0)
112#endif
113#if TRACE_ENABLE_SP1
114#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 2)
115#else
116#define TRACE_SP1_SIZE (0)
117#endif
118#if TRACE_ENABLE_ISP
119#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2)
120#else
121#define TRACE_ISP_SIZE (0)
122#endif
123#elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 1)
124#if TRACE_ENABLE_SP0
125#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE)
126#else
127#define TRACE_SP0_SIZE (0)
128#endif
129#if TRACE_ENABLE_SP1
130#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE)
131#else
132#define TRACE_SP1_SIZE (0)
133#endif
134#if TRACE_ENABLE_ISP
135#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE)
136#else
137#define TRACE_ISP_SIZE (0)
138#endif
139#else
140#define TRACE_SP0_SIZE (0)
141#define TRACE_SP1_SIZE (0)
142#define TRACE_ISP_SIZE (0)
143#endif
144
145#define TRACE_SP0_ADDR (TRACE_BUFF_ADDR)
146#define TRACE_SP1_ADDR (TRACE_SP0_ADDR + TRACE_SP0_SIZE)
147#define TRACE_ISP_ADDR (TRACE_SP1_ADDR + TRACE_SP1_SIZE)
148
149
150#if (TRACE_BUFF_SIZE < TRACE_SP0_SIZE + TRACE_SP1_SIZE + TRACE_ISP_SIZE)
151#error trace sizes are not divided correctly and are above limit
152#endif
153
154#define TRACE_SP0_HEADER_ADDR (TRACE_SP0_ADDR)
155#define TRACE_SP0_HEADER_SIZE (sizeof(struct trace_header_t))
156#define TRACE_SP0_ITEM_SIZE (sizeof(struct trace_item_t))
157#define TRACE_SP0_DATA_ADDR (TRACE_SP0_HEADER_ADDR + TRACE_SP0_HEADER_SIZE)
158#define TRACE_SP0_DATA_SIZE (TRACE_SP0_SIZE - TRACE_SP0_HEADER_SIZE)
159#define TRACE_SP0_MAX_POINTS (TRACE_SP0_DATA_SIZE / TRACE_SP0_ITEM_SIZE)
160
161#define TRACE_SP1_HEADER_ADDR (TRACE_SP1_ADDR)
162#define TRACE_SP1_HEADER_SIZE (sizeof(struct trace_header_t))
163#define TRACE_SP1_ITEM_SIZE (sizeof(struct trace_item_t))
164#define TRACE_SP1_DATA_ADDR (TRACE_SP1_HEADER_ADDR + TRACE_SP1_HEADER_SIZE)
165#define TRACE_SP1_DATA_SIZE (TRACE_SP1_SIZE - TRACE_SP1_HEADER_SIZE)
166#define TRACE_SP1_MAX_POINTS (TRACE_SP1_DATA_SIZE / TRACE_SP1_ITEM_SIZE)
167
168#define TRACE_ISP_HEADER_ADDR (TRACE_ISP_ADDR)
169#define TRACE_ISP_HEADER_SIZE (sizeof(struct trace_header_t))
170#define TRACE_ISP_ITEM_SIZE (sizeof(struct trace_item_t))
171#define TRACE_ISP_DATA_ADDR (TRACE_ISP_HEADER_ADDR + TRACE_ISP_HEADER_SIZE)
172#define TRACE_ISP_DATA_SIZE (TRACE_ISP_SIZE - TRACE_ISP_HEADER_SIZE)
173#define TRACE_ISP_MAX_POINTS (TRACE_ISP_DATA_SIZE / TRACE_ISP_ITEM_SIZE)
174
175
176
177#define MAJOR_MAIN 1
178#define MAJOR_ISP_STAGE_ENTRY 2
179#define MAJOR_DMA_PRXY 3
180#define MAJOR_START_ISP 4
181
182#define MAJOR_OBSERVER_ISP0_EVENT 21
183#define MAJOR_OBSERVER_OUTPUT_FORM_EVENT 22
184#define MAJOR_OBSERVER_OUTPUT_SCAL_EVENT 23
185#define MAJOR_OBSERVER_IF_ACK 24
186#define MAJOR_OBSERVER_SP0_EVENT 25
187#define MAJOR_OBSERVER_SP_TERMINATE_EVENT 26
188#define MAJOR_OBSERVER_DMA_ACK 27
189#define MAJOR_OBSERVER_ACC_ACK 28
190
191#define DEBUG_PTR_SIGNATURE 0xABCD
192
193
194typedef enum {
195 CMD_SET_ONE_MAJOR = 1,
196 CMD_UNSET_ONE_MAJOR = 2,
197 CMD_SET_ALL_MAJORS = 3,
198 CMD_SET_VERBOSITY = 4
199} DBG_commands;
200
201
202#define CMD_SIGNATURE 0xAABBCC00
203
204
205
206#define DBG_NEXT_ITEM(x, max_items) (((x + 1) >= max_items) ? 0 : x + 1)
207#define DBG_PREV_ITEM(x, max_items) ((x) ? x - 1 : max_items - 1)
208
209#define FIELD_MASK(width) (((1 << (width)) - 1))
210#define FIELD_PACK(value, mask, offset) (((value) & (mask)) << (offset))
211#define FIELD_UNPACK(value, mask, offset) (((value) >> (offset)) & (mask))
212
213#define FIELD_VALUE_OFFSET (0)
214#define FIELD_VALUE_WIDTH (16)
215#define FIELD_VALUE_MASK FIELD_MASK(FIELD_VALUE_WIDTH)
216#define FIELD_VALUE_PACK(f) FIELD_PACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET)
217#define FIELD_VALUE_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET)
218
219#define FIELD_MINOR_OFFSET (FIELD_VALUE_OFFSET + FIELD_VALUE_WIDTH)
220#define FIELD_MINOR_WIDTH (8)
221#define FIELD_MINOR_MASK FIELD_MASK(FIELD_MINOR_WIDTH)
222#define FIELD_MINOR_PACK(f) FIELD_PACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET)
223#define FIELD_MINOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET)
224
225#define FIELD_MAJOR_OFFSET (FIELD_MINOR_OFFSET + FIELD_MINOR_WIDTH)
226#define FIELD_MAJOR_WIDTH (5)
227#define FIELD_MAJOR_MASK FIELD_MASK(FIELD_MAJOR_WIDTH)
228#define FIELD_MAJOR_PACK(f) FIELD_PACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET)
229#define FIELD_MAJOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET)
230
231
232#define FIELD_FULL_MAJOR_WIDTH (8)
233#define FIELD_FULL_MAJOR_MASK FIELD_MASK(FIELD_FULL_MAJOR_WIDTH)
234#define FIELD_FULL_MAJOR_PACK(f) FIELD_PACK(f, FIELD_FULL_MAJOR_MASK, FIELD_MAJOR_OFFSET)
235
236
237
238
239
240#define FIELD_MAJOR_W_FMT_OFFSET FIELD_MAJOR_OFFSET
241#define FIELD_MAJOR_W_FMT_WIDTH (3)
242#define FIELD_MAJOR_W_FMT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH)
243#define FIELD_MAJOR_W_FMT_PACK(f) FIELD_PACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET)
244#define FIELD_MAJOR_W_FMT_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET)
245
246#define FIELD_FORMAT_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_W_FMT_WIDTH)
247#define FIELD_FORMAT_WIDTH (2)
248#define FIELD_FORMAT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH)
249#define FIELD_FORMAT_PACK(f) FIELD_PACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET)
250#define FIELD_FORMAT_UNPACK(f) FIELD_UNPACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET)
251
252#define FIELD_TID_SEL_FORMAT_PAT (7)
253
254#define FIELD_TID_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_WIDTH)
255#define FIELD_TID_WIDTH (3)
256#define FIELD_TID_MASK FIELD_MASK(FIELD_TID_WIDTH)
257#define FIELD_TID_PACK(f) FIELD_PACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET)
258#define FIELD_TID_UNPACK(f) FIELD_UNPACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET)
259
260#define FIELD_VALUE_24_OFFSET (0)
261#define FIELD_VALUE_24_WIDTH (24)
262#define FIELD_VALUE_24_MASK FIELD_MASK(FIELD_VALUE_24_WIDTH)
263#define FIELD_VALUE_24_PACK(f) FIELD_PACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET)
264#define FIELD_VALUE_24_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET)
265
266#define PACK_TRACEPOINT(tid, major, minor, value) \
267 (FIELD_TID_PACK(tid) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value))
268
269#define PACK_QUICK_TRACEPOINT(major, minor) \
270 (FIELD_FULL_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor))
271
272#define PACK_FORMATTED_TRACEPOINT(format, major, minor, value) \
273 (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_FORMAT_PACK(format) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value))
274
275#define PACK_TRACE_VALUE24(major, value) \
276 (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_MAJOR_PACK(major) | FIELD_VALUE_24_PACK(value))
277
278#endif
279