coresight.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. * linux/arch/arm/include/asm/hardware/coresight.h
  3. *
  4. * CoreSight components' registers
  5. *
  6. * Copyright (C) 2009 Nokia Corporation.
  7. * Alexander Shishkin
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License version 2 as
  11. * published by the Free Software Foundation.
  12. */
  13. #ifndef __ASM_HARDWARE_CORESIGHT_H
  14. #define __ASM_HARDWARE_CORESIGHT_H
  15. #define TRACER_ACCESSED_BIT 0
  16. #define TRACER_RUNNING_BIT 1
  17. #define TRACER_CYCLE_ACC_BIT 2
  18. #define TRACER_TRACE_DATA_BIT 3
  19. #define TRACER_TIMESTAMP_BIT 4
  20. #define TRACER_BRANCHOUTPUT_BIT 5
  21. #define TRACER_RETURN_STACK_BIT 6
  22. #define TRACER_ACCESSED BIT(TRACER_ACCESSED_BIT)
  23. #define TRACER_RUNNING BIT(TRACER_RUNNING_BIT)
  24. #define TRACER_CYCLE_ACC BIT(TRACER_CYCLE_ACC_BIT)
  25. #define TRACER_TRACE_DATA BIT(TRACER_TRACE_DATA_BIT)
  26. #define TRACER_TIMESTAMP BIT(TRACER_TIMESTAMP_BIT)
  27. #define TRACER_BRANCHOUTPUT BIT(TRACER_BRANCHOUTPUT_BIT)
  28. #define TRACER_RETURN_STACK BIT(TRACER_RETURN_STACK_BIT)
  29. #define TRACER_TIMEOUT 10000
  30. #define etm_writel(t, id, v, x) \
  31. (writel_relaxed((v), (t)->etm_regs[(id)] + (x)))
  32. #define etm_readl(t, id, x) (readl_relaxed((t)->etm_regs[(id)] + (x)))
  33. /* CoreSight Management Registers */
  34. #define CSMR_LOCKACCESS 0xfb0
  35. #define CSMR_LOCKSTATUS 0xfb4
  36. #define CSMR_AUTHSTATUS 0xfb8
  37. #define CSMR_DEVID 0xfc8
  38. #define CSMR_DEVTYPE 0xfcc
  39. /* CoreSight Component Registers */
  40. #define CSCR_CLASS 0xff4
  41. #define CS_LAR_KEY 0xc5acce55
  42. /* ETM control register, "ETM Architecture", 3.3.1 */
  43. #define ETMR_CTRL 0
  44. #define ETMCTRL_POWERDOWN 1
  45. #define ETMCTRL_PROGRAM (1 << 10)
  46. #define ETMCTRL_PORTSEL (1 << 11)
  47. #define ETMCTRL_CONTEXTIDSIZE(x) (((x) & 3) << 14)
  48. #define ETMCTRL_PORTMASK1 (7 << 4)
  49. #define ETMCTRL_PORTMASK2 (1 << 21)
  50. #define ETMCTRL_PORTMASK (ETMCTRL_PORTMASK1 | ETMCTRL_PORTMASK2)
  51. #define ETMCTRL_PORTSIZE(x) ((((x) & 7) << 4) | (!!((x) & 8)) << 21)
  52. #define ETMCTRL_DO_CPRT (1 << 1)
  53. #define ETMCTRL_DATAMASK (3 << 2)
  54. #define ETMCTRL_DATA_DO_DATA (1 << 2)
  55. #define ETMCTRL_DATA_DO_ADDR (1 << 3)
  56. #define ETMCTRL_DATA_DO_BOTH (ETMCTRL_DATA_DO_DATA | ETMCTRL_DATA_DO_ADDR)
  57. #define ETMCTRL_BRANCH_OUTPUT (1 << 8)
  58. #define ETMCTRL_CYCLEACCURATE (1 << 12)
  59. #define ETMCTRL_TIMESTAMP_EN (1 << 28)
  60. #define ETMCTRL_RETURN_STACK_EN (1 << 29)
  61. /* ETM configuration code register */
  62. #define ETMR_CONFCODE (0x04)
  63. #define ETMCCR_ETMIDR_PRESENT BIT(31)
  64. /* ETM trace start/stop resource control register */
  65. #define ETMR_TRACESSCTRL (0x18)
  66. /* ETM trigger event register */
  67. #define ETMR_TRIGEVT (0x08)
  68. /* address access type register bits, "ETM architecture",
  69. * table 3-27 */
  70. /* - access type */
  71. #define ETMAAT_IFETCH 0
  72. #define ETMAAT_IEXEC 1
  73. #define ETMAAT_IEXECPASS 2
  74. #define ETMAAT_IEXECFAIL 3
  75. #define ETMAAT_DLOADSTORE 4
  76. #define ETMAAT_DLOAD 5
  77. #define ETMAAT_DSTORE 6
  78. /* - comparison access size */
  79. #define ETMAAT_JAVA (0 << 3)
  80. #define ETMAAT_THUMB (1 << 3)
  81. #define ETMAAT_ARM (3 << 3)
  82. /* - data value comparison control */
  83. #define ETMAAT_NOVALCMP (0 << 5)
  84. #define ETMAAT_VALMATCH (1 << 5)
  85. #define ETMAAT_VALNOMATCH (3 << 5)
  86. /* - exact match */
  87. #define ETMAAT_EXACTMATCH (1 << 7)
  88. /* - context id comparator control */
  89. #define ETMAAT_IGNCONTEXTID (0 << 8)
  90. #define ETMAAT_VALUE1 (1 << 8)
  91. #define ETMAAT_VALUE2 (2 << 8)
  92. #define ETMAAT_VALUE3 (3 << 8)
  93. /* - security level control */
  94. #define ETMAAT_IGNSECURITY (0 << 10)
  95. #define ETMAAT_NSONLY (1 << 10)
  96. #define ETMAAT_SONLY (2 << 10)
  97. #define ETMR_COMP_VAL(x) (0x40 + (x) * 4)
  98. #define ETMR_COMP_ACC_TYPE(x) (0x80 + (x) * 4)
  99. /* ETM status register, "ETM Architecture", 3.3.2 */
  100. #define ETMR_STATUS (0x10)
  101. #define ETMST_OVERFLOW BIT(0)
  102. #define ETMST_PROGBIT BIT(1)
  103. #define ETMST_STARTSTOP BIT(2)
  104. #define ETMST_TRIGGER BIT(3)
  105. #define etm_progbit(t) (etm_readl((t), ETMR_STATUS) & ETMST_PROGBIT)
  106. #define etm_started(t) (etm_readl((t), ETMR_STATUS) & ETMST_STARTSTOP)
  107. #define etm_triggered(t) (etm_readl((t), ETMR_STATUS) & ETMST_TRIGGER)
  108. #define ETMR_TRACEENCTRL2 0x1c
  109. #define ETMR_TRACEENCTRL 0x24
  110. #define ETMTE_INCLEXCL BIT(24)
  111. #define ETMR_TRACEENEVT 0x20
  112. #define ETMR_VIEWDATAEVT 0x30
  113. #define ETMR_VIEWDATACTRL1 0x34
  114. #define ETMR_VIEWDATACTRL2 0x38
  115. #define ETMR_VIEWDATACTRL3 0x3c
  116. #define ETMVDC3_EXCLONLY BIT(16)
  117. #define ETMCTRL_OPTS (ETMCTRL_DO_CPRT)
  118. #define ETMR_ID 0x1e4
  119. #define ETMIDR_VERSION(x) (((x) >> 4) & 0xff)
  120. #define ETMIDR_VERSION_3_1 0x21
  121. #define ETMIDR_VERSION_PFT_1_0 0x30
  122. #define ETMR_CCE 0x1e8
  123. #define ETMCCER_RETURN_STACK_IMPLEMENTED BIT(23)
  124. #define ETMCCER_TIMESTAMPING_IMPLEMENTED BIT(22)
  125. #define ETMR_TRACEIDR 0x200
  126. /* ETM management registers, "ETM Architecture", 3.5.24 */
  127. #define ETMMR_OSLAR 0x300
  128. #define ETMMR_OSLSR 0x304
  129. #define ETMMR_OSSRR 0x308
  130. #define ETMMR_PDSR 0x314
  131. /* ETB registers, "CoreSight Components TRM", 9.3 */
  132. #define ETBR_DEPTH 0x04
  133. #define ETBR_STATUS 0x0c
  134. #define ETBR_READMEM 0x10
  135. #define ETBR_READADDR 0x14
  136. #define ETBR_WRITEADDR 0x18
  137. #define ETBR_TRIGGERCOUNT 0x1c
  138. #define ETBR_CTRL 0x20
  139. #define ETBR_FORMATTERCTRL 0x304
  140. #define ETBFF_ENFTC 1
  141. #define ETBFF_ENFCONT BIT(1)
  142. #define ETBFF_FONFLIN BIT(4)
  143. #define ETBFF_MANUAL_FLUSH BIT(6)
  144. #define ETBFF_TRIGIN BIT(8)
  145. #define ETBFF_TRIGEVT BIT(9)
  146. #define ETBFF_TRIGFL BIT(10)
  147. #define ETBFF_STOPFL BIT(12)
  148. #define etb_writel(t, v, x) \
  149. (writel_relaxed((v), (t)->etb_regs + (x)))
  150. #define etb_readl(t, x) (readl_relaxed((t)->etb_regs + (x)))
  151. #define etm_lock(t, id) \
  152. do { etm_writel((t), (id), 0, CSMR_LOCKACCESS); } while (0)
  153. #define etm_unlock(t, id) \
  154. do { etm_writel((t), (id), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0)
  155. #define etb_lock(t) do { etb_writel((t), 0, CSMR_LOCKACCESS); } while (0)
  156. #define etb_unlock(t) \
  157. do { etb_writel((t), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0)
  158. #endif /* __ASM_HARDWARE_CORESIGHT_H */