soc_se.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. /*
  2. * Copyright (c) 2020 Actions Semiconductor Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file security engine for Actions SoC
  8. */
  9. #ifndef SOC_SE_H_
  10. #define SOC_SE_H_
  11. //#include <device.h>
  12. //#include <drivers/dma.h>
  13. #include <soc.h>
  14. /* AES Register Addresses ***************************************************/
  15. #define AES_CTRL (SE_REG_BASE+0x0000)
  16. #define AES_MODE (SE_REG_BASE+0x0004)
  17. #define AES_LEN (SE_REG_BASE+0x0008)
  18. #define AES_KEY0 (SE_REG_BASE+0x0010)
  19. #define AES_KEY1 (SE_REG_BASE+0x0014)
  20. #define AES_KEY2 (SE_REG_BASE+0x0018)
  21. #define AES_KEY3 (SE_REG_BASE+0x001c)
  22. #define AES_KEY4 (SE_REG_BASE+0x0020)
  23. #define AES_KEY5 (SE_REG_BASE+0x0024)
  24. #define AES_KEY6 (SE_REG_BASE+0x0028)
  25. #define AES_KEY7 (SE_REG_BASE+0x002c)
  26. #define AES_IV0 (SE_REG_BASE+0x0040)
  27. #define AES_IV1 (SE_REG_BASE+0x0044)
  28. #define AES_IV2 (SE_REG_BASE+0x0048)
  29. #define AES_IV3 (SE_REG_BASE+0x004c)
  30. #define AES_INOUTFIFOCTL (SE_REG_BASE+0x0080)
  31. #define AES_INFIFO (SE_REG_BASE+0x0084)
  32. #define AES_OUTFIFO (SE_REG_BASE+0x0088)
  33. /* SHA Register Addresses ***************************************************/
  34. #define SHA_CTRL (SE_REG_BASE+0x0200)
  35. #define SHA_MODE (SE_REG_BASE+0x0204)
  36. #define SHA_LEN (SE_REG_BASE+0x0208)
  37. #define SHA_INFIFOCTL (SE_REG_BASE+0x020c)
  38. #define SHA_INFIFO (SE_REG_BASE+0x0210)
  39. #define SHA_DATAOUT (SE_REG_BASE+0x0214)
  40. #define SHA_TOTAL_LEN (SE_REG_BASE+0x0218)
  41. /* TRNG Register Addresses **************************************************/
  42. #define TRNG_CTRL (SE_REG_BASE+0x0400)
  43. #define TRNG_LR (SE_REG_BASE+0x0404)
  44. #define TRNG_MR (SE_REG_BASE+0x0408)
  45. #define TRNG_ILR (SE_REG_BASE+0x040c)
  46. #define TRNG_IMR (SE_REG_BASE+0x0410)
  47. /* CRC Register Addresses ***************************************************/
  48. #define CRC_CTRL (SE_REG_BASE+0x0600)
  49. #define CRC_MODE (SE_REG_BASE+0x0604)
  50. #define CRC_LEN (SE_REG_BASE+0x0608)
  51. #define CRC_INFIFOCTL (SE_REG_BASE+0x060c)
  52. #define CRC_INFIFO (SE_REG_BASE+0x0610)
  53. #define CRC_DATAOUT (SE_REG_BASE+0x0614)
  54. #define CRC_DATAINIT (SE_REG_BASE+0x0618)
  55. #define CRC_DATAOUTXOR (SE_REG_BASE+0x061c)
  56. #define CRC_DEBUGOUT (SE_REG_BASE+0x0630)
  57. /* SE FIFO Register *********************************************************/
  58. #define SE_FIFOCTRL (SE_REG_BASE+0x0800)
  59. #define SE_FIFOCTRL_AES (0)
  60. #define SE_FIFOCTRL_CRC (0x1)
  61. #define SE_FIFOCTRL_SHA (0x2)
  62. /* AES Register Bit Definitions *********************************************/
  63. /* Control Register */
  64. #define AES_CTRL_EN_SHIFT (0)
  65. #define AES_CTRL_EN_MASK (0x1 << AES_CTRL_EN_SHIFT)
  66. #define AES_CTRL_EN (0x1 << AES_CTRL_EN_SHIFT)
  67. #define AES_CTRL_RESET_SHIFT (1)
  68. #define AES_CTRL_RESET_MASK (0x1 << AES_CTRL_RESET_SHIFT)
  69. #define AES_CTRL_RESET (0x1 << AES_CTRL_RESET_SHIFT)
  70. #define AES_CTRL_INT_EN_SHIFT (2)
  71. #define AES_CTRL_INT_EN_MASK (0x1 << AES_CTRL_INT_EN_SHIFT)
  72. #define AES_CTRL_INT_EN (0x1 << AES_CTRL_INT_EN_SHIFT)
  73. #define AES_CTRL_CLK_EN_SHIFT (3)
  74. #define AES_CTRL_CLK_EN_MASK (0x1 << AES_CTRL_CLK_EN_SHIFT)
  75. #define AES_CTRL_CLK_EN (0x1 << AES_CTRL_CLK_EN_SHIFT)
  76. #define AES_CTRL_CNT_OVF_SHIFT (30)
  77. #define AES_CTRL_CNT_OVF_MASK (0x1 << AES_CTRL_CNT_OVF_SHIFT)
  78. #define AES_CTRL_CNT_OVF (0x1 << AES_CTRL_CNT_OVF_SHIFT)
  79. #define AES_CTRL_END_SHIFT (31)
  80. #define AES_CTRL_END_MASK (0x1 << AES_CTRL_END_SHIFT)
  81. #define AES_CTRL_END (0x1 << AES_CTRL_END_SHIFT)
  82. /* Mode Register */
  83. #define AES_MODE_TYP_SHIFT (0)
  84. #define AES_MODE_TYP_MASK (0x1 << AES_MODE_TYP_SHIFT)
  85. #define AES_MODE_DECRYPT (0x0 << AES_MODE_TYP_SHIFT)
  86. #define AES_MODE_ENCRYPT (0x1 << AES_MODE_TYP_SHIFT)
  87. #define AES_MODE_MOD_SHIFT (2)
  88. #define AES_MODE_MOD_MASK (0x3 << AES_MODE_MOD_SHIFT)
  89. #define AES_MODE_MOD_ECB (0x0 << AES_MODE_MOD_SHIFT)
  90. #define AES_MODE_MOD_CTR (0x1 << AES_MODE_MOD_SHIFT)
  91. #define AES_MODE_MOD_CBC (0x2 << AES_MODE_MOD_SHIFT)
  92. #define AES_MODE_MOD_CBC_CTS (0x3 << AES_MODE_MOD_SHIFT)
  93. #define AES_MODE_BYPASS_SHIFT (4)
  94. #define AES_MODE_BYPASS_MASK (0x1 << AES_MODE_BYPASS_SHIFT)
  95. #define AES_MODE_BYPASS_DECRYPT (0x1 << AES_MODE_BYPASS_SHIFT)
  96. #define AES_MODE_IV_UPDAT_SHIFT (8)
  97. #define AES_MODE_IV_UPDAT_MASK (0x1 << AES_MODE_IV_UPDAT_SHIFT)
  98. #define AES_MODE_IV_UPDAT (0x1 << AES_MODE_IV_UPDAT_SHIFT)
  99. #define AES_MODE_KEY_SRC_SHIFT (16)
  100. #define AES_MODE_KEY_SRC_MASK (0x1 << AES_MODE_KEY_SRC_SHIFT)
  101. #define AES_MODE_REG_KEY (0x1 << AES_MODE_KEY_SRC_SHIFT)
  102. #define AES_MODE_KEY_SIZE_SHIFT (17)
  103. #define AES_MODE_KEY_SIZE_MASK (0x1 << AES_MODE_KEY_SIZE_SHIFT)
  104. #define AES_MODE_KEY_128BIT (0x0 << AES_MODE_KEY_SIZE_SHIFT)
  105. #define AES_MODE_KEY_192BIT (0x1 << AES_MODE_KEY_SIZE_SHIFT)
  106. #define AES_MODE_KEY_256BIT (0x2 << AES_MODE_KEY_SIZE_SHIFT)
  107. /* InOutFIFO Control Register */
  108. #define AES_FIFOCTL_INFIFODE_SHIFT (1)
  109. #define AES_FIFOCTL_INFIFODE_MASK (0x1 << AES_FIFOCTL_INFIFODE_SHIFT)
  110. #define AES_FIFOCTL_INFIFODE (0x1 << AES_FIFOCTL_INFIFODE_SHIFT)
  111. #define AES_FIFOCTL_OUTFIFODE_SHIFT (5)
  112. #define AES_FIFOCTL_OUTFIFODE_MASK (0x1 << AES_FIFOCTL_OUTFIFODE_SHIFT)
  113. #define AES_FIFOCTL_OUTFIFODE (0x1 << AES_FIFOCTL_OUTFIFODE_SHIFT)
  114. #define AES_FIFOCTL_OUTFIFOFP_SHIFT (9)
  115. #define AES_FIFOCTL_OUTFIFOFP_MASK (0x1 << AES_FIFOCTL_OUTFIFOFP_SHIFT)
  116. #define AES_FIFOCTL_OUTFIFOFP (0x1 << AES_FIFOCTL_OUTFIFOFP_SHIFT)
  117. #define AES_FIFOCTL_OUTFIFOLP_SHIFT (10)
  118. #define AES_FIFOCTL_OUTFIFOLP_MASK (0x1 << AES_FIFOCTL_OUTFIFOLP_SHIFT)
  119. #define AES_FIFOCTL_OUTFIFOLP (0x1 << AES_FIFOCTL_OUTFIFOLP_SHIFT)
  120. /* TRNG Register Bit Definitions ********************************************/
  121. /* Control Register */
  122. #define TRNG_CTRL_EN_SHIFT (0)
  123. #define TRNG_CTRL_EN_MASK (0x1 << TRNG_CTRL_EN_SHIFT)
  124. #define TRNG_CTRL_EN (0x1 << TRNG_CTRL_EN_SHIFT)
  125. #define TRNG_CTRL_MODE_SHIFT (1)
  126. #define TRNG_CTRL_MODE_MASK (0x3 << TRNG_CTRL_MODE_SHIFT)
  127. #define TRNG_CTRL_MODE_OSC_LFSR (0x0 << TRNG_CTRL_MODE_SHIFT)
  128. #define TRNG_CTRL_MODE_OSC (0x1 << TRNG_CTRL_MODE_SHIFT)
  129. #define TRNG_CTRL_MODE_LFSR (0x2 << TRNG_CTRL_MODE_SHIFT)
  130. #define TRNG_CTRL_CLK_EN_SHIFT (3)
  131. #define TRNG_CTRL_CLK_EN_MASK (0x1 << TRNG_CTRL_CLK_EN_SHIFT)
  132. #define TRNG_CTRL_CLK_EN (0x1 << TRNG_CTRL_CLK_EN_SHIFT)
  133. #define TRNG_CTRL_OSAMPLE_MOD_SHIFT (6)
  134. #define TRNG_CTRL_OSAMPLE_MOD_MASK (0x3 << TRNG_CTRL_OSAMPLE_MOD_SHIFT)
  135. #define TRNG_CTRL_OSAMPLE_HIG_LOW (0x0 << TRNG_CTRL_OSAMPLE_MOD_SHIFT)
  136. #define TRNG_CTRL_OSAMPLE_HIG (0x1 << TRNG_CTRL_OSAMPLE_MOD_SHIFT)
  137. #define TRNG_CTRL_OSAMPLE_LOW (0x2 << TRNG_CTRL_OSAMPLE_MOD_SHIFT)
  138. #define TRNG_CTRL_OPOST_EN_SHIFT (8)
  139. #define TRNG_CTRL_OPOST_EN_MASK (0x1 << TRNG_CTRL_OPOST_EN_SHIFT)
  140. #define TRNG_CTRL_OPOST_EN (0x1 << TRNG_CTRL_OPOST_EN_SHIFT)
  141. #define TRNG_CTRL_OXOR_MODE_SHIFT (9)
  142. #define TRNG_CTRL_OXOR_MODE_MASK (0x1 << TRNG_CTRL_OXOR_MODE_SHIFT)
  143. #define TRNG_CTRL_OXOR_MODE (0x1 << TRNG_CTRL_OXOR_MODE_SHIFT)
  144. #define TRNG_CTRL_SMPCLK_MODE_SHIFT (10)
  145. #define TRNG_CTRL_SMPCLK_MODE_MASK (0x1 << TRNG_CTRL_SMPCLK_MODE_SHIFT)
  146. #define TRNG_CTRL_SMP_SE_CLK (0x1 << TRNG_CTRL_SMPCLK_MODE_SHIFT)
  147. #define TRNG_CTRL_READY_SHIFT (31)
  148. #define TRNG_CTRL_READY_MASK (0x1 << TRNG_CTRL_READY_SHIFT)
  149. #define TRNG_CTRL_READY (0x1 << TRNG_CTRL_READY_SHIFT)
  150. /* CRC Register Bit Definitions *********************************************/
  151. /* Control Register */
  152. #define CRC_CTRL_EN_SHIFT (0)
  153. #define CRC_CTRL_EN_MASK (0x1 << CRC_CTRL_EN_SHIFT)
  154. #define CRC_CTRL_EN (0x1 << CRC_CTRL_EN_SHIFT)
  155. #define CRC_CTRL_RESET_SHIFT (1)
  156. #define CRC_CTRL_RESET_MASK (0x1 << CRC_CTRL_RESET_SHIFT)
  157. #define CRC_CTRL_RESET (0x1 << CRC_CTRL_RESET_SHIFT)
  158. #define CRC_CTRL_INT_EN_SHIFT (2)
  159. #define CRC_CTRL_INT_EN_MASK (0x1 << CRC_CTRL_INT_EN_SHIFT)
  160. #define CRC_CTRL_INT_EN (0x1 << CRC_CTRL_INT_EN_SHIFT)
  161. #define CRC_CTRL_CLK_EN_SHIFT (3)
  162. #define CRC_CTRL_CLK_EN_MASK (0x1 << CRC_CTRL_CLK_EN_SHIFT)
  163. #define CRC_CTRL_CLK_EN (0x1 << CRC_CTRL_CLK_EN_SHIFT)
  164. #define CRC_CTRL_END_SHIFT (31)
  165. #define CRC_CTRL_END_MASK (0x1 << CRC_CTRL_END_SHIFT)
  166. #define CRC_CTRL_END (0x1 << CRC_CTRL_END_SHIFT)
  167. /* Mode Register */
  168. #define CRC_MODE_TYPE_SHIFT (0)
  169. #define CRC_MODE_TYPE_MASK (0x1 << CRC_MODE_TYPE_SHIFT)
  170. #define CRC_MODE_TYPE_CRC32 (0x1 << CRC_MODE_TYPE_SHIFT)
  171. #define CRC_MODE_CRC16_POLY_SHIFT (4)
  172. #define CRC_MODE_CRC16_POLY_8005 (0x1 << CRC_MODE_CRC16_POLY_SHIFT)
  173. #define CRC_MODE_IN_INV_SHIFT (12)
  174. #define CRC_MODE_IN_INV_TRUE (0x1 << CRC_MODE_IN_INV_SHIFT)
  175. #define CRC_MODE_OUT_INV_SHIFT (13)
  176. #define CRC_MODE_OUT_INV_TRUE (0x1 << CRC_MODE_OUT_INV_SHIFT)
  177. #define CRC_MODE_INITDATA_UPD_SHIFT (17)
  178. #define CRC_MODE_INITDATA_UPD (0x1 << CRC_MODE_INITDATA_UPD_SHIFT)
  179. /* InFIFO Control Register */
  180. #define CRC_INFIFOCTL_DE_SHIFT (1)
  181. #define CRC_INFIFOCTL_DE_MASK (0x1 << CRC_INFIFOCTL_DE_SHIFT)
  182. #define CRC_INFIFOCTL_DE (0x1 << CRC_INFIFOCTL_DE_SHIFT)
  183. /* SHA Register Bit Definitions *********************************************/
  184. /* Control Register */
  185. #define SHA_CTRL_EN_SHIFT (0)
  186. #define SHA_CTRL_EN_MASK (0x1 << SHA_CTRL_EN_SHIFT)
  187. #define SHA_CTRL_EN (0x1 << SHA_CTRL_EN_SHIFT)
  188. #define SHA_CTRL_RESET_SHIFT (1)
  189. #define SHA_CTRL_RESET_MASK (0x1 << SHA_CTRL_RESET_SHIFT)
  190. #define SHA_CTRL_RESET (0x1 << SHA_CTRL_RESET_SHIFT)
  191. #define SHA_CTRL_INT_EN_SHIFT (2)
  192. #define SHA_CTRL_INT_EN_MASK (0x1 << SHA_CTRL_INT_EN_SHIFT)
  193. #define SHA_CTRL_INT_EN (0x1 << SHA_CTRL_INT_EN_SHIFT)
  194. #define SHA_CTRL_CLK_EN_SHIFT (3)
  195. #define SHA_CTRL_CLK_EN_MASK (0x1 << SHA_CTRL_CLK_EN_SHIFT)
  196. #define SHA_CTRL_CLK_EN (0x1 << SHA_CTRL_CLK_EN_SHIFT)
  197. #define SHA_CTRL_GAT_EN_SHIFT (4)
  198. #define SHA_CTRL_GAT_EN_MASK (0x1 << SHA_CTRL_GAT_EN_SHIFT)
  199. #define SHA_CTRL_GAT_EN (0x1 << SHA_CTRL_GAT_EN_SHIFT)
  200. #define SHA_CTRL_LEN_ERR_SHIFT (30)
  201. #define SHA_CTRL_LEN_ERR_MASK (0x1 << SHA_CTRL_LEN_ERR_SHIFT)
  202. #define SHA_CTRL_LEN_ERR (0x1 << SHA_CTRL_LEN_ERR_SHIFT)
  203. #define SHA_CTRL_END_SHIFT (31)
  204. #define SHA_CTRL_END_MASK (0x1 << SHA_CTRL_END_SHIFT)
  205. #define SHA_CTRL_END (0x1 << SHA_CTRL_END_SHIFT)
  206. /* Mode Register */
  207. #define SHA_MODE_TYPE_SHIFT (0)
  208. #define SHA_MODE_TYPE_MASK (0x3 << SHA_MODE_TYPE_SHIFT)
  209. #define SHA_MODE_TYPE_1 (0x0 << SHA_MODE_TYPE_SHIFT)
  210. #define SHA_MODE_TYPE_256 (0x1 << SHA_MODE_TYPE_SHIFT)
  211. #define SHA_MODE_TYPE_224 (0x2 << SHA_MODE_TYPE_SHIFT)
  212. #define SHA_MODE_PADDING_SHIFT (4)
  213. #define SHA_MODE_PADDING_MASK (0x1 << SHA_MODE_PADDING_SHIFT)
  214. #define SHA_MODE_PADDING (0x1 << SHA_MODE_PADDING_SHIFT)
  215. #define SHA_MODE_FIRST_SHIFT (5)
  216. #define SHA_MODE_FIRST_MASK (0x1 << SHA_MODE_FIRST_SHIFT)
  217. #define SHA_MODE_FIRST (0x1 << SHA_MODE_FIRST_SHIFT)
  218. /* InFIFO Control Register */
  219. #define SHA_INFIFOCTL_DE_SHIFT (1)
  220. #define SHA_INFIFOCTL_DE_MASK (0x1 << SHA_INFIFOCTL_DE_SHIFT)
  221. #define SHA_INFIFOCTL_DE (0x1 << SHA_INFIFOCTL_DE_SHIFT)
  222. struct acts_se_data {
  223. void *dma_dev;
  224. uint32_t dma_chan;
  225. uint32_t dma_chan_out; /*only aes need*/
  226. };
  227. #if 0
  228. int se_aes_init(void);
  229. int se_aes_deinit(void);
  230. uint32_t se_aes_process(int mode, uint8_t *in_buf, uint32_t in_len, uint8_t *out_buf);
  231. #endif
  232. int se_trng_init(void);
  233. int se_trng_deinit(void);
  234. uint32_t se_trng_process(uint32_t *trng_low, uint32_t *trng_high);
  235. #if 0
  236. int se_crc_init(void);
  237. int se_crc_deinit(void);
  238. #define CRC32_MODE_CRC32 0
  239. #define CRC32_MODE_MPEG2 1
  240. #define CONFIG_CRC32_MODE CRC32_MODE_CRC32
  241. uint32_t se_crc32_process(uint8_t *buffer, uint32_t buf_len, uint32_t crc_initial, bool last);
  242. uint32_t se_crc32(uint8_t *buffer, uint32_t buf_len);
  243. #define CRC16_MODE_CCITT 0
  244. #define CRC16_MODE_CCITT_FALSE 1
  245. #define CRC16_MODE_XMODEM 2
  246. #define CRC16_MODE_X25 3
  247. #define CRC16_MODE_MODBUS 4
  248. #define CRC16_MODE_IBM 5
  249. #define CRC16_MODE_MAXIM 6
  250. #define CRC16_MODE_USB 7
  251. #define CONFIG_CRC16_MODE CRC16_MODE_CCITT
  252. uint16_t se_crc16_process(uint8_t *buffer, uint32_t buf_len, uint16_t crc_initial, bool last);
  253. uint16_t se_crc16(uint8_t *buffer, uint32_t buf_len);
  254. #endif
  255. #endif /* SOC_SE_H_ */