1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3 * (C) Copyright 2019 Rockchip Electronics Co., Ltd
4 */
5
6 #ifndef _ROCKCHIP_CRYPTO_V2_H_
7 #define _ROCKCHIP_CRYPTO_V2_H_
8
9 #include <asm/io.h>
10
11 #define RK_MODE_MASK 0x0000ffff
12 #define RK_GET_RK_MODE(mode) ((mode) & RK_MODE_MASK)
13
14 #define RK_AES_HASH_RX 0
15 #define RK_AES_HASH_TX 1
16
17 #define _SBF(s, v) ((v) << (s))
18 #define _BIT(b) _SBF(b, 1)
19
20 #define DES_KEYSIZE 8
21 #define TDES_EDE_KEYSIZE 24
22 #define AES_KEYSIZE_128 16
23 #define AES_KEYSIZE_192 24
24 #define AES_KEYSIZE_256 32
25 #define SM4_KEYSIZE 16
26
27 #define DES_BLOCK_SIZE 8
28 #define AES_BLOCK_SIZE 16
29 #define SM4_BLOCK_SIZE 16
30
31 #define CRYPTO_WRITE_MASK_SHIFT (16)
32 #define CRYPTO_WRITE_MASK_ALL ((0xffffu << CRYPTO_WRITE_MASK_SHIFT))
33
34 #define WRITE_MASK (16)
35
36 #define CRU_CLKGATE_CON8_ALLCLK_EN _SBF(12, 0x0F)
37 #define CRU_CLKGATE_CON9_ALLCLK_EN _SBF(2, 0x0F)
38
39 #define CRYPTO_MST_NON_SECURE _SBF(0, 0x03)
40 #define CRYPTO_SLV_SECURE _BIT(8)
41
42 /* Crypto control registers*/
43 #define CRYPTO_CLK_CTL 0x0000
44 #define CRYPTO_AUTO_CLKGATE_EN _BIT(0)
45
46 #define CRYPTO_RST_CTL 0x0004
47 #define CRYPTO_SW_PKA_RESET _BIT(2)
48 #define CRYPTO_SW_RNG_RESET _BIT(1)
49 #define CRYPTO_SW_CC_RESET _BIT(0)
50
51 /* Crypto DMA control registers*/
52 #define CRYPTO_DMA_INT_EN 0x0008
53 #define CRYPTO_NOSYNC_LOCKSTEP_INT_EN _BIT(8)
54 #define CRYPTO_SYNC_LOCKSTEP_INT_EN _BIT(7)
55 #define CRYPTO_ZERO_ERR_INT_EN _BIT(6)
56 #define CRYPTO_LIST_ERR_INT_EN _BIT(5)
57 #define CRYPTO_SRC_ERR_INT_EN _BIT(4)
58 #define CRYPTO_DST_ERR_INT_EN _BIT(3)
59 #define CRYPTO_SRC_ITEM_INT_EN _BIT(2)
60 #define CRYPTO_DST_ITEM_DONE_INT_EN _BIT(1)
61 #define CRYPTO_LIST_DONE_INT_EN _BIT(0)
62
63 #define CRYPTO_DMA_INT_ST 0x000C
64 #define CRYPTO_SYNC_LOCKSTEP_INT_ST _BIT(7)
65 #define CRYPTO_ZERO_LEN_INT_ST _BIT(6)
66 #define CRYPTO_LIST_ERR_INT_ST _BIT(5)
67 #define CRYPTO_SRC_ERR_INT_ST _BIT(4)
68 #define CRYPTO_DST_ERR_INT_ST _BIT(3)
69 #define CRYPTO_SRC_ITEM_DONE_INT_ST _BIT(2)
70 #define CRYPTO_DST_ITEM_DONE_INT_ST _BIT(1)
71 #define CRYPTO_LIST_DONE_INT_ST _BIT(0)
72
73 #define CRYPTO_DMA_CTL 0x0010
74 #define CRYPTO_DMA_RESTART _BIT(1)
75 #define CRYPTO_DMA_START _BIT(0)
76
77 /* DMA LIST Start Address Register */
78 #define CRYPTO_DMA_LLI_ADDR 0x0014
79
80 #define CRYPTO_DMA_ST 0x0018
81 #define CRYPTO_DMA_BUSY _BIT(0)
82
83 #define CRYPTO_DMA_STATE 0x001C
84 #define CRYPTO_LLI_IDLE_STATE _SBF(4, 0x00)
85 #define CRYPTO_LLI_FETCH_STATE _SBF(4, 0x01)
86 #define CRYPTO_LLI_WORK_STATE _SBF(4, 0x02)
87 #define CRYPTO_SRC_IDLE_STATE _SBF(2, 0x00)
88 #define CRYPTO_SRC_LOAD_STATE _SBF(2, 0x01)
89 #define CRYPTO_SRC_WORK_STATE _SBF(2, 0x02)
90 #define CRYPTO_DST_IDLE_STATE _SBF(0, 0x00)
91 #define CRYPTO_DST_LOAD_STATE _SBF(0, 0x01)
92 #define CRYPTO_DST_WORK_STATE _SBF(0, 0x02)
93
94 /* DMA LLI Read Address Register */
95 #define CRYPTO_DMA_LLI_RADDR 0x0020
96
97 /* DMA Source Data Read Address Register */
98 #define CRYPTO_DMA_SRC_RADDR 0x0024
99
100 /* DMA Destination Data Read Address Register */
101 #define CRYPTO_DMA_DST_RADDR 0x0028
102
103 #define CRYPTO_DMA_ITEM_ID 0x002C
104
105 #define CRYPTO_FIFO_CTL 0x0040
106 #define CRYPTO_DOUT_BYTESWAP _BIT(1)
107 #define CRYPTO_DOIN_BYTESWAP _BIT(0)
108
109 /* Block Cipher Control Register */
110 #define CRYPTO_BC_CTL 0x0044
111 #define CRYPTO_BC_AES _SBF(8, 0x00)
112 #define CRYPTO_BC_SM4 _SBF(8, 0x01)
113 #define CRYPTO_BC_DES _SBF(8, 0x02)
114 #define CRYPTO_BC_TDES _SBF(8, 0x03)
115 #define CRYPTO_BC_ECB _SBF(4, 0x00)
116 #define CRYPTO_BC_CBC _SBF(4, 0x01)
117 #define CRYPTO_BC_CTS _SBF(4, 0x02)
118 #define CRYPTO_BC_CTR _SBF(4, 0x03)
119 #define CRYPTO_BC_CFB _SBF(4, 0x04)
120 #define CRYPTO_BC_OFB _SBF(4, 0x05)
121 #define CRYPTO_BC_XTS _SBF(4, 0x06)
122 #define CRYPTO_BC_CCM _SBF(4, 0x07)
123 #define CRYPTO_BC_GCM _SBF(4, 0x08)
124 #define CRYPTO_BC_CMAC _SBF(4, 0x09)
125 #define CRYPTO_BC_CBC_MAC _SBF(4, 0x0A)
126 #define CRYPTO_BC_128_bit_key _SBF(2, 0x00)
127 #define CRYPTO_BC_192_bit_key _SBF(2, 0x01)
128 #define CRYPTO_BC_256_bit_key _SBF(2, 0x02)
129 #define CRYPTO_BC_DECRYPT _BIT(1)
130 #define CRYPTO_BC_ENABLE _BIT(0)
131
132 /* Hash Control Register */
133 #define CRYPTO_HASH_CTL 0x0048
134 #define CRYPTO_MODE_SHA1 _SBF(4, 0x00)
135 #define CRYPTO_MODE_MD5 _SBF(4, 0x01)
136 #define CRYPTO_MODE_SHA256 _SBF(4, 0x02)
137 #define CRYPTO_MODE_SHA224 _SBF(4, 0x03)
138 #define CRYPTO_MODE_SM3 _SBF(4, 0x06)
139 #define CRYPTO_MODE_SHA512 _SBF(4, 0x08)
140 #define CRYPTO_MODE_SHA384 _SBF(4, 0x09)
141 #define CRYPTO_MODE_SHA512_224 _SBF(4, 0x0A)
142 #define CRYPTO_MODE_SHA512_256 _SBF(4, 0x0B)
143 #define CRYPTO_HMAC_ENABLE _BIT(3)
144 #define CRYPTO_HW_PAD_ENABLE _BIT(2)
145 #define CRYPTO_HASH_SRC_SEL _BIT(1)
146 #define CRYPTO_HASH_ENABLE _BIT(0)
147
148 /* Cipher Status Register */
149 #define CRYPTO_CIPHER_ST 0x004C
150 #define CRYPTO_OTP_KEY_VALID _BIT(2)
151 #define CRYPTO_HASH_BUSY _BIT(1)
152 #define CRYPTO_BLOCK_CIPHER_BUSY _BIT(0)
153
154 #define CRYPTO_CIPHER_STATE 0x0050
155 #define CRYPTO_HASH_IDLE_STATE _SBF(10, 0x01)
156 #define CRYPTO_HASH_IPAD_STATE _SBF(10, 0x02)
157 #define CRYPTO_HASH_TEXT_STATE _SBF(10, 0x04)
158 #define CRYPTO_HASH_OPAD_STATE _SBF(10, 0x08)
159 #define CRYPTO_HASH_OPAD_EXT_STATE _SBF(10, 0x10)
160 #define CRYPTO_GCM_IDLE_STATE _SBF(8, 0x00)
161 #define CRYPTO_GCM_PRE_STATE _SBF(8, 0x01)
162 #define CRYPTO_GCM_NA_STATE _SBF(8, 0x02)
163 #define CRYPTO_GCM_PC_STATE _SBF(8, 0x03)
164 #define CRYPTO_CCM_IDLE_STATE _SBF(6, 0x00)
165 #define CRYPTO_CCM_PRE_STATE _SBF(6, 0x01)
166 #define CRYPTO_CCM_NA_STATE _SBF(6, 0x02)
167 #define CRYPTO_CCM_PC_STATE _SBF(6, 0x03)
168 #define CRYPTO_PARALLEL_IDLE_STATE _SBF(4, 0x00)
169 #define CRYPTO_PARALLEL_PRE_STATE _SBF(4, 0x01)
170 #define CRYPTO_PARALLEL_BULK_STATE _SBF(4, 0x02)
171 #define CRYPTO_MAC_IDLE_STATE _SBF(2, 0x00)
172 #define CRYPTO_MAC_PRE_STATE _SBF(2, 0x01)
173 #define CRYPTO_MAC_BULK_STATE _SBF(2, 0x02)
174 #define CRYPTO_SERIAL_IDLE_STATE _SBF(0, 0x00)
175 #define CRYPTO_SERIAL_PRE_STATE _SBF(0, 0x01)
176 #define CRYPTO_SERIAL_BULK_STATE _SBF(0, 0x02)
177
178 #define CRYPTO_CH0_IV_0 0x0100
179 #define CRYPTO_CH0_IV_1 0x0104
180 #define CRYPTO_CH0_IV_2 0x0108
181 #define CRYPTO_CH0_IV_3 0x010c
182 #define CRYPTO_CH1_IV_0 0x0110
183 #define CRYPTO_CH1_IV_1 0x0114
184 #define CRYPTO_CH1_IV_2 0x0118
185 #define CRYPTO_CH1_IV_3 0x011c
186 #define CRYPTO_CH2_IV_0 0x0120
187 #define CRYPTO_CH2_IV_1 0x0124
188 #define CRYPTO_CH2_IV_2 0x0128
189 #define CRYPTO_CH2_IV_3 0x012c
190 #define CRYPTO_CH3_IV_0 0x0130
191 #define CRYPTO_CH3_IV_1 0x0134
192 #define CRYPTO_CH3_IV_2 0x0138
193 #define CRYPTO_CH3_IV_3 0x013c
194 #define CRYPTO_CH4_IV_0 0x0140
195 #define CRYPTO_CH4_IV_1 0x0144
196 #define CRYPTO_CH4_IV_2 0x0148
197 #define CRYPTO_CH4_IV_3 0x014c
198 #define CRYPTO_CH5_IV_0 0x0150
199 #define CRYPTO_CH5_IV_1 0x0154
200 #define CRYPTO_CH5_IV_2 0x0158
201 #define CRYPTO_CH5_IV_3 0x015c
202 #define CRYPTO_CH6_IV_0 0x0160
203 #define CRYPTO_CH6_IV_1 0x0164
204 #define CRYPTO_CH6_IV_2 0x0168
205 #define CRYPTO_CH6_IV_3 0x016c
206 #define CRYPTO_CH7_IV_0 0x0170
207 #define CRYPTO_CH7_IV_1 0x0174
208 #define CRYPTO_CH7_IV_2 0x0178
209 #define CRYPTO_CH7_IV_3 0x017c
210
211 #define CRYPTO_CH0_KEY_0 0x0180
212 #define CRYPTO_CH0_KEY_1 0x0184
213 #define CRYPTO_CH0_KEY_2 0x0188
214 #define CRYPTO_CH0_KEY_3 0x018c
215 #define CRYPTO_CH1_KEY_0 0x0190
216 #define CRYPTO_CH1_KEY_1 0x0194
217 #define CRYPTO_CH1_KEY_2 0x0198
218 #define CRYPTO_CH1_KEY_3 0x019c
219 #define CRYPTO_CH2_KEY_0 0x01a0
220 #define CRYPTO_CH2_KEY_1 0x01a4
221 #define CRYPTO_CH2_KEY_2 0x01a8
222 #define CRYPTO_CH2_KEY_3 0x01ac
223 #define CRYPTO_CH3_KEY_0 0x01b0
224 #define CRYPTO_CH3_KEY_1 0x01b4
225 #define CRYPTO_CH3_KEY_2 0x01b8
226 #define CRYPTO_CH3_KEY_3 0x01bc
227 #define CRYPTO_CH4_KEY_0 0x01c0
228 #define CRYPTO_CH4_KEY_1 0x01c4
229 #define CRYPTO_CH4_KEY_2 0x01c8
230 #define CRYPTO_CH4_KEY_3 0x01cc
231 #define CRYPTO_CH5_KEY_0 0x01d0
232 #define CRYPTO_CH5_KEY_1 0x01d4
233 #define CRYPTO_CH5_KEY_2 0x01d8
234 #define CRYPTO_CH5_KEY_3 0x01dc
235 #define CRYPTO_CH6_KEY_0 0x01e0
236 #define CRYPTO_CH6_KEY_1 0x01e4
237 #define CRYPTO_CH6_KEY_2 0x01e8
238 #define CRYPTO_CH6_KEY_3 0x01ec
239 #define CRYPTO_CH7_KEY_0 0x01f0
240 #define CRYPTO_CH7_KEY_1 0x01f4
241 #define CRYPTO_CH7_KEY_2 0x01f8
242 #define CRYPTO_CH7_KEY_3 0x01fc
243 #define CRYPTO_KEY_CHANNEL_NUM 8
244
245 #define CRYPTO_CH0_PKEY_0 0x0200
246 #define CRYPTO_CH0_PKEY_1 0x0204
247 #define CRYPTO_CH0_PKEY_2 0x0208
248 #define CRYPTO_CH0_PKEY_3 0x020c
249 #define CRYPTO_CH1_PKEY_0 0x0210
250 #define CRYPTO_CH1_PKEY_1 0x0214
251 #define CRYPTO_CH1_PKEY_2 0x0218
252 #define CRYPTO_CH1_PKEY_3 0x021c
253 #define CRYPTO_CH2_PKEY_0 0x0220
254 #define CRYPTO_CH2_PKEY_1 0x0224
255 #define CRYPTO_CH2_PKEY_2 0x0228
256 #define CRYPTO_CH2_PKEY_3 0x022c
257 #define CRYPTO_CH3_PKEY_0 0x0230
258 #define CRYPTO_CH3_PKEY_1 0x0234
259 #define CRYPTO_CH3_PKEY_2 0x0238
260 #define CRYPTO_CH3_PKEY_3 0x023c
261 #define CRYPTO_CH4_PKEY_0 0x0240
262 #define CRYPTO_CH4_PKEY_1 0x0244
263 #define CRYPTO_CH4_PKEY_2 0x0248
264 #define CRYPTO_CH4_PKEY_3 0x024c
265 #define CRYPTO_CH5_PKEY_0 0x0250
266 #define CRYPTO_CH5_PKEY_1 0x0254
267 #define CRYPTO_CH5_PKEY_2 0x0258
268 #define CRYPTO_CH5_PKEY_3 0x025c
269 #define CRYPTO_CH6_PKEY_0 0x0260
270 #define CRYPTO_CH6_PKEY_1 0x0264
271 #define CRYPTO_CH6_PKEY_2 0x0268
272 #define CRYPTO_CH6_PKEY_3 0x026c
273 #define CRYPTO_CH7_PKEY_0 0x0270
274 #define CRYPTO_CH7_PKEY_1 0x0274
275 #define CRYPTO_CH7_PKEY_2 0x0278
276 #define CRYPTO_CH7_PKEY_3 0x027c
277 #define CRYPTO_PKEY_CHANNEL_NUM 8
278
279 #define CRYPTO_CH0_PC_LEN_0 0x0280
280 #define CRYPTO_CH0_PC_LEN_1 0x0284
281 #define CRYPTO_CH1_PC_LEN_0 0x0288
282 #define CRYPTO_CH1_PC_LEN_1 0x028c
283 #define CRYPTO_CH2_PC_LEN_0 0x0290
284 #define CRYPTO_CH2_PC_LEN_1 0x0294
285 #define CRYPTO_CH3_PC_LEN_0 0x0298
286 #define CRYPTO_CH3_PC_LEN_1 0x029c
287 #define CRYPTO_CH4_PC_LEN_0 0x02a0
288 #define CRYPTO_CH4_PC_LEN_1 0x02a4
289 #define CRYPTO_CH5_PC_LEN_0 0x02a8
290 #define CRYPTO_CH5_PC_LEN_1 0x02ac
291 #define CRYPTO_CH6_PC_LEN_0 0x02b0
292 #define CRYPTO_CH6_PC_LEN_1 0x02b4
293 #define CRYPTO_CH7_PC_LEN_0 0x02b8
294 #define CRYPTO_CH7_PC_LEN_1 0x02bc
295
296 #define CRYPTO_CH0_AAD_LEN_0 0x02c0
297 #define CRYPTO_CH0_AAD_LEN_1 0x02c4
298 #define CRYPTO_CH1_AAD_LEN_0 0x02c8
299 #define CRYPTO_CH1_AAD_LEN_1 0x02cc
300 #define CRYPTO_CH2_AAD_LEN_0 0x02d0
301 #define CRYPTO_CH2_AAD_LEN_1 0x02d4
302 #define CRYPTO_CH3_AAD_LEN_0 0x02d8
303 #define CRYPTO_CH3_AAD_LEN_1 0x02dc
304 #define CRYPTO_CH4_AAD_LEN_0 0x02e0
305 #define CRYPTO_CH4_AAD_LEN_1 0x02e4
306 #define CRYPTO_CH5_AAD_LEN_0 0x02e8
307 #define CRYPTO_CH5_AAD_LEN_1 0x02ec
308 #define CRYPTO_CH6_AAD_LEN_0 0x02f0
309 #define CRYPTO_CH6_AAD_LEN_1 0x02f4
310 #define CRYPTO_CH7_AAD_LEN_0 0x02f8
311 #define CRYPTO_CH7_AAD_LEN_1 0x02fc
312
313 #define CRYPTO_CH0_IV_LEN_0 0x0300
314 #define CRYPTO_CH1_IV_LEN_0 0x0304
315 #define CRYPTO_CH2_IV_LEN_0 0x0308
316 #define CRYPTO_CH3_IV_LEN_0 0x030c
317 #define CRYPTO_CH4_IV_LEN_0 0x0310
318 #define CRYPTO_CH5_IV_LEN_0 0x0314
319 #define CRYPTO_CH6_IV_LEN_0 0x0318
320 #define CRYPTO_CH7_IV_LEN_0 0x031c
321
322 #define CRYPTO_CH0_TAG_0 0x0320
323 #define CRYPTO_CH0_TAG_1 0x0324
324 #define CRYPTO_CH0_TAG_2 0x0328
325 #define CRYPTO_CH0_TAG_3 0x032c
326 #define CRYPTO_CH1_TAG_0 0x0330
327 #define CRYPTO_CH1_TAG_1 0x0334
328 #define CRYPTO_CH1_TAG_2 0x0338
329 #define CRYPTO_CH1_TAG_3 0x033c
330 #define CRYPTO_CH2_TAG_0 0x0340
331 #define CRYPTO_CH2_TAG_1 0x0344
332 #define CRYPTO_CH2_TAG_2 0x0348
333 #define CRYPTO_CH2_TAG_3 0x034c
334 #define CRYPTO_CH3_TAG_0 0x0350
335 #define CRYPTO_CH3_TAG_1 0x0354
336 #define CRYPTO_CH3_TAG_2 0x0358
337 #define CRYPTO_CH3_TAG_3 0x035c
338 #define CRYPTO_CH4_TAG_0 0x0360
339 #define CRYPTO_CH4_TAG_1 0x0364
340 #define CRYPTO_CH4_TAG_2 0x0368
341 #define CRYPTO_CH4_TAG_3 0x036c
342 #define CRYPTO_CH5_TAG_0 0x0370
343 #define CRYPTO_CH5_TAG_1 0x0374
344 #define CRYPTO_CH5_TAG_2 0x0378
345 #define CRYPTO_CH5_TAG_3 0x037c
346 #define CRYPTO_CH6_TAG_0 0x0380
347 #define CRYPTO_CH6_TAG_1 0x0384
348 #define CRYPTO_CH6_TAG_2 0x0388
349 #define CRYPTO_CH6_TAG_3 0x038c
350 #define CRYPTO_CH7_TAG_0 0x0390
351 #define CRYPTO_CH7_TAG_1 0x0394
352 #define CRYPTO_CH7_TAG_2 0x0398
353 #define CRYPTO_CH7_TAG_3 0x039c
354
355 #define CRYPTO_HASH_DOUT_0 0x03a0
356 #define CRYPTO_HASH_DOUT_1 0x03a4
357 #define CRYPTO_HASH_DOUT_2 0x03a8
358 #define CRYPTO_HASH_DOUT_3 0x03ac
359 #define CRYPTO_HASH_DOUT_4 0x03b0
360 #define CRYPTO_HASH_DOUT_5 0x03b4
361 #define CRYPTO_HASH_DOUT_6 0x03b8
362 #define CRYPTO_HASH_DOUT_7 0x03bc
363 #define CRYPTO_HASH_DOUT_8 0x03c0
364 #define CRYPTO_HASH_DOUT_9 0x03c4
365 #define CRYPTO_HASH_DOUT_10 0x03c8
366 #define CRYPTO_HASH_DOUT_11 0x03cc
367 #define CRYPTO_HASH_DOUT_12 0x03d0
368 #define CRYPTO_HASH_DOUT_13 0x03d4
369 #define CRYPTO_HASH_DOUT_14 0x03d8
370 #define CRYPTO_HASH_DOUT_15 0x03dc
371
372 #define CRYPTO_TAG_VALID 0x03e0
373 #define CRYPTO_CH7_TAG_VALID _BIT(7)
374 #define CRYPTO_CH6_TAG_VALID _BIT(6)
375 #define CRYPTO_CH5_TAG_VALID _BIT(5)
376 #define CRYPTO_CH4_TAG_VALID _BIT(4)
377 #define CRYPTO_CH3_TAG_VALID _BIT(3)
378 #define CRYPTO_CH2_TAG_VALID _BIT(2)
379 #define CRYPTO_CH1_TAG_VALID _BIT(1)
380 #define CRYPTO_CH0_TAG_VALID _BIT(0)
381
382 #define CRYPTO_HASH_VALID 0x03e4
383 #define CRYPTO_HASH_IS_VALID _BIT(0)
384
385 #define CRYPTO_VERSION 0x03f0
386
387 #define CRYPTO_RNG_CTL 0x0400
388 #define CRYPTO_RNG_64_bit_len _SBF(4, 0x00)
389 #define CRYPTO_RNG_128_bit_len _SBF(4, 0x01)
390 #define CRYPTO_RNG_192_bit_len _SBF(4, 0x02)
391 #define CRYPTO_RNG_256_bit_len _SBF(4, 0x03)
392 #define CRYPTO_RNG_FATESY_SOC_RING _SBF(2, 0x00)
393 #define CRYPTO_RNG_SLOWER_SOC_RING_0 _SBF(2, 0x01)
394 #define CRYPTO_RNG_SLOWER_SOC_RING_1 _SBF(2, 0x02)
395 #define CRYPTO_RNG_SLOWEST_SOC_RING _SBF(2, 0x03)
396 #define CRYPTO_RNG_ENABLE _BIT(1)
397 #define CRYPTO_RNG_START _BIT(0)
398
399 #define CRYPTO_RNG_SAMPLE_CNT 0x0404
400 #define CRYPTO_RNG_DOUT_0 0x0410
401 #define CRYPTO_RNG_DOUT_1 0x0414
402 #define CRYPTO_RNG_DOUT_2 0x0418
403 #define CRYPTO_RNG_DOUT_3 0x041c
404 #define CRYPTO_RNG_DOUT_4 0x0420
405 #define CRYPTO_RNG_DOUT_5 0x0424
406 #define CRYPTO_RNG_DOUT_6 0x0428
407 #define CRYPTO_RNG_DOUT_7 0x042c
408
409 #define CRYPTO_RAM_CTL 0x0480
410 #define CRYPTO_RAM_PKA_RDY _BIT(0)
411
412 #define CRYPTO_RAM_ST 0x0484
413 #define CRYPTO_CLK_RAM_RDY _BIT(0)
414
415 #define CRYPTO_DEBUG_CTL 0x04a0
416 #define CRYPTO_DEBUG_MODE _BIT(0)
417
418 #define CRYPTO_DEBUG_ST 0x04a4
419 #define CRYPTO_PKA_DEBUG_CLK_EN _BIT(0)
420
421 #define CRYPTO_DEBUG_MONITOR 0x04a8
422
423 #define CRYPTO_AES_VERSION 0x0680
424 #define CRYPTO_DES_VERSION 0x0684
425 #define CRYPTO_SM4_VERSION 0x0688
426
427 #define CRYPTO_ECB_FLAG BIT(0)
428 #define CRYPTO_CBC_FLAG BIT(1)
429 #define CRYPTO_CTS_FLAG BIT(2)
430 #define CRYPTO_CTR_FLAG BIT(3)
431 #define CRYPTO_CFB_FLAG BIT(4)
432 #define CRYPTO_OFB_FLAG BIT(5)
433 #define CRYPTO_XTS_FLAG BIT(6)
434 #define CRYPTO_CCM_FLAG BIT(7)
435 #define CRYPTO_GCM_FLAG BIT(8)
436 #define CRYPTO_CMAC_FLAG BIT(9)
437 #define CRYPTO_CBCMAC_FLAG BIT(10)
438
439 #define CRYPTO_AES128_FLAG BIT(16)
440 #define CRYPTO_AES192_FLAG BIT(17)
441 #define CRYPTO_AES256_FLAG BIT(18)
442
443 #define CRYPTO_TDES_FLAG BIT(16)
444
445 #define CRYPTO_LOCKSEP_FLAG BIT(20)
446 #define CRYPTO_SECURE_FLAG BIT(21)
447 #define CRYPTO_MULTI_CHN_FLAG BIT(22)
448
449 #define CRYPTO_HASH_VERSION 0x068C
450 #define CRYPTO_HASH_SHA1_FLAG BIT(0)
451 #define CRYPTO_HASH_SHA224_FLAG BIT(1)
452 #define CRYPTO_HASH_SHA256_FLAG BIT(2)
453 #define CRYPTO_HASH_SHA384_FLAG BIT(3)
454 #define CRYPTO_HASH_SHA512_FLAG BIT(4)
455 #define CRYPTO_HASH_SHA512_224_FLAG BIT(5)
456 #define CRYPTO_HASH_SHA512_256_FLAG BIT(6)
457 #define CRYPTO_HASH_MD5_FLAG BIT(7)
458 #define CRYPTO_HASH_SM3_FLAG BIT(8)
459
460 #define CRYPTO_HMAC_VERSION 0x0690
461 #define CRYPTO_HMAC_SHA1_FLAG BIT(0)
462 #define CRYPTO_HMAC_SHA256_FLAG BIT(1)
463 #define CRYPTO_HMAC_SHA512_FLAG BIT(2)
464 #define CRYPTO_HMAC_MD5_FLAG BIT(3)
465 #define CRYPTO_HMAC_SM3_FLAG BIT(4)
466
467 #define CRYPTO_MEMORY_MAP0 0x00800
468 #define CRYPTO_MEMORY_MAP1 0x00804
469 #define CRYPTO_MEMORY_MAP2 0x00808
470 #define CRYPTO_MEMORY_MAP3 0x0080C
471 #define CRYPTO_MEMORY_MAP4 0x00810
472 #define CRYPTO_MEMORY_MAP5 0x00814
473 #define CRYPTO_MEMORY_MAP6 0x00818
474 #define CRYPTO_MEMORY_MAP7 0x0081C
475 #define CRYPTO_MEMORY_MAP8 0x00820
476 #define CRYPTO_MEMORY_MAP9 0x00824
477 #define CRYPTO_MEMORY_MAP10 0x00828
478 #define CRYPTO_MEMORY_MAP11 0x0082C
479 #define CRYPTO_MEMORY_MAP12 0x00830
480 #define CRYPTO_MEMORY_MAP13 0x00834
481 #define CRYPTO_MEMORY_MAP14 0x00838
482 #define CRYPTO_MEMORY_MAP15 0x0083C
483 #define CRYPTO_MEMORY_MAP16 0x00840
484 #define CRYPTO_MEMORY_MAP17 0x00844
485 #define CRYPTO_MEMORY_MAP18 0x00848
486 #define CRYPTO_MEMORY_MAP19 0x0084C
487 #define CRYPTO_MEMORY_MAP20 0x00850
488 #define CRYPTO_MEMORY_MAP21 0x00854
489 #define CRYPTO_MEMORY_MAP22 0x00858
490 #define CRYPTO_MEMORY_MAP23 0x0085C
491 #define CRYPTO_MEMORY_MAP24 0x00860
492 #define CRYPTO_MEMORY_MAP25 0x00864
493 #define CRYPTO_MEMORY_MAP26 0x00868
494 #define CRYPTO_MEMORY_MAP27 0x0086C
495 #define CRYPTO_MEMORY_MAP28 0x00870
496 #define CRYPTO_MEMORY_MAP29 0x00874
497 #define CRYPTO_MEMORY_MAP30 0x00878
498 #define CRYPTO_MEMORY_MAP31 0x0087C
499
500 #define CRYPTO_OPCODE 0x00880
501 #define CRYPTO_OPCODE_REG_TAG_SHIFT 0
502 #define CRYPTO_OPCODE_TAG_MASK 0x0000003f
503 #define CRYPTO_OPCODE_REG_R_SHIFT 6
504 #define CRYPTO_OPCODE_REG_R_MASK 0x00000fc0
505 #define CRYPTO_OPCODE_REG_B_SHIFT 12
506 #define CRYPTO_OPCODE_REG_B_MASK 0x0003f000
507 #define CRYPTO_OPCODE_REG_A_SHIFT 18
508 #define CRYPTO_OPCODE_REG_A_MASK 0x00fc0000
509 #define CRYPTO_OPCODE_LEN_SHIFT 24
510 #define CRYPTO_OPCODE_LEN_MASK 0x03000000
511 #define CRYPTO_OPCODE_CODE_SHIFT 27
512 #define CRYPTO_OPCODE_CODE_MASK 0xfc000000
513
514 #define CRYPTO_N_NP_T0_T1_ADDR 0x00884
515 #define CRYPTO_N_VIRTUAL_ADDR_SHIFT 0
516 #define CRYPTO_N_VIRTUAL_ADDR_MASK 0x0000001f
517 #define CRYPTO_NP_VIRTUAL_ADDR_SHIFT 5
518 #define CRYPTO_NP_VIRTUAL_ADDR_MASK 0x000003e0
519 #define CRYPTO_T0_VIRTUAL_ADDR_SHIFT 10
520 #define CRYPTO_T0_VIRTUAL_ADDR_MASK 0x00007c00
521 #define CRYPTO_T1_VIRTUAL_ADDR_SHIFT 15
522 #define CRYPTO_T1_VIRTUAL_ADDR_MASK 0x000f8000
523
524 #define CRYPTO_PKA_STATUS 0x00888
525 #define CRYPTO_PKA_PIPE_IS_RDY _BIT(0)
526 #define CRYPTO_PKA_BUSY _BIT(1)
527 #define CRYPTO_PKA_ALU_OUT_ZERO _BIT(2)
528 #define CRYPTO_PKA_ALU_MODOVRFLW _BIT(3)
529 #define CRYPTO_PKA_DIV_BY_ZERO _BIT(4)
530 #define CRYPTO_PKA_ALU_CARRY _BIT(5)
531 #define CRYPTO_PKA_ALU_SIGN_OUT _BIT(6)
532 #define CRYPTO_PKA_MODINV_OF_ZERO _BIT(7)
533 #define CRYPTO_PKA_CPU_BUSY _BIT(8)
534 #define CRYPTO_PKA_OPCODE_STATUS_SHIFT 9
535 #define CRYPTO_PKA_OPCODE_STATUS_MASK 0x00003e00
536 #define CRYPTO_PKA_TAG_STATUS_SHIFT 14
537 #define CRYPTO_PKA_TAG_STATUS_MASK 0x0003c000
538
539 #define CRYPTO_PKA_SW_RESET 0x0088C
540 #define CRYPTO_PKA_L0 0x00890
541 #define CRYPTO_PKA_L1 0x00894
542 #define CRYPTO_PKA_L2 0x00898
543 #define CRYPTO_PKA_L3 0x0089C
544 #define CRYPTO_PKA_L4 0x008A0
545 #define CRYPTO_PKA_L5 0x008A4
546 #define CRYPTO_PKA_L6 0x008A8
547 #define CRYPTO_PKA_L7 0x008AC
548 #define CRYPTO_PKA_PIPE_RDY 0x008B0
549 #define CRYPTO_PKA_DONE 0x008B4
550 #define CRYPTO_PKA_MON_SELECT 0x008B8
551 #define CRYPTO_PKA_DEBUG_REG_EN 0x008BC
552 #define CRYPTO_DEBUG_CNT_ADDR 0x008C0
553 #define CRYPTO_DEBUG_EXT_ADDR 0x008C4
554 #define CRYPTO_PKA_DEBUG_HALT 0x008C8
555 #define CRYPTO_PKA_MON_READ 0x008D0
556 #define CRYPTO_PKA_INT_ENA 0x008D4
557 #define CRYPTO_PKA_INT_ST 0x008D8
558 #define CRYPTO_SRAM_ADDR 0x01000
559 #define CRYPTO_SRAM_BASE 0x1000
560
561 #define LLI_DMA_CTRL_LAST _BIT(0)
562 #define LLI_DMA_CTRL_PAUSE _BIT(1)
563 #define LLI_DMA_CTRL_LIST_DONE _BIT(8)
564 #define LLI_DMA_CTRL_DST_DONE _BIT(9)
565 #define LLI_DMA_CTRL_SRC_DONE _BIT(10)
566
567 #define LLI_USER_CIPHER_START _BIT(0)
568 #define LLI_USER_STRING_START _BIT(1)
569 #define LLI_USER_STRING_LAST _BIT(2)
570 #define LLI_USER_STRING_AAD _BIT(3)
571 #define LLI_USER_PRIVACY_KEY _BIT(7)
572 #define LLI_USER_ROOT_KEY _BIT(8)
573
574 extern fdt_addr_t crypto_base;
575
crypto_read(u32 offset)576 static inline u32 crypto_read(u32 offset)
577 {
578 return readl(crypto_base + offset);
579 }
580
crypto_write(u32 val,u32 offset)581 static inline void crypto_write(u32 val, u32 offset)
582 {
583 writel(val, crypto_base + offset);
584 }
585
586 #endif
587