blob: 91179395baa8a65daa0fd7b3d3bfdfc8390e9fcd [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 Getzd28cff42010-03-11 19:26:38 +000026#if defined(CONFIG_DEBUG_VERBOSE)
Robin Getz2a12c462010-03-11 16:24:18 +000027extern void decode_address(char *buf, unsigned long address);
28extern bool get_instruction(unsigned short *val, unsigned short *address);
Robin Getzd28cff42010-03-11 19:26:38 +000029#else
30#define decode_address(buf, address)
31#define get_instruction(val, address) 0
32#endif
Robin Getz518039b2007-07-25 11:03:28 +080033
Robin Getz669b7922007-06-21 16:34:08 +080034/* Trace Macros for C files */
35
Robin Getz518039b2007-07-25 11:03:28 +080036#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
37
Graf Yang46fe23a2009-09-28 09:23:05 +000038#define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
39
Robin Getz669b7922007-06-21 16:34:08 +080040#define trace_buffer_save(x) \
Robin Getz518039b2007-07-25 11:03:28 +080041 do { \
42 (x) = bfin_read_TBUFCTL(); \
43 bfin_write_TBUFCTL((x) & ~TBUFEN); \
44 } while (0)
Robin Getz669b7922007-06-21 16:34:08 +080045
46#define trace_buffer_restore(x) \
Robin Getz518039b2007-07-25 11:03:28 +080047 do { \
48 bfin_write_TBUFCTL((x)); \
49 } while (0)
50#else /* DEBUG_BFIN_HWTRACE_ON */
51
52#define trace_buffer_save(x)
53#define trace_buffer_restore(x)
54#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
Robin Getz669b7922007-06-21 16:34:08 +080055
56#else
57/* Trace Macros for Assembly files */
58
Robin Getz518039b2007-07-25 11:03:28 +080059#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
60
Robin Getz669b7922007-06-21 16:34:08 +080061#define trace_buffer_stop(preg, dreg) \
62 preg.L = LO(TBUFCTL); \
63 preg.H = HI(TBUFCTL); \
64 dreg = 0x1; \
65 [preg] = dreg;
66
Robin Getz518039b2007-07-25 11:03:28 +080067#define trace_buffer_init(preg, dreg) \
68 preg.L = LO(TBUFCTL); \
69 preg.H = HI(TBUFCTL); \
70 dreg = BFIN_TRACE_INIT; \
71 [preg] = dreg;
72
Mike Frysinger80f31c82008-02-02 15:47:24 +080073#define trace_buffer_save(preg, dreg) \
74 preg.L = LO(TBUFCTL); \
75 preg.H = HI(TBUFCTL); \
76 dreg = [preg]; \
Bernd Schmidt2a0c4fd2008-04-23 07:17:34 +080077 [--sp] = dreg; \
Mike Frysinger80f31c82008-02-02 15:47:24 +080078 dreg = 0x1; \
79 [preg] = dreg;
80
81#define trace_buffer_restore(preg, dreg) \
82 preg.L = LO(TBUFCTL); \
83 preg.H = HI(TBUFCTL); \
Bernd Schmidt2a0c4fd2008-04-23 07:17:34 +080084 dreg = [sp++]; \
Mike Frysinger80f31c82008-02-02 15:47:24 +080085 [preg] = dreg;
86
Robin Getz518039b2007-07-25 11:03:28 +080087#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
88
89#define trace_buffer_stop(preg, dreg)
Robin Getz518039b2007-07-25 11:03:28 +080090#define trace_buffer_init(preg, dreg)
Mike Frysinger80f31c82008-02-02 15:47:24 +080091#define trace_buffer_save(preg, dreg)
92#define trace_buffer_restore(preg, dreg)
Robin Getz518039b2007-07-25 11:03:28 +080093
94#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
95
Robin Getz669b7922007-06-21 16:34:08 +080096#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
Mike Frysinger80f31c82008-02-02 15:47:24 +080097# define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
98# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
Robin Getz669b7922007-06-21 16:34:08 +080099#else
Mike Frysinger80f31c82008-02-02 15:47:24 +0800100# define DEBUG_HWTRACE_SAVE(preg, dreg)
101# define DEBUG_HWTRACE_RESTORE(preg, dreg)
Robin Getz669b7922007-06-21 16:34:08 +0800102#endif
103
104#endif /* __ASSEMBLY__ */
105
106#endif /* _BLACKFIN_TRACE_ */