hpm_tamp_regs.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_TAMP_H
  8. #define HPM_TAMP_H
  9. typedef struct {
  10. struct {
  11. __RW uint32_t CONTROL; /* 0x0: Tamper n control */
  12. __RW uint32_t POLY; /* 0x4: Tamper n Polynomial of LFSR */
  13. __W uint32_t LFSR; /* 0x8: Tamper n LFSR shift register */
  14. __R uint8_t RESERVED0[4]; /* 0xC - 0xF: Reserved */
  15. } TAMP[6];
  16. __R uint8_t RESERVED0[32]; /* 0x60 - 0x7F: Reserved */
  17. __RW uint32_t TAMP_FLAG; /* 0x80: Tamper flag */
  18. __RW uint32_t IRQ_EN; /* 0x84: Tamper interrupt enable */
  19. } TAMP_Type;
  20. /* Bitfield definition for register of struct array TAMP: CONTROL */
  21. /*
  22. * LOCK (RW)
  23. *
  24. * lock tamper setting
  25. * 0: tamper setting can be changed
  26. * 1: tamper setting will last to next battery domain power cycle
  27. */
  28. #define TAMP_TAMP_CONTROL_LOCK_MASK (0x80000000UL)
  29. #define TAMP_TAMP_CONTROL_LOCK_SHIFT (31U)
  30. #define TAMP_TAMP_CONTROL_LOCK_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_LOCK_SHIFT) & TAMP_TAMP_CONTROL_LOCK_MASK)
  31. #define TAMP_TAMP_CONTROL_LOCK_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_LOCK_MASK) >> TAMP_TAMP_CONTROL_LOCK_SHIFT)
  32. /*
  33. * BYPASS (RW)
  34. *
  35. * bypass tamper violation filter
  36. * 0: filter applied
  37. * 1: filter not used
  38. */
  39. #define TAMP_TAMP_CONTROL_BYPASS_MASK (0x100000UL)
  40. #define TAMP_TAMP_CONTROL_BYPASS_SHIFT (20U)
  41. #define TAMP_TAMP_CONTROL_BYPASS_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_BYPASS_SHIFT) & TAMP_TAMP_CONTROL_BYPASS_MASK)
  42. #define TAMP_TAMP_CONTROL_BYPASS_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_BYPASS_MASK) >> TAMP_TAMP_CONTROL_BYPASS_SHIFT)
  43. /*
  44. * FILTER (RW)
  45. *
  46. * filter length
  47. * 0: 1 cycle
  48. * 1: 2 cycle
  49. * 15: 65526 cycle
  50. */
  51. #define TAMP_TAMP_CONTROL_FILTER_MASK (0xF0000UL)
  52. #define TAMP_TAMP_CONTROL_FILTER_SHIFT (16U)
  53. #define TAMP_TAMP_CONTROL_FILTER_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_FILTER_SHIFT) & TAMP_TAMP_CONTROL_FILTER_MASK)
  54. #define TAMP_TAMP_CONTROL_FILTER_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_FILTER_MASK) >> TAMP_TAMP_CONTROL_FILTER_SHIFT)
  55. /*
  56. * VALUE (RW)
  57. *
  58. * pin value for passive tamper
  59. */
  60. #define TAMP_TAMP_CONTROL_VALUE_MASK (0x300U)
  61. #define TAMP_TAMP_CONTROL_VALUE_SHIFT (8U)
  62. #define TAMP_TAMP_CONTROL_VALUE_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_VALUE_SHIFT) & TAMP_TAMP_CONTROL_VALUE_MASK)
  63. #define TAMP_TAMP_CONTROL_VALUE_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_VALUE_MASK) >> TAMP_TAMP_CONTROL_VALUE_SHIFT)
  64. /*
  65. * SPEED (RW)
  66. *
  67. * tamper speed selection, (2^SPEED) changes per second
  68. * 0: 1 shift per second
  69. * 1: 2 shifts per second
  70. * . . .
  71. * 15: 32768 shifts per second
  72. */
  73. #define TAMP_TAMP_CONTROL_SPEED_MASK (0xF0U)
  74. #define TAMP_TAMP_CONTROL_SPEED_SHIFT (4U)
  75. #define TAMP_TAMP_CONTROL_SPEED_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_SPEED_SHIFT) & TAMP_TAMP_CONTROL_SPEED_MASK)
  76. #define TAMP_TAMP_CONTROL_SPEED_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_SPEED_MASK) >> TAMP_TAMP_CONTROL_SPEED_SHIFT)
  77. /*
  78. * RECOVER (RW)
  79. *
  80. * tamper will recover itself if tamper LFSR goes wrong
  81. * 0: tamper will not recover
  82. * 1: tamper will recover
  83. */
  84. #define TAMP_TAMP_CONTROL_RECOVER_MASK (0x4U)
  85. #define TAMP_TAMP_CONTROL_RECOVER_SHIFT (2U)
  86. #define TAMP_TAMP_CONTROL_RECOVER_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_RECOVER_SHIFT) & TAMP_TAMP_CONTROL_RECOVER_MASK)
  87. #define TAMP_TAMP_CONTROL_RECOVER_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_RECOVER_MASK) >> TAMP_TAMP_CONTROL_RECOVER_SHIFT)
  88. /*
  89. * ACTIVE (RW)
  90. *
  91. * select active or passive tamper
  92. * 0: passive tamper
  93. * 1: active tamper
  94. */
  95. #define TAMP_TAMP_CONTROL_ACTIVE_MASK (0x2U)
  96. #define TAMP_TAMP_CONTROL_ACTIVE_SHIFT (1U)
  97. #define TAMP_TAMP_CONTROL_ACTIVE_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_ACTIVE_SHIFT) & TAMP_TAMP_CONTROL_ACTIVE_MASK)
  98. #define TAMP_TAMP_CONTROL_ACTIVE_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_ACTIVE_MASK) >> TAMP_TAMP_CONTROL_ACTIVE_SHIFT)
  99. /*
  100. * ENABLE (RW)
  101. *
  102. * enable tamper
  103. * 0: tamper disableed
  104. * 1: tamper enabled
  105. */
  106. #define TAMP_TAMP_CONTROL_ENABLE_MASK (0x1U)
  107. #define TAMP_TAMP_CONTROL_ENABLE_SHIFT (0U)
  108. #define TAMP_TAMP_CONTROL_ENABLE_SET(x) (((uint32_t)(x) << TAMP_TAMP_CONTROL_ENABLE_SHIFT) & TAMP_TAMP_CONTROL_ENABLE_MASK)
  109. #define TAMP_TAMP_CONTROL_ENABLE_GET(x) (((uint32_t)(x) & TAMP_TAMP_CONTROL_ENABLE_MASK) >> TAMP_TAMP_CONTROL_ENABLE_SHIFT)
  110. /* Bitfield definition for register of struct array TAMP: POLY */
  111. /*
  112. * POLY (RW)
  113. *
  114. * tamper LFSR polyminal, this is a write once register, once write content is locked, and readout value is "1"
  115. */
  116. #define TAMP_TAMP_POLY_POLY_MASK (0xFFFFFFFFUL)
  117. #define TAMP_TAMP_POLY_POLY_SHIFT (0U)
  118. #define TAMP_TAMP_POLY_POLY_SET(x) (((uint32_t)(x) << TAMP_TAMP_POLY_POLY_SHIFT) & TAMP_TAMP_POLY_POLY_MASK)
  119. #define TAMP_TAMP_POLY_POLY_GET(x) (((uint32_t)(x) & TAMP_TAMP_POLY_POLY_MASK) >> TAMP_TAMP_POLY_POLY_SHIFT)
  120. /* Bitfield definition for register of struct array TAMP: LFSR */
  121. /*
  122. * LFSR (WO)
  123. *
  124. * LFSR for active tamper, write only register, always read 0
  125. */
  126. #define TAMP_TAMP_LFSR_LFSR_MASK (0xFFFFFFFFUL)
  127. #define TAMP_TAMP_LFSR_LFSR_SHIFT (0U)
  128. #define TAMP_TAMP_LFSR_LFSR_SET(x) (((uint32_t)(x) << TAMP_TAMP_LFSR_LFSR_SHIFT) & TAMP_TAMP_LFSR_LFSR_MASK)
  129. #define TAMP_TAMP_LFSR_LFSR_GET(x) (((uint32_t)(x) & TAMP_TAMP_LFSR_LFSR_MASK) >> TAMP_TAMP_LFSR_LFSR_SHIFT)
  130. /* Bitfield definition for register: TAMP_FLAG */
  131. /*
  132. * FLAG (RW)
  133. *
  134. * tamper flag, each bit represents one tamper pin, write 1 to clear the flag
  135. * Note, clear can only be cleared when tamper disapeared
  136. */
  137. #define TAMP_TAMP_FLAG_FLAG_MASK (0xFFFU)
  138. #define TAMP_TAMP_FLAG_FLAG_SHIFT (0U)
  139. #define TAMP_TAMP_FLAG_FLAG_SET(x) (((uint32_t)(x) << TAMP_TAMP_FLAG_FLAG_SHIFT) & TAMP_TAMP_FLAG_FLAG_MASK)
  140. #define TAMP_TAMP_FLAG_FLAG_GET(x) (((uint32_t)(x) & TAMP_TAMP_FLAG_FLAG_MASK) >> TAMP_TAMP_FLAG_FLAG_SHIFT)
  141. /* Bitfield definition for register: IRQ_EN */
  142. /*
  143. * LOCK (RW)
  144. *
  145. * lock bit for IRQ enable
  146. * 0: enable bits can be changed
  147. * 1: enable bits hold until next battery domain power cycle
  148. */
  149. #define TAMP_IRQ_EN_LOCK_MASK (0x80000000UL)
  150. #define TAMP_IRQ_EN_LOCK_SHIFT (31U)
  151. #define TAMP_IRQ_EN_LOCK_SET(x) (((uint32_t)(x) << TAMP_IRQ_EN_LOCK_SHIFT) & TAMP_IRQ_EN_LOCK_MASK)
  152. #define TAMP_IRQ_EN_LOCK_GET(x) (((uint32_t)(x) & TAMP_IRQ_EN_LOCK_MASK) >> TAMP_IRQ_EN_LOCK_SHIFT)
  153. /*
  154. * IRQ_EN (RW)
  155. *
  156. * interrupt enable, each bit represents one tamper pin
  157. * 0: interrupt disabled
  158. * 1: interrupt enabled
  159. */
  160. #define TAMP_IRQ_EN_IRQ_EN_MASK (0xFFFU)
  161. #define TAMP_IRQ_EN_IRQ_EN_SHIFT (0U)
  162. #define TAMP_IRQ_EN_IRQ_EN_SET(x) (((uint32_t)(x) << TAMP_IRQ_EN_IRQ_EN_SHIFT) & TAMP_IRQ_EN_IRQ_EN_MASK)
  163. #define TAMP_IRQ_EN_IRQ_EN_GET(x) (((uint32_t)(x) & TAMP_IRQ_EN_IRQ_EN_MASK) >> TAMP_IRQ_EN_IRQ_EN_SHIFT)
  164. /* TAMP register group index macro definition */
  165. #define TAMP_TAMP_TAMP0 (0UL)
  166. #define TAMP_TAMP_TAMP1 (1UL)
  167. #define TAMP_TAMP_TAMP2 (2UL)
  168. #define TAMP_TAMP_TAMP3 (3UL)
  169. #define TAMP_TAMP_TAMP4 (4UL)
  170. #define TAMP_TAMP_TAMP5 (5UL)
  171. #endif /* HPM_TAMP_H */