xref: /netbsd-src/sys/arch/arm/rockchip/rk_v1crypto.h (revision b510cd1667be57b2ccfafcec10285a908491a446)
1 /*	$NetBSD: rk_v1crypto.h,v 1.1 2020/05/17 19:57:25 riastradh Exp $	*/
2 
3 /*-
4  * Copyright (c) 2020 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Taylor R. Campbell.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef	_ARM_ROCKCHIP_RK_V1CRYPTO_H
33 #define	_ARM_ROCKCHIP_RK_V1CRYPTO_H
34 
35 #define	RK_V1CRYPTO_INTSTS	0x0000 /* Interrupt Status */
36 #define	RK_V1CRYPTO_INTSTS_PKA_DONE	__BIT(5)
37 #define	RK_V1CRYPTO_INTSTS_HASH_DONE	__BIT(4)
38 #define	RK_V1CRYPTO_INTSTS_HRDMA_ERR	__BIT(3)
39 #define	RK_V1CRYPTO_INTSTS_HRDMA_DONE	__BIT(2)
40 #define	RK_V1CRYPTO_INTSTS_BCDMA_ERR	__BIT(1)
41 #define	RK_V1CRYPTO_INTSTS_BCDMA_DONE	__BIT(0)
42 
43 #define	RK_V1CRYPTO_INTENA	0x0004 /* Interrupt Enable */
44 #define	RK_V1CRYPTO_INTENA_PKA_DONE	__BIT(5)
45 #define	RK_V1CRYPTO_INTENA_HASH_DONE	__BIT(4)
46 #define	RK_V1CRYPTO_INTENA_HRDMA_ERR	__BIT(3)
47 #define	RK_V1CRYPTO_INTENA_HRDMA_DONE	__BIT(2)
48 #define	RK_V1CRYPTO_INTENA_BCDMA_ERR	__BIT(1)
49 #define	RK_V1CRYPTO_INTENA_BCDMA_DONE	__BIT(0)
50 
51 #define	RK_V1CRYPTO_CTRL	0x0008 /* Control */
52 #define	RK_V1CRYPTO_CTRL_MASK		__BITS(31,16)
53 #define	RK_V1CRYPTO_CTRL_TRNG_FLUSH	__BIT(9)
54 #define	RK_V1CRYPTO_CTRL_TRNG_START	__BIT(8)
55 #define	RK_V1CRYPTO_CTRL_PKA_FLUSH	__BIT(7)
56 #define	RK_V1CRYPTO_CTRL_HASH_FLUSH	__BIT(6)
57 #define	RK_V1CRYPTO_CTRL_BLOCK_FLUSH	__BIT(5)
58 #define	RK_V1CRYPTO_CTRL_PKA_START	__BIT(4)
59 #define	RK_V1CRYPTO_CTRL_HASH_START	__BIT(3)
60 #define	RK_V1CRYPTO_CTRL_BLOCK_START	__BIT(2)
61 #define	RK_V1CRYPTO_CTRL_TDES_START	__BIT(1)
62 #define	RK_V1CRYPTO_CTRL_AES_START	__BIT(0)
63 
64 #define	RK_V1CRYPTO_CONF	0x000c /* ? */
65 #define	RK_V1CRYPTO_CONF_HR_ADDR_MODE	__BIT(8)
66 #define	RK_V1CRYPTO_CONF_BT_ADDR_MODE	__BIT(7)
67 #define	RK_V1CRYPTO_CONF_BR_ADDR_MODE	__BIT(6)
68 #define	RK_V1CRYPTO_CONF_MODE_FIX		1
69 #define	RK_V1CRYPTO_CONF_MODE_INCR		0
70 #define	RK_V1CRYPTO_CONF_BYTESWAP_HRFIFO __BIT(5)
71 #define	RK_V1CRYPTO_CONF_BYTESWAP_BTFIFO __BIT(4)
72 #define	RK_V1CRYPTO_CONF_BYTESWAP_BRFIFO __BIT(3)
73 #define	RK_V1CRYPTO_CONF_DESSEL		__BIT(2)
74 #define	RK_V1CRYPTO_CONF_DESSEL_AES		0
75 #define	RK_V1CRYPTO_CONF_DESSEL_DES		1 /* 3DES? */
76 #define	RK_V1CRYPTO_CONF_HASHINSEL	__BITS(1,0)
77 #define	RK_V1CRYPTO_CONF_HASHINSEL_INDEP	0
78 #define	RK_V1CRYPTO_CONF_HASHINSEL_BLKIN	1
79 #define	RK_V1CRYPTO_CONF_HASHINSEL_BLKOUT	2
80 
81 #define	RK_V1CRYPTO_BRDMAS	0x0010 /* Block Rx DMA Start */
82 #define	RK_V1CRYPTO_BTDMAS	0x0014 /* Block Tx DMA Start */
83 #define	RK_V1CRYPTO_BRDMAL	0x0018 /* Block Rx DMA Length */
84 #define	RK_V1CRYPTO_BTDMAL	0x0020 /* Block Tx DMA Length */
85 #define	RK_V1CRYPTO_HRDMAS	0x001c /* Hash Rx DMA Start */
86 #define	RK_V1CRYPTO_HRDMAL	0x0020 /* Hash Rx DMA Length */
87 
88 #define	RK_V1CRYPTO_AES_CTRL	0x0080 /* AES Control */
89 #define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_CNT __BIT(11)
90 #define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_KEY __BIT(10)
91 #define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_IV __BIT(9)
92 #define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_DO __BIT(8)
93 #define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_DI __BIT(7)
94 #define	RK_V1CRYPTO_AES_CTRL_KEYCHANGE	__BIT(6)
95 #define	RK_V1CRYPTO_AES_CTRL_MODE	__BITS(5,4)
96 #define	RK_V1CRYPTO_AES_CTRL_MODE_ECB		0
97 #define	RK_V1CRYPTO_AES_CTRL_MODE_CBC		1
98 #define	RK_V1CRYPTO_AES_CTRL_MODE_CTR		2
99 #define	RK_V1CRYPTO_AES_CTRL_KEYSIZE	__BITS(3,2)
100 #define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_128	0
101 #define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_192	1
102 #define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_256	2
103 #define	RK_V1CRYPTO_AES_CTRL_FIFOMODE	__BIT(1)
104 #define	RK_V1CRYPTO_AES_CTRL_DIR	__BIT(0)
105 #define	RK_V1CRYPTO_AES_CTRL_DIR_ENC		0
106 #define	RK_V1CRYPTO_AES_CTRL_DIR_DEC		1
107 
108 #define	RK_V1CRYPTO_AES_STS	0x0084 /* AES Status */
109 #define	RK_V1CRYPTO_AES_STS_DONE	__BIT(0)
110 
111 #define	RK_V1CRYPTO_AES_DIN(n)  (0x0088 + 4*(n)) /* AES Input */
112 #define	RK_V1CRYPTO_AES_DOUT(n) (0x0098 + 4*(n)) /* AES Output */
113 #define	RK_V1CRYPTO_AES_IV(n)   (0x00a8 + 4*(n)) /* AES IV */
114 #define	RK_V1CRYPTO_AES_KEY(n)  (0x00b8 + 4*(n)) /* AES Key */
115 #define	RK_V1CRYPTO_AES_CNT(n)  (0x00d8 + 4*(n)) /* AES Input Counter */
116 
117 #define	RK_V1CRYPTO_TDES_CTRL	0x0100 /* 3DES Control */
118 #define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_KEY __BIT(8)
119 #define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_IV __BIT(7)
120 #define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_DO __BIT(6)
121 #define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_DI __BIT(5)
122 #define	RK_V1CRYPTO_TDES_CTRL_MODE	__BIT(4)
123 #define	RK_V1CRYPTO_TDES_CTRL_MODE_ECB		0
124 #define	RK_V1CRYPTO_TDES_CTRL_MODE_CBC		1
125 #define	RK_V1CRYPTO_TDES_CTRL_KEYMODE	__BIT(3)
126 #define	RK_V1CRYPTO_TDES_CTRL_KEYMODE_EDE	0
127 #define	RK_V1CRYPTO_TDES_CTRL_KEYMODE_EEE	1
128 #define	RK_V1CRYPTO_TDES_CTRL_SELECT	__BIT(2)
129 #define	RK_V1CRYPTO_TDES_CTRL_SELECT_DES	0
130 #define	RK_V1CRYPTO_TDES_CTRL_SELECT_TDES	1
131 #define	RK_V1CRYPTO_TDES_CTRL_FIFOMODE	__BIT(1)
132 #define	RK_V1CRYPTO_TDES_CTRL_DIR	__BIT(0)
133 #define	RK_V1CRYPTO_TDES_CTRL_DIR_ENC		0
134 #define	RK_V1CRYPTO_TDES_CTRL_DIR_DEC		1
135 
136 #define	RK_V1CRYPTO_TDES_STS	0x0104 /* 3DES Status */
137 #define	RK_V1CRYPTO_TDES_STS_DONE	__BIT(0)
138 
139 #define	RK_V1CRYPTO_TDES_DIN(n) (0x0108 + 4*(n)) /* 3DES Input */
140 #define	RK_V1CRYPTO_TDES_DOUT(n)(0x0110 + 4*(n)) /* 3DES Output */
141 #define	RK_V1CRYPTO_TDES_IV(n)  (0x0118 + 4*(n)) /* 3DES IV */
142 #define	RK_V1CRYPTO_TDES_KEY(n) (0x0120 + 4*(n)) /* 3DES Key(1,2,3) */
143 
144 #define	RK_V1CRYPTO_HASH_CTRL	0x0180 /* Hash Control */
145 #define	RK_V1CRYPTO_HASH_SWAP_DO	__BIT(3)
146 #define	RK_V1CRYPTO_HASH_SWAP_DI	__BIT(2)
147 #define	RK_V1CRYPTO_HASH_SELECT		__BITS(1,0)
148 #define	RK_V1CRYPTO_HASH_SELECT_SHA1		0
149 #define	RK_V1CRYPTO_HASH_SELECT_MD5		1
150 #define	RK_V1CRYPTO_HASH_SELECT_SHA256		2
151 #define	RK_V1CRYPTO_HASH_SELECT_PRNG		3 /* ??? */
152 
153 #define	RK_V1CRYPTO_HASH_STS	0x0184 /* Hash Status */
154 #define	RK_V1CRYPTO_HASH_STS_DONE	__BIT(0)
155 
156 #define	RK_V1CRYPTO_HASH_MSG_LEN	0x0188 /* Hash Message Len */
157 #define	RK_V1CRYPTO_HASH_DOUT(n)(0x018c + 4*(n)) /* Hash Result */
158 #define	RK_V1CRYPTO_HASH_SEED(n)(0x01ac + 4*(n)) /* HMAC/PRNG key */
159 
160 #define	RK_V1CRYPTO_TRNG_CTRL	0x0200 /* TRNG Control */
161 #define	RK_V1CRYPTO_TRNG_CTRL_OSC_ENABLE __BIT(16)
162 #define	RK_V1CRYPTO_TRNG_CTRL_CYCLES	__BITS(15,0)
163 
164 #define	RK_V1CRYPTO_TRNG_DOUT(n)(0x0204 + 4*(n)) /* TRNG Output */
165 #define	RK_V1CRYPTO_TRNG_NOUT		8	/* up to 8 32-bit */
166 
167 #define	RK_V1CRYPTO_PKA_CTRL	0x0280 /* PKA Control (RSA?) */
168 #define	RK_V1CRYPTO_PKA_CTRL_SIZE	__BITS(1,0)
169 #define	RK_V1CRYPTO_PKA_CTRL_SIZE_512		0
170 #define	RK_V1CRYPTO_PKA_CTRL_SIZE_1024		1
171 #define	RK_V1CRYPTO_PKA_CTRL_SIZE_2048		2
172 
173 #define	RK_V1CRYPTO_M		0x0400 /* RSA `message' */
174 #define	RK_V1CRYPTO_C		0x0500 /* 2^(2 ceil(lg n) + 2) mod n */
175 #define	RK_V1CRYPTO_N		0x0600 /* RSA modulus? */
176 #define	RK_V1CRYPTO_E		0x0700 /* RSA exponent? */
177 
178 #endif	/* _ARM_ROCKCHIP_RK_V1CRYPTO_H */
179