hpm_sdp_regs.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_SDP_H
  8. #define HPM_SDP_H
  9. typedef struct {
  10. __RW uint32_t SDPCR; /* 0x0: SDP control register */
  11. __RW uint32_t MODCTRL; /* 0x4: Mod control register. */
  12. __RW uint32_t PKTCNT; /* 0x8: packet counter registers. */
  13. __RW uint32_t STA; /* 0xC: Status Registers */
  14. __RW uint32_t KEYADDR; /* 0x10: Key Address */
  15. __RW uint32_t KEYDAT; /* 0x14: Key Data */
  16. __RW uint32_t CIPHIV[4]; /* 0x18 - 0x24: Cipher Initializtion Vector 0 */
  17. __RW uint32_t HASWRD[8]; /* 0x28 - 0x44: Hash Data Word 0 */
  18. __RW uint32_t CMDPTR; /* 0x48: Command Pointer */
  19. __RW uint32_t NPKTPTR; /* 0x4C: Next Packet Address Pointer */
  20. __RW uint32_t PKTCTL; /* 0x50: Packet Control Registers */
  21. __RW uint32_t PKTSRC; /* 0x54: Packet Memory Source Address */
  22. __RW uint32_t PKTDST; /* 0x58: Packet Memory Destination Address */
  23. __RW uint32_t PKTBUF; /* 0x5C: Packet buffer size. */
  24. } SDP_Type;
  25. /* Bitfield definition for register: SDPCR */
  26. /*
  27. * SFTRST (RW)
  28. *
  29. * soft reset.
  30. * Write 1 then 0, to reset the SDP block.
  31. */
  32. #define SDP_SDPCR_SFTRST_MASK (0x80000000UL)
  33. #define SDP_SDPCR_SFTRST_SHIFT (31U)
  34. #define SDP_SDPCR_SFTRST_SET(x) (((uint32_t)(x) << SDP_SDPCR_SFTRST_SHIFT) & SDP_SDPCR_SFTRST_MASK)
  35. #define SDP_SDPCR_SFTRST_GET(x) (((uint32_t)(x) & SDP_SDPCR_SFTRST_MASK) >> SDP_SDPCR_SFTRST_SHIFT)
  36. /*
  37. * CLKGAT (RW)
  38. *
  39. * Clock Gate for the SDP main logic.
  40. * Write to 1 will clock gate for most logic of the SDP block, dynamic power saving when not use SDP block.
  41. */
  42. #define SDP_SDPCR_CLKGAT_MASK (0x40000000UL)
  43. #define SDP_SDPCR_CLKGAT_SHIFT (30U)
  44. #define SDP_SDPCR_CLKGAT_SET(x) (((uint32_t)(x) << SDP_SDPCR_CLKGAT_SHIFT) & SDP_SDPCR_CLKGAT_MASK)
  45. #define SDP_SDPCR_CLKGAT_GET(x) (((uint32_t)(x) & SDP_SDPCR_CLKGAT_MASK) >> SDP_SDPCR_CLKGAT_SHIFT)
  46. /*
  47. * CIPDIS (RO)
  48. *
  49. * Cipher Disable, read the info, whether the CIPHER features is besing disable in this chip or not.
  50. * 1, Cipher is disabled in this chip.
  51. * 0, Cipher is enabled in this chip.
  52. */
  53. #define SDP_SDPCR_CIPDIS_MASK (0x20000000UL)
  54. #define SDP_SDPCR_CIPDIS_SHIFT (29U)
  55. #define SDP_SDPCR_CIPDIS_GET(x) (((uint32_t)(x) & SDP_SDPCR_CIPDIS_MASK) >> SDP_SDPCR_CIPDIS_SHIFT)
  56. /*
  57. * HASDIS (RO)
  58. *
  59. * HASH Disable, read the info, whether the HASH features is besing disable in this chip or not.
  60. * 1, HASH is disabled in this chip.
  61. * 0, HASH is enabled in this chip.
  62. */
  63. #define SDP_SDPCR_HASDIS_MASK (0x10000000UL)
  64. #define SDP_SDPCR_HASDIS_SHIFT (28U)
  65. #define SDP_SDPCR_HASDIS_GET(x) (((uint32_t)(x) & SDP_SDPCR_HASDIS_MASK) >> SDP_SDPCR_HASDIS_SHIFT)
  66. /*
  67. * CIPHEN (RW)
  68. *
  69. * Cipher Enablement, controlled by SW.
  70. * 1, Cipher is Enabled.
  71. * 0, Cipher is Disabled.
  72. */
  73. #define SDP_SDPCR_CIPHEN_MASK (0x800000UL)
  74. #define SDP_SDPCR_CIPHEN_SHIFT (23U)
  75. #define SDP_SDPCR_CIPHEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_CIPHEN_SHIFT) & SDP_SDPCR_CIPHEN_MASK)
  76. #define SDP_SDPCR_CIPHEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_CIPHEN_MASK) >> SDP_SDPCR_CIPHEN_SHIFT)
  77. /*
  78. * HASHEN (RW)
  79. *
  80. * HASH Enablement, controlled by SW.
  81. * 1, HASH is Enabled.
  82. * 0, HASH is Disabled.
  83. */
  84. #define SDP_SDPCR_HASHEN_MASK (0x400000UL)
  85. #define SDP_SDPCR_HASHEN_SHIFT (22U)
  86. #define SDP_SDPCR_HASHEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_HASHEN_SHIFT) & SDP_SDPCR_HASHEN_MASK)
  87. #define SDP_SDPCR_HASHEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_HASHEN_MASK) >> SDP_SDPCR_HASHEN_SHIFT)
  88. /*
  89. * MCPEN (RW)
  90. *
  91. * Memory Copy Enablement, controlled by SW.
  92. * 1, Memory copy is Enabled.
  93. * 0, Memory copy is Disabled.
  94. */
  95. #define SDP_SDPCR_MCPEN_MASK (0x200000UL)
  96. #define SDP_SDPCR_MCPEN_SHIFT (21U)
  97. #define SDP_SDPCR_MCPEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_MCPEN_SHIFT) & SDP_SDPCR_MCPEN_MASK)
  98. #define SDP_SDPCR_MCPEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_MCPEN_MASK) >> SDP_SDPCR_MCPEN_SHIFT)
  99. /*
  100. * CONFEN (RW)
  101. *
  102. * Constant Fill to memory, controlled by SW.
  103. * 1, Constant fill is Enabled.
  104. * 0, Constant fill is Disabled.
  105. */
  106. #define SDP_SDPCR_CONFEN_MASK (0x100000UL)
  107. #define SDP_SDPCR_CONFEN_SHIFT (20U)
  108. #define SDP_SDPCR_CONFEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_CONFEN_SHIFT) & SDP_SDPCR_CONFEN_MASK)
  109. #define SDP_SDPCR_CONFEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_CONFEN_MASK) >> SDP_SDPCR_CONFEN_SHIFT)
  110. /*
  111. * DCRPDI (RW)
  112. *
  113. * Decryption Disable bit, Write to 1 to disable the decryption.
  114. */
  115. #define SDP_SDPCR_DCRPDI_MASK (0x80000UL)
  116. #define SDP_SDPCR_DCRPDI_SHIFT (19U)
  117. #define SDP_SDPCR_DCRPDI_SET(x) (((uint32_t)(x) << SDP_SDPCR_DCRPDI_SHIFT) & SDP_SDPCR_DCRPDI_MASK)
  118. #define SDP_SDPCR_DCRPDI_GET(x) (((uint32_t)(x) & SDP_SDPCR_DCRPDI_MASK) >> SDP_SDPCR_DCRPDI_SHIFT)
  119. /*
  120. * TSTPKT0IRQ (RW)
  121. *
  122. * Test purpose for interrupt when Packet counter reachs "0", but CHAIN=1 in the current packet.
  123. */
  124. #define SDP_SDPCR_TSTPKT0IRQ_MASK (0x20000UL)
  125. #define SDP_SDPCR_TSTPKT0IRQ_SHIFT (17U)
  126. #define SDP_SDPCR_TSTPKT0IRQ_SET(x) (((uint32_t)(x) << SDP_SDPCR_TSTPKT0IRQ_SHIFT) & SDP_SDPCR_TSTPKT0IRQ_MASK)
  127. #define SDP_SDPCR_TSTPKT0IRQ_GET(x) (((uint32_t)(x) & SDP_SDPCR_TSTPKT0IRQ_MASK) >> SDP_SDPCR_TSTPKT0IRQ_SHIFT)
  128. /*
  129. * RDSCEN (RW)
  130. *
  131. * when set to "1", the 1st data packet descriptor loacted in the register(CMDPTR, NPKTPTR, ...)
  132. * when set to "0", the 1st data packet descriptor loacted in the memeory(pointed by CMDPTR)
  133. */
  134. #define SDP_SDPCR_RDSCEN_MASK (0x100U)
  135. #define SDP_SDPCR_RDSCEN_SHIFT (8U)
  136. #define SDP_SDPCR_RDSCEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_RDSCEN_SHIFT) & SDP_SDPCR_RDSCEN_MASK)
  137. #define SDP_SDPCR_RDSCEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_RDSCEN_MASK) >> SDP_SDPCR_RDSCEN_SHIFT)
  138. /*
  139. * INTEN (RW)
  140. *
  141. * Interrupt Enablement, controlled by SW.
  142. * 1, SDP interrupt is enabled.
  143. * 0, SDP interrupt is disabled.
  144. */
  145. #define SDP_SDPCR_INTEN_MASK (0x1U)
  146. #define SDP_SDPCR_INTEN_SHIFT (0U)
  147. #define SDP_SDPCR_INTEN_SET(x) (((uint32_t)(x) << SDP_SDPCR_INTEN_SHIFT) & SDP_SDPCR_INTEN_MASK)
  148. #define SDP_SDPCR_INTEN_GET(x) (((uint32_t)(x) & SDP_SDPCR_INTEN_MASK) >> SDP_SDPCR_INTEN_SHIFT)
  149. /* Bitfield definition for register: MODCTRL */
  150. /*
  151. * AESALG (RW)
  152. *
  153. * AES algorithem selection.
  154. * 0x0 = AES 128;
  155. * 0x1 = AES 256;
  156. * 0x8 = SM4;
  157. * Others, reserved.
  158. */
  159. #define SDP_MODCTRL_AESALG_MASK (0xF0000000UL)
  160. #define SDP_MODCTRL_AESALG_SHIFT (28U)
  161. #define SDP_MODCTRL_AESALG_SET(x) (((uint32_t)(x) << SDP_MODCTRL_AESALG_SHIFT) & SDP_MODCTRL_AESALG_MASK)
  162. #define SDP_MODCTRL_AESALG_GET(x) (((uint32_t)(x) & SDP_MODCTRL_AESALG_MASK) >> SDP_MODCTRL_AESALG_SHIFT)
  163. /*
  164. * AESMOD (RW)
  165. *
  166. * AES mode selection.
  167. * 0x0 = ECB;
  168. * 0x1 = CBC;
  169. * Others, reserved.
  170. */
  171. #define SDP_MODCTRL_AESMOD_MASK (0xF000000UL)
  172. #define SDP_MODCTRL_AESMOD_SHIFT (24U)
  173. #define SDP_MODCTRL_AESMOD_SET(x) (((uint32_t)(x) << SDP_MODCTRL_AESMOD_SHIFT) & SDP_MODCTRL_AESMOD_MASK)
  174. #define SDP_MODCTRL_AESMOD_GET(x) (((uint32_t)(x) & SDP_MODCTRL_AESMOD_MASK) >> SDP_MODCTRL_AESMOD_SHIFT)
  175. /*
  176. * AESKS (RW)
  177. *
  178. * AES Key Selection.
  179. * These regisgers are being used to select the AES key that stored in the 16x128 key ram of the SDP, or select the key from the OTP. Detail as following:
  180. * 0x00: key from the 16x128, this is the key read address, valid for AES128; AES256 will use 128 bit from this address and 128 bit key from next address as 256 bit AES key.
  181. * 0x01: key from the 16x128, this is the key read address, valid for AES128, not valid for AES286.
  182. * ....
  183. * 0x0E: key from the 16x128, this is the key read address, valid for AES128; AES256 will use 128 from this add and 128 from next add for the AES key.
  184. * 0x0F: key from the 16x128, this is the key read address, valid for AES128, not valid for AES286.
  185. * 0x20: kman_sk0[127:0] from the key manager for AES128; AES256 will use kman_sk0[255:0] as AES key.
  186. * 0x21: kman_sk0[255:128] from the key manager for AES128; not valid for AES256.
  187. * 0x22: kman_sk1[127:0] from the key manager for AES128; AES256 will use kman_sk1[255:0] as AES key.
  188. * 0x23: kman_sk1[255:128] from the key manager for AES128; not valid for AES256.
  189. * 0x24: kman_sk2[127:0] from the key manager for AES128; AES256 will use kman_sk2[255:0] as AES key.
  190. * 0x25: kman_sk2[255:128] from the key manager for AES128; not valid for AES256.
  191. * 0x26: kman_sk3[127:0] from the key manager for AES128; AES256 will use kman_sk3[255:0] as AES key.
  192. * 0x27: kman_sk3[255:128] from the key manager for AES128; not valid for AES256.
  193. * 0x30: exip0_key[127:0] from OTP for AES128; AES256 will use exip0_key[255:0] as AES key.
  194. * 0x31: exip0_key[255:128] from OTP for AES128; not valid for AES256.
  195. * 0x32: exip1_key[127:0] from OTP for AES128; AES256 will use exip1_key[255:0] as AES key.
  196. * 0x33: exip1_key[255:128] from OTP for AES128; not valid for AES256.
  197. * Other values, reserved.
  198. */
  199. #define SDP_MODCTRL_AESKS_MASK (0xFC0000UL)
  200. #define SDP_MODCTRL_AESKS_SHIFT (18U)
  201. #define SDP_MODCTRL_AESKS_SET(x) (((uint32_t)(x) << SDP_MODCTRL_AESKS_SHIFT) & SDP_MODCTRL_AESKS_MASK)
  202. #define SDP_MODCTRL_AESKS_GET(x) (((uint32_t)(x) & SDP_MODCTRL_AESKS_MASK) >> SDP_MODCTRL_AESKS_SHIFT)
  203. /*
  204. * AESDIR (RW)
  205. *
  206. * AES direction
  207. * 1x1, AES Decryption
  208. * 1x0, AES Encryption.
  209. */
  210. #define SDP_MODCTRL_AESDIR_MASK (0x10000UL)
  211. #define SDP_MODCTRL_AESDIR_SHIFT (16U)
  212. #define SDP_MODCTRL_AESDIR_SET(x) (((uint32_t)(x) << SDP_MODCTRL_AESDIR_SHIFT) & SDP_MODCTRL_AESDIR_MASK)
  213. #define SDP_MODCTRL_AESDIR_GET(x) (((uint32_t)(x) & SDP_MODCTRL_AESDIR_MASK) >> SDP_MODCTRL_AESDIR_SHIFT)
  214. /*
  215. * HASALG (RW)
  216. *
  217. * HASH Algorithem selection.
  218. * 0x0 SHA1 —
  219. * 0x1 CRC32 —
  220. * 0x2 SHA256 —
  221. */
  222. #define SDP_MODCTRL_HASALG_MASK (0xF000U)
  223. #define SDP_MODCTRL_HASALG_SHIFT (12U)
  224. #define SDP_MODCTRL_HASALG_SET(x) (((uint32_t)(x) << SDP_MODCTRL_HASALG_SHIFT) & SDP_MODCTRL_HASALG_MASK)
  225. #define SDP_MODCTRL_HASALG_GET(x) (((uint32_t)(x) & SDP_MODCTRL_HASALG_MASK) >> SDP_MODCTRL_HASALG_SHIFT)
  226. /*
  227. * CRCEN (RW)
  228. *
  229. * CRC enable.
  230. * 1x1, CRC is enabled.
  231. * 1x0, CRC is disabled.
  232. */
  233. #define SDP_MODCTRL_CRCEN_MASK (0x800U)
  234. #define SDP_MODCTRL_CRCEN_SHIFT (11U)
  235. #define SDP_MODCTRL_CRCEN_SET(x) (((uint32_t)(x) << SDP_MODCTRL_CRCEN_SHIFT) & SDP_MODCTRL_CRCEN_MASK)
  236. #define SDP_MODCTRL_CRCEN_GET(x) (((uint32_t)(x) & SDP_MODCTRL_CRCEN_MASK) >> SDP_MODCTRL_CRCEN_SHIFT)
  237. /*
  238. * HASCHK (RW)
  239. *
  240. * HASH Check Enable Bit.
  241. * 1x1, HASH check need, hash result will compare with the HASHRSLT 0-7 registers;
  242. * 1x0, HASH check is not enabled, HASHRSLT0-7 store the HASH result.
  243. * For SHA1, will use HASHRSLT0-3 words, and HASH 256 will use HASH0-7 words.
  244. */
  245. #define SDP_MODCTRL_HASCHK_MASK (0x400U)
  246. #define SDP_MODCTRL_HASCHK_SHIFT (10U)
  247. #define SDP_MODCTRL_HASCHK_SET(x) (((uint32_t)(x) << SDP_MODCTRL_HASCHK_SHIFT) & SDP_MODCTRL_HASCHK_MASK)
  248. #define SDP_MODCTRL_HASCHK_GET(x) (((uint32_t)(x) & SDP_MODCTRL_HASCHK_MASK) >> SDP_MODCTRL_HASCHK_SHIFT)
  249. /*
  250. * HASOUT (RW)
  251. *
  252. * When hashing is enabled, this bit controls the input or output data of the AES engine is hashed.
  253. * 0 INPUT HASH
  254. * 1 OUTPUT HASH
  255. */
  256. #define SDP_MODCTRL_HASOUT_MASK (0x200U)
  257. #define SDP_MODCTRL_HASOUT_SHIFT (9U)
  258. #define SDP_MODCTRL_HASOUT_SET(x) (((uint32_t)(x) << SDP_MODCTRL_HASOUT_SHIFT) & SDP_MODCTRL_HASOUT_MASK)
  259. #define SDP_MODCTRL_HASOUT_GET(x) (((uint32_t)(x) & SDP_MODCTRL_HASOUT_MASK) >> SDP_MODCTRL_HASOUT_SHIFT)
  260. /*
  261. * DINSWP (RW)
  262. *
  263. * Decide whether the SDP byteswaps the input data (big-endian data);
  264. * When all bits are set, the data is assumed to be in the big-endian format
  265. */
  266. #define SDP_MODCTRL_DINSWP_MASK (0x30U)
  267. #define SDP_MODCTRL_DINSWP_SHIFT (4U)
  268. #define SDP_MODCTRL_DINSWP_SET(x) (((uint32_t)(x) << SDP_MODCTRL_DINSWP_SHIFT) & SDP_MODCTRL_DINSWP_MASK)
  269. #define SDP_MODCTRL_DINSWP_GET(x) (((uint32_t)(x) & SDP_MODCTRL_DINSWP_MASK) >> SDP_MODCTRL_DINSWP_SHIFT)
  270. /*
  271. * DOUTSWP (RW)
  272. *
  273. * Decide whether the SDP byteswaps the output data (big-endian data); When all bits are set, the data is assumed to be in the big-endian format
  274. */
  275. #define SDP_MODCTRL_DOUTSWP_MASK (0xCU)
  276. #define SDP_MODCTRL_DOUTSWP_SHIFT (2U)
  277. #define SDP_MODCTRL_DOUTSWP_SET(x) (((uint32_t)(x) << SDP_MODCTRL_DOUTSWP_SHIFT) & SDP_MODCTRL_DOUTSWP_MASK)
  278. #define SDP_MODCTRL_DOUTSWP_GET(x) (((uint32_t)(x) & SDP_MODCTRL_DOUTSWP_MASK) >> SDP_MODCTRL_DOUTSWP_SHIFT)
  279. /*
  280. * KEYSWP (RW)
  281. *
  282. * Decide whether the SDP byteswaps the Key (big-endian data).
  283. * When all bits are set, the data is assumed to be in the big-endian format
  284. */
  285. #define SDP_MODCTRL_KEYSWP_MASK (0x3U)
  286. #define SDP_MODCTRL_KEYSWP_SHIFT (0U)
  287. #define SDP_MODCTRL_KEYSWP_SET(x) (((uint32_t)(x) << SDP_MODCTRL_KEYSWP_SHIFT) & SDP_MODCTRL_KEYSWP_MASK)
  288. #define SDP_MODCTRL_KEYSWP_GET(x) (((uint32_t)(x) & SDP_MODCTRL_KEYSWP_MASK) >> SDP_MODCTRL_KEYSWP_SHIFT)
  289. /* Bitfield definition for register: PKTCNT */
  290. /*
  291. * CNTVAL (RO)
  292. *
  293. * This read-only field shows the current (instantaneous) value of the packet counter
  294. */
  295. #define SDP_PKTCNT_CNTVAL_MASK (0xFF0000UL)
  296. #define SDP_PKTCNT_CNTVAL_SHIFT (16U)
  297. #define SDP_PKTCNT_CNTVAL_GET(x) (((uint32_t)(x) & SDP_PKTCNT_CNTVAL_MASK) >> SDP_PKTCNT_CNTVAL_SHIFT)
  298. /*
  299. * CNTINCR (RW)
  300. *
  301. * The value written to this field is added to the spacket count.
  302. */
  303. #define SDP_PKTCNT_CNTINCR_MASK (0xFFU)
  304. #define SDP_PKTCNT_CNTINCR_SHIFT (0U)
  305. #define SDP_PKTCNT_CNTINCR_SET(x) (((uint32_t)(x) << SDP_PKTCNT_CNTINCR_SHIFT) & SDP_PKTCNT_CNTINCR_MASK)
  306. #define SDP_PKTCNT_CNTINCR_GET(x) (((uint32_t)(x) & SDP_PKTCNT_CNTINCR_MASK) >> SDP_PKTCNT_CNTINCR_SHIFT)
  307. /* Bitfield definition for register: STA */
  308. /*
  309. * TAG (RO)
  310. *
  311. * packet tag.
  312. */
  313. #define SDP_STA_TAG_MASK (0xFF000000UL)
  314. #define SDP_STA_TAG_SHIFT (24U)
  315. #define SDP_STA_TAG_GET(x) (((uint32_t)(x) & SDP_STA_TAG_MASK) >> SDP_STA_TAG_SHIFT)
  316. /*
  317. * IRQ (W1C)
  318. *
  319. * interrupt Request, requested when error happen, or when packet processing done, packet counter reach to zero.
  320. */
  321. #define SDP_STA_IRQ_MASK (0x800000UL)
  322. #define SDP_STA_IRQ_SHIFT (23U)
  323. #define SDP_STA_IRQ_SET(x) (((uint32_t)(x) << SDP_STA_IRQ_SHIFT) & SDP_STA_IRQ_MASK)
  324. #define SDP_STA_IRQ_GET(x) (((uint32_t)(x) & SDP_STA_IRQ_MASK) >> SDP_STA_IRQ_SHIFT)
  325. /*
  326. * CHN1PKT0 (W1C)
  327. *
  328. * the chain buffer "chain" bit is "1", while packet counter is "0", now, waiting for new buffer data.
  329. */
  330. #define SDP_STA_CHN1PKT0_MASK (0x100000UL)
  331. #define SDP_STA_CHN1PKT0_SHIFT (20U)
  332. #define SDP_STA_CHN1PKT0_SET(x) (((uint32_t)(x) << SDP_STA_CHN1PKT0_SHIFT) & SDP_STA_CHN1PKT0_MASK)
  333. #define SDP_STA_CHN1PKT0_GET(x) (((uint32_t)(x) & SDP_STA_CHN1PKT0_MASK) >> SDP_STA_CHN1PKT0_SHIFT)
  334. /*
  335. * AESBSY (RO)
  336. *
  337. * AES Busy
  338. */
  339. #define SDP_STA_AESBSY_MASK (0x80000UL)
  340. #define SDP_STA_AESBSY_SHIFT (19U)
  341. #define SDP_STA_AESBSY_GET(x) (((uint32_t)(x) & SDP_STA_AESBSY_MASK) >> SDP_STA_AESBSY_SHIFT)
  342. /*
  343. * HASBSY (RO)
  344. *
  345. * Hashing Busy
  346. */
  347. #define SDP_STA_HASBSY_MASK (0x40000UL)
  348. #define SDP_STA_HASBSY_SHIFT (18U)
  349. #define SDP_STA_HASBSY_GET(x) (((uint32_t)(x) & SDP_STA_HASBSY_MASK) >> SDP_STA_HASBSY_SHIFT)
  350. /*
  351. * PKTCNT0 (W1C)
  352. *
  353. * Packet Counter registers reachs to ZERO now.
  354. */
  355. #define SDP_STA_PKTCNT0_MASK (0x20000UL)
  356. #define SDP_STA_PKTCNT0_SHIFT (17U)
  357. #define SDP_STA_PKTCNT0_SET(x) (((uint32_t)(x) << SDP_STA_PKTCNT0_SHIFT) & SDP_STA_PKTCNT0_MASK)
  358. #define SDP_STA_PKTCNT0_GET(x) (((uint32_t)(x) & SDP_STA_PKTCNT0_MASK) >> SDP_STA_PKTCNT0_SHIFT)
  359. /*
  360. * PKTDON (W1C)
  361. *
  362. * Packet processing done, will trigger this itnerrrupt when the "PKTINT" bit set in the packet control word.
  363. */
  364. #define SDP_STA_PKTDON_MASK (0x10000UL)
  365. #define SDP_STA_PKTDON_SHIFT (16U)
  366. #define SDP_STA_PKTDON_SET(x) (((uint32_t)(x) << SDP_STA_PKTDON_SHIFT) & SDP_STA_PKTDON_MASK)
  367. #define SDP_STA_PKTDON_GET(x) (((uint32_t)(x) & SDP_STA_PKTDON_MASK) >> SDP_STA_PKTDON_SHIFT)
  368. /*
  369. * ERRSET (W1C)
  370. *
  371. * Working mode setup error.
  372. */
  373. #define SDP_STA_ERRSET_MASK (0x20U)
  374. #define SDP_STA_ERRSET_SHIFT (5U)
  375. #define SDP_STA_ERRSET_SET(x) (((uint32_t)(x) << SDP_STA_ERRSET_SHIFT) & SDP_STA_ERRSET_MASK)
  376. #define SDP_STA_ERRSET_GET(x) (((uint32_t)(x) & SDP_STA_ERRSET_MASK) >> SDP_STA_ERRSET_SHIFT)
  377. /*
  378. * ERRPKT (W1C)
  379. *
  380. * Packet head access error, or status update error.
  381. */
  382. #define SDP_STA_ERRPKT_MASK (0x10U)
  383. #define SDP_STA_ERRPKT_SHIFT (4U)
  384. #define SDP_STA_ERRPKT_SET(x) (((uint32_t)(x) << SDP_STA_ERRPKT_SHIFT) & SDP_STA_ERRPKT_MASK)
  385. #define SDP_STA_ERRPKT_GET(x) (((uint32_t)(x) & SDP_STA_ERRPKT_MASK) >> SDP_STA_ERRPKT_SHIFT)
  386. /*
  387. * ERRSRC (W1C)
  388. *
  389. * Source Buffer Access Error
  390. */
  391. #define SDP_STA_ERRSRC_MASK (0x8U)
  392. #define SDP_STA_ERRSRC_SHIFT (3U)
  393. #define SDP_STA_ERRSRC_SET(x) (((uint32_t)(x) << SDP_STA_ERRSRC_SHIFT) & SDP_STA_ERRSRC_MASK)
  394. #define SDP_STA_ERRSRC_GET(x) (((uint32_t)(x) & SDP_STA_ERRSRC_MASK) >> SDP_STA_ERRSRC_SHIFT)
  395. /*
  396. * ERRDST (W1C)
  397. *
  398. * Destination Buffer Error
  399. */
  400. #define SDP_STA_ERRDST_MASK (0x4U)
  401. #define SDP_STA_ERRDST_SHIFT (2U)
  402. #define SDP_STA_ERRDST_SET(x) (((uint32_t)(x) << SDP_STA_ERRDST_SHIFT) & SDP_STA_ERRDST_MASK)
  403. #define SDP_STA_ERRDST_GET(x) (((uint32_t)(x) & SDP_STA_ERRDST_MASK) >> SDP_STA_ERRDST_SHIFT)
  404. /*
  405. * ERRHAS (W1C)
  406. *
  407. * Hashing Check Error
  408. */
  409. #define SDP_STA_ERRHAS_MASK (0x2U)
  410. #define SDP_STA_ERRHAS_SHIFT (1U)
  411. #define SDP_STA_ERRHAS_SET(x) (((uint32_t)(x) << SDP_STA_ERRHAS_SHIFT) & SDP_STA_ERRHAS_MASK)
  412. #define SDP_STA_ERRHAS_GET(x) (((uint32_t)(x) & SDP_STA_ERRHAS_MASK) >> SDP_STA_ERRHAS_SHIFT)
  413. /*
  414. * ERRCHAIN (W1C)
  415. *
  416. * buffer chain error happen when packet's CHAIN bit=0, but the Packet counter is still not zero.
  417. */
  418. #define SDP_STA_ERRCHAIN_MASK (0x1U)
  419. #define SDP_STA_ERRCHAIN_SHIFT (0U)
  420. #define SDP_STA_ERRCHAIN_SET(x) (((uint32_t)(x) << SDP_STA_ERRCHAIN_SHIFT) & SDP_STA_ERRCHAIN_MASK)
  421. #define SDP_STA_ERRCHAIN_GET(x) (((uint32_t)(x) & SDP_STA_ERRCHAIN_MASK) >> SDP_STA_ERRCHAIN_SHIFT)
  422. /* Bitfield definition for register: KEYADDR */
  423. /*
  424. * INDEX (RW)
  425. *
  426. * To write a key to the SDP KEY RAM, the software must first write the desired key index/subword to this register.
  427. * Key index pointer. The valid indices are 0-[number_keys].
  428. * In the SDP, there is a 16x128 key ram can store 16 AES128 keys or 8 AES 256 Keys; this index is for addressing the 16 128-bit key addresses.
  429. */
  430. #define SDP_KEYADDR_INDEX_MASK (0xFF0000UL)
  431. #define SDP_KEYADDR_INDEX_SHIFT (16U)
  432. #define SDP_KEYADDR_INDEX_SET(x) (((uint32_t)(x) << SDP_KEYADDR_INDEX_SHIFT) & SDP_KEYADDR_INDEX_MASK)
  433. #define SDP_KEYADDR_INDEX_GET(x) (((uint32_t)(x) & SDP_KEYADDR_INDEX_MASK) >> SDP_KEYADDR_INDEX_SHIFT)
  434. /*
  435. * SUBWRD (RW)
  436. *
  437. * Key subword pointer. The valid indices are 0-3. After each write to the key data register, this field
  438. * increments; To write a key, the software must first write the desired key index/subword to this register.
  439. */
  440. #define SDP_KEYADDR_SUBWRD_MASK (0x3U)
  441. #define SDP_KEYADDR_SUBWRD_SHIFT (0U)
  442. #define SDP_KEYADDR_SUBWRD_SET(x) (((uint32_t)(x) << SDP_KEYADDR_SUBWRD_SHIFT) & SDP_KEYADDR_SUBWRD_MASK)
  443. #define SDP_KEYADDR_SUBWRD_GET(x) (((uint32_t)(x) & SDP_KEYADDR_SUBWRD_MASK) >> SDP_KEYADDR_SUBWRD_SHIFT)
  444. /* Bitfield definition for register: KEYDAT */
  445. /*
  446. * KEYDAT (RW)
  447. *
  448. * This register provides the write access to the key/key subword specified by the key index register.
  449. * Writing this location updates the selected subword for the key located at the index
  450. * specified by the key index register. The write also triggers the SUBWORD field of the
  451. * KEY register to increment to the next higher word in the key
  452. */
  453. #define SDP_KEYDAT_KEYDAT_MASK (0xFFFFFFFFUL)
  454. #define SDP_KEYDAT_KEYDAT_SHIFT (0U)
  455. #define SDP_KEYDAT_KEYDAT_SET(x) (((uint32_t)(x) << SDP_KEYDAT_KEYDAT_SHIFT) & SDP_KEYDAT_KEYDAT_MASK)
  456. #define SDP_KEYDAT_KEYDAT_GET(x) (((uint32_t)(x) & SDP_KEYDAT_KEYDAT_MASK) >> SDP_KEYDAT_KEYDAT_SHIFT)
  457. /* Bitfield definition for register array: CIPHIV */
  458. /*
  459. * CIPHIV (RW)
  460. *
  461. * cipher initialization vector.
  462. */
  463. #define SDP_CIPHIV_CIPHIV_MASK (0xFFFFFFFFUL)
  464. #define SDP_CIPHIV_CIPHIV_SHIFT (0U)
  465. #define SDP_CIPHIV_CIPHIV_SET(x) (((uint32_t)(x) << SDP_CIPHIV_CIPHIV_SHIFT) & SDP_CIPHIV_CIPHIV_MASK)
  466. #define SDP_CIPHIV_CIPHIV_GET(x) (((uint32_t)(x) & SDP_CIPHIV_CIPHIV_MASK) >> SDP_CIPHIV_CIPHIV_SHIFT)
  467. /* Bitfield definition for register array: HASWRD */
  468. /*
  469. * HASWRD (RW)
  470. *
  471. * Hash Data Word x - HASH result bit; will store the expected hash result bit if hash check enabled; when hash check is not enabled, the hash engine will store the final hash result[31:0] here.
  472. * If CRC mode enabled, this work store the CRC expected result if the check enabled, or store the final calcuated CRC result.
  473. */
  474. #define SDP_HASWRD_HASWRD_MASK (0xFFFFFFFFUL)
  475. #define SDP_HASWRD_HASWRD_SHIFT (0U)
  476. #define SDP_HASWRD_HASWRD_SET(x) (((uint32_t)(x) << SDP_HASWRD_HASWRD_SHIFT) & SDP_HASWRD_HASWRD_MASK)
  477. #define SDP_HASWRD_HASWRD_GET(x) (((uint32_t)(x) & SDP_HASWRD_HASWRD_MASK) >> SDP_HASWRD_HASWRD_SHIFT)
  478. /* Bitfield definition for register: CMDPTR */
  479. /*
  480. * CMDPTR (RW)
  481. *
  482. * current command addresses the register points to the multiword
  483. * descriptor that is to be executed (or is currently being executed)
  484. */
  485. #define SDP_CMDPTR_CMDPTR_MASK (0xFFFFFFFFUL)
  486. #define SDP_CMDPTR_CMDPTR_SHIFT (0U)
  487. #define SDP_CMDPTR_CMDPTR_SET(x) (((uint32_t)(x) << SDP_CMDPTR_CMDPTR_SHIFT) & SDP_CMDPTR_CMDPTR_MASK)
  488. #define SDP_CMDPTR_CMDPTR_GET(x) (((uint32_t)(x) & SDP_CMDPTR_CMDPTR_MASK) >> SDP_CMDPTR_CMDPTR_SHIFT)
  489. /* Bitfield definition for register: NPKTPTR */
  490. /*
  491. * NPKTPTR (RW)
  492. *
  493. * Next Packet Address Pointer
  494. */
  495. #define SDP_NPKTPTR_NPKTPTR_MASK (0xFFFFFFFFUL)
  496. #define SDP_NPKTPTR_NPKTPTR_SHIFT (0U)
  497. #define SDP_NPKTPTR_NPKTPTR_SET(x) (((uint32_t)(x) << SDP_NPKTPTR_NPKTPTR_SHIFT) & SDP_NPKTPTR_NPKTPTR_MASK)
  498. #define SDP_NPKTPTR_NPKTPTR_GET(x) (((uint32_t)(x) & SDP_NPKTPTR_NPKTPTR_MASK) >> SDP_NPKTPTR_NPKTPTR_SHIFT)
  499. /* Bitfield definition for register: PKTCTL */
  500. /*
  501. * PKTTAG (RW)
  502. *
  503. * packet tag
  504. */
  505. #define SDP_PKTCTL_PKTTAG_MASK (0xFF000000UL)
  506. #define SDP_PKTCTL_PKTTAG_SHIFT (24U)
  507. #define SDP_PKTCTL_PKTTAG_SET(x) (((uint32_t)(x) << SDP_PKTCTL_PKTTAG_SHIFT) & SDP_PKTCTL_PKTTAG_MASK)
  508. #define SDP_PKTCTL_PKTTAG_GET(x) (((uint32_t)(x) & SDP_PKTCTL_PKTTAG_MASK) >> SDP_PKTCTL_PKTTAG_SHIFT)
  509. /*
  510. * CIPHIV (RW)
  511. *
  512. * Load Initial Vector for the AES in this packet.
  513. */
  514. #define SDP_PKTCTL_CIPHIV_MASK (0x40U)
  515. #define SDP_PKTCTL_CIPHIV_SHIFT (6U)
  516. #define SDP_PKTCTL_CIPHIV_SET(x) (((uint32_t)(x) << SDP_PKTCTL_CIPHIV_SHIFT) & SDP_PKTCTL_CIPHIV_MASK)
  517. #define SDP_PKTCTL_CIPHIV_GET(x) (((uint32_t)(x) & SDP_PKTCTL_CIPHIV_MASK) >> SDP_PKTCTL_CIPHIV_SHIFT)
  518. /*
  519. * HASFNL (RW)
  520. *
  521. * Hash Termination packet
  522. */
  523. #define SDP_PKTCTL_HASFNL_MASK (0x20U)
  524. #define SDP_PKTCTL_HASFNL_SHIFT (5U)
  525. #define SDP_PKTCTL_HASFNL_SET(x) (((uint32_t)(x) << SDP_PKTCTL_HASFNL_SHIFT) & SDP_PKTCTL_HASFNL_MASK)
  526. #define SDP_PKTCTL_HASFNL_GET(x) (((uint32_t)(x) & SDP_PKTCTL_HASFNL_MASK) >> SDP_PKTCTL_HASFNL_SHIFT)
  527. /*
  528. * HASINI (RW)
  529. *
  530. * Hash Initialization packat
  531. */
  532. #define SDP_PKTCTL_HASINI_MASK (0x10U)
  533. #define SDP_PKTCTL_HASINI_SHIFT (4U)
  534. #define SDP_PKTCTL_HASINI_SET(x) (((uint32_t)(x) << SDP_PKTCTL_HASINI_SHIFT) & SDP_PKTCTL_HASINI_MASK)
  535. #define SDP_PKTCTL_HASINI_GET(x) (((uint32_t)(x) & SDP_PKTCTL_HASINI_MASK) >> SDP_PKTCTL_HASINI_SHIFT)
  536. /*
  537. * CHAIN (RW)
  538. *
  539. * whether the next command pointer register must be loaded into the channel's current descriptor
  540. * pointer.
  541. */
  542. #define SDP_PKTCTL_CHAIN_MASK (0x8U)
  543. #define SDP_PKTCTL_CHAIN_SHIFT (3U)
  544. #define SDP_PKTCTL_CHAIN_SET(x) (((uint32_t)(x) << SDP_PKTCTL_CHAIN_SHIFT) & SDP_PKTCTL_CHAIN_MASK)
  545. #define SDP_PKTCTL_CHAIN_GET(x) (((uint32_t)(x) & SDP_PKTCTL_CHAIN_MASK) >> SDP_PKTCTL_CHAIN_SHIFT)
  546. /*
  547. * DCRSEMA (RW)
  548. *
  549. * whether the channel's semaphore must be decremented at the end of the current operation.
  550. * When the semaphore reaches a value of zero, no more operations are issued from the channel.
  551. */
  552. #define SDP_PKTCTL_DCRSEMA_MASK (0x4U)
  553. #define SDP_PKTCTL_DCRSEMA_SHIFT (2U)
  554. #define SDP_PKTCTL_DCRSEMA_SET(x) (((uint32_t)(x) << SDP_PKTCTL_DCRSEMA_SHIFT) & SDP_PKTCTL_DCRSEMA_MASK)
  555. #define SDP_PKTCTL_DCRSEMA_GET(x) (((uint32_t)(x) & SDP_PKTCTL_DCRSEMA_MASK) >> SDP_PKTCTL_DCRSEMA_SHIFT)
  556. /*
  557. * PKTINT (RW)
  558. *
  559. * Reflects whether the channel must issue an interrupt upon the completion of the packet
  560. */
  561. #define SDP_PKTCTL_PKTINT_MASK (0x2U)
  562. #define SDP_PKTCTL_PKTINT_SHIFT (1U)
  563. #define SDP_PKTCTL_PKTINT_SET(x) (((uint32_t)(x) << SDP_PKTCTL_PKTINT_SHIFT) & SDP_PKTCTL_PKTINT_MASK)
  564. #define SDP_PKTCTL_PKTINT_GET(x) (((uint32_t)(x) & SDP_PKTCTL_PKTINT_MASK) >> SDP_PKTCTL_PKTINT_SHIFT)
  565. /* Bitfield definition for register: PKTSRC */
  566. /*
  567. * PKTSRC (RW)
  568. *
  569. * Packet Memory Source Address
  570. */
  571. #define SDP_PKTSRC_PKTSRC_MASK (0xFFFFFFFFUL)
  572. #define SDP_PKTSRC_PKTSRC_SHIFT (0U)
  573. #define SDP_PKTSRC_PKTSRC_SET(x) (((uint32_t)(x) << SDP_PKTSRC_PKTSRC_SHIFT) & SDP_PKTSRC_PKTSRC_MASK)
  574. #define SDP_PKTSRC_PKTSRC_GET(x) (((uint32_t)(x) & SDP_PKTSRC_PKTSRC_MASK) >> SDP_PKTSRC_PKTSRC_SHIFT)
  575. /* Bitfield definition for register: PKTDST */
  576. /*
  577. * PKTDST (RW)
  578. *
  579. * Packet Memory Destination Address
  580. */
  581. #define SDP_PKTDST_PKTDST_MASK (0xFFFFFFFFUL)
  582. #define SDP_PKTDST_PKTDST_SHIFT (0U)
  583. #define SDP_PKTDST_PKTDST_SET(x) (((uint32_t)(x) << SDP_PKTDST_PKTDST_SHIFT) & SDP_PKTDST_PKTDST_MASK)
  584. #define SDP_PKTDST_PKTDST_GET(x) (((uint32_t)(x) & SDP_PKTDST_PKTDST_MASK) >> SDP_PKTDST_PKTDST_SHIFT)
  585. /* Bitfield definition for register: PKTBUF */
  586. /*
  587. * PKTBUF (RW)
  588. *
  589. */
  590. #define SDP_PKTBUF_PKTBUF_MASK (0xFFFFFFFFUL)
  591. #define SDP_PKTBUF_PKTBUF_SHIFT (0U)
  592. #define SDP_PKTBUF_PKTBUF_SET(x) (((uint32_t)(x) << SDP_PKTBUF_PKTBUF_SHIFT) & SDP_PKTBUF_PKTBUF_MASK)
  593. #define SDP_PKTBUF_PKTBUF_GET(x) (((uint32_t)(x) & SDP_PKTBUF_PKTBUF_MASK) >> SDP_PKTBUF_PKTBUF_SHIFT)
  594. /* CIPHIV register group index macro definition */
  595. #define SDP_CIPHIV_CIPHIV0 (0UL)
  596. #define SDP_CIPHIV_CIPHIV1 (1UL)
  597. #define SDP_CIPHIV_CIPHIV2 (2UL)
  598. #define SDP_CIPHIV_CIPHIV3 (3UL)
  599. /* HASWRD register group index macro definition */
  600. #define SDP_HASWRD_HASWRD0 (0UL)
  601. #define SDP_HASWRD_HASWRD1 (1UL)
  602. #define SDP_HASWRD_HASWRD2 (2UL)
  603. #define SDP_HASWRD_HASWRD3 (3UL)
  604. #define SDP_HASWRD_HASWRD4 (4UL)
  605. #define SDP_HASWRD_HASWRD5 (5UL)
  606. #define SDP_HASWRD_HASWRD6 (6UL)
  607. #define SDP_HASWRD_HASWRD7 (7UL)
  608. #endif /* HPM_SDP_H */