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