trace.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. #ifndef _BLACKFIN_TRACE_
  9. #define _BLACKFIN_TRACE_
  10. /* Normally, we use ON, but you can't turn on software expansion until
  11. * interrupts subsystem is ready
  12. */
  13. #define BFIN_TRACE_INIT ((CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION << 4) | 0x03)
  14. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
  15. #define BFIN_TRACE_ON (BFIN_TRACE_INIT | (CONFIG_DEBUG_BFIN_HWTRACE_EXPAND << 2))
  16. #else
  17. #define BFIN_TRACE_ON (BFIN_TRACE_INIT)
  18. #endif
  19. #ifndef __ASSEMBLY__
  20. extern unsigned long trace_buff_offset;
  21. extern unsigned long software_trace_buff[];
  22. #if defined(CONFIG_DEBUG_VERBOSE)
  23. extern void decode_address(char *buf, unsigned long address);
  24. extern bool get_instruction(unsigned int *val, unsigned short *address);
  25. #else
  26. static inline void decode_address(char *buf, unsigned long address) { }
  27. static inline bool get_instruction(unsigned int *val, unsigned short *address) { return false; }
  28. #endif
  29. /* Trace Macros for C files */
  30. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  31. #define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
  32. #define trace_buffer_save(x) \
  33. do { \
  34. (x) = bfin_read_TBUFCTL(); \
  35. bfin_write_TBUFCTL((x) & ~TBUFEN); \
  36. } while (0)
  37. #define trace_buffer_restore(x) \
  38. do { \
  39. bfin_write_TBUFCTL((x)); \
  40. } while (0)
  41. #else /* DEBUG_BFIN_HWTRACE_ON */
  42. #define trace_buffer_save(x)
  43. #define trace_buffer_restore(x)
  44. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  45. #else
  46. /* Trace Macros for Assembly files */
  47. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  48. #define trace_buffer_stop(preg, dreg) \
  49. preg.L = LO(TBUFCTL); \
  50. preg.H = HI(TBUFCTL); \
  51. dreg = 0x1; \
  52. [preg] = dreg;
  53. #define trace_buffer_init(preg, dreg) \
  54. preg.L = LO(TBUFCTL); \
  55. preg.H = HI(TBUFCTL); \
  56. dreg = BFIN_TRACE_INIT; \
  57. [preg] = dreg;
  58. #define trace_buffer_save(preg, dreg) \
  59. preg.L = LO(TBUFCTL); \
  60. preg.H = HI(TBUFCTL); \
  61. dreg = [preg]; \
  62. [--sp] = dreg; \
  63. dreg = 0x1; \
  64. [preg] = dreg;
  65. #define trace_buffer_restore(preg, dreg) \
  66. preg.L = LO(TBUFCTL); \
  67. preg.H = HI(TBUFCTL); \
  68. dreg = [sp++]; \
  69. [preg] = dreg;
  70. #else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  71. #define trace_buffer_stop(preg, dreg)
  72. #define trace_buffer_init(preg, dreg)
  73. #define trace_buffer_save(preg, dreg)
  74. #define trace_buffer_restore(preg, dreg)
  75. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  76. #ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
  77. # define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
  78. # define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
  79. #else
  80. # define DEBUG_HWTRACE_SAVE(preg, dreg)
  81. # define DEBUG_HWTRACE_RESTORE(preg, dreg)
  82. #endif
  83. #endif /* __ASSEMBLY__ */
  84. #endif /* _BLACKFIN_TRACE_ */