xref: /rk3399_ARM-atf/plat/nvidia/tegra/soc/t210/drivers/se/se_private.h (revision 65012c08922fa5646ca7ca485036dfd901cae360)
1f1f72019SOlivier Deprez /*
2f1f72019SOlivier Deprez  * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
3*41554fb2SHarvey Hsieh  * Copyright (c) 2017-2020, NVIDIA CORPORATION.  All rights reserved.
4ce3c97c9SMarvin Hsu  *
5ce3c97c9SMarvin Hsu  * SPDX-License-Identifier: BSD-3-Clause
6ce3c97c9SMarvin Hsu  */
7ce3c97c9SMarvin Hsu 
8ce3c97c9SMarvin Hsu #ifndef SE_PRIVATE_H
9ce3c97c9SMarvin Hsu #define SE_PRIVATE_H
10ce3c97c9SMarvin Hsu 
11ce3c97c9SMarvin Hsu #include <stdbool.h>
12ce3c97c9SMarvin Hsu #include <security_engine.h>
13ce3c97c9SMarvin Hsu 
14ce3c97c9SMarvin Hsu /*
15ce3c97c9SMarvin Hsu  * PMC registers
16ce3c97c9SMarvin Hsu  */
17ce3c97c9SMarvin Hsu 
18*41554fb2SHarvey Hsieh /* SC7 context save scratch register for T210 */
19*41554fb2SHarvey Hsieh #define PMC_SCRATCH43_REG_OFFSET		U(0x22C)
20*41554fb2SHarvey Hsieh 
21ce3c97c9SMarvin Hsu /* Secure scratch registers */
22ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH4_OFFSET		0xC0U
23ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH5_OFFSET		0xC4U
24ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH6_OFFSET		0x224U
25ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH7_OFFSET		0x228U
265ed1755aSMarvin Hsu #define PMC_SECURE_SCRATCH116_OFFSET		0xB28U
275ed1755aSMarvin Hsu #define PMC_SECURE_SCRATCH117_OFFSET		0xB2CU
28ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH120_OFFSET		0xB38U
29ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH121_OFFSET		0xB3CU
30ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH122_OFFSET		0xB40U
31ce3c97c9SMarvin Hsu #define PMC_SECURE_SCRATCH123_OFFSET		0xB44U
32ce3c97c9SMarvin Hsu 
33ce3c97c9SMarvin Hsu /*
34ce3c97c9SMarvin Hsu  * AHB arbitration memory write queue
35ce3c97c9SMarvin Hsu  */
36ce3c97c9SMarvin Hsu #define ARAHB_MEM_WRQUE_MST_ID_OFFSET		0xFCU
37ce3c97c9SMarvin Hsu #define ARAHB_MST_ID_SE2_MASK			(0x1U << 13)
38ce3c97c9SMarvin Hsu #define ARAHB_MST_ID_SE_MASK			(0x1U << 14)
39ce3c97c9SMarvin Hsu 
405ed1755aSMarvin Hsu /**
415ed1755aSMarvin Hsu  * SE registers
425ed1755aSMarvin Hsu  */
435ed1755aSMarvin Hsu #define TEGRA_SE_AES_KEYSLOT_COUNT		16
445ed1755aSMarvin Hsu #define SE_MAX_LAST_BLOCK_SIZE			0xFFFFF
455ed1755aSMarvin Hsu 
46ce3c97c9SMarvin Hsu /* SE Status register */
47ce3c97c9SMarvin Hsu #define SE_STATUS_OFFSET			0x800U
48ce3c97c9SMarvin Hsu #define SE_STATUS_SHIFT				0
49ce3c97c9SMarvin Hsu #define SE_STATUS_IDLE	\
50ce3c97c9SMarvin Hsu 		((0U) << SE_STATUS_SHIFT)
51ce3c97c9SMarvin Hsu #define SE_STATUS_BUSY	\
52ce3c97c9SMarvin Hsu 		((1U) << SE_STATUS_SHIFT)
53ce3c97c9SMarvin Hsu #define SE_STATUS(x)	\
54ce3c97c9SMarvin Hsu 		((x) & ((0x3U) << SE_STATUS_SHIFT))
55ce3c97c9SMarvin Hsu 
565ed1755aSMarvin Hsu #define SE_MEM_INTERFACE_SHIFT			2
575ed1755aSMarvin Hsu #define SE_MEM_INTERFACE_IDLE			0
585ed1755aSMarvin Hsu #define SE_MEM_INTERFACE_BUSY			1
595ed1755aSMarvin Hsu #define SE_MEM_INTERFACE(x)	((x) << SE_STATUS_SHIFT)
605ed1755aSMarvin Hsu 
615ed1755aSMarvin Hsu /* SE register definitions */
625ed1755aSMarvin Hsu #define SE_SECURITY_REG_OFFSET			0x0
635ed1755aSMarvin Hsu #define SE_SECURITY_TZ_LOCK_SOFT_SHIFT		5
645ed1755aSMarvin Hsu #define SE_SECURE				0x0
655ed1755aSMarvin Hsu #define SE_SECURITY_TZ_LOCK_SOFT(x)	((x) << SE_SECURITY_TZ_LOCK_SOFT_SHIFT)
665ed1755aSMarvin Hsu 
675ed1755aSMarvin Hsu #define SE_SEC_ENG_DIS_SHIFT			1
685ed1755aSMarvin Hsu #define SE_DISABLE_FALSE			0
695ed1755aSMarvin Hsu #define SE_DISABLE_TRUE				1
705ed1755aSMarvin Hsu #define SE_SEC_ENG_DISABLE(x)((x) << SE_SEC_ENG_DIS_SHIFT)
715ed1755aSMarvin Hsu 
72ce3c97c9SMarvin Hsu /* SE config register */
73ce3c97c9SMarvin Hsu #define SE_CONFIG_REG_OFFSET			0x14U
74ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_SHIFT 		12
75ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_AES_ENC	\
76ce3c97c9SMarvin Hsu 		((1U) << SE_CONFIG_ENC_ALG_SHIFT)
77ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_RNG	\
78ce3c97c9SMarvin Hsu 		((2U) << SE_CONFIG_ENC_ALG_SHIFT)
79ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_SHA	\
80ce3c97c9SMarvin Hsu 		((3U) << SE_CONFIG_ENC_ALG_SHIFT)
81ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_RSA	\
82ce3c97c9SMarvin Hsu 		((4U) << SE_CONFIG_ENC_ALG_SHIFT)
83ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG_NOP	\
84ce3c97c9SMarvin Hsu 		((0U) << SE_CONFIG_ENC_ALG_SHIFT)
85ce3c97c9SMarvin Hsu #define SE_CONFIG_ENC_ALG(x)	\
86ce3c97c9SMarvin Hsu 		((x) & ((0xFU) << SE_CONFIG_ENC_ALG_SHIFT))
87ce3c97c9SMarvin Hsu 
88ce3c97c9SMarvin Hsu #define SE_CONFIG_DEC_ALG_SHIFT 		8
89ce3c97c9SMarvin Hsu #define SE_CONFIG_DEC_ALG_AES	\
90ce3c97c9SMarvin Hsu 		((1U) << SE_CONFIG_DEC_ALG_SHIFT)
91ce3c97c9SMarvin Hsu #define SE_CONFIG_DEC_ALG_NOP	\
92ce3c97c9SMarvin Hsu 		((0U) << SE_CONFIG_DEC_ALG_SHIFT)
93ce3c97c9SMarvin Hsu #define SE_CONFIG_DEC_ALG(x)	\
94ce3c97c9SMarvin Hsu 		((x) & ((0xFU) << SE_CONFIG_DEC_ALG_SHIFT))
95ce3c97c9SMarvin Hsu 
96ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_SHIFT	 		2
97ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_MEMORY	\
98ce3c97c9SMarvin Hsu 		((0U) << SE_CONFIG_DST_SHIFT)
99ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_HASHREG	\
100ce3c97c9SMarvin Hsu 		((1U) << SE_CONFIG_DST_SHIFT)
101ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_KEYTAB	\
102ce3c97c9SMarvin Hsu 		((2U) << SE_CONFIG_DST_SHIFT)
103ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_SRK	\
104ce3c97c9SMarvin Hsu 		((3U) << SE_CONFIG_DST_SHIFT)
105ce3c97c9SMarvin Hsu #define SE_CONFIG_DST_RSAREG	\
106ce3c97c9SMarvin Hsu 		((4U) << SE_CONFIG_DST_SHIFT)
107ce3c97c9SMarvin Hsu #define SE_CONFIG_DST(x)	\
108ce3c97c9SMarvin Hsu 		((x) & ((0x7U) << SE_CONFIG_DST_SHIFT))
109ce3c97c9SMarvin Hsu 
1105ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHIFT		24
1115ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_KEY128	\
1125ed1755aSMarvin Hsu 			((0UL) << SE_CONFIG_ENC_MODE_SHIFT)
1135ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_KEY192	\
1145ed1755aSMarvin Hsu 			((1UL) << SE_CONFIG_ENC_MODE_SHIFT)
1155ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_KEY256	\
1165ed1755aSMarvin Hsu 			((2UL) << SE_CONFIG_ENC_MODE_SHIFT)
1175ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHA1				\
1185ed1755aSMarvin Hsu 			((0UL) << SE_CONFIG_ENC_MODE_SHIFT)
1195ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHA224	\
1205ed1755aSMarvin Hsu 			((4UL) << SE_CONFIG_ENC_MODE_SHIFT)
1215ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHA256	\
1225ed1755aSMarvin Hsu 			((5UL) << SE_CONFIG_ENC_MODE_SHIFT)
1235ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHA384	\
1245ed1755aSMarvin Hsu 			((6UL) << SE_CONFIG_ENC_MODE_SHIFT)
1255ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE_SHA512	\
1265ed1755aSMarvin Hsu 			((7UL) << SE_CONFIG_ENC_MODE_SHIFT)
1275ed1755aSMarvin Hsu #define SE_CONFIG_ENC_MODE(x)\
1285ed1755aSMarvin Hsu 			((x) & ((0xFFUL) << SE_CONFIG_ENC_MODE_SHIFT))
1295ed1755aSMarvin Hsu 
1305ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHIFT		16
1315ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_KEY128	\
1325ed1755aSMarvin Hsu 			((0UL) << SE_CONFIG_DEC_MODE_SHIFT)
1335ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_KEY192	\
1345ed1755aSMarvin Hsu 			((1UL) << SE_CONFIG_DEC_MODE_SHIFT)
1355ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_KEY256	\
1365ed1755aSMarvin Hsu 			((2UL) << SE_CONFIG_DEC_MODE_SHIFT)
1375ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHA1				\
1385ed1755aSMarvin Hsu 			((0UL) << SE_CONFIG_DEC_MODE_SHIFT)
1395ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHA224	\
1405ed1755aSMarvin Hsu 			((4UL) << SE_CONFIG_DEC_MODE_SHIFT)
1415ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHA256	\
1425ed1755aSMarvin Hsu 			((5UL) << SE_CONFIG_DEC_MODE_SHIFT)
1435ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHA384	\
1445ed1755aSMarvin Hsu 			((6UL) << SE_CONFIG_DEC_MODE_SHIFT)
1455ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE_SHA512	\
1465ed1755aSMarvin Hsu 			((7UL) << SE_CONFIG_DEC_MODE_SHIFT)
1475ed1755aSMarvin Hsu #define SE_CONFIG_DEC_MODE(x)\
1485ed1755aSMarvin Hsu 			((x) & ((0xFFUL) << SE_CONFIG_DEC_MODE_SHIFT))
1495ed1755aSMarvin Hsu 
1505ed1755aSMarvin Hsu 
1518668fe0cSSam Payne /* DRBG random number generator config */
1528668fe0cSSam Payne #define SE_RNG_CONFIG_REG_OFFSET		0x340
1538668fe0cSSam Payne 
1548668fe0cSSam Payne #define DRBG_MODE_SHIFT				0
1558668fe0cSSam Payne #define DRBG_MODE_NORMAL		\
156aa64c5fbSAnthony Zhou 		((0U) << DRBG_MODE_SHIFT)
1578668fe0cSSam Payne #define DRBG_MODE_FORCE_INSTANTION  \
158aa64c5fbSAnthony Zhou 		((1U) << DRBG_MODE_SHIFT)
1598668fe0cSSam Payne #define DRBG_MODE_FORCE_RESEED	  \
160aa64c5fbSAnthony Zhou 		((2U) << DRBG_MODE_SHIFT)
1618668fe0cSSam Payne #define SE_RNG_CONFIG_MODE(x)   \
162aa64c5fbSAnthony Zhou 		((x) & ((0x3U) << DRBG_MODE_SHIFT))
1638668fe0cSSam Payne 
1648668fe0cSSam Payne #define DRBG_SRC_SHIFT				2
1658668fe0cSSam Payne #define DRBG_SRC_NONE	   \
166aa64c5fbSAnthony Zhou 		((0U) << DRBG_SRC_SHIFT)
1678668fe0cSSam Payne #define DRBG_SRC_ENTROPY	\
168aa64c5fbSAnthony Zhou 		((1U) << DRBG_SRC_SHIFT)
1698668fe0cSSam Payne #define DRBG_SRC_LFSR	   \
170aa64c5fbSAnthony Zhou 		((2U) << DRBG_SRC_SHIFT)
1718668fe0cSSam Payne #define SE_RNG_SRC_CONFIG_MODE(x)   \
172aa64c5fbSAnthony Zhou 		((x) & ((0x3U) << DRBG_SRC_SHIFT))
1738668fe0cSSam Payne 
1748668fe0cSSam Payne /* DRBG random number generator entropy config */
1755ed1755aSMarvin Hsu 
176ce3c97c9SMarvin Hsu #define SE_RNG_SRC_CONFIG_REG_OFFSET		0x344U
177ce3c97c9SMarvin Hsu 
178ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_SHIFT			1
179ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_ENABLE	\
180ce3c97c9SMarvin Hsu 		((1U) << DRBG_RO_ENT_SRC_SHIFT)
181ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_DISABLE	\
182ce3c97c9SMarvin Hsu 		((0U) << DRBG_RO_ENT_SRC_SHIFT)
183ce3c97c9SMarvin Hsu #define SE_RNG_SRC_CONFIG_RO_ENT_SRC(x)	\
184ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << DRBG_RO_ENT_SRC_SHIFT))
185ce3c97c9SMarvin Hsu 
186ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_LOCK_SHIFT		0
187ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_LOCK_ENABLE	\
188ce3c97c9SMarvin Hsu 		((1U) << DRBG_RO_ENT_SRC_LOCK_SHIFT)
189ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_SRC_LOCK_DISABLE	\
190ce3c97c9SMarvin Hsu 		((0U) << DRBG_RO_ENT_SRC_LOCK_SHIFT)
191ce3c97c9SMarvin Hsu #define SE_RNG_SRC_CONFIG_RO_ENT_SRC_LOCK(x)	\
192ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << DRBG_RO_ENT_SRC_LOCK_SHIFT))
193ce3c97c9SMarvin Hsu 
194ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_IGNORE_MEM_SHIFT		12
195ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_IGNORE_MEM_ENABLE	\
196ce3c97c9SMarvin Hsu 		((1U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT)
197ce3c97c9SMarvin Hsu #define DRBG_RO_ENT_IGNORE_MEM_DISABLE	\
198ce3c97c9SMarvin Hsu 		((0U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT)
199ce3c97c9SMarvin Hsu #define SE_RNG_SRC_CONFIG_RO_ENT_IGNORE_MEM(x)	\
200ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << DRBG_RO_ENT_IGNORE_MEM_SHIFT))
201ce3c97c9SMarvin Hsu 
2025ed1755aSMarvin Hsu #define SE_RNG_RESEED_INTERVAL_REG_OFFSET	0x348
2035ed1755aSMarvin Hsu 
2045ed1755aSMarvin Hsu /* SE CRYPTO */
2055ed1755aSMarvin Hsu #define SE_CRYPTO_REG_OFFSET			0x304
2065ed1755aSMarvin Hsu #define SE_CRYPTO_HASH_SHIFT			0
2075ed1755aSMarvin Hsu #define SE_CRYPTO_HASH_DISABLE	\
2085ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_HASH_SHIFT)
2095ed1755aSMarvin Hsu #define SE_CRYPTO_HASH_ENABLE	\
2105ed1755aSMarvin Hsu 		((1U) << SE_CRYPTO_HASH_SHIFT)
2115ed1755aSMarvin Hsu 
2125ed1755aSMarvin Hsu #define SE_CRYPTO_XOR_POS_SHIFT			1
2135ed1755aSMarvin Hsu #define SE_CRYPTO_XOR_BYPASS	\
2145ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_XOR_POS_SHIFT)
2155ed1755aSMarvin Hsu #define SE_CRYPTO_XOR_TOP	\
2165ed1755aSMarvin Hsu 		((2U) << SE_CRYPTO_XOR_POS_SHIFT)
2175ed1755aSMarvin Hsu #define SE_CRYPTO_XOR_BOTTOM	\
2185ed1755aSMarvin Hsu 		((3U) << SE_CRYPTO_XOR_POS_SHIFT)
2195ed1755aSMarvin Hsu 
2205ed1755aSMarvin Hsu #define SE_CRYPTO_INPUT_SEL_SHIFT		3
2215ed1755aSMarvin Hsu #define SE_CRYPTO_INPUT_AHB 	\
2225ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_INPUT_SEL_SHIFT)
2235ed1755aSMarvin Hsu #define SE_CRYPTO_INPUT_RANDOM	\
2245ed1755aSMarvin Hsu 		((1U) << SE_CRYPTO_INPUT_SEL_SHIFT)
2255ed1755aSMarvin Hsu #define SE_CRYPTO_INPUT_AESOUT	\
2265ed1755aSMarvin Hsu 		((2U) << SE_CRYPTO_INPUT_SEL_SHIFT)
2275ed1755aSMarvin Hsu #define SE_CRYPTO_INPUT_LNR_CTR \
2285ed1755aSMarvin Hsu 		((3U) << SE_CRYPTO_INPUT_SEL_SHIFT)
2295ed1755aSMarvin Hsu 
2305ed1755aSMarvin Hsu #define SE_CRYPTO_VCTRAM_SEL_SHIFT		 5
2315ed1755aSMarvin Hsu #define SE_CRYPTO_VCTRAM_AHB	\
2325ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
2335ed1755aSMarvin Hsu #define SE_CRYPTO_VCTRAM_AESOUT \
2345ed1755aSMarvin Hsu 		((2U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
2355ed1755aSMarvin Hsu #define SE_CRYPTO_VCTRAM_PREVAHB	\
2365ed1755aSMarvin Hsu 		((3U) << SE_CRYPTO_VCTRAM_SEL_SHIFT)
2375ed1755aSMarvin Hsu 
2385ed1755aSMarvin Hsu #define SE_CRYPTO_IV_SEL_SHIFT			 7
2395ed1755aSMarvin Hsu #define SE_CRYPTO_IV_ORIGINAL	\
2405ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_IV_SEL_SHIFT)
2415ed1755aSMarvin Hsu #define SE_CRYPTO_IV_UPDATED	\
2425ed1755aSMarvin Hsu 		((1U) << SE_CRYPTO_IV_SEL_SHIFT)
2435ed1755aSMarvin Hsu 
2445ed1755aSMarvin Hsu #define SE_CRYPTO_CORE_SEL_SHIFT		8
2455ed1755aSMarvin Hsu #define SE_CRYPTO_CORE_DECRYPT	\
2465ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_CORE_SEL_SHIFT)
2475ed1755aSMarvin Hsu #define SE_CRYPTO_CORE_ENCRYPT	\
2485ed1755aSMarvin Hsu 		((1U) << SE_CRYPTO_CORE_SEL_SHIFT)
2495ed1755aSMarvin Hsu 
2505ed1755aSMarvin Hsu #define SE_CRYPTO_KEY_INDEX_SHIFT		24
2515ed1755aSMarvin Hsu #define SE_CRYPTO_KEY_INDEX(x) (x << SE_CRYPTO_KEY_INDEX_SHIFT)
2525ed1755aSMarvin Hsu 
2535ed1755aSMarvin Hsu #define SE_CRYPTO_MEMIF_AHB	\
2545ed1755aSMarvin Hsu 		((0U) << SE_CRYPTO_MEMIF_SHIFT)
2555ed1755aSMarvin Hsu #define SE_CRYPTO_MEMIF_MCCIF	\
2565ed1755aSMarvin Hsu 		((1U) << SE_CRYPTO_MEMIF_SHIFT)
2575ed1755aSMarvin Hsu #define SE_CRYPTO_MEMIF_SHIFT			31
2585ed1755aSMarvin Hsu 
2595ed1755aSMarvin Hsu /* KEY TABLE */
2605ed1755aSMarvin Hsu #define SE_KEYTABLE_REG_OFFSET			0x31C
2615ed1755aSMarvin Hsu 
2625ed1755aSMarvin Hsu /* KEYIV PKT - key slot */
2635ed1755aSMarvin Hsu #define SE_KEYTABLE_SLOT_SHIFT			4
2645ed1755aSMarvin Hsu #define SE_KEYTABLE_SLOT(x)	(x << SE_KEYTABLE_SLOT_SHIFT)
2655ed1755aSMarvin Hsu 
2665ed1755aSMarvin Hsu /* KEYIV PKT - KEYIV select */
2675ed1755aSMarvin Hsu #define SE_KEYIV_PKT_KEYIV_SEL_SHIFT		3
2685ed1755aSMarvin Hsu #define SE_CRYPTO_KEYIV_KEY	\
2695ed1755aSMarvin Hsu 		((0U) << SE_KEYIV_PKT_KEYIV_SEL_SHIFT)
2705ed1755aSMarvin Hsu #define SE_CRYPTO_KEYIV_IVS	\
2715ed1755aSMarvin Hsu 		((1U) << SE_KEYIV_PKT_KEYIV_SEL_SHIFT)
2725ed1755aSMarvin Hsu 
2735ed1755aSMarvin Hsu /* KEYIV PKT - IV select */
2745ed1755aSMarvin Hsu #define SE_KEYIV_PKT_IV_SEL_SHIFT		2
2755ed1755aSMarvin Hsu #define SE_CRYPTO_KEYIV_IVS_OIV	\
2765ed1755aSMarvin Hsu 		((0U) << SE_KEYIV_PKT_IV_SEL_SHIFT)
2775ed1755aSMarvin Hsu #define SE_CRYPTO_KEYIV_IVS_UIV \
2785ed1755aSMarvin Hsu 		((1U) << SE_KEYIV_PKT_IV_SEL_SHIFT)
2795ed1755aSMarvin Hsu 
2805ed1755aSMarvin Hsu /* KEYIV PKT - key word */
2815ed1755aSMarvin Hsu #define SE_KEYIV_PKT_KEY_WORD_SHIFT		0
2825ed1755aSMarvin Hsu #define SE_KEYIV_PKT_KEY_WORD(x)	\
2835ed1755aSMarvin Hsu 		((x) << SE_KEYIV_PKT_KEY_WORD_SHIFT)
2845ed1755aSMarvin Hsu 
2855ed1755aSMarvin Hsu /* KEYIV PKT - iv word */
2865ed1755aSMarvin Hsu #define SE_KEYIV_PKT_IV_WORD_SHIFT		0
2875ed1755aSMarvin Hsu #define SE_KEYIV_PKT_IV_WORD(x)		\
2885ed1755aSMarvin Hsu 		((x) << SE_KEYIV_PKT_IV_WORD_SHIFT)
2895ed1755aSMarvin Hsu 
290ce3c97c9SMarvin Hsu /* SE OPERATION */
291ce3c97c9SMarvin Hsu #define SE_OPERATION_REG_OFFSET 		0x8U
292ce3c97c9SMarvin Hsu #define SE_OPERATION_SHIFT			0
293ce3c97c9SMarvin Hsu #define SE_OP_ABORT	\
294ce3c97c9SMarvin Hsu 		((0x0U) << SE_OPERATION_SHIFT)
295ce3c97c9SMarvin Hsu #define SE_OP_START	\
296ce3c97c9SMarvin Hsu 		((0x1U) << SE_OPERATION_SHIFT)
297ce3c97c9SMarvin Hsu #define SE_OP_RESTART	\
298ce3c97c9SMarvin Hsu 		((0x2U) << SE_OPERATION_SHIFT)
299ce3c97c9SMarvin Hsu #define SE_OP_CTX_SAVE	\
300ce3c97c9SMarvin Hsu 		((0x3U) << SE_OPERATION_SHIFT)
301ce3c97c9SMarvin Hsu #define SE_OP_RESTART_IN	\
302ce3c97c9SMarvin Hsu 		((0x4U) << SE_OPERATION_SHIFT)
303ce3c97c9SMarvin Hsu #define SE_OPERATION(x)	\
304ce3c97c9SMarvin Hsu 		((x) & ((0x7U) << SE_OPERATION_SHIFT))
305ce3c97c9SMarvin Hsu 
3065ed1755aSMarvin Hsu /* SE CONTEXT */
3075ed1755aSMarvin Hsu #define SE_CTX_SAVE_CONFIG_REG_OFFSET		0x70
3085ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD_SHIFT		0
3095ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD(x)	\
3105ed1755aSMarvin Hsu 		(x << SE_CTX_SAVE_WORD_QUAD_SHIFT)
3115ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD_KEYS_0_3	\
3125ed1755aSMarvin Hsu 		((0U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
3135ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD_KEYS_4_7	\
3145ed1755aSMarvin Hsu 		((1U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
3155ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD_ORIG_IV	\
3165ed1755aSMarvin Hsu 		((2U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
3175ed1755aSMarvin Hsu #define SE_CTX_SAVE_WORD_QUAD_UPD_IV	\
3185ed1755aSMarvin Hsu 		((3U) << SE_CTX_SAVE_WORD_QUAD_SHIFT)
3195ed1755aSMarvin Hsu 
3205ed1755aSMarvin Hsu #define SE_CTX_SAVE_KEY_INDEX_SHIFT		8
3215ed1755aSMarvin Hsu #define SE_CTX_SAVE_KEY_INDEX(x)	(x << SE_CTX_SAVE_KEY_INDEX_SHIFT)
3225ed1755aSMarvin Hsu 
3235ed1755aSMarvin Hsu #define SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT	24
3245ed1755aSMarvin Hsu #define SE_CTX_SAVE_STICKY_WORD_QUAD_STICKY_0_3	\
3255ed1755aSMarvin Hsu 		((0U) << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
3265ed1755aSMarvin Hsu #define SE_CTX_SAVE_STICKY_WORD_QUAD_STICKY_4_7	\
3275ed1755aSMarvin Hsu 		((1U) << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
3285ed1755aSMarvin Hsu #define SE_CTX_SAVE_STICKY_WORD_QUAD(x)	\
3295ed1755aSMarvin Hsu 		(x << SE_CTX_SAVE_STICKY_WORD_QUAD_SHIFT)
3305ed1755aSMarvin Hsu 
3315ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_SHIFT			29
3325ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_STICKY_BITS	\
3335ed1755aSMarvin Hsu 		((0U) << SE_CTX_SAVE_SRC_SHIFT)
3345ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_RSA_KEYTABLE	\
3355ed1755aSMarvin Hsu 		((1U) << SE_CTX_SAVE_SRC_SHIFT)
3365ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_AES_KEYTABLE	\
3375ed1755aSMarvin Hsu 		((2U) << SE_CTX_SAVE_SRC_SHIFT)
3385ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_PKA1_STICKY_BITS	\
3395ed1755aSMarvin Hsu 		((3U) << SE_CTX_SAVE_SRC_SHIFT)
3405ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_MEM	\
3415ed1755aSMarvin Hsu 		((4U) << SE_CTX_SAVE_SRC_SHIFT)
3425ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_SRK	\
3435ed1755aSMarvin Hsu 		((6U) << SE_CTX_SAVE_SRC_SHIFT)
3445ed1755aSMarvin Hsu #define SE_CTX_SAVE_SRC_PKA1_KEYTABLE	\
3455ed1755aSMarvin Hsu 		((7U) << SE_CTX_SAVE_SRC_SHIFT)
3465ed1755aSMarvin Hsu 
3475ed1755aSMarvin Hsu #define SE_CTX_STICKY_WORD_QUAD_SHIFT		24
3485ed1755aSMarvin Hsu #define SE_CTX_STICKY_WORD_QUAD_WORDS_0_3 \
3495ed1755aSMarvin Hsu 		((0U) << SE_CTX_STICKY_WORD_QUAD_SHIFT)
3505ed1755aSMarvin Hsu #define SE_CTX_STICKY_WORD_QUAD_WORDS_4_7 \
3515ed1755aSMarvin Hsu 		((1U) << SE_CTX_STICKY_WORD_QUAD_SHIFT)
3525ed1755aSMarvin Hsu #define SE_CTX_STICKY_WORD_QUAD(x)	 (x << SE_CTX_STICKY_WORD_QUAD_SHIFT)
3535ed1755aSMarvin Hsu 
3545ed1755aSMarvin Hsu #define SE_CTX_SAVE_RSA_KEY_INDEX_SHIFT		16
3555ed1755aSMarvin Hsu #define SE_CTX_SAVE_RSA_KEY_INDEX(x)				\
3565ed1755aSMarvin Hsu 			(x << SE_CTX_SAVE_RSA_KEY_INDEX_SHIFT)
3575ed1755aSMarvin Hsu 
3585ed1755aSMarvin Hsu #define SE_CTX_RSA_WORD_QUAD_SHIFT		12
3595ed1755aSMarvin Hsu #define SE_CTX_RSA_WORD_QUAD(x)	\
3605ed1755aSMarvin Hsu 			(x << SE_CTX_RSA_WORD_QUAD_SHIFT)
3615ed1755aSMarvin Hsu 
3625ed1755aSMarvin Hsu #define SE_CTX_PKA1_WORD_QUAD_L_SHIFT		0
3635ed1755aSMarvin Hsu #define SE_CTX_PKA1_WORD_QUAD_L_SIZE		\
3645ed1755aSMarvin Hsu 			((true ? 4:0) - \
3655ed1755aSMarvin Hsu 			(false ? 4:0) + 1)
3665ed1755aSMarvin Hsu #define SE_CTX_PKA1_WORD_QUAD_L(x)\
3675ed1755aSMarvin Hsu 			(((x) << SE_CTX_PKA1_WORD_QUAD_L_SHIFT) & 0x1f)
3685ed1755aSMarvin Hsu 
3695ed1755aSMarvin Hsu #define SE_CTX_PKA1_WORD_QUAD_H_SHIFT		12
3705ed1755aSMarvin Hsu #define SE_CTX_PKA1_WORD_QUAD_H(x)\
3715ed1755aSMarvin Hsu 			((((x) >> SE_CTX_PKA1_WORD_QUAD_L_SIZE) & 0xf) \
3725ed1755aSMarvin Hsu 			<< SE_CTX_PKA1_WORD_QUAD_H_SHIFT)
3735ed1755aSMarvin Hsu 
3745ed1755aSMarvin Hsu #define SE_RSA_KEY_INDEX_SLOT0_EXP		0
3755ed1755aSMarvin Hsu #define SE_RSA_KEY_INDEX_SLOT0_MOD		1
3765ed1755aSMarvin Hsu #define SE_RSA_KEY_INDEX_SLOT1_EXP		2
3775ed1755aSMarvin Hsu #define SE_RSA_KEY_INDEX_SLOT1_MOD		3
3785ed1755aSMarvin Hsu 
3795ed1755aSMarvin Hsu 
380ce3c97c9SMarvin Hsu /* SE_CTX_SAVE_AUTO */
381ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_REG_OFFSET 		0x74U
382ce3c97c9SMarvin Hsu 
383ce3c97c9SMarvin Hsu /* Enable */
384ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_ENABLE_SHIFT		0
385ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_DIS	\
386ce3c97c9SMarvin Hsu 		((0U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT)
387ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_EN	\
388ce3c97c9SMarvin Hsu 		((1U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT)
389ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_ENABLE(x)	\
390ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_CTX_SAVE_AUTO_ENABLE_SHIFT))
391ce3c97c9SMarvin Hsu 
392ce3c97c9SMarvin Hsu /* Lock */
393ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_LOCK_SHIFT 		8
394ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_LOCK_EN	\
395ce3c97c9SMarvin Hsu 		((1U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT)
396ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_LOCK_DIS	\
397ce3c97c9SMarvin Hsu 		((0U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT)
398ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_LOCK(x)	\
399ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_CTX_SAVE_AUTO_LOCK_SHIFT))
400ce3c97c9SMarvin Hsu 
401ce3c97c9SMarvin Hsu /* Current context save number of blocks*/
402ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_CURR_CNT_SHIFT		16
403ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_AUTO_CURR_CNT_MASK 		0x3FFU
404ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_GET_BLK_COUNT(x)	\
405ce3c97c9SMarvin Hsu 		(((x) >> SE_CTX_SAVE_AUTO_CURR_CNT_SHIFT) & \
406ce3c97c9SMarvin Hsu 		SE_CTX_SAVE_AUTO_CURR_CNT_MASK)
407ce3c97c9SMarvin Hsu 
408ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_SIZE_BLOCKS_SE1		133
409ce3c97c9SMarvin Hsu #define SE_CTX_SAVE_SIZE_BLOCKS_SE2	 	646
410ce3c97c9SMarvin Hsu 
411ce3c97c9SMarvin Hsu /* SE TZRAM OPERATION - only for SE1 */
412ce3c97c9SMarvin Hsu #define SE_TZRAM_OPERATION			0x540U
413ce3c97c9SMarvin Hsu 
414ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_MODE_SHIFT			1
4155ed1755aSMarvin Hsu #define SE_TZRAM_OP_COMMAND_INIT		1
4165ed1755aSMarvin Hsu #define SE_TZRAM_OP_COMMAND_SHIFT		0
417ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_MODE_SAVE		\
418ce3c97c9SMarvin Hsu 		((0U) << SE_TZRAM_OP_MODE_SHIFT)
419ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_MODE_RESTORE	\
420ce3c97c9SMarvin Hsu 		((1U) << SE_TZRAM_OP_MODE_SHIFT)
421ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_MODE(x)		\
422ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_TZRAM_OP_MODE_SHIFT))
423ce3c97c9SMarvin Hsu 
424ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_BUSY_SHIFT			2
425ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_BUSY_OFF	\
426ce3c97c9SMarvin Hsu 		((0U) << SE_TZRAM_OP_BUSY_SHIFT)
427ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_BUSY_ON	\
428ce3c97c9SMarvin Hsu 		((1U) << SE_TZRAM_OP_BUSY_SHIFT)
429ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_BUSY(x)	\
430ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_TZRAM_OP_BUSY_SHIFT))
431ce3c97c9SMarvin Hsu 
432ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_REQ_SHIFT			0
433ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_REQ_IDLE	\
434ce3c97c9SMarvin Hsu 		((0U) << SE_TZRAM_OP_REQ_SHIFT)
435ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_REQ_INIT	\
436ce3c97c9SMarvin Hsu 		((1U) << SE_TZRAM_OP_REQ_SHIFT)
437ce3c97c9SMarvin Hsu #define SE_TZRAM_OP_REQ(x)	\
438ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_TZRAM_OP_REQ_SHIFT))
439ce3c97c9SMarvin Hsu 
440ce3c97c9SMarvin Hsu /* SE Interrupt */
441*41554fb2SHarvey Hsieh #define SE_INT_ENABLE_REG_OFFSET		U(0xC)
442ce3c97c9SMarvin Hsu #define SE_INT_STATUS_REG_OFFSET		0x10U
443ce3c97c9SMarvin Hsu #define SE_INT_OP_DONE_SHIFT			4
444ce3c97c9SMarvin Hsu #define SE_INT_OP_DONE_CLEAR	\
445ce3c97c9SMarvin Hsu 		((0U) << SE_INT_OP_DONE_SHIFT)
446ce3c97c9SMarvin Hsu #define SE_INT_OP_DONE_ACTIVE	\
447ce3c97c9SMarvin Hsu 		((1U) << SE_INT_OP_DONE_SHIFT)
448ce3c97c9SMarvin Hsu #define SE_INT_OP_DONE(x)	\
449ce3c97c9SMarvin Hsu 		((x) & ((0x1U) << SE_INT_OP_DONE_SHIFT))
450ce3c97c9SMarvin Hsu 
4515ed1755aSMarvin Hsu /* SE TZRAM SECURITY */
4525ed1755aSMarvin Hsu #define SE_TZRAM_SEC_REG_OFFSET			0x4
4535ed1755aSMarvin Hsu 
4545ed1755aSMarvin Hsu #define SE_TZRAM_SEC_SETTING_SHIFT		 0
4555ed1755aSMarvin Hsu #define SE_TZRAM_SECURE		\
4565ed1755aSMarvin Hsu 		((0UL) << SE_TZRAM_SEC_SETTING_SHIFT)
4575ed1755aSMarvin Hsu #define SE_TZRAM_NONSECURE	 \
4585ed1755aSMarvin Hsu 		((1UL) << SE_TZRAM_SEC_SETTING_SHIFT)
4595ed1755aSMarvin Hsu #define SE_TZRAM_SEC_SETTING(x)		\
4605ed1755aSMarvin Hsu 		((x) & ((0x1UL) << SE_TZRAM_SEC_SETTING_SHIFT))
4615ed1755aSMarvin Hsu 
4625ed1755aSMarvin Hsu /* PKA1 KEY SLOTS */
4635ed1755aSMarvin Hsu #define TEGRA_SE_PKA1_KEYSLOT_COUNT		4
4645ed1755aSMarvin Hsu 
4655ed1755aSMarvin Hsu 
466ce3c97c9SMarvin Hsu /* SE error status */
467ce3c97c9SMarvin Hsu #define SE_ERR_STATUS_REG_OFFSET		0x804U
4685ed1755aSMarvin Hsu #define SE_CRYPTO_KEYTABLE_DST_REG_OFFSET	0x330
4695ed1755aSMarvin Hsu #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT	0
4705ed1755aSMarvin Hsu #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD(x)	\
4715ed1755aSMarvin Hsu 			(x << SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT)
4725ed1755aSMarvin Hsu 
4735ed1755aSMarvin Hsu #define SE_KEY_INDEX_SHIFT			8
4745ed1755aSMarvin Hsu #define SE_CRYPTO_KEYTABLE_DST_KEY_INDEX(x)	(x << SE_KEY_INDEX_SHIFT)
4755ed1755aSMarvin Hsu 
476ce3c97c9SMarvin Hsu 
477ce3c97c9SMarvin Hsu /* SE linked list (LL) register */
478ce3c97c9SMarvin Hsu #define SE_IN_LL_ADDR_REG_OFFSET		0x18U
479ce3c97c9SMarvin Hsu #define SE_OUT_LL_ADDR_REG_OFFSET		0x24U
480ce3c97c9SMarvin Hsu #define SE_BLOCK_COUNT_REG_OFFSET		0x318U
481ce3c97c9SMarvin Hsu 
482ce3c97c9SMarvin Hsu /* AES data sizes */
4835ed1755aSMarvin Hsu #define TEGRA_SE_KEY_256_SIZE			32
4845ed1755aSMarvin Hsu #define TEGRA_SE_KEY_192_SIZE			24
4855ed1755aSMarvin Hsu #define TEGRA_SE_KEY_128_SIZE			16
486ce3c97c9SMarvin Hsu #define TEGRA_SE_AES_BLOCK_SIZE 		16
487ce3c97c9SMarvin Hsu #define TEGRA_SE_AES_MIN_KEY_SIZE		16
488ce3c97c9SMarvin Hsu #define TEGRA_SE_AES_MAX_KEY_SIZE		32
489ce3c97c9SMarvin Hsu #define TEGRA_SE_AES_IV_SIZE			16
490ce3c97c9SMarvin Hsu 
4915ed1755aSMarvin Hsu #define TEGRA_SE_RNG_IV_SIZE			16
4925ed1755aSMarvin Hsu #define TEGRA_SE_RNG_DT_SIZE			16
4935ed1755aSMarvin Hsu #define TEGRA_SE_RNG_KEY_SIZE			16
4945ed1755aSMarvin Hsu #define TEGRA_SE_RNG_SEED_SIZE	(TEGRA_SE_RNG_IV_SIZE + \
4955ed1755aSMarvin Hsu 									TEGRA_SE_RNG_KEY_SIZE + \
4965ed1755aSMarvin Hsu 									TEGRA_SE_RNG_DT_SIZE)
4975ed1755aSMarvin Hsu #define TEGRA_SE_RSA512_DIGEST_SIZE		64
4985ed1755aSMarvin Hsu #define TEGRA_SE_RSA1024_DIGEST_SIZE		128
4995ed1755aSMarvin Hsu #define TEGRA_SE_RSA1536_DIGEST_SIZE		192
5005ed1755aSMarvin Hsu #define TEGRA_SE_RSA2048_DIGEST_SIZE		256
5015ed1755aSMarvin Hsu 
5025ed1755aSMarvin Hsu #define SE_KEY_TABLE_ACCESS_REG_OFFSET		0x284
5035ed1755aSMarvin Hsu #define SE_KEY_READ_DISABLE_SHIFT		0
5045ed1755aSMarvin Hsu 
5055ed1755aSMarvin Hsu #define SE_CTX_BUFER_SIZE			1072
5065ed1755aSMarvin Hsu #define SE_CTX_DRBG_BUFER_SIZE			2112
5075ed1755aSMarvin Hsu 
5085ed1755aSMarvin Hsu /* SE blobs size in bytes */
5095ed1755aSMarvin Hsu #define SE_CTX_SAVE_RSA_KEY_LENGTH		1024
5105ed1755aSMarvin Hsu #define SE_CTX_SAVE_RANDOM_DATA_SIZE		16
5115ed1755aSMarvin Hsu #define SE_CTX_SAVE_STICKY_BITS_SIZE		16
5125ed1755aSMarvin Hsu #define SE2_CONTEXT_SAVE_PKA1_STICKY_BITS_LENGTH 16
5135ed1755aSMarvin Hsu #define SE2_CONTEXT_SAVE_PKA1_KEYS_LENGTH	8192
5145ed1755aSMarvin Hsu #define SE_CTX_KNOWN_PATTERN_SIZE		16
5155ed1755aSMarvin Hsu #define SE_CTX_KNOWN_PATTERN_SIZE_WORDS		(SE_CTX_KNOWN_PATTERN_SIZE/4)
5165ed1755aSMarvin Hsu 
5175ed1755aSMarvin Hsu /* SE RSA */
5185ed1755aSMarvin Hsu #define TEGRA_SE_RSA_KEYSLOT_COUNT		2
5195ed1755aSMarvin Hsu #define SE_RSA_KEY_SIZE_REG_OFFSET		0x404
5205ed1755aSMarvin Hsu #define SE_RSA_EXP_SIZE_REG_OFFSET		0x408
5215ed1755aSMarvin Hsu #define SE_RSA_MAX_EXP_BIT_SIZE			2048
5225ed1755aSMarvin Hsu #define SE_RSA_MAX_EXP_SIZE32	\
5235ed1755aSMarvin Hsu 		(SE_RSA_MAX_EXP_BIT_SIZE >> 5)
5245ed1755aSMarvin Hsu #define SE_RSA_MAX_MOD_BIT_SIZE			2048
5255ed1755aSMarvin Hsu #define SE_RSA_MAX_MOD_SIZE32	\
5265ed1755aSMarvin Hsu 		(SE_RSA_MAX_MOD_BIT_SIZE >> 5)
5275ed1755aSMarvin Hsu 
5285ed1755aSMarvin Hsu /* SE_RSA_KEYTABLE_ADDR */
5295ed1755aSMarvin Hsu #define SE_RSA_KEYTABLE_ADDR			0x420
5305ed1755aSMarvin Hsu #define RSA_KEY_PKT_WORD_ADDR_SHIFT		0
5315ed1755aSMarvin Hsu #define RSA_KEY_PKT_EXPMOD_SEL_SHIFT	\
5325ed1755aSMarvin Hsu 		((6U) << RSA_KEY_PKT_WORD_ADDR_SHIFT)
5335ed1755aSMarvin Hsu #define RSA_KEY_MOD	\
5345ed1755aSMarvin Hsu 		((1U) << RSA_KEY_PKT_EXPMOD_SEL_SHIFT)
5355ed1755aSMarvin Hsu #define RSA_KEY_EXP	\
5365ed1755aSMarvin Hsu 		((0U) << RSA_KEY_PKT_EXPMOD_SEL_SHIFT)
5375ed1755aSMarvin Hsu #define RSA_KEY_PKT_SLOT_SHIFT			7
5385ed1755aSMarvin Hsu #define RSA_KEY_SLOT_1	\
5395ed1755aSMarvin Hsu 		((0U) << RSA_KEY_PKT_SLOT_SHIFT)
5405ed1755aSMarvin Hsu #define RSA_KEY_SLOT_2	\
5415ed1755aSMarvin Hsu 		((1U) << RSA_KEY_PKT_SLOT_SHIFT)
5425ed1755aSMarvin Hsu #define RSA_KEY_PKT_INPUT_MODE_SHIFT		8
5435ed1755aSMarvin Hsu #define RSA_KEY_REG_INPUT	\
5445ed1755aSMarvin Hsu 		((0U) << RSA_KEY_PKT_INPUT_MODE_SHIFT)
5455ed1755aSMarvin Hsu #define RSA_KEY_DMA_INPUT	\
5465ed1755aSMarvin Hsu 		((1U) << RSA_KEY_PKT_INPUT_MODE_SHIFT)
5475ed1755aSMarvin Hsu 
5485ed1755aSMarvin Hsu /* SE_RSA_KEYTABLE_DATA */
5495ed1755aSMarvin Hsu #define SE_RSA_KEYTABLE_DATA			0x424
5505ed1755aSMarvin Hsu 
5515ed1755aSMarvin Hsu /* SE_RSA_CONFIG register */
5525ed1755aSMarvin Hsu #define SE_RSA_CONFIG				0x400
5535ed1755aSMarvin Hsu #define RSA_KEY_SLOT_SHIFT			24
5545ed1755aSMarvin Hsu #define RSA_KEY_SLOT(x) \
5555ed1755aSMarvin Hsu 		((x) << RSA_KEY_SLOT_SHIFT)
5565ed1755aSMarvin Hsu 
5575ed1755aSMarvin Hsu /*******************************************************************************
5585ed1755aSMarvin Hsu  * Structure definition
5595ed1755aSMarvin Hsu  ******************************************************************************/
5605ed1755aSMarvin Hsu 
5615ed1755aSMarvin Hsu /* SE context blob */
5625ed1755aSMarvin Hsu #pragma pack(push, 1)
5635ed1755aSMarvin Hsu typedef struct tegra_aes_key_slot {
5645ed1755aSMarvin Hsu 	/* 0 - 7 AES key */
5655ed1755aSMarvin Hsu 	uint32_t key[8];
5665ed1755aSMarvin Hsu 	/* 8 - 11 Original IV */
5675ed1755aSMarvin Hsu 	uint32_t oiv[4];
5685ed1755aSMarvin Hsu 	/* 12 - 15 Updated IV */
5695ed1755aSMarvin Hsu 	uint32_t uiv[4];
5705ed1755aSMarvin Hsu } tegra_se_aes_key_slot_t;
5715ed1755aSMarvin Hsu #pragma pack(pop)
5725ed1755aSMarvin Hsu 
5735ed1755aSMarvin Hsu #pragma pack(push, 1)
5745ed1755aSMarvin Hsu typedef struct tegra_se_context {
5755ed1755aSMarvin Hsu 	/* random number */
5765ed1755aSMarvin Hsu 	unsigned char rand_data[SE_CTX_SAVE_RANDOM_DATA_SIZE];
5775ed1755aSMarvin Hsu 	/* Sticky bits */
5785ed1755aSMarvin Hsu 	unsigned char sticky_bits[SE_CTX_SAVE_STICKY_BITS_SIZE * 2];
5795ed1755aSMarvin Hsu 	/* AES key slots */
5805ed1755aSMarvin Hsu 	tegra_se_aes_key_slot_t key_slots[TEGRA_SE_AES_KEYSLOT_COUNT];
5815ed1755aSMarvin Hsu 	/* RSA key slots */
5825ed1755aSMarvin Hsu 	unsigned char rsa_keys[SE_CTX_SAVE_RSA_KEY_LENGTH];
5835ed1755aSMarvin Hsu } tegra_se_context_t;
5845ed1755aSMarvin Hsu #pragma pack(pop)
5855ed1755aSMarvin Hsu 
5865ed1755aSMarvin Hsu /* PKA context blob */
5875ed1755aSMarvin Hsu #pragma pack(push, 1)
5885ed1755aSMarvin Hsu typedef struct tegra_pka_context {
5895ed1755aSMarvin Hsu 	unsigned char sticky_bits[SE2_CONTEXT_SAVE_PKA1_STICKY_BITS_LENGTH];
5905ed1755aSMarvin Hsu 	unsigned char pka_keys[SE2_CONTEXT_SAVE_PKA1_KEYS_LENGTH];
5915ed1755aSMarvin Hsu } tegra_pka_context_t;
5925ed1755aSMarvin Hsu #pragma pack(pop)
5935ed1755aSMarvin Hsu 
5945ed1755aSMarvin Hsu /* SE context blob */
5955ed1755aSMarvin Hsu #pragma pack(push, 1)
5965ed1755aSMarvin Hsu typedef struct tegra_se_context_blob {
5975ed1755aSMarvin Hsu 	/* SE context */
5985ed1755aSMarvin Hsu 	tegra_se_context_t se_ctx;
5995ed1755aSMarvin Hsu 	/* Known Pattern */
6005ed1755aSMarvin Hsu 	unsigned char known_pattern[SE_CTX_KNOWN_PATTERN_SIZE];
6015ed1755aSMarvin Hsu } tegra_se_context_blob_t;
6025ed1755aSMarvin Hsu #pragma pack(pop)
6035ed1755aSMarvin Hsu 
6045ed1755aSMarvin Hsu /* SE2 and PKA1 context blob */
6055ed1755aSMarvin Hsu #pragma pack(push, 1)
6065ed1755aSMarvin Hsu typedef struct tegra_se2_context_blob {
6075ed1755aSMarvin Hsu 	/* SE2 context */
6085ed1755aSMarvin Hsu 	tegra_se_context_t se_ctx;
6095ed1755aSMarvin Hsu 	/* PKA1 context */
6105ed1755aSMarvin Hsu 	tegra_pka_context_t pka_ctx;
6115ed1755aSMarvin Hsu 	/* Known Pattern */
6125ed1755aSMarvin Hsu 	unsigned char known_pattern[SE_CTX_KNOWN_PATTERN_SIZE];
6135ed1755aSMarvin Hsu } tegra_se2_context_blob_t;
6145ed1755aSMarvin Hsu #pragma pack(pop)
6155ed1755aSMarvin Hsu 
6165ed1755aSMarvin Hsu /* SE AES key type 128bit, 192bit, 256bit */
6175ed1755aSMarvin Hsu typedef enum {
6185ed1755aSMarvin Hsu 	SE_AES_KEY128,
6195ed1755aSMarvin Hsu 	SE_AES_KEY192,
6205ed1755aSMarvin Hsu 	SE_AES_KEY256,
6215ed1755aSMarvin Hsu } tegra_se_aes_key_type_t;
6225ed1755aSMarvin Hsu 
6235ed1755aSMarvin Hsu /* SE RSA key slot */
6245ed1755aSMarvin Hsu typedef struct tegra_se_rsa_key_slot {
6255ed1755aSMarvin Hsu 	/* 0 - 63 exponent key */
6265ed1755aSMarvin Hsu 	uint32_t exponent[SE_RSA_MAX_EXP_SIZE32];
6275ed1755aSMarvin Hsu 	/* 64 - 127 modulus key */
6285ed1755aSMarvin Hsu 	uint32_t modulus[SE_RSA_MAX_MOD_SIZE32];
6295ed1755aSMarvin Hsu } tegra_se_rsa_key_slot_t;
6305ed1755aSMarvin Hsu 
6315ed1755aSMarvin Hsu 
632ce3c97c9SMarvin Hsu /*******************************************************************************
633ce3c97c9SMarvin Hsu  * Inline functions definition
634ce3c97c9SMarvin Hsu  ******************************************************************************/
635ce3c97c9SMarvin Hsu 
tegra_se_read_32(const tegra_se_dev_t * dev,uint32_t offset)636ce3c97c9SMarvin Hsu static inline uint32_t tegra_se_read_32(const tegra_se_dev_t *dev, uint32_t offset)
637ce3c97c9SMarvin Hsu {
638ce3c97c9SMarvin Hsu 	return mmio_read_32(dev->se_base + offset);
639ce3c97c9SMarvin Hsu }
640ce3c97c9SMarvin Hsu 
tegra_se_write_32(const tegra_se_dev_t * dev,uint32_t offset,uint32_t val)641ce3c97c9SMarvin Hsu static inline void tegra_se_write_32(const tegra_se_dev_t *dev, uint32_t offset, uint32_t val)
642ce3c97c9SMarvin Hsu {
643ce3c97c9SMarvin Hsu 	mmio_write_32(dev->se_base + offset, val);
644ce3c97c9SMarvin Hsu }
645ce3c97c9SMarvin Hsu 
tegra_pka_read_32(tegra_pka_dev_t * dev,uint32_t offset)6465ed1755aSMarvin Hsu static inline uint32_t tegra_pka_read_32(tegra_pka_dev_t *dev, uint32_t offset)
6475ed1755aSMarvin Hsu {
6485ed1755aSMarvin Hsu 	return mmio_read_32(dev->pka_base + offset);
6495ed1755aSMarvin Hsu }
6505ed1755aSMarvin Hsu 
tegra_pka_write_32(tegra_pka_dev_t * dev,uint32_t offset,uint32_t val)6515ed1755aSMarvin Hsu static inline void tegra_pka_write_32(tegra_pka_dev_t *dev, uint32_t offset,
6525ed1755aSMarvin Hsu uint32_t val)
6535ed1755aSMarvin Hsu {
6545ed1755aSMarvin Hsu 	mmio_write_32(dev->pka_base + offset, val);
6555ed1755aSMarvin Hsu }
6565ed1755aSMarvin Hsu 
657ce3c97c9SMarvin Hsu /*******************************************************************************
658ce3c97c9SMarvin Hsu  * Prototypes
659ce3c97c9SMarvin Hsu  ******************************************************************************/
6605ed1755aSMarvin Hsu int tegra_se_start_normal_operation(const tegra_se_dev_t *, uint32_t);
6615ed1755aSMarvin Hsu int tegra_se_start_ctx_save_operation(const tegra_se_dev_t *, uint32_t);
662ce3c97c9SMarvin Hsu 
663ce3c97c9SMarvin Hsu #endif /* SE_PRIVATE_H */
664