xref: /arm-trusted-firmware/plat/nvidia/tegra/soc/t210/drivers/se/se_private.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  * Copyright (c) 2017-2020, NVIDIA CORPORATION.  All rights reserved.
4*91f16700Schasinglulu  *
5*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef SE_PRIVATE_H
9*91f16700Schasinglulu #define SE_PRIVATE_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <stdbool.h>
12*91f16700Schasinglulu #include <security_engine.h>
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /*
15*91f16700Schasinglulu  * PMC registers
16*91f16700Schasinglulu  */
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /* SC7 context save scratch register for T210 */
19*91f16700Schasinglulu #define PMC_SCRATCH43_REG_OFFSET		U(0x22C)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu /* Secure scratch registers */
22*91f16700Schasinglulu #define PMC_SECURE_SCRATCH4_OFFSET		0xC0U
23*91f16700Schasinglulu #define PMC_SECURE_SCRATCH5_OFFSET		0xC4U
24*91f16700Schasinglulu #define PMC_SECURE_SCRATCH6_OFFSET		0x224U
25*91f16700Schasinglulu #define PMC_SECURE_SCRATCH7_OFFSET		0x228U
26*91f16700Schasinglulu #define PMC_SECURE_SCRATCH116_OFFSET		0xB28U
27*91f16700Schasinglulu #define PMC_SECURE_SCRATCH117_OFFSET		0xB2CU
28*91f16700Schasinglulu #define PMC_SECURE_SCRATCH120_OFFSET		0xB38U
29*91f16700Schasinglulu #define PMC_SECURE_SCRATCH121_OFFSET		0xB3CU
30*91f16700Schasinglulu #define PMC_SECURE_SCRATCH122_OFFSET		0xB40U
31*91f16700Schasinglulu #define PMC_SECURE_SCRATCH123_OFFSET		0xB44U
32*91f16700Schasinglulu 
33*91f16700Schasinglulu /*
34*91f16700Schasinglulu  * AHB arbitration memory write queue
35*91f16700Schasinglulu  */
36*91f16700Schasinglulu #define ARAHB_MEM_WRQUE_MST_ID_OFFSET		0xFCU
37*91f16700Schasinglulu #define ARAHB_MST_ID_SE2_MASK			(0x1U << 13)
38*91f16700Schasinglulu #define ARAHB_MST_ID_SE_MASK			(0x1U << 14)
39*91f16700Schasinglulu 
40*91f16700Schasinglulu /**
41*91f16700Schasinglulu  * SE registers
42*91f16700Schasinglulu  */
43*91f16700Schasinglulu #define TEGRA_SE_AES_KEYSLOT_COUNT		16
44*91f16700Schasinglulu #define SE_MAX_LAST_BLOCK_SIZE			0xFFFFF
45*91f16700Schasinglulu 
46*91f16700Schasinglulu /* SE Status register */
47*91f16700Schasinglulu #define SE_STATUS_OFFSET			0x800U
48*91f16700Schasinglulu #define SE_STATUS_SHIFT				0
49*91f16700Schasinglulu #define SE_STATUS_IDLE	\
50*91f16700Schasinglulu 		((0U) << SE_STATUS_SHIFT)
51*91f16700Schasinglulu #define SE_STATUS_BUSY	\
52*91f16700Schasinglulu 		((1U) << SE_STATUS_SHIFT)
53*91f16700Schasinglulu #define SE_STATUS(x)	\
54*91f16700Schasinglulu 		((x) & ((0x3U) << SE_STATUS_SHIFT))
55*91f16700Schasinglulu 
56*91f16700Schasinglulu #define SE_MEM_INTERFACE_SHIFT			2
57*91f16700Schasinglulu #define SE_MEM_INTERFACE_IDLE			0
58*91f16700Schasinglulu #define SE_MEM_INTERFACE_BUSY			1
59*91f16700Schasinglulu #define SE_MEM_INTERFACE(x)	((x) << SE_STATUS_SHIFT)
60*91f16700Schasinglulu 
61*91f16700Schasinglulu /* SE register definitions */
62*91f16700Schasinglulu #define SE_SECURITY_REG_OFFSET			0x0
63*91f16700Schasinglulu #define SE_SECURITY_TZ_LOCK_SOFT_SHIFT		5
64*91f16700Schasinglulu #define SE_SECURE				0x0
65*91f16700Schasinglulu #define SE_SECURITY_TZ_LOCK_SOFT(x)	((x) << SE_SECURITY_TZ_LOCK_SOFT_SHIFT)
66*91f16700Schasinglulu 
67*91f16700Schasinglulu #define SE_SEC_ENG_DIS_SHIFT			1
68*91f16700Schasinglulu #define SE_DISABLE_FALSE			0
69*91f16700Schasinglulu #define SE_DISABLE_TRUE				1
70*91f16700Schasinglulu #define SE_SEC_ENG_DISABLE(x)((x) << SE_SEC_ENG_DIS_SHIFT)
71*91f16700Schasinglulu 
72*91f16700Schasinglulu /* SE config register */
73*91f16700Schasinglulu #define SE_CONFIG_REG_OFFSET			0x14U
74*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_SHIFT 		12
75*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_AES_ENC	\
76*91f16700Schasinglulu 		((1U) << SE_CONFIG_ENC_ALG_SHIFT)
77*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_RNG	\
78*91f16700Schasinglulu 		((2U) << SE_CONFIG_ENC_ALG_SHIFT)
79*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_SHA	\
80*91f16700Schasinglulu 		((3U) << SE_CONFIG_ENC_ALG_SHIFT)
81*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_RSA	\
82*91f16700Schasinglulu 		((4U) << SE_CONFIG_ENC_ALG_SHIFT)
83*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG_NOP	\
84*91f16700Schasinglulu 		((0U) << SE_CONFIG_ENC_ALG_SHIFT)
85*91f16700Schasinglulu #define SE_CONFIG_ENC_ALG(x)	\
86*91f16700Schasinglulu 		((x) & ((0xFU) << SE_CONFIG_ENC_ALG_SHIFT))
87*91f16700Schasinglulu 
88*91f16700Schasinglulu #define SE_CONFIG_DEC_ALG_SHIFT 		8
89*91f16700Schasinglulu #define SE_CONFIG_DEC_ALG_AES	\
90*91f16700Schasinglulu 		((1U) << SE_CONFIG_DEC_ALG_SHIFT)
91*91f16700Schasinglulu #define SE_CONFIG_DEC_ALG_NOP	\
92*91f16700Schasinglulu 		((0U) << SE_CONFIG_DEC_ALG_SHIFT)
93*91f16700Schasinglulu #define SE_CONFIG_DEC_ALG(x)	\
94*91f16700Schasinglulu 		((x) & ((0xFU) << SE_CONFIG_DEC_ALG_SHIFT))
95*91f16700Schasinglulu 
96*91f16700Schasinglulu #define SE_CONFIG_DST_SHIFT	 		2
97*91f16700Schasinglulu #define SE_CONFIG_DST_MEMORY	\
98*91f16700Schasinglulu 		((0U) << SE_CONFIG_DST_SHIFT)
99*91f16700Schasinglulu #define SE_CONFIG_DST_HASHREG	\
100*91f16700Schasinglulu 		((1U) << SE_CONFIG_DST_SHIFT)
101*91f16700Schasinglulu #define SE_CONFIG_DST_KEYTAB	\
102*91f16700Schasinglulu 		((2U) << SE_CONFIG_DST_SHIFT)
103*91f16700Schasinglulu #define SE_CONFIG_DST_SRK	\
104*91f16700Schasinglulu 		((3U) << SE_CONFIG_DST_SHIFT)
105*91f16700Schasinglulu #define SE_CONFIG_DST_RSAREG	\
106*91f16700Schasinglulu 		((4U) << SE_CONFIG_DST_SHIFT)
107*91f16700Schasinglulu #define SE_CONFIG_DST(x)	\
108*91f16700Schasinglulu 		((x) & ((0x7U) << SE_CONFIG_DST_SHIFT))
109*91f16700Schasinglulu 
110*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHIFT		24
111*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_KEY128	\
112*91f16700Schasinglulu 			((0UL) << SE_CONFIG_ENC_MODE_SHIFT)
113*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_KEY192	\
114*91f16700Schasinglulu 			((1UL) << SE_CONFIG_ENC_MODE_SHIFT)
115*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_KEY256	\
116*91f16700Schasinglulu 			((2UL) << SE_CONFIG_ENC_MODE_SHIFT)
117*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHA1				\
118*91f16700Schasinglulu 			((0UL) << SE_CONFIG_ENC_MODE_SHIFT)
119*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHA224	\
120*91f16700Schasinglulu 			((4UL) << SE_CONFIG_ENC_MODE_SHIFT)
121*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHA256	\
122*91f16700Schasinglulu 			((5UL) << SE_CONFIG_ENC_MODE_SHIFT)
123*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHA384	\
124*91f16700Schasinglulu 			((6UL) << SE_CONFIG_ENC_MODE_SHIFT)
125*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE_SHA512	\
126*91f16700Schasinglulu 			((7UL) << SE_CONFIG_ENC_MODE_SHIFT)
127*91f16700Schasinglulu #define SE_CONFIG_ENC_MODE(x)\
128*91f16700Schasinglulu 			((x) & ((0xFFUL) << SE_CONFIG_ENC_MODE_SHIFT))
129*91f16700Schasinglulu 
130*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHIFT		16
131*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_KEY128	\
132*91f16700Schasinglulu 			((0UL) << SE_CONFIG_DEC_MODE_SHIFT)
133*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_KEY192	\
134*91f16700Schasinglulu 			((1UL) << SE_CONFIG_DEC_MODE_SHIFT)
135*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_KEY256	\
136*91f16700Schasinglulu 			((2UL) << SE_CONFIG_DEC_MODE_SHIFT)
137*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHA1				\
138*91f16700Schasinglulu 			((0UL) << SE_CONFIG_DEC_MODE_SHIFT)
139*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHA224	\
140*91f16700Schasinglulu 			((4UL) << SE_CONFIG_DEC_MODE_SHIFT)
141*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHA256	\
142*91f16700Schasinglulu 			((5UL) << SE_CONFIG_DEC_MODE_SHIFT)
143*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHA384	\
144*91f16700Schasinglulu 			((6UL) << SE_CONFIG_DEC_MODE_SHIFT)
145*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE_SHA512	\
146*91f16700Schasinglulu 			((7UL) << SE_CONFIG_DEC_MODE_SHIFT)
147*91f16700Schasinglulu #define SE_CONFIG_DEC_MODE(x)\
148*91f16700Schasinglulu 			((x) & ((0xFFUL) << SE_CONFIG_DEC_MODE_SHIFT))
149*91f16700Schasinglulu 
150*91f16700Schasinglulu 
151*91f16700Schasinglulu /* DRBG random number generator config */
152*91f16700Schasinglulu #define SE_RNG_CONFIG_REG_OFFSET		0x340
153*91f16700Schasinglulu 
154*91f16700Schasinglulu #define DRBG_MODE_SHIFT				0
155*91f16700Schasinglulu #define DRBG_MODE_NORMAL		\
156*91f16700Schasinglulu 		((0U) << DRBG_MODE_SHIFT)
157*91f16700Schasinglulu #define DRBG_MODE_FORCE_INSTANTION  \
158*91f16700Schasinglulu 		((1U) << DRBG_MODE_SHIFT)
159*91f16700Schasinglulu #define DRBG_MODE_FORCE_RESEED	  \
160*91f16700Schasinglulu 		((2U) << DRBG_MODE_SHIFT)
161*91f16700Schasinglulu #define SE_RNG_CONFIG_MODE(x)   \
162*91f16700Schasinglulu 		((x) & ((0x3U) << DRBG_MODE_SHIFT))
163*91f16700Schasinglulu 
164*91f16700Schasinglulu #define DRBG_SRC_SHIFT				2
165*91f16700Schasinglulu #define DRBG_SRC_NONE	   \
166*91f16700Schasinglulu 		((0U) << DRBG_SRC_SHIFT)
167*91f16700Schasinglulu #define DRBG_SRC_ENTROPY	\
168*91f16700Schasinglulu 		((1U) << DRBG_SRC_SHIFT)
169*91f16700Schasinglulu #define DRBG_SRC_LFSR	   \
170*91f16700Schasinglulu 		((2U) << DRBG_SRC_SHIFT)
171*91f16700Schasinglulu #define SE_RNG_SRC_CONFIG_MODE(x)   \
172*91f16700Schasinglulu 		((x) & ((0x3U) << DRBG_SRC_SHIFT))
173*91f16700Schasinglulu 
174*91f16700Schasinglulu /* DRBG random number generator entropy config */
175*91f16700Schasinglulu 
176*91f16700Schasinglulu #define SE_RNG_SRC_CONFIG_REG_OFFSET		0x344U
177*91f16700Schasinglulu 
178*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_SHIFT			1
179*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_ENABLE	\
180*91f16700Schasinglulu 		((1U) << DRBG_RO_ENT_SRC_SHIFT)
181*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_DISABLE	\
182*91f16700Schasinglulu 		((0U) << DRBG_RO_ENT_SRC_SHIFT)
183*91f16700Schasinglulu #define SE_RNG_SRC_CONFIG_RO_ENT_SRC(x)	\
184*91f16700Schasinglulu 		((x) & ((0x1U) << DRBG_RO_ENT_SRC_SHIFT))
185*91f16700Schasinglulu 
186*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_LOCK_SHIFT		0
187*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_LOCK_ENABLE	\
188*91f16700Schasinglulu 		((1U) << DRBG_RO_ENT_SRC_LOCK_SHIFT)
189*91f16700Schasinglulu #define DRBG_RO_ENT_SRC_LOCK_DISABLE	\
190*91f16700Schasinglulu 		((0U) << DRBG_RO_ENT_SRC_LOCK_SHIFT)
191*91f16700Schasinglulu #define SE_RNG_SRC_CONFIG_RO_ENT_SRC_LOCK(x)	\
192*91f16700Schasinglulu 		((x) & ((0x1U) << DRBG_RO_ENT_SRC_LOCK_SHIFT))
193*91f16700Schasinglulu 
194*91f16700Schasinglulu #define DRBG_RO_ENT_IGNORE_MEM_SHIFT		12
195*91f16700Schasinglulu #define DRBG_RO_ENT_IGNORE_MEM_ENABLE	\
196*91f16700Schasinglulu 		((1U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT)
197*91f16700Schasinglulu #define DRBG_RO_ENT_IGNORE_MEM_DISABLE	\
198*91f16700Schasinglulu 		((0U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT)
199*91f16700Schasinglulu #define SE_RNG_SRC_CONFIG_RO_ENT_IGNORE_MEM(x)	\
200*91f16700Schasinglulu 		((x) & ((0x1U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT))
201*91f16700Schasinglulu 
202*91f16700Schasinglulu #define SE_RNG_RESEED_INTERVAL_REG_OFFSET	0x348
203*91f16700Schasinglulu 
204*91f16700Schasinglulu /* SE CRYPTO */
205*91f16700Schasinglulu #define SE_CRYPTO_REG_OFFSET			0x304
206*91f16700Schasinglulu #define SE_CRYPTO_HASH_SHIFT			0
207*91f16700Schasinglulu #define SE_CRYPTO_HASH_DISABLE	\
208*91f16700Schasinglulu 		((0U) << SE_CRYPTO_HASH_SHIFT)
209*91f16700Schasinglulu #define SE_CRYPTO_HASH_ENABLE	\
210*91f16700Schasinglulu 		((1U) << SE_CRYPTO_HASH_SHIFT)
211*91f16700Schasinglulu 
212*91f16700Schasinglulu #define SE_CRYPTO_XOR_POS_SHIFT			1
213*91f16700Schasinglulu #define SE_CRYPTO_XOR_BYPASS	\
214*91f16700Schasinglulu 		((0U) << SE_CRYPTO_XOR_POS_SHIFT)
215*91f16700Schasinglulu #define SE_CRYPTO_XOR_TOP	\
216*91f16700Schasinglulu 		((2U) << SE_CRYPTO_XOR_POS_SHIFT)
217*91f16700Schasinglulu #define SE_CRYPTO_XOR_BOTTOM	\
218*91f16700Schasinglulu 		((3U) << SE_CRYPTO_XOR_POS_SHIFT)
219*91f16700Schasinglulu 
220*91f16700Schasinglulu #define SE_CRYPTO_INPUT_SEL_SHIFT		3
221*91f16700Schasinglulu #define SE_CRYPTO_INPUT_AHB 	\
222*91f16700Schasinglulu 		((0U) << SE_CRYPTO_INPUT_SEL_SHIFT)
223*91f16700Schasinglulu #define SE_CRYPTO_INPUT_RANDOM	\
224*91f16700Schasinglulu 		((1U) << SE_CRYPTO_INPUT_SEL_SHIFT)
225*91f16700Schasinglulu #define SE_CRYPTO_INPUT_AESOUT	\
226*91f16700Schasinglulu 		((2U) << SE_CRYPTO_INPUT_SEL_SHIFT)
227*91f16700Schasinglulu #define SE_CRYPTO_INPUT_LNR_CTR \
228*91f16700Schasinglulu 		((3U) << SE_CRYPTO_INPUT_SEL_SHIFT)
229*91f16700Schasinglulu 
230*91f16700Schasinglulu #define SE_CRYPTO_VCTRAM_SEL_SHIFT		 5
231*91f16700Schasinglulu #define SE_CRYPTO_VCTRAM_AHB	\
232*91f16700Schasinglulu 		((0U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
233*91f16700Schasinglulu #define SE_CRYPTO_VCTRAM_AESOUT \
234*91f16700Schasinglulu 		((2U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
235*91f16700Schasinglulu #define SE_CRYPTO_VCTRAM_PREVAHB	\
236*91f16700Schasinglulu 		((3U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
237*91f16700Schasinglulu 
238*91f16700Schasinglulu #define SE_CRYPTO_IV_SEL_SHIFT			 7
239*91f16700Schasinglulu #define SE_CRYPTO_IV_ORIGINAL	\
240*91f16700Schasinglulu 		((0U) << SE_CRYPTO_IV_SEL_SHIFT)
241*91f16700Schasinglulu #define SE_CRYPTO_IV_UPDATED	\
242*91f16700Schasinglulu 		((1U) << SE_CRYPTO_IV_SEL_SHIFT)
243*91f16700Schasinglulu 
244*91f16700Schasinglulu #define SE_CRYPTO_CORE_SEL_SHIFT		8
245*91f16700Schasinglulu #define SE_CRYPTO_CORE_DECRYPT	\
246*91f16700Schasinglulu 		((0U) << SE_CRYPTO_CORE_SEL_SHIFT)
247*91f16700Schasinglulu #define SE_CRYPTO_CORE_ENCRYPT	\
248*91f16700Schasinglulu 		((1U) << SE_CRYPTO_CORE_SEL_SHIFT)
249*91f16700Schasinglulu 
250*91f16700Schasinglulu #define SE_CRYPTO_KEY_INDEX_SHIFT		24
251*91f16700Schasinglulu #define SE_CRYPTO_KEY_INDEX(x) (x << SE_CRYPTO_KEY_INDEX_SHIFT)
252*91f16700Schasinglulu 
253*91f16700Schasinglulu #define SE_CRYPTO_MEMIF_AHB	\
254*91f16700Schasinglulu 		((0U) << SE_CRYPTO_MEMIF_SHIFT)
255*91f16700Schasinglulu #define SE_CRYPTO_MEMIF_MCCIF	\
256*91f16700Schasinglulu 		((1U) << SE_CRYPTO_MEMIF_SHIFT)
257*91f16700Schasinglulu #define SE_CRYPTO_MEMIF_SHIFT			31
258*91f16700Schasinglulu 
259*91f16700Schasinglulu /* KEY TABLE */
260*91f16700Schasinglulu #define SE_KEYTABLE_REG_OFFSET			0x31C
261*91f16700Schasinglulu 
262*91f16700Schasinglulu /* KEYIV PKT - key slot */
263*91f16700Schasinglulu #define SE_KEYTABLE_SLOT_SHIFT			4
264*91f16700Schasinglulu #define SE_KEYTABLE_SLOT(x)	(x << SE_KEYTABLE_SLOT_SHIFT)
265*91f16700Schasinglulu 
266*91f16700Schasinglulu /* KEYIV PKT - KEYIV select */
267*91f16700Schasinglulu #define SE_KEYIV_PKT_KEYIV_SEL_SHIFT		3
268*91f16700Schasinglulu #define SE_CRYPTO_KEYIV_KEY	\
269*91f16700Schasinglulu 		((0U) << SE_KEYIV_PKT_KEYIV_SEL_SHIFT)
270*91f16700Schasinglulu #define SE_CRYPTO_KEYIV_IVS	\
271*91f16700Schasinglulu 		((1U) << SE_KEYIV_PKT_KEYIV_SEL_SHIFT)
272*91f16700Schasinglulu 
273*91f16700Schasinglulu /* KEYIV PKT - IV select */
274*91f16700Schasinglulu #define SE_KEYIV_PKT_IV_SEL_SHIFT		2
275*91f16700Schasinglulu #define SE_CRYPTO_KEYIV_IVS_OIV	\
276*91f16700Schasinglulu 		((0U) << SE_KEYIV_PKT_IV_SEL_SHIFT)
277*91f16700Schasinglulu #define SE_CRYPTO_KEYIV_IVS_UIV \
278*91f16700Schasinglulu 		((1U) << SE_KEYIV_PKT_IV_SEL_SHIFT)
279*91f16700Schasinglulu 
280*91f16700Schasinglulu /* KEYIV PKT - key word */
281*91f16700Schasinglulu #define SE_KEYIV_PKT_KEY_WORD_SHIFT		0
282*91f16700Schasinglulu #define SE_KEYIV_PKT_KEY_WORD(x)	\
283*91f16700Schasinglulu 		((x) << SE_KEYIV_PKT_KEY_WORD_SHIFT)
284*91f16700Schasinglulu 
285*91f16700Schasinglulu /* KEYIV PKT - iv word */
286*91f16700Schasinglulu #define SE_KEYIV_PKT_IV_WORD_SHIFT		0
287*91f16700Schasinglulu #define SE_KEYIV_PKT_IV_WORD(x)		\
288*91f16700Schasinglulu 		((x) << SE_KEYIV_PKT_IV_WORD_SHIFT)
289*91f16700Schasinglulu 
290*91f16700Schasinglulu /* SE OPERATION */
291*91f16700Schasinglulu #define SE_OPERATION_REG_OFFSET 		0x8U
292*91f16700Schasinglulu #define SE_OPERATION_SHIFT			0
293*91f16700Schasinglulu #define SE_OP_ABORT	\
294*91f16700Schasinglulu 		((0x0U) << SE_OPERATION_SHIFT)
295*91f16700Schasinglulu #define SE_OP_START	\
296*91f16700Schasinglulu 		((0x1U) << SE_OPERATION_SHIFT)
297*91f16700Schasinglulu #define SE_OP_RESTART	\
298*91f16700Schasinglulu 		((0x2U) << SE_OPERATION_SHIFT)
299*91f16700Schasinglulu #define SE_OP_CTX_SAVE	\
300*91f16700Schasinglulu 		((0x3U) << SE_OPERATION_SHIFT)
301*91f16700Schasinglulu #define SE_OP_RESTART_IN	\
302*91f16700Schasinglulu 		((0x4U) << SE_OPERATION_SHIFT)
303*91f16700Schasinglulu #define SE_OPERATION(x)	\
304*91f16700Schasinglulu 		((x) & ((0x7U) << SE_OPERATION_SHIFT))
305*91f16700Schasinglulu 
306*91f16700Schasinglulu /* SE CONTEXT */
307*91f16700Schasinglulu #define SE_CTX_SAVE_CONFIG_REG_OFFSET		0x70
308*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD_SHIFT		0
309*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD(x)	\
310*91f16700Schasinglulu 		(x << SE_CTX_SAVE_WORD_QUAD_SHIFT)
311*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD_KEYS_0_3	\
312*91f16700Schasinglulu 		((0U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
313*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD_KEYS_4_7	\
314*91f16700Schasinglulu 		((1U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
315*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD_ORIG_IV	\
316*91f16700Schasinglulu 		((2U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
317*91f16700Schasinglulu #define SE_CTX_SAVE_WORD_QUAD_UPD_IV	\
318*91f16700Schasinglulu 		((3U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
319*91f16700Schasinglulu 
320*91f16700Schasinglulu #define SE_CTX_SAVE_KEY_INDEX_SHIFT		8
321*91f16700Schasinglulu #define SE_CTX_SAVE_KEY_INDEX(x)	(x << SE_CTX_SAVE_KEY_INDEX_SHIFT)
322*91f16700Schasinglulu 
323*91f16700Schasinglulu #define SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT	24
324*91f16700Schasinglulu #define SE_CTX_SAVE_STICKY_WORD_QUAD_STICKY_0_3	\
325*91f16700Schasinglulu 		((0U) << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
326*91f16700Schasinglulu #define SE_CTX_SAVE_STICKY_WORD_QUAD_STICKY_4_7	\
327*91f16700Schasinglulu 		((1U) << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
328*91f16700Schasinglulu #define SE_CTX_SAVE_STICKY_WORD_QUAD(x)	\
329*91f16700Schasinglulu 		(x << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
330*91f16700Schasinglulu 
331*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_SHIFT			29
332*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_STICKY_BITS	\
333*91f16700Schasinglulu 		((0U) << SE_CTX_SAVE_SRC_SHIFT)
334*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_RSA_KEYTABLE	\
335*91f16700Schasinglulu 		((1U) << SE_CTX_SAVE_SRC_SHIFT)
336*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_AES_KEYTABLE	\
337*91f16700Schasinglulu 		((2U) << SE_CTX_SAVE_SRC_SHIFT)
338*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_PKA1_STICKY_BITS	\
339*91f16700Schasinglulu 		((3U) << SE_CTX_SAVE_SRC_SHIFT)
340*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_MEM	\
341*91f16700Schasinglulu 		((4U) << SE_CTX_SAVE_SRC_SHIFT)
342*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_SRK	\
343*91f16700Schasinglulu 		((6U) << SE_CTX_SAVE_SRC_SHIFT)
344*91f16700Schasinglulu #define SE_CTX_SAVE_SRC_PKA1_KEYTABLE	\
345*91f16700Schasinglulu 		((7U) << SE_CTX_SAVE_SRC_SHIFT)
346*91f16700Schasinglulu 
347*91f16700Schasinglulu #define SE_CTX_STICKY_WORD_QUAD_SHIFT		24
348*91f16700Schasinglulu #define SE_CTX_STICKY_WORD_QUAD_WORDS_0_3 \
349*91f16700Schasinglulu 		((0U) << SE_CTX_STICKY_WORD_QUAD_SHIFT)
350*91f16700Schasinglulu #define SE_CTX_STICKY_WORD_QUAD_WORDS_4_7 \
351*91f16700Schasinglulu 		((1U) << SE_CTX_STICKY_WORD_QUAD_SHIFT)
352*91f16700Schasinglulu #define SE_CTX_STICKY_WORD_QUAD(x)	 (x << SE_CTX_STICKY_WORD_QUAD_SHIFT)
353*91f16700Schasinglulu 
354*91f16700Schasinglulu #define SE_CTX_SAVE_RSA_KEY_INDEX_SHIFT		16
355*91f16700Schasinglulu #define SE_CTX_SAVE_RSA_KEY_INDEX(x)				\
356*91f16700Schasinglulu 			(x << SE_CTX_SAVE_RSA_KEY_INDEX_SHIFT)
357*91f16700Schasinglulu 
358*91f16700Schasinglulu #define SE_CTX_RSA_WORD_QUAD_SHIFT		12
359*91f16700Schasinglulu #define SE_CTX_RSA_WORD_QUAD(x)	\
360*91f16700Schasinglulu 			(x << SE_CTX_RSA_WORD_QUAD_SHIFT)
361*91f16700Schasinglulu 
362*91f16700Schasinglulu #define SE_CTX_PKA1_WORD_QUAD_L_SHIFT		0
363*91f16700Schasinglulu #define SE_CTX_PKA1_WORD_QUAD_L_SIZE		\
364*91f16700Schasinglulu 			((true ? 4:0) - \
365*91f16700Schasinglulu 			(false ? 4:0) + 1)
366*91f16700Schasinglulu #define SE_CTX_PKA1_WORD_QUAD_L(x)\
367*91f16700Schasinglulu 			(((x) << SE_CTX_PKA1_WORD_QUAD_L_SHIFT) & 0x1f)
368*91f16700Schasinglulu 
369*91f16700Schasinglulu #define SE_CTX_PKA1_WORD_QUAD_H_SHIFT		12
370*91f16700Schasinglulu #define SE_CTX_PKA1_WORD_QUAD_H(x)\
371*91f16700Schasinglulu 			((((x) >> SE_CTX_PKA1_WORD_QUAD_L_SIZE) & 0xf) \
372*91f16700Schasinglulu 			<< SE_CTX_PKA1_WORD_QUAD_H_SHIFT)
373*91f16700Schasinglulu 
374*91f16700Schasinglulu #define SE_RSA_KEY_INDEX_SLOT0_EXP		0
375*91f16700Schasinglulu #define SE_RSA_KEY_INDEX_SLOT0_MOD		1
376*91f16700Schasinglulu #define SE_RSA_KEY_INDEX_SLOT1_EXP		2
377*91f16700Schasinglulu #define SE_RSA_KEY_INDEX_SLOT1_MOD		3
378*91f16700Schasinglulu 
379*91f16700Schasinglulu 
380*91f16700Schasinglulu /* SE_CTX_SAVE_AUTO */
381*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_REG_OFFSET 		0x74U
382*91f16700Schasinglulu 
383*91f16700Schasinglulu /* Enable */
384*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_ENABLE_SHIFT		0
385*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_DIS	\
386*91f16700Schasinglulu 		((0U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT)
387*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_EN	\
388*91f16700Schasinglulu 		((1U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT)
389*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_ENABLE(x)	\
390*91f16700Schasinglulu 		((x) & ((0x1U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT))
391*91f16700Schasinglulu 
392*91f16700Schasinglulu /* Lock */
393*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_LOCK_SHIFT 		8
394*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_LOCK_EN	\
395*91f16700Schasinglulu 		((1U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT)
396*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_LOCK_DIS	\
397*91f16700Schasinglulu 		((0U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT)
398*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_LOCK(x)	\
399*91f16700Schasinglulu 		((x) & ((0x1U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT))
400*91f16700Schasinglulu 
401*91f16700Schasinglulu /* Current context save number of blocks*/
402*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_CURR_CNT_SHIFT		16
403*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_CURR_CNT_MASK 		0x3FFU
404*91f16700Schasinglulu #define SE_CTX_SAVE_GET_BLK_COUNT(x)	\
405*91f16700Schasinglulu 		(((x) >> SE_CTX_SAVE_AUTO_CURR_CNT_SHIFT) & \
406*91f16700Schasinglulu 		SE_CTX_SAVE_AUTO_CURR_CNT_MASK)
407*91f16700Schasinglulu 
408*91f16700Schasinglulu #define SE_CTX_SAVE_SIZE_BLOCKS_SE1		133
409*91f16700Schasinglulu #define SE_CTX_SAVE_SIZE_BLOCKS_SE2	 	646
410*91f16700Schasinglulu 
411*91f16700Schasinglulu /* SE TZRAM OPERATION - only for SE1 */
412*91f16700Schasinglulu #define SE_TZRAM_OPERATION			0x540U
413*91f16700Schasinglulu 
414*91f16700Schasinglulu #define SE_TZRAM_OP_MODE_SHIFT			1
415*91f16700Schasinglulu #define SE_TZRAM_OP_COMMAND_INIT		1
416*91f16700Schasinglulu #define SE_TZRAM_OP_COMMAND_SHIFT		0
417*91f16700Schasinglulu #define SE_TZRAM_OP_MODE_SAVE		\
418*91f16700Schasinglulu 		((0U) << SE_TZRAM_OP_MODE_SHIFT)
419*91f16700Schasinglulu #define SE_TZRAM_OP_MODE_RESTORE	\
420*91f16700Schasinglulu 		((1U) << SE_TZRAM_OP_MODE_SHIFT)
421*91f16700Schasinglulu #define SE_TZRAM_OP_MODE(x)		\
422*91f16700Schasinglulu 		((x) & ((0x1U) << SE_TZRAM_OP_MODE_SHIFT))
423*91f16700Schasinglulu 
424*91f16700Schasinglulu #define SE_TZRAM_OP_BUSY_SHIFT			2
425*91f16700Schasinglulu #define SE_TZRAM_OP_BUSY_OFF	\
426*91f16700Schasinglulu 		((0U) << SE_TZRAM_OP_BUSY_SHIFT)
427*91f16700Schasinglulu #define SE_TZRAM_OP_BUSY_ON	\
428*91f16700Schasinglulu 		((1U) << SE_TZRAM_OP_BUSY_SHIFT)
429*91f16700Schasinglulu #define SE_TZRAM_OP_BUSY(x)	\
430*91f16700Schasinglulu 		((x) & ((0x1U) << SE_TZRAM_OP_BUSY_SHIFT))
431*91f16700Schasinglulu 
432*91f16700Schasinglulu #define SE_TZRAM_OP_REQ_SHIFT			0
433*91f16700Schasinglulu #define SE_TZRAM_OP_REQ_IDLE	\
434*91f16700Schasinglulu 		((0U) << SE_TZRAM_OP_REQ_SHIFT)
435*91f16700Schasinglulu #define SE_TZRAM_OP_REQ_INIT	\
436*91f16700Schasinglulu 		((1U) << SE_TZRAM_OP_REQ_SHIFT)
437*91f16700Schasinglulu #define SE_TZRAM_OP_REQ(x)	\
438*91f16700Schasinglulu 		((x) & ((0x1U) << SE_TZRAM_OP_REQ_SHIFT))
439*91f16700Schasinglulu 
440*91f16700Schasinglulu /* SE Interrupt */
441*91f16700Schasinglulu #define SE_INT_ENABLE_REG_OFFSET		U(0xC)
442*91f16700Schasinglulu #define SE_INT_STATUS_REG_OFFSET		0x10U
443*91f16700Schasinglulu #define SE_INT_OP_DONE_SHIFT			4
444*91f16700Schasinglulu #define SE_INT_OP_DONE_CLEAR	\
445*91f16700Schasinglulu 		((0U) << SE_INT_OP_DONE_SHIFT)
446*91f16700Schasinglulu #define SE_INT_OP_DONE_ACTIVE	\
447*91f16700Schasinglulu 		((1U) << SE_INT_OP_DONE_SHIFT)
448*91f16700Schasinglulu #define SE_INT_OP_DONE(x)	\
449*91f16700Schasinglulu 		((x) & ((0x1U) << SE_INT_OP_DONE_SHIFT))
450*91f16700Schasinglulu 
451*91f16700Schasinglulu /* SE TZRAM SECURITY */
452*91f16700Schasinglulu #define SE_TZRAM_SEC_REG_OFFSET			0x4
453*91f16700Schasinglulu 
454*91f16700Schasinglulu #define SE_TZRAM_SEC_SETTING_SHIFT		 0
455*91f16700Schasinglulu #define SE_TZRAM_SECURE		\
456*91f16700Schasinglulu 		((0UL) << SE_TZRAM_SEC_SETTING_SHIFT)
457*91f16700Schasinglulu #define SE_TZRAM_NONSECURE	 \
458*91f16700Schasinglulu 		((1UL) << SE_TZRAM_SEC_SETTING_SHIFT)
459*91f16700Schasinglulu #define SE_TZRAM_SEC_SETTING(x)		\
460*91f16700Schasinglulu 		((x) & ((0x1UL) << SE_TZRAM_SEC_SETTING_SHIFT))
461*91f16700Schasinglulu 
462*91f16700Schasinglulu /* PKA1 KEY SLOTS */
463*91f16700Schasinglulu #define TEGRA_SE_PKA1_KEYSLOT_COUNT		4
464*91f16700Schasinglulu 
465*91f16700Schasinglulu 
466*91f16700Schasinglulu /* SE error status */
467*91f16700Schasinglulu #define SE_ERR_STATUS_REG_OFFSET		0x804U
468*91f16700Schasinglulu #define SE_CRYPTO_KEYTABLE_DST_REG_OFFSET	0x330
469*91f16700Schasinglulu #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT	0
470*91f16700Schasinglulu #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD(x)	\
471*91f16700Schasinglulu 			(x << SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT)
472*91f16700Schasinglulu 
473*91f16700Schasinglulu #define SE_KEY_INDEX_SHIFT			8
474*91f16700Schasinglulu #define SE_CRYPTO_KEYTABLE_DST_KEY_INDEX(x)	(x << SE_KEY_INDEX_SHIFT)
475*91f16700Schasinglulu 
476*91f16700Schasinglulu 
477*91f16700Schasinglulu /* SE linked list (LL) register */
478*91f16700Schasinglulu #define SE_IN_LL_ADDR_REG_OFFSET		0x18U
479*91f16700Schasinglulu #define SE_OUT_LL_ADDR_REG_OFFSET		0x24U
480*91f16700Schasinglulu #define SE_BLOCK_COUNT_REG_OFFSET		0x318U
481*91f16700Schasinglulu 
482*91f16700Schasinglulu /* AES data sizes */
483*91f16700Schasinglulu #define TEGRA_SE_KEY_256_SIZE			32
484*91f16700Schasinglulu #define TEGRA_SE_KEY_192_SIZE			24
485*91f16700Schasinglulu #define TEGRA_SE_KEY_128_SIZE			16
486*91f16700Schasinglulu #define TEGRA_SE_AES_BLOCK_SIZE 		16
487*91f16700Schasinglulu #define TEGRA_SE_AES_MIN_KEY_SIZE		16
488*91f16700Schasinglulu #define TEGRA_SE_AES_MAX_KEY_SIZE		32
489*91f16700Schasinglulu #define TEGRA_SE_AES_IV_SIZE			16
490*91f16700Schasinglulu 
491*91f16700Schasinglulu #define TEGRA_SE_RNG_IV_SIZE			16
492*91f16700Schasinglulu #define TEGRA_SE_RNG_DT_SIZE			16
493*91f16700Schasinglulu #define TEGRA_SE_RNG_KEY_SIZE			16
494*91f16700Schasinglulu #define TEGRA_SE_RNG_SEED_SIZE	(TEGRA_SE_RNG_IV_SIZE + \
495*91f16700Schasinglulu 									TEGRA_SE_RNG_KEY_SIZE + \
496*91f16700Schasinglulu 									TEGRA_SE_RNG_DT_SIZE)
497*91f16700Schasinglulu #define TEGRA_SE_RSA512_DIGEST_SIZE		64
498*91f16700Schasinglulu #define TEGRA_SE_RSA1024_DIGEST_SIZE		128
499*91f16700Schasinglulu #define TEGRA_SE_RSA1536_DIGEST_SIZE		192
500*91f16700Schasinglulu #define TEGRA_SE_RSA2048_DIGEST_SIZE		256
501*91f16700Schasinglulu 
502*91f16700Schasinglulu #define SE_KEY_TABLE_ACCESS_REG_OFFSET		0x284
503*91f16700Schasinglulu #define SE_KEY_READ_DISABLE_SHIFT		0
504*91f16700Schasinglulu 
505*91f16700Schasinglulu #define SE_CTX_BUFER_SIZE			1072
506*91f16700Schasinglulu #define SE_CTX_DRBG_BUFER_SIZE			2112
507*91f16700Schasinglulu 
508*91f16700Schasinglulu /* SE blobs size in bytes */
509*91f16700Schasinglulu #define SE_CTX_SAVE_RSA_KEY_LENGTH		1024
510*91f16700Schasinglulu #define SE_CTX_SAVE_RANDOM_DATA_SIZE		16
511*91f16700Schasinglulu #define SE_CTX_SAVE_STICKY_BITS_SIZE		16
512*91f16700Schasinglulu #define SE2_CONTEXT_SAVE_PKA1_STICKY_BITS_LENGTH 16
513*91f16700Schasinglulu #define SE2_CONTEXT_SAVE_PKA1_KEYS_LENGTH	8192
514*91f16700Schasinglulu #define SE_CTX_KNOWN_PATTERN_SIZE		16
515*91f16700Schasinglulu #define SE_CTX_KNOWN_PATTERN_SIZE_WORDS		(SE_CTX_KNOWN_PATTERN_SIZE/4)
516*91f16700Schasinglulu 
517*91f16700Schasinglulu /* SE RSA */
518*91f16700Schasinglulu #define TEGRA_SE_RSA_KEYSLOT_COUNT		2
519*91f16700Schasinglulu #define SE_RSA_KEY_SIZE_REG_OFFSET		0x404
520*91f16700Schasinglulu #define SE_RSA_EXP_SIZE_REG_OFFSET		0x408
521*91f16700Schasinglulu #define SE_RSA_MAX_EXP_BIT_SIZE			2048
522*91f16700Schasinglulu #define SE_RSA_MAX_EXP_SIZE32	\
523*91f16700Schasinglulu 		(SE_RSA_MAX_EXP_BIT_SIZE >> 5)
524*91f16700Schasinglulu #define SE_RSA_MAX_MOD_BIT_SIZE			2048
525*91f16700Schasinglulu #define SE_RSA_MAX_MOD_SIZE32	\
526*91f16700Schasinglulu 		(SE_RSA_MAX_MOD_BIT_SIZE >> 5)
527*91f16700Schasinglulu 
528*91f16700Schasinglulu /* SE_RSA_KEYTABLE_ADDR */
529*91f16700Schasinglulu #define SE_RSA_KEYTABLE_ADDR			0x420
530*91f16700Schasinglulu #define RSA_KEY_PKT_WORD_ADDR_SHIFT		0
531*91f16700Schasinglulu #define RSA_KEY_PKT_EXPMOD_SEL_SHIFT	\
532*91f16700Schasinglulu 		((6U) << RSA_KEY_PKT_WORD_ADDR_SHIFT)
533*91f16700Schasinglulu #define RSA_KEY_MOD	\
534*91f16700Schasinglulu 		((1U) << RSA_KEY_PKT_EXPMOD_SEL_SHIFT)
535*91f16700Schasinglulu #define RSA_KEY_EXP	\
536*91f16700Schasinglulu 		((0U) << RSA_KEY_PKT_EXPMOD_SEL_SHIFT)
537*91f16700Schasinglulu #define RSA_KEY_PKT_SLOT_SHIFT			7
538*91f16700Schasinglulu #define RSA_KEY_SLOT_1	\
539*91f16700Schasinglulu 		((0U) << RSA_KEY_PKT_SLOT_SHIFT)
540*91f16700Schasinglulu #define RSA_KEY_SLOT_2	\
541*91f16700Schasinglulu 		((1U) << RSA_KEY_PKT_SLOT_SHIFT)
542*91f16700Schasinglulu #define RSA_KEY_PKT_INPUT_MODE_SHIFT		8
543*91f16700Schasinglulu #define RSA_KEY_REG_INPUT	\
544*91f16700Schasinglulu 		((0U) << RSA_KEY_PKT_INPUT_MODE_SHIFT)
545*91f16700Schasinglulu #define RSA_KEY_DMA_INPUT	\
546*91f16700Schasinglulu 		((1U) << RSA_KEY_PKT_INPUT_MODE_SHIFT)
547*91f16700Schasinglulu 
548*91f16700Schasinglulu /* SE_RSA_KEYTABLE_DATA */
549*91f16700Schasinglulu #define SE_RSA_KEYTABLE_DATA			0x424
550*91f16700Schasinglulu 
551*91f16700Schasinglulu /* SE_RSA_CONFIG register */
552*91f16700Schasinglulu #define SE_RSA_CONFIG				0x400
553*91f16700Schasinglulu #define RSA_KEY_SLOT_SHIFT			24
554*91f16700Schasinglulu #define RSA_KEY_SLOT(x) \
555*91f16700Schasinglulu 		((x) << RSA_KEY_SLOT_SHIFT)
556*91f16700Schasinglulu 
557*91f16700Schasinglulu /*******************************************************************************
558*91f16700Schasinglulu  * Structure definition
559*91f16700Schasinglulu  ******************************************************************************/
560*91f16700Schasinglulu 
561*91f16700Schasinglulu /* SE context blob */
562*91f16700Schasinglulu #pragma pack(push, 1)
563*91f16700Schasinglulu typedef struct tegra_aes_key_slot {
564*91f16700Schasinglulu 	/* 0 - 7 AES key */
565*91f16700Schasinglulu 	uint32_t key[8];
566*91f16700Schasinglulu 	/* 8 - 11 Original IV */
567*91f16700Schasinglulu 	uint32_t oiv[4];
568*91f16700Schasinglulu 	/* 12 - 15 Updated IV */
569*91f16700Schasinglulu 	uint32_t uiv[4];
570*91f16700Schasinglulu } tegra_se_aes_key_slot_t;
571*91f16700Schasinglulu #pragma pack(pop)
572*91f16700Schasinglulu 
573*91f16700Schasinglulu #pragma pack(push, 1)
574*91f16700Schasinglulu typedef struct tegra_se_context {
575*91f16700Schasinglulu 	/* random number */
576*91f16700Schasinglulu 	unsigned char rand_data[SE_CTX_SAVE_RANDOM_DATA_SIZE];
577*91f16700Schasinglulu 	/* Sticky bits */
578*91f16700Schasinglulu 	unsigned char sticky_bits[SE_CTX_SAVE_STICKY_BITS_SIZE * 2];
579*91f16700Schasinglulu 	/* AES key slots */
580*91f16700Schasinglulu 	tegra_se_aes_key_slot_t key_slots[TEGRA_SE_AES_KEYSLOT_COUNT];
581*91f16700Schasinglulu 	/* RSA key slots */
582*91f16700Schasinglulu 	unsigned char rsa_keys[SE_CTX_SAVE_RSA_KEY_LENGTH];
583*91f16700Schasinglulu } tegra_se_context_t;
584*91f16700Schasinglulu #pragma pack(pop)
585*91f16700Schasinglulu 
586*91f16700Schasinglulu /* PKA context blob */
587*91f16700Schasinglulu #pragma pack(push, 1)
588*91f16700Schasinglulu typedef struct tegra_pka_context {
589*91f16700Schasinglulu 	unsigned char sticky_bits[SE2_CONTEXT_SAVE_PKA1_STICKY_BITS_LENGTH];
590*91f16700Schasinglulu 	unsigned char pka_keys[SE2_CONTEXT_SAVE_PKA1_KEYS_LENGTH];
591*91f16700Schasinglulu } tegra_pka_context_t;
592*91f16700Schasinglulu #pragma pack(pop)
593*91f16700Schasinglulu 
594*91f16700Schasinglulu /* SE context blob */
595*91f16700Schasinglulu #pragma pack(push, 1)
596*91f16700Schasinglulu typedef struct tegra_se_context_blob {
597*91f16700Schasinglulu 	/* SE context */
598*91f16700Schasinglulu 	tegra_se_context_t se_ctx;
599*91f16700Schasinglulu 	/* Known Pattern */
600*91f16700Schasinglulu 	unsigned char known_pattern[SE_CTX_KNOWN_PATTERN_SIZE];
601*91f16700Schasinglulu } tegra_se_context_blob_t;
602*91f16700Schasinglulu #pragma pack(pop)
603*91f16700Schasinglulu 
604*91f16700Schasinglulu /* SE2 and PKA1 context blob */
605*91f16700Schasinglulu #pragma pack(push, 1)
606*91f16700Schasinglulu typedef struct tegra_se2_context_blob {
607*91f16700Schasinglulu 	/* SE2 context */
608*91f16700Schasinglulu 	tegra_se_context_t se_ctx;
609*91f16700Schasinglulu 	/* PKA1 context */
610*91f16700Schasinglulu 	tegra_pka_context_t pka_ctx;
611*91f16700Schasinglulu 	/* Known Pattern */
612*91f16700Schasinglulu 	unsigned char known_pattern[SE_CTX_KNOWN_PATTERN_SIZE];
613*91f16700Schasinglulu } tegra_se2_context_blob_t;
614*91f16700Schasinglulu #pragma pack(pop)
615*91f16700Schasinglulu 
616*91f16700Schasinglulu /* SE AES key type 128bit, 192bit, 256bit */
617*91f16700Schasinglulu typedef enum {
618*91f16700Schasinglulu 	SE_AES_KEY128,
619*91f16700Schasinglulu 	SE_AES_KEY192,
620*91f16700Schasinglulu 	SE_AES_KEY256,
621*91f16700Schasinglulu } tegra_se_aes_key_type_t;
622*91f16700Schasinglulu 
623*91f16700Schasinglulu /* SE RSA key slot */
624*91f16700Schasinglulu typedef struct tegra_se_rsa_key_slot {
625*91f16700Schasinglulu 	/* 0 - 63 exponent key */
626*91f16700Schasinglulu 	uint32_t exponent[SE_RSA_MAX_EXP_SIZE32];
627*91f16700Schasinglulu 	/* 64 - 127 modulus key */
628*91f16700Schasinglulu 	uint32_t modulus[SE_RSA_MAX_MOD_SIZE32];
629*91f16700Schasinglulu } tegra_se_rsa_key_slot_t;
630*91f16700Schasinglulu 
631*91f16700Schasinglulu 
632*91f16700Schasinglulu /*******************************************************************************
633*91f16700Schasinglulu  * Inline functions definition
634*91f16700Schasinglulu  ******************************************************************************/
635*91f16700Schasinglulu 
636*91f16700Schasinglulu static inline uint32_t tegra_se_read_32(const tegra_se_dev_t *dev, uint32_t offset)
637*91f16700Schasinglulu {
638*91f16700Schasinglulu 	return mmio_read_32(dev->se_base + offset);
639*91f16700Schasinglulu }
640*91f16700Schasinglulu 
641*91f16700Schasinglulu static inline void tegra_se_write_32(const tegra_se_dev_t *dev, uint32_t offset, uint32_t val)
642*91f16700Schasinglulu {
643*91f16700Schasinglulu 	mmio_write_32(dev->se_base + offset, val);
644*91f16700Schasinglulu }
645*91f16700Schasinglulu 
646*91f16700Schasinglulu static inline uint32_t tegra_pka_read_32(tegra_pka_dev_t *dev, uint32_t offset)
647*91f16700Schasinglulu {
648*91f16700Schasinglulu 	return mmio_read_32(dev->pka_base + offset);
649*91f16700Schasinglulu }
650*91f16700Schasinglulu 
651*91f16700Schasinglulu static inline void tegra_pka_write_32(tegra_pka_dev_t *dev, uint32_t offset,
652*91f16700Schasinglulu uint32_t val)
653*91f16700Schasinglulu {
654*91f16700Schasinglulu 	mmio_write_32(dev->pka_base + offset, val);
655*91f16700Schasinglulu }
656*91f16700Schasinglulu 
657*91f16700Schasinglulu /*******************************************************************************
658*91f16700Schasinglulu  * Prototypes
659*91f16700Schasinglulu  ******************************************************************************/
660*91f16700Schasinglulu int tegra_se_start_normal_operation(const tegra_se_dev_t *, uint32_t);
661*91f16700Schasinglulu int tegra_se_start_ctx_save_operation(const tegra_se_dev_t *, uint32_t);
662*91f16700Schasinglulu 
663*91f16700Schasinglulu #endif /* SE_PRIVATE_H */
664