blob: 395decd8bc3b76e10aa3631e078c1b49539ec068 [file] [log] [blame]
Robin Getz669b7922007-06-21 16:34:08 +08001/*
Robin Getz96f10502009-09-24 14:11:24 +00002 * header file for hardware trace functions
Robin Getz669b7922007-06-21 16:34:08 +08003 *
Robin Getz96f10502009-09-24 14:11:24 +00004 * Copyright 2007-2008 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2 or later.
Robin Getz669b7922007-06-21 16:34:08 +08007 */
8
9#ifndef _BLACKFIN_TRACE_
10#define _BLACKFIN_TRACE_
11
Robin Getz518039b2007-07-25 11:03:28 +080012/* Normally, we use ON, but you can't turn on software expansion until
13 * interrupts subsystem is ready
14 */
15
16#define BFIN_TRACE_INIT ((CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION << 4) | 0x03)
17#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
18#define BFIN_TRACE_ON (BFIN_TRACE_INIT | (CONFIG_DEBUG_BFIN_HWTRACE_EXPAND << 2))
19#else
20#define BFIN_TRACE_ON (BFIN_TRACE_INIT)
21#endif
22
Robin Getz669b7922007-06-21 16:34:08 +080023#ifndef __ASSEMBLY__
Robin Getz518039b2007-07-25 11:03:28 +080024extern unsigned long trace_buff_offset;
25extern unsigned long software_trace_buff[];
Robin Getz2a12c462010-03-11 16:24:18 +000026extern void decode_address(char *buf, unsigned long address);
27extern bool get_instruction(unsigned short *val, unsigned short *address);
Robin Getz518039b2007-07-25 11:03:28 +080028
Robin Getz669b7922007-06-21 16:34:08 +080029/* Trace Macros for C files */
30
Robin Getz518039b2007-07-25 11:03:28 +080031#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
32
Graf Yang46fe23a2009-09-28 09:23:05 +000033#define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
34
Robin Getz669b7922007-06-21 16:34:08 +080035#define trace_buffer_save(x) \
Robin Getz518039b2007-07-25 11:03:28 +080036 do { \
37 (x) = bfin_read_TBUFCTL(); \
38 bfin_write_TBUFCTL((x) & ~TBUFEN); \
39 } while (0)
Robin Getz669b7922007-06-21 16:34:08 +080040
41#define trace_buffer_restore(x) \
Robin Getz518039b2007-07-25 11:03:28 +080042 do { \
43 bfin_write_TBUFCTL((x)); \
44 } while (0)
45#else /* DEBUG_BFIN_HWTRACE_ON */
46
47#define trace_buffer_save(x)
48#define trace_buffer_restore(x)
49#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
Robin Getz669b7922007-06-21 16:34:08 +080050
51#else
52/* Trace Macros for Assembly files */
53
Robin Getz518039b2007-07-25 11:03:28 +080054#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
55
Robin Getz669b7922007-06-21 16:34:08 +080056#define trace_buffer_stop(preg, dreg) \
57 preg.L = LO(TBUFCTL); \
58 preg.H = HI(TBUFCTL); \
59 dreg = 0x1; \
60 [preg] = dreg;
61
Robin Getz518039b2007-07-25 11:03:28 +080062#define trace_buffer_init(preg, dreg) \
63 preg.L = LO(TBUFCTL); \
64 preg.H = HI(TBUFCTL); \
65 dreg = BFIN_TRACE_INIT; \
66 [preg] = dreg;
67
Mike Frysinger80f31c82008-02-02 15:47:24 +080068#define trace_buffer_save(preg, dreg) \
69 preg.L = LO(TBUFCTL); \
70 preg.H = HI(TBUFCTL); \
71 dreg = [preg]; \
Bernd Schmidt2a0c4fd2008-04-23 07:17:34 +080072 [--sp] = dreg; \
Mike Frysinger80f31c82008-02-02 15:47:24 +080073 dreg = 0x1; \
74 [preg] = dreg;
75
76#define trace_buffer_restore(preg, dreg) \
77 preg.L = LO(TBUFCTL); \
78 preg.H = HI(TBUFCTL); \
Bernd Schmidt2a0c4fd2008-04-23 07:17:34 +080079 dreg = [sp++]; \
Mike Frysinger80f31c82008-02-02 15:47:24 +080080 [preg] = dreg;
81
Robin Getz518039b2007-07-25 11:03:28 +080082#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
83
84#define trace_buffer_stop(preg, dreg)
Robin Getz518039b2007-07-25 11:03:28 +080085#define trace_buffer_init(preg, dreg)
Mike Frysinger80f31c82008-02-02 15:47:24 +080086#define trace_buffer_save(preg, dreg)
87#define trace_buffer_restore(preg, dreg)
Robin Getz518039b2007-07-25 11:03:28 +080088
89#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
90
Robin Getz669b7922007-06-21 16:34:08 +080091#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
Mike Frysinger80f31c82008-02-02 15:47:24 +080092# define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
93# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
Robin Getz669b7922007-06-21 16:34:08 +080094#else
Mike Frysinger80f31c82008-02-02 15:47:24 +080095# define DEBUG_HWTRACE_SAVE(preg, dreg)
96# define DEBUG_HWTRACE_RESTORE(preg, dreg)
Robin Getz669b7922007-06-21 16:34:08 +080097#endif
98
99#endif /* __ASSEMBLY__ */
100
101#endif /* _BLACKFIN_TRACE_ */