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