Linux Audio

Check our new training course

Loading...
  1/*
  2 * header file for hardware trace functions
  3 *
  4 * Copyright 2007-2008 Analog Devices Inc.
  5 *
  6 * Licensed under the GPL-2 or later.
  7 */
  8
  9#ifndef _BLACKFIN_TRACE_
 10#define _BLACKFIN_TRACE_
 11
 12/* 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
 23#ifndef __ASSEMBLY__
 24extern unsigned long trace_buff_offset;
 25extern unsigned long software_trace_buff[];
 26#if defined(CONFIG_DEBUG_VERBOSE)
 27extern void decode_address(char *buf, unsigned long address);
 28extern bool get_instruction(unsigned int *val, unsigned short *address);
 29#else
 30static inline void decode_address(char *buf, unsigned long address) { }
 31static inline bool get_instruction(unsigned int *val, unsigned short *address) { return false; }
 32#endif
 33
 34/* Trace Macros for C files */
 35
 36#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
 37
 38#define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
 39
 40#define trace_buffer_save(x) \
 41	do { \
 42		(x) = bfin_read_TBUFCTL(); \
 43		bfin_write_TBUFCTL((x) & ~TBUFEN); \
 44	} while (0)
 45
 46#define trace_buffer_restore(x) \
 47	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 */
 55
 56#else
 57/* Trace Macros for Assembly files */
 58
 59#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
 60
 61#define trace_buffer_stop(preg, dreg)	\
 62	preg.L = LO(TBUFCTL);		\
 63	preg.H = HI(TBUFCTL);		\
 64	dreg = 0x1;			\
 65	[preg] = dreg;
 66
 67#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
 73#define trace_buffer_save(preg, dreg) \
 74	preg.L = LO(TBUFCTL); \
 75	preg.H = HI(TBUFCTL); \
 76	dreg = [preg]; \
 77	[--sp] = dreg; \
 78	dreg = 0x1; \
 79	[preg] = dreg;
 80
 81#define trace_buffer_restore(preg, dreg) \
 82	preg.L = LO(TBUFCTL); \
 83	preg.H = HI(TBUFCTL); \
 84	dreg = [sp++]; \
 85	[preg] = dreg;
 86
 87#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
 88
 89#define trace_buffer_stop(preg, dreg)
 90#define trace_buffer_init(preg, dreg)
 91#define trace_buffer_save(preg, dreg)
 92#define trace_buffer_restore(preg, dreg)
 93
 94#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
 95
 96#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
 97# define DEBUG_HWTRACE_SAVE(preg, dreg)    trace_buffer_save(preg, dreg)
 98# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
 99#else
100# define DEBUG_HWTRACE_SAVE(preg, dreg)
101# define DEBUG_HWTRACE_RESTORE(preg, dreg)
102#endif
103
104#endif /* __ASSEMBLY__ */
105
106#endif				/* _BLACKFIN_TRACE_ */
  1/*
  2 * header file for hardware trace functions
  3 *
  4 * Copyright 2007-2008 Analog Devices Inc.
  5 *
  6 * Licensed under the GPL-2 or later.
  7 */
  8
  9#ifndef _BLACKFIN_TRACE_
 10#define _BLACKFIN_TRACE_
 11
 12/* 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
 23#ifndef __ASSEMBLY__
 24extern unsigned long trace_buff_offset;
 25extern unsigned long software_trace_buff[];
 26#if defined(CONFIG_DEBUG_VERBOSE)
 27extern void decode_address(char *buf, unsigned long address);
 28extern bool get_instruction(unsigned int *val, unsigned short *address);
 29#else
 30static inline void decode_address(char *buf, unsigned long address) { }
 31static inline bool get_instruction(unsigned int *val, unsigned short *address) { return false; }
 32#endif
 33
 34/* Trace Macros for C files */
 35
 36#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
 37
 38#define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
 39
 40#define trace_buffer_save(x) \
 41	do { \
 42		(x) = bfin_read_TBUFCTL(); \
 43		bfin_write_TBUFCTL((x) & ~TBUFEN); \
 44	} while (0)
 45
 46#define trace_buffer_restore(x) \
 47	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 */
 55
 56#else
 57/* Trace Macros for Assembly files */
 58
 59#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
 60
 61#define trace_buffer_stop(preg, dreg)	\
 62	preg.L = LO(TBUFCTL);		\
 63	preg.H = HI(TBUFCTL);		\
 64	dreg = 0x1;			\
 65	[preg] = dreg;
 66
 67#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
 73#define trace_buffer_save(preg, dreg) \
 74	preg.L = LO(TBUFCTL); \
 75	preg.H = HI(TBUFCTL); \
 76	dreg = [preg]; \
 77	[--sp] = dreg; \
 78	dreg = 0x1; \
 79	[preg] = dreg;
 80
 81#define trace_buffer_restore(preg, dreg) \
 82	preg.L = LO(TBUFCTL); \
 83	preg.H = HI(TBUFCTL); \
 84	dreg = [sp++]; \
 85	[preg] = dreg;
 86
 87#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
 88
 89#define trace_buffer_stop(preg, dreg)
 90#define trace_buffer_init(preg, dreg)
 91#define trace_buffer_save(preg, dreg)
 92#define trace_buffer_restore(preg, dreg)
 93
 94#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
 95
 96#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
 97# define DEBUG_HWTRACE_SAVE(preg, dreg)    trace_buffer_save(preg, dreg)
 98# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
 99#else
100# define DEBUG_HWTRACE_SAVE(preg, dreg)
101# define DEBUG_HWTRACE_RESTORE(preg, dreg)
102#endif
103
104#endif /* __ASSEMBLY__ */
105
106#endif				/* _BLACKFIN_TRACE_ */