2 #ifndef DEBUG_SNAPSHOT_LOG_H
3 #define DEBUG_SNAPSHOT_LOG_H
5 #include <generated/autoconf.h>
7 #ifdef CONFIG_DEBUG_SNAPSHOT_BINDER
8 #include <linux/debug-snapshot-binder.h>
13 #define TASK_COMM_LEN 16
15 #undef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
21 #include <linux/clk-provider.h>
22 #include <linux/debug-snapshot.h>
23 #include <linux/debug-snapshot-helper.h>
25 #endif // DSS_ANALYZER
27 #include <dt-bindings/soc/samsung/debug-snapshot-table.h>
30 #define DSS_KEEP_HEADER_SZ (SZ_256 * 3)
31 #define DSS_HEADER_SZ SZ_4K
32 #define DSS_MMU_REG_SZ SZ_4K
33 #define DSS_CORE_REG_SZ SZ_4K
34 #define DSS_DBGC_LOG_SZ SZ_4K
35 #define DSS_HEADER_TOTAL_SZ (DSS_HEADER_SZ + DSS_MMU_REG_SZ + DSS_CORE_REG_SZ + DSS_DBGC_LOG_SZ)
36 #define DSS_SPARE_SZ (DSS_HEADER_SIZE - DSS_HEADER_TOTAL_SZ)
39 #define DSS_LOG_STRING_LENGTH SZ_128
40 #define DSS_MMU_REG_OFFSET SZ_512
41 #define DSS_CORE_REG_OFFSET SZ_512
42 #define DSS_LOG_MAX_NUM SZ_1K
43 #define DSS_API_MAX_NUM SZ_2K
44 #define DSS_EX_MAX_NUM SZ_8
45 #define DSS_IN_MAX_NUM SZ_8
46 #define DSS_CALLSTACK_MAX_NUM 4
47 #define DSS_ITERATION 5
48 #define DSS_NR_CPUS NR_CPUS
49 #define DSS_ITEM_MAX_NUM 10
52 #define DSS_SIGN_RESET 0x0
53 #define DSS_SIGN_RESERVED 0x1
54 #define DSS_SIGN_SCRATCH 0xD
55 #define DSS_SIGN_ALIVE 0xFACE
56 #define DSS_SIGN_DEAD 0xDEAD
57 #define DSS_SIGN_PANIC 0xBABA
58 #define DSS_SIGN_SAFE_FAULT 0xFAFA
59 #define DSS_SIGN_NORMAL_REBOOT 0xCAFE
60 #define DSS_SIGN_FORCE_REBOOT 0xDAFE
61 #define DSS_SIGN_LOCKUP 0xDEADBEEF
63 /* Specific Address Information */
64 #define DSS_FIXED_VIRT_BASE (VMALLOC_START + 0xEE000000)
65 #define DSS_OFFSET_SCRATCH (0x100)
66 #define DSS_OFFSET_DEBUG_LEVEL (0x180)
67 #define DSS_OFFSET_LAST_LOGBUF (0x200)
68 #define DSS_OFFSET_EMERGENCY_REASON (0x300)
69 #define DSS_OFFSET_CORE_POWER_STAT (0x400)
70 #define DSS_OFFSET_PANIC_STAT (0x500)
71 #define DSS_OFFSET_CORE_LAST_PC (0x600)
73 /* S5P_VA_SS_BASE + 0xC00 -- 0xFFF is reserved */
74 #define DSS_OFFSET_PANIC_STRING (0xC00)
75 #define DSS_OFFSET_SPARE_BASE (DSS_HEADER_TOTAL_SZ)
77 struct dbg_snapshot_log
{
79 unsigned long long time
;
81 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
82 struct task_struct
*task
;
86 char task_comm
[TASK_COMM_LEN
];
88 } task
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
91 unsigned long long time
;
93 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
94 struct worker
*worker
;
100 char task_comm
[TASK_COMM_LEN
];
102 } work
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
104 struct __cpuidle_log
{
105 unsigned long long time
;
109 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
112 unsigned int num_online_cpus
;
116 } cpuidle
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
118 struct __suspend_log
{
119 unsigned long long time
;
122 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
129 } suspend
[DSS_LOG_MAX_NUM
* 4];
132 unsigned long long time
;
136 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
137 struct irqaction
*action
;
142 } irq
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
* 2];
144 #ifdef CONFIG_DEBUG_SNAPSHOT_IRQ_EXIT
145 struct __irq_exit_log
{
146 unsigned long long time
;
148 unsigned long long end_time
;
149 unsigned long long latency
;
151 } irq_exit
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
153 #ifdef CONFIG_DEBUG_SNAPSHOT_SPINLOCK
154 struct __spinlock_log
{
155 unsigned long long time
;
157 unsigned long long jiffies
;
158 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
159 raw_spinlock_t
*lock
;
160 #ifdef CONFIG_DEBUG_SPINLOCK
166 #ifdef CONFIG_DEBUG_SPINLOCK
168 unsigned short owner
;
172 void *caller
[DSS_CALLSTACK_MAX_NUM
];
173 } spinlock
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
175 #ifdef CONFIG_DEBUG_SNAPSHOT_IRQ_DISABLED
176 struct __irqs_disabled_log
{
177 unsigned long long time
;
179 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
180 struct task_struct
*task
;
185 void *caller
[DSS_CALLSTACK_MAX_NUM
];
186 } irqs_disabled
[DSS_NR_CPUS
][SZ_32
];
188 #ifdef CONFIG_DEBUG_SNAPSHOT_CLK
190 unsigned long long time
;
191 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
199 } clk
[DSS_LOG_MAX_NUM
];
201 #ifdef CONFIG_DEBUG_SNAPSHOT_PMU
203 unsigned long long time
;
207 } pmu
[DSS_LOG_MAX_NUM
];
209 #ifdef CONFIG_DEBUG_SNAPSHOT_FREQ
211 unsigned long long time
;
215 unsigned long old_freq
;
216 unsigned long target_freq
;
218 } freq
[DSS_LOG_MAX_NUM
];
220 #ifdef CONFIG_DEBUG_SNAPSHOT_DM
222 unsigned long long time
;
225 unsigned long min_freq
;
226 unsigned long max_freq
;
227 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
234 } dm
[DSS_LOG_MAX_NUM
];
236 #ifdef CONFIG_DEBUG_SNAPSHOT_REG
238 unsigned long long time
;
243 void *caller
[DSS_CALLSTACK_MAX_NUM
];
244 } reg
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
246 #ifdef CONFIG_DEBUG_SNAPSHOT_HRTIMER
247 struct __hrtimer_log
{
248 unsigned long long time
;
249 unsigned long long now
;
250 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
251 struct hrtimer
*timer
;
257 } hrtimers
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
259 #ifdef CONFIG_DEBUG_SNAPSHOT_REGULATOR
260 struct __regulator_log
{
261 unsigned long long time
;
262 unsigned long long acpm_time
;
266 unsigned int voltage
;
267 unsigned int raw_volt
;
269 } regulator
[DSS_LOG_MAX_NUM
];
271 #ifdef CONFIG_DEBUG_SNAPSHOT_THERMAL
272 struct __thermal_log
{
273 unsigned long long time
;
275 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
276 struct exynos_tmu_platform_data
*data
;
281 char *cooling_device
;
282 unsigned int cooling_state
;
283 } thermal
[DSS_LOG_MAX_NUM
];
285 #ifdef CONFIG_DEBUG_SNAPSHOT_ACPM
287 unsigned long long time
;
288 unsigned long long acpm_time
;
291 } acpm
[DSS_LOG_MAX_NUM
];
293 #ifdef CONFIG_DEBUG_SNAPSHOT_I2C
295 unsigned long long time
;
297 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
298 struct i2c_adapter
*adap
;
299 struct i2c_msg
*msgs
;
306 } i2c
[DSS_LOG_MAX_NUM
];
308 #ifdef CONFIG_DEBUG_SNAPSHOT_SPI
310 unsigned long long time
;
312 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
313 struct spi_controller
*ctlr
;
314 struct spi_message
*cur_msg
;
320 } spi
[DSS_LOG_MAX_NUM
];
322 #ifdef CONFIG_DEBUG_SNAPSHOT_BINDER
323 struct __binder_log
{
324 unsigned long long time
;
326 struct trace_binder_transaction_base base
;
327 struct trace_binder_transaction transaction
;
328 struct trace_binder_transaction_error error
;
329 } binder
[DSS_API_MAX_NUM
<< 2];
332 #ifndef CONFIG_DEBUG_SNAPSHOT_MINIMIZED_MODE
333 struct __clockevent_log
{
334 unsigned long long time
;
335 unsigned long long mct_cycle
;
336 #ifdef CONFIG_DEBUG_SNAPSHOT_LINUX_BUILD
341 long long next_event
;
343 void *caller
[DSS_CALLSTACK_MAX_NUM
];
344 } clockevent
[DSS_NR_CPUS
][DSS_LOG_MAX_NUM
];
346 struct __printkl_log
{
347 unsigned long long time
;
351 void *caller
[DSS_CALLSTACK_MAX_NUM
];
352 } printkl
[DSS_API_MAX_NUM
];
354 struct __printk_log
{
355 unsigned long long time
;
357 char log
[DSS_LOG_STRING_LENGTH
];
358 void *caller
[DSS_CALLSTACK_MAX_NUM
];
359 } printk
[DSS_API_MAX_NUM
];