hpm_sec_regs.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /*
  2. * Copyright (c) 2021 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_SEC_H
  8. #define HPM_SEC_H
  9. typedef struct {
  10. __RW uint32_t SECURE_STATE; /* 0x0: Secure state */
  11. __RW uint32_t SECURE_STATE_CONFIG; /* 0x4: secure state configuration */
  12. __RW uint32_t VIOLATION_CONFIG; /* 0x8: Security violation config */
  13. __RW uint32_t ESCALATE_CONFIG; /* 0xC: Escalate behavior on security event */
  14. __R uint32_t EVENT; /* 0x10: Event and escalate status */
  15. __R uint32_t LIFECYCLE; /* 0x14: Lifecycle */
  16. } SEC_Type;
  17. /* Bitfield definition for register: SECURE_STATE */
  18. /*
  19. * ALLOW_NSC (RO)
  20. *
  21. * Non-secure state allow
  22. * 0: system is not healthy to enter non-secure state, request to enter non-secure state will cause a fail state
  23. * 1: system is healthy to enter non-secure state
  24. */
  25. #define SEC_SECURE_STATE_ALLOW_NSC_MASK (0x20000UL)
  26. #define SEC_SECURE_STATE_ALLOW_NSC_SHIFT (17U)
  27. #define SEC_SECURE_STATE_ALLOW_NSC_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_ALLOW_NSC_MASK) >> SEC_SECURE_STATE_ALLOW_NSC_SHIFT)
  28. /*
  29. * ALLOW_SEC (RO)
  30. *
  31. * Secure state allow
  32. * 0: system is not healthy to enter secure state, request to enter non-secure state will cause a fail state
  33. * 1: system is healthy to enter secure state
  34. */
  35. #define SEC_SECURE_STATE_ALLOW_SEC_MASK (0x10000UL)
  36. #define SEC_SECURE_STATE_ALLOW_SEC_SHIFT (16U)
  37. #define SEC_SECURE_STATE_ALLOW_SEC_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_ALLOW_SEC_MASK) >> SEC_SECURE_STATE_ALLOW_SEC_SHIFT)
  38. /*
  39. * PMIC_FAIL (RW)
  40. *
  41. * PMIC secure state one hot indicator
  42. * 0: secure state is not in fail state
  43. * 1: secure state is in fail state
  44. */
  45. #define SEC_SECURE_STATE_PMIC_FAIL_MASK (0x80U)
  46. #define SEC_SECURE_STATE_PMIC_FAIL_SHIFT (7U)
  47. #define SEC_SECURE_STATE_PMIC_FAIL_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_PMIC_FAIL_SHIFT) & SEC_SECURE_STATE_PMIC_FAIL_MASK)
  48. #define SEC_SECURE_STATE_PMIC_FAIL_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_PMIC_FAIL_MASK) >> SEC_SECURE_STATE_PMIC_FAIL_SHIFT)
  49. /*
  50. * PMIC_NSC (RW)
  51. *
  52. * PMIC secure state one hot indicator
  53. * 0: secure state is not in non-secure state
  54. * 1: secure state is in non-secure state
  55. */
  56. #define SEC_SECURE_STATE_PMIC_NSC_MASK (0x40U)
  57. #define SEC_SECURE_STATE_PMIC_NSC_SHIFT (6U)
  58. #define SEC_SECURE_STATE_PMIC_NSC_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_PMIC_NSC_SHIFT) & SEC_SECURE_STATE_PMIC_NSC_MASK)
  59. #define SEC_SECURE_STATE_PMIC_NSC_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_PMIC_NSC_MASK) >> SEC_SECURE_STATE_PMIC_NSC_SHIFT)
  60. /*
  61. * PMIC_SEC (RW)
  62. *
  63. * PMIC secure state one hot indicator
  64. * 0: secure state is not in secure state
  65. * 1: secure state is in secure state
  66. */
  67. #define SEC_SECURE_STATE_PMIC_SEC_MASK (0x20U)
  68. #define SEC_SECURE_STATE_PMIC_SEC_SHIFT (5U)
  69. #define SEC_SECURE_STATE_PMIC_SEC_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_PMIC_SEC_SHIFT) & SEC_SECURE_STATE_PMIC_SEC_MASK)
  70. #define SEC_SECURE_STATE_PMIC_SEC_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_PMIC_SEC_MASK) >> SEC_SECURE_STATE_PMIC_SEC_SHIFT)
  71. /*
  72. * PMIC_INS (RW)
  73. *
  74. * PMIC secure state one hot indicator
  75. * 0: secure state is not in inspect state
  76. * 1: secure state is in inspect state
  77. */
  78. #define SEC_SECURE_STATE_PMIC_INS_MASK (0x10U)
  79. #define SEC_SECURE_STATE_PMIC_INS_SHIFT (4U)
  80. #define SEC_SECURE_STATE_PMIC_INS_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_PMIC_INS_SHIFT) & SEC_SECURE_STATE_PMIC_INS_MASK)
  81. #define SEC_SECURE_STATE_PMIC_INS_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_PMIC_INS_MASK) >> SEC_SECURE_STATE_PMIC_INS_SHIFT)
  82. /* Bitfield definition for register: SECURE_STATE_CONFIG */
  83. /*
  84. * LOCK (RW)
  85. *
  86. * Lock bit of allow restart setting, once locked, lock bit itself and configuration register will keep value until next reset
  87. * 0: not locked, register can be modified
  88. * 1: register locked, write access to the register is ignored
  89. */
  90. #define SEC_SECURE_STATE_CONFIG_LOCK_MASK (0x8U)
  91. #define SEC_SECURE_STATE_CONFIG_LOCK_SHIFT (3U)
  92. #define SEC_SECURE_STATE_CONFIG_LOCK_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_CONFIG_LOCK_SHIFT) & SEC_SECURE_STATE_CONFIG_LOCK_MASK)
  93. #define SEC_SECURE_STATE_CONFIG_LOCK_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_CONFIG_LOCK_MASK) >> SEC_SECURE_STATE_CONFIG_LOCK_SHIFT)
  94. /*
  95. * ALLOW_RESTART (RW)
  96. *
  97. * allow secure state restart from fail state
  98. * 0: restart is not allowed, only hardware reset can recover secure state
  99. * 1: software is allowed to switch to inspect state from fail state
  100. */
  101. #define SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_MASK (0x1U)
  102. #define SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_SHIFT (0U)
  103. #define SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_SET(x) (((uint32_t)(x) << SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_SHIFT) & SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_MASK)
  104. #define SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_GET(x) (((uint32_t)(x) & SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_MASK) >> SEC_SECURE_STATE_CONFIG_ALLOW_RESTART_SHIFT)
  105. /* Bitfield definition for register: VIOLATION_CONFIG */
  106. /*
  107. * LOCK_NSC (RW)
  108. *
  109. * Lock bit non-secure violation setting, once locked, lock bit itself and configuration will keep value until next reset
  110. * 0: not locked, configuration can be modified
  111. * 1: register locked, write access to the configuration is ignored
  112. */
  113. #define SEC_VIOLATION_CONFIG_LOCK_NSC_MASK (0x80000000UL)
  114. #define SEC_VIOLATION_CONFIG_LOCK_NSC_SHIFT (31U)
  115. #define SEC_VIOLATION_CONFIG_LOCK_NSC_SET(x) (((uint32_t)(x) << SEC_VIOLATION_CONFIG_LOCK_NSC_SHIFT) & SEC_VIOLATION_CONFIG_LOCK_NSC_MASK)
  116. #define SEC_VIOLATION_CONFIG_LOCK_NSC_GET(x) (((uint32_t)(x) & SEC_VIOLATION_CONFIG_LOCK_NSC_MASK) >> SEC_VIOLATION_CONFIG_LOCK_NSC_SHIFT)
  117. /*
  118. * NSC_VIO_CFG (RW)
  119. *
  120. * configuration of non-secure state violations, each bit represents one security event
  121. * 0: event is not a security violation
  122. * 1: event is a security violation
  123. */
  124. #define SEC_VIOLATION_CONFIG_NSC_VIO_CFG_MASK (0x7FFF0000UL)
  125. #define SEC_VIOLATION_CONFIG_NSC_VIO_CFG_SHIFT (16U)
  126. #define SEC_VIOLATION_CONFIG_NSC_VIO_CFG_SET(x) (((uint32_t)(x) << SEC_VIOLATION_CONFIG_NSC_VIO_CFG_SHIFT) & SEC_VIOLATION_CONFIG_NSC_VIO_CFG_MASK)
  127. #define SEC_VIOLATION_CONFIG_NSC_VIO_CFG_GET(x) (((uint32_t)(x) & SEC_VIOLATION_CONFIG_NSC_VIO_CFG_MASK) >> SEC_VIOLATION_CONFIG_NSC_VIO_CFG_SHIFT)
  128. /*
  129. * LOCK_SEC (RW)
  130. *
  131. * Lock bit secure violation setting, once locked, lock bit itself and configuration will keep value until next reset
  132. * 0: not locked, configuration can be modified
  133. * 1: register locked, write access to the configuration is ignored
  134. */
  135. #define SEC_VIOLATION_CONFIG_LOCK_SEC_MASK (0x8000U)
  136. #define SEC_VIOLATION_CONFIG_LOCK_SEC_SHIFT (15U)
  137. #define SEC_VIOLATION_CONFIG_LOCK_SEC_SET(x) (((uint32_t)(x) << SEC_VIOLATION_CONFIG_LOCK_SEC_SHIFT) & SEC_VIOLATION_CONFIG_LOCK_SEC_MASK)
  138. #define SEC_VIOLATION_CONFIG_LOCK_SEC_GET(x) (((uint32_t)(x) & SEC_VIOLATION_CONFIG_LOCK_SEC_MASK) >> SEC_VIOLATION_CONFIG_LOCK_SEC_SHIFT)
  139. /*
  140. * SEC_VIO_CFG (RW)
  141. *
  142. * configuration of secure state violations, each bit represents one security event
  143. * 0: event is not a security violation
  144. * 1: event is a security violation
  145. */
  146. #define SEC_VIOLATION_CONFIG_SEC_VIO_CFG_MASK (0x7FFFU)
  147. #define SEC_VIOLATION_CONFIG_SEC_VIO_CFG_SHIFT (0U)
  148. #define SEC_VIOLATION_CONFIG_SEC_VIO_CFG_SET(x) (((uint32_t)(x) << SEC_VIOLATION_CONFIG_SEC_VIO_CFG_SHIFT) & SEC_VIOLATION_CONFIG_SEC_VIO_CFG_MASK)
  149. #define SEC_VIOLATION_CONFIG_SEC_VIO_CFG_GET(x) (((uint32_t)(x) & SEC_VIOLATION_CONFIG_SEC_VIO_CFG_MASK) >> SEC_VIOLATION_CONFIG_SEC_VIO_CFG_SHIFT)
  150. /* Bitfield definition for register: ESCALATE_CONFIG */
  151. /*
  152. * LOCK_NSC (RW)
  153. *
  154. * Lock bit non-secure escalate setting, once locked, lock bit itself and configuration will keep value until next reset
  155. * 0: not locked, configuration can be modified
  156. * 1: register locked, write access to the configuration is ignored
  157. */
  158. #define SEC_ESCALATE_CONFIG_LOCK_NSC_MASK (0x80000000UL)
  159. #define SEC_ESCALATE_CONFIG_LOCK_NSC_SHIFT (31U)
  160. #define SEC_ESCALATE_CONFIG_LOCK_NSC_SET(x) (((uint32_t)(x) << SEC_ESCALATE_CONFIG_LOCK_NSC_SHIFT) & SEC_ESCALATE_CONFIG_LOCK_NSC_MASK)
  161. #define SEC_ESCALATE_CONFIG_LOCK_NSC_GET(x) (((uint32_t)(x) & SEC_ESCALATE_CONFIG_LOCK_NSC_MASK) >> SEC_ESCALATE_CONFIG_LOCK_NSC_SHIFT)
  162. /*
  163. * NSC_VIO_CFG (RW)
  164. *
  165. * configuration of non-secure state escalates, each bit represents one security event
  166. * 0: event is not a security escalate
  167. * 1: event is a security escalate
  168. */
  169. #define SEC_ESCALATE_CONFIG_NSC_VIO_CFG_MASK (0x7FFF0000UL)
  170. #define SEC_ESCALATE_CONFIG_NSC_VIO_CFG_SHIFT (16U)
  171. #define SEC_ESCALATE_CONFIG_NSC_VIO_CFG_SET(x) (((uint32_t)(x) << SEC_ESCALATE_CONFIG_NSC_VIO_CFG_SHIFT) & SEC_ESCALATE_CONFIG_NSC_VIO_CFG_MASK)
  172. #define SEC_ESCALATE_CONFIG_NSC_VIO_CFG_GET(x) (((uint32_t)(x) & SEC_ESCALATE_CONFIG_NSC_VIO_CFG_MASK) >> SEC_ESCALATE_CONFIG_NSC_VIO_CFG_SHIFT)
  173. /*
  174. * LOCK_SEC (RW)
  175. *
  176. * Lock bit secure escalate setting, once locked, lock bit itself and configuration will keep value until next reset
  177. * 0: not locked, configuration can be modified
  178. * 1: register locked, write access to the configuration is ignored
  179. */
  180. #define SEC_ESCALATE_CONFIG_LOCK_SEC_MASK (0x8000U)
  181. #define SEC_ESCALATE_CONFIG_LOCK_SEC_SHIFT (15U)
  182. #define SEC_ESCALATE_CONFIG_LOCK_SEC_SET(x) (((uint32_t)(x) << SEC_ESCALATE_CONFIG_LOCK_SEC_SHIFT) & SEC_ESCALATE_CONFIG_LOCK_SEC_MASK)
  183. #define SEC_ESCALATE_CONFIG_LOCK_SEC_GET(x) (((uint32_t)(x) & SEC_ESCALATE_CONFIG_LOCK_SEC_MASK) >> SEC_ESCALATE_CONFIG_LOCK_SEC_SHIFT)
  184. /*
  185. * SEC_VIO_CFG (RW)
  186. *
  187. * configuration of secure state escalates, each bit represents one security event
  188. * 0: event is not a security escalate
  189. * 1: event is a security escalate
  190. */
  191. #define SEC_ESCALATE_CONFIG_SEC_VIO_CFG_MASK (0x7FFFU)
  192. #define SEC_ESCALATE_CONFIG_SEC_VIO_CFG_SHIFT (0U)
  193. #define SEC_ESCALATE_CONFIG_SEC_VIO_CFG_SET(x) (((uint32_t)(x) << SEC_ESCALATE_CONFIG_SEC_VIO_CFG_SHIFT) & SEC_ESCALATE_CONFIG_SEC_VIO_CFG_MASK)
  194. #define SEC_ESCALATE_CONFIG_SEC_VIO_CFG_GET(x) (((uint32_t)(x) & SEC_ESCALATE_CONFIG_SEC_VIO_CFG_MASK) >> SEC_ESCALATE_CONFIG_SEC_VIO_CFG_SHIFT)
  195. /* Bitfield definition for register: EVENT */
  196. /*
  197. * EVENT (RO)
  198. *
  199. * local event statue, each bit represents one security event
  200. */
  201. #define SEC_EVENT_EVENT_MASK (0xFFFF0000UL)
  202. #define SEC_EVENT_EVENT_SHIFT (16U)
  203. #define SEC_EVENT_EVENT_GET(x) (((uint32_t)(x) & SEC_EVENT_EVENT_MASK) >> SEC_EVENT_EVENT_SHIFT)
  204. /*
  205. * PMIC_ESC_NSC (RO)
  206. *
  207. * PMIC is escalating non-secure event
  208. */
  209. #define SEC_EVENT_PMIC_ESC_NSC_MASK (0x8U)
  210. #define SEC_EVENT_PMIC_ESC_NSC_SHIFT (3U)
  211. #define SEC_EVENT_PMIC_ESC_NSC_GET(x) (((uint32_t)(x) & SEC_EVENT_PMIC_ESC_NSC_MASK) >> SEC_EVENT_PMIC_ESC_NSC_SHIFT)
  212. /*
  213. * PMIC_ESC_SEC (RO)
  214. *
  215. * PMIC is escalting secure event
  216. */
  217. #define SEC_EVENT_PMIC_ESC_SEC_MASK (0x4U)
  218. #define SEC_EVENT_PMIC_ESC_SEC_SHIFT (2U)
  219. #define SEC_EVENT_PMIC_ESC_SEC_GET(x) (((uint32_t)(x) & SEC_EVENT_PMIC_ESC_SEC_MASK) >> SEC_EVENT_PMIC_ESC_SEC_SHIFT)
  220. /* Bitfield definition for register: LIFECYCLE */
  221. /*
  222. * LIFECYCLE (RO)
  223. *
  224. * lifecycle status,
  225. * bit7: lifecycle_debate,
  226. * bit6: lifecycle_scribe,
  227. * bit5: lifecycle_no_ret,
  228. * bit4: lifecycle_return,
  229. * bit3: lifecycle_secure,
  230. * bit2: lifecycle_nonsec,
  231. * bit1: lifecycle_create,
  232. * bit0: lifecycle_unknow
  233. */
  234. #define SEC_LIFECYCLE_LIFECYCLE_MASK (0xFFU)
  235. #define SEC_LIFECYCLE_LIFECYCLE_SHIFT (0U)
  236. #define SEC_LIFECYCLE_LIFECYCLE_GET(x) (((uint32_t)(x) & SEC_LIFECYCLE_LIFECYCLE_MASK) >> SEC_LIFECYCLE_LIFECYCLE_SHIFT)
  237. #endif /* HPM_SEC_H */