1 /**
2  * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
3  *
4  *  SPDX-License-Identifier: Apache-2.0
5  */
6 #pragma once
7 
8 #include <stdint.h>
9 #include "soc/soc.h"
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 /** ECDSA_CONF_REG register
15  *  ECDSA configure register
16  */
17 #define ECDSA_CONF_REG (DR_REG_ECDSA_BASE + 0x4)
18 /** ECDSA_WORK_MODE : R/W; bitpos: [0]; default: 0;
19  *  The work mode bits of ECDSA Accelerator. 0: Signature Verify mode. 1: Signature
20  *  Generate Mode.
21  */
22 #define ECDSA_WORK_MODE    (BIT(0))
23 #define ECDSA_WORK_MODE_M  (ECDSA_WORK_MODE_V << ECDSA_WORK_MODE_S)
24 #define ECDSA_WORK_MODE_V  0x00000001U
25 #define ECDSA_WORK_MODE_S  0
26 /** ECDSA_ECC_CURVE : R/W; bitpos: [1]; default: 0;
27  *  The ecc curve select bit of ECDSA Accelerator.  0: P-192.  1: P-256.
28  */
29 #define ECDSA_ECC_CURVE    (BIT(1))
30 #define ECDSA_ECC_CURVE_M  (ECDSA_ECC_CURVE_V << ECDSA_ECC_CURVE_S)
31 #define ECDSA_ECC_CURVE_V  0x00000001U
32 #define ECDSA_ECC_CURVE_S  1
33 /** ECDSA_SOFTWARE_SET_K : R/W; bitpos: [2]; default: 0;
34  *  The source of k select bit. 0: k is automatically generated by TRNG. 1: k is
35  *  written by software.
36  */
37 #define ECDSA_SOFTWARE_SET_K    (BIT(2))
38 #define ECDSA_SOFTWARE_SET_K_M  (ECDSA_SOFTWARE_SET_K_V << ECDSA_SOFTWARE_SET_K_S)
39 #define ECDSA_SOFTWARE_SET_K_V  0x00000001U
40 #define ECDSA_SOFTWARE_SET_K_S  2
41 /** ECDSA_SOFTWARE_SET_Z : R/W; bitpos: [3]; default: 0;
42  *  The source of z select bit. 0: z is generated from SHA result. 1: z is written by
43  *  software.
44  */
45 #define ECDSA_SOFTWARE_SET_Z    (BIT(3))
46 #define ECDSA_SOFTWARE_SET_Z_M  (ECDSA_SOFTWARE_SET_Z_V << ECDSA_SOFTWARE_SET_Z_S)
47 #define ECDSA_SOFTWARE_SET_Z_V  0x00000001U
48 #define ECDSA_SOFTWARE_SET_Z_S  3
49 
50 /** ECDSA_CLK_REG register
51  *  ECDSA clock gate register
52  */
53 #define ECDSA_CLK_REG (DR_REG_ECDSA_BASE + 0x8)
54 /** ECDSA_CLK_GATE_FORCE_ON : R/W; bitpos: [0]; default: 0;
55  *  Write 1 to force on register clock gate.
56  */
57 #define ECDSA_CLK_GATE_FORCE_ON    (BIT(0))
58 #define ECDSA_CLK_GATE_FORCE_ON_M  (ECDSA_CLK_GATE_FORCE_ON_V << ECDSA_CLK_GATE_FORCE_ON_S)
59 #define ECDSA_CLK_GATE_FORCE_ON_V  0x00000001U
60 #define ECDSA_CLK_GATE_FORCE_ON_S  0
61 
62 /** ECDSA_INT_RAW_REG register
63  *  ECDSA interrupt raw register, valid in level.
64  */
65 #define ECDSA_INT_RAW_REG (DR_REG_ECDSA_BASE + 0xc)
66 /** ECDSA_CALC_DONE_INT_RAW : RO/WTC/SS; bitpos: [0]; default: 0;
67  *  The raw interrupt status bit  for the ecdsa_calc_done_int interrupt
68  */
69 #define ECDSA_CALC_DONE_INT_RAW    (BIT(0))
70 #define ECDSA_CALC_DONE_INT_RAW_M  (ECDSA_CALC_DONE_INT_RAW_V << ECDSA_CALC_DONE_INT_RAW_S)
71 #define ECDSA_CALC_DONE_INT_RAW_V  0x00000001U
72 #define ECDSA_CALC_DONE_INT_RAW_S  0
73 /** ECDSA_SHA_RELEASE_INT_RAW : RO/WTC/SS; bitpos: [1]; default: 0;
74  *  The raw interrupt status bit  for the ecdsa_sha_release_int interrupt
75  */
76 #define ECDSA_SHA_RELEASE_INT_RAW    (BIT(1))
77 #define ECDSA_SHA_RELEASE_INT_RAW_M  (ECDSA_SHA_RELEASE_INT_RAW_V << ECDSA_SHA_RELEASE_INT_RAW_S)
78 #define ECDSA_SHA_RELEASE_INT_RAW_V  0x00000001U
79 #define ECDSA_SHA_RELEASE_INT_RAW_S  1
80 
81 /** ECDSA_INT_ST_REG register
82  *  ECDSA interrupt status register.
83  */
84 #define ECDSA_INT_ST_REG (DR_REG_ECDSA_BASE + 0x10)
85 /** ECDSA_CALC_DONE_INT_ST : RO; bitpos: [0]; default: 0;
86  *  The masked interrupt status bit  for the ecdsa_calc_done_int interrupt
87  */
88 #define ECDSA_CALC_DONE_INT_ST    (BIT(0))
89 #define ECDSA_CALC_DONE_INT_ST_M  (ECDSA_CALC_DONE_INT_ST_V << ECDSA_CALC_DONE_INT_ST_S)
90 #define ECDSA_CALC_DONE_INT_ST_V  0x00000001U
91 #define ECDSA_CALC_DONE_INT_ST_S  0
92 /** ECDSA_SHA_RELEASE_INT_ST : RO; bitpos: [1]; default: 0;
93  *  The masked interrupt status bit  for the ecdsa_sha_release_int interrupt
94  */
95 #define ECDSA_SHA_RELEASE_INT_ST    (BIT(1))
96 #define ECDSA_SHA_RELEASE_INT_ST_M  (ECDSA_SHA_RELEASE_INT_ST_V << ECDSA_SHA_RELEASE_INT_ST_S)
97 #define ECDSA_SHA_RELEASE_INT_ST_V  0x00000001U
98 #define ECDSA_SHA_RELEASE_INT_ST_S  1
99 
100 /** ECDSA_INT_ENA_REG register
101  *  ECDSA interrupt enable register.
102  */
103 #define ECDSA_INT_ENA_REG (DR_REG_ECDSA_BASE + 0x14)
104 /** ECDSA_CALC_DONE_INT_ENA : R/W; bitpos: [0]; default: 0;
105  *  The interrupt enable bit  for the ecdsa_calc_done_int interrupt
106  */
107 #define ECDSA_CALC_DONE_INT_ENA    (BIT(0))
108 #define ECDSA_CALC_DONE_INT_ENA_M  (ECDSA_CALC_DONE_INT_ENA_V << ECDSA_CALC_DONE_INT_ENA_S)
109 #define ECDSA_CALC_DONE_INT_ENA_V  0x00000001U
110 #define ECDSA_CALC_DONE_INT_ENA_S  0
111 /** ECDSA_SHA_RELEASE_INT_ENA : R/W; bitpos: [1]; default: 0;
112  *  The interrupt enable bit  for the ecdsa_sha_release_int interrupt
113  */
114 #define ECDSA_SHA_RELEASE_INT_ENA    (BIT(1))
115 #define ECDSA_SHA_RELEASE_INT_ENA_M  (ECDSA_SHA_RELEASE_INT_ENA_V << ECDSA_SHA_RELEASE_INT_ENA_S)
116 #define ECDSA_SHA_RELEASE_INT_ENA_V  0x00000001U
117 #define ECDSA_SHA_RELEASE_INT_ENA_S  1
118 
119 /** ECDSA_INT_CLR_REG register
120  *  ECDSA interrupt clear register.
121  */
122 #define ECDSA_INT_CLR_REG (DR_REG_ECDSA_BASE + 0x18)
123 /** ECDSA_CALC_DONE_INT_CLR : WT; bitpos: [0]; default: 0;
124  *  Set this bit to clear the ecdsa_calc_done_int interrupt
125  */
126 #define ECDSA_CALC_DONE_INT_CLR    (BIT(0))
127 #define ECDSA_CALC_DONE_INT_CLR_M  (ECDSA_CALC_DONE_INT_CLR_V << ECDSA_CALC_DONE_INT_CLR_S)
128 #define ECDSA_CALC_DONE_INT_CLR_V  0x00000001U
129 #define ECDSA_CALC_DONE_INT_CLR_S  0
130 /** ECDSA_SHA_RELEASE_INT_CLR : WT; bitpos: [1]; default: 0;
131  *  Set this bit to clear the ecdsa_sha_release_int interrupt
132  */
133 #define ECDSA_SHA_RELEASE_INT_CLR    (BIT(1))
134 #define ECDSA_SHA_RELEASE_INT_CLR_M  (ECDSA_SHA_RELEASE_INT_CLR_V << ECDSA_SHA_RELEASE_INT_CLR_S)
135 #define ECDSA_SHA_RELEASE_INT_CLR_V  0x00000001U
136 #define ECDSA_SHA_RELEASE_INT_CLR_S  1
137 
138 /** ECDSA_START_REG register
139  *  ECDSA start register
140  */
141 #define ECDSA_START_REG (DR_REG_ECDSA_BASE + 0x1c)
142 /** ECDSA_START : WT; bitpos: [0]; default: 0;
143  *  Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared
144  *  after configuration.
145  */
146 #define ECDSA_START    (BIT(0))
147 #define ECDSA_START_M  (ECDSA_START_V << ECDSA_START_S)
148 #define ECDSA_START_V  0x00000001U
149 #define ECDSA_START_S  0
150 /** ECDSA_LOAD_DONE : WT; bitpos: [1]; default: 0;
151  *  Write 1 to input load done signal of ECDSA Accelerator. This bit will be
152  *  self-cleared after configuration.
153  */
154 #define ECDSA_LOAD_DONE    (BIT(1))
155 #define ECDSA_LOAD_DONE_M  (ECDSA_LOAD_DONE_V << ECDSA_LOAD_DONE_S)
156 #define ECDSA_LOAD_DONE_V  0x00000001U
157 #define ECDSA_LOAD_DONE_S  1
158 /** ECDSA_GET_DONE : WT; bitpos: [2]; default: 0;
159  *  Write 1 to input get done signal of ECDSA Accelerator. This bit will be
160  *  self-cleared after configuration.
161  */
162 #define ECDSA_GET_DONE    (BIT(2))
163 #define ECDSA_GET_DONE_M  (ECDSA_GET_DONE_V << ECDSA_GET_DONE_S)
164 #define ECDSA_GET_DONE_V  0x00000001U
165 #define ECDSA_GET_DONE_S  2
166 
167 /** ECDSA_STATE_REG register
168  *  ECDSA status register
169  */
170 #define ECDSA_STATE_REG (DR_REG_ECDSA_BASE + 0x20)
171 /** ECDSA_BUSY : RO; bitpos: [1:0]; default: 0;
172  *  The status bits of ECDSA Accelerator. ECDSA is at 0: IDLE, 1: LOAD, 2: GET, 3: BUSY
173  *  state.
174  */
175 #define ECDSA_BUSY    0x00000003U
176 #define ECDSA_BUSY_M  (ECDSA_BUSY_V << ECDSA_BUSY_S)
177 #define ECDSA_BUSY_V  0x00000003U
178 #define ECDSA_BUSY_S  0
179 
180 /** ECDSA_RESULT_REG register
181  *  ECDSA result register
182  */
183 #define ECDSA_RESULT_REG (DR_REG_ECDSA_BASE + 0x24)
184 /** ECDSA_OPERATION_RESULT : RO/SS; bitpos: [0]; default: 0;
185  *  The operation result bit of ECDSA Accelerator, only valid when ECDSA calculation is
186  *  done.
187  */
188 #define ECDSA_OPERATION_RESULT    (BIT(0))
189 #define ECDSA_OPERATION_RESULT_M  (ECDSA_OPERATION_RESULT_V << ECDSA_OPERATION_RESULT_S)
190 #define ECDSA_OPERATION_RESULT_V  0x00000001U
191 #define ECDSA_OPERATION_RESULT_S  0
192 
193 /** ECDSA_DATE_REG register
194  *  Version control register
195  */
196 #define ECDSA_DATE_REG (DR_REG_ECDSA_BASE + 0xfc)
197 /** ECDSA_DATE : R/W; bitpos: [27:0]; default: 35684752;
198  *  ECDSA version control register
199  */
200 #define ECDSA_DATE    0x0FFFFFFFU
201 #define ECDSA_DATE_M  (ECDSA_DATE_V << ECDSA_DATE_S)
202 #define ECDSA_DATE_V  0x0FFFFFFFU
203 #define ECDSA_DATE_S  0
204 
205 /** ECDSA_SHA_MODE_REG register
206  *  ECDSA control SHA register
207  */
208 #define ECDSA_SHA_MODE_REG (DR_REG_ECDSA_BASE + 0x200)
209 /** ECDSA_SHA_MODE : R/W; bitpos: [2:0]; default: 0;
210  *  The work mode bits of SHA Calculator in ECDSA Accelerator. 1: SHA-224. 2: SHA-256.
211  *  Others: invalid.
212  */
213 #define ECDSA_SHA_MODE    0x00000007U
214 #define ECDSA_SHA_MODE_M  (ECDSA_SHA_MODE_V << ECDSA_SHA_MODE_S)
215 #define ECDSA_SHA_MODE_V  0x00000007U
216 #define ECDSA_SHA_MODE_S  0
217 
218 /** ECDSA_SHA_START_REG register
219  *  ECDSA control SHA register
220  */
221 #define ECDSA_SHA_START_REG (DR_REG_ECDSA_BASE + 0x210)
222 /** ECDSA_SHA_START : WT; bitpos: [0]; default: 0;
223  *  Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This
224  *  bit will be self-cleared after configuration.
225  */
226 #define ECDSA_SHA_START    (BIT(0))
227 #define ECDSA_SHA_START_M  (ECDSA_SHA_START_V << ECDSA_SHA_START_S)
228 #define ECDSA_SHA_START_V  0x00000001U
229 #define ECDSA_SHA_START_S  0
230 
231 /** ECDSA_SHA_CONTINUE_REG register
232  *  ECDSA control SHA register
233  */
234 #define ECDSA_SHA_CONTINUE_REG (DR_REG_ECDSA_BASE + 0x214)
235 /** ECDSA_SHA_CONTINUE : WT; bitpos: [0]; default: 0;
236  *  Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This
237  *  bit will be self-cleared after configuration.
238  */
239 #define ECDSA_SHA_CONTINUE    (BIT(0))
240 #define ECDSA_SHA_CONTINUE_M  (ECDSA_SHA_CONTINUE_V << ECDSA_SHA_CONTINUE_S)
241 #define ECDSA_SHA_CONTINUE_V  0x00000001U
242 #define ECDSA_SHA_CONTINUE_S  0
243 
244 /** ECDSA_SHA_BUSY_REG register
245  *  ECDSA status register
246  */
247 #define ECDSA_SHA_BUSY_REG (DR_REG_ECDSA_BASE + 0x218)
248 /** ECDSA_SHA_BUSY : RO; bitpos: [0]; default: 0;
249  *  The busy status bit of SHA Calculator in ECDSA Accelerator. 1:SHA is in
250  *  calculation. 0: SHA is idle.
251  */
252 #define ECDSA_SHA_BUSY    (BIT(0))
253 #define ECDSA_SHA_BUSY_M  (ECDSA_SHA_BUSY_V << ECDSA_SHA_BUSY_S)
254 #define ECDSA_SHA_BUSY_V  0x00000001U
255 #define ECDSA_SHA_BUSY_S  0
256 
257 /** ECDSA_MESSAGE_MEM register
258  *  The memory that stores message.
259  */
260 #define ECDSA_MESSAGE_MEM (DR_REG_ECDSA_BASE + 0x280)
261 #define ECDSA_MESSAGE_MEM_SIZE_BYTES 32
262 
263 /** ECDSA_R_MEM register
264  *  The memory that stores r.
265  */
266 #define ECDSA_R_MEM (DR_REG_ECDSA_BASE + 0xa00)
267 #define ECDSA_R_MEM_SIZE_BYTES 32
268 
269 /** ECDSA_S_MEM register
270  *  The memory that stores s.
271  */
272 #define ECDSA_S_MEM (DR_REG_ECDSA_BASE + 0xa20)
273 #define ECDSA_S_MEM_SIZE_BYTES 32
274 
275 /** ECDSA_Z_MEM register
276  *  The memory that stores software written z.
277  */
278 #define ECDSA_Z_MEM (DR_REG_ECDSA_BASE + 0xa40)
279 #define ECDSA_Z_MEM_SIZE_BYTES 32
280 
281 /** ECDSA_QAX_MEM register
282  *  The memory that stores x coordinates of QA or software written k.
283  */
284 #define ECDSA_QAX_MEM (DR_REG_ECDSA_BASE + 0xa60)
285 #define ECDSA_QAX_MEM_SIZE_BYTES 32
286 
287 /** ECDSA_QAY_MEM register
288  *  The memory that stores y coordinates of QA.
289  */
290 #define ECDSA_QAY_MEM (DR_REG_ECDSA_BASE + 0xa80)
291 #define ECDSA_QAY_MEM_SIZE_BYTES 32
292 
293 #ifdef __cplusplus
294 }
295 #endif
296