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