trace.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. /* Trace Macros for C files */
  23. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  24. #define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
  25. #define trace_buffer_save(x) \
  26. do { \
  27. (x) = bfin_read_TBUFCTL(); \
  28. bfin_write_TBUFCTL((x) & ~TBUFEN); \
  29. } while (0)
  30. #define trace_buffer_restore(x) \
  31. do { \
  32. bfin_write_TBUFCTL((x)); \
  33. } while (0)
  34. #else /* DEBUG_BFIN_HWTRACE_ON */
  35. #define trace_buffer_save(x)
  36. #define trace_buffer_restore(x)
  37. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  38. #else
  39. /* Trace Macros for Assembly files */
  40. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  41. #define trace_buffer_stop(preg, dreg) \
  42. preg.L = LO(TBUFCTL); \
  43. preg.H = HI(TBUFCTL); \
  44. dreg = 0x1; \
  45. [preg] = dreg;
  46. #define trace_buffer_init(preg, dreg) \
  47. preg.L = LO(TBUFCTL); \
  48. preg.H = HI(TBUFCTL); \
  49. dreg = BFIN_TRACE_INIT; \
  50. [preg] = dreg;
  51. #define trace_buffer_save(preg, dreg) \
  52. preg.L = LO(TBUFCTL); \
  53. preg.H = HI(TBUFCTL); \
  54. dreg = [preg]; \
  55. [--sp] = dreg; \
  56. dreg = 0x1; \
  57. [preg] = dreg;
  58. #define trace_buffer_restore(preg, dreg) \
  59. preg.L = LO(TBUFCTL); \
  60. preg.H = HI(TBUFCTL); \
  61. dreg = [sp++]; \
  62. [preg] = dreg;
  63. #else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  64. #define trace_buffer_stop(preg, dreg)
  65. #define trace_buffer_init(preg, dreg)
  66. #define trace_buffer_save(preg, dreg)
  67. #define trace_buffer_restore(preg, dreg)
  68. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  69. #ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
  70. # define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
  71. # define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
  72. #else
  73. # define DEBUG_HWTRACE_SAVE(preg, dreg)
  74. # define DEBUG_HWTRACE_RESTORE(preg, dreg)
  75. #endif
  76. #endif /* __ASSEMBLY__ */
  77. #endif /* _BLACKFIN_TRACE_ */