pm: EDP: Makefile for EDP framework
[linux-2.6.git] / drivers / crypto / tegra-se.h
1 /*
2  * Driver for Tegra Security Engine
3  *
4  * Copyright (c) 2011, NVIDIA Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20
21 #ifndef _CRYPTO_TEGRA_SE_H
22 #define _CRYPTO_TEGRA_SE_H
23
24 #include <crypto/hash.h>
25 #include <crypto/sha.h>
26
27 #define PFX     "tegra-se: "
28
29 #define TEGRA_SE_CRA_PRIORITY   300
30 #define TEGRA_SE_COMPOSITE_PRIORITY 400
31 #define TEGRA_SE_CRYPTO_QUEUE_LENGTH 50
32 #define SE_MAX_SRC_SG_COUNT             50
33 #define SE_MAX_DST_SG_COUNT             50
34
35 #define TEGRA_SE_KEYSLOT_COUNT          16
36
37 /* SE register definitions */
38 #define SE_CONFIG_REG_OFFSET            0x014
39 #define SE_CONFIG_ENC_ALG_SHIFT         12
40 #define SE_CONFIG_DEC_ALG_SHIFT         8
41 #define ALG_AES_ENC             1
42 #define ALG_RNG                 2
43 #define ALG_SHA                 3
44 #define ALG_RSA                 4
45 #define ALG_NOP                 0
46 #define ALG_AES_DEC             1
47 #define SE_CONFIG_ENC_ALG(x)            (x << SE_CONFIG_ENC_ALG_SHIFT)
48 #define SE_CONFIG_DEC_ALG(x)            (x << SE_CONFIG_DEC_ALG_SHIFT)
49 #define SE_CONFIG_DST_SHIFT                     2
50 #define DST_MEMORY              0
51 #define DST_HASHREG             1
52 #define DST_KEYTAB              2
53 #define DST_SRK                 3
54 #define DST_RSAREG              4
55 #define SE_CONFIG_DST(x)                        (x << SE_CONFIG_DST_SHIFT)
56 #define SE_CONFIG_ENC_MODE_SHIFT        24
57 #define SE_CONFIG_DEC_MODE_SHIFT        16
58 #define MODE_KEY128             0
59 #define MODE_KEY192             1
60 #define MODE_KEY256             2
61 #define MODE_SHA1               0
62 #define MODE_SHA224             4
63 #define MODE_SHA256             5
64 #define MODE_SHA384             6
65 #define MODE_SHA512             7
66 #define SE_CONFIG_ENC_MODE(x)           (x << SE_CONFIG_ENC_MODE_SHIFT)
67 #define SE_CONFIG_DEC_MODE(x)           (x << SE_CONFIG_DEC_MODE_SHIFT)
68
69 #define SE_RNG_CONFIG_REG_OFFSET                0x340
70 #define DRBG_MODE_SHIFT 0
71 #define DRBG_MODE_NORMAL        0
72 #define DRBG_MODE_FORCE_INSTANTION      1
73 #define DRBG_MODE_FORCE_RESEED          2
74 #define SE_RNG_CONFIG_MODE(x)           (x << DRBG_MODE_SHIFT)
75
76 #define DRBG_SRC_SHIFT  2
77 #define DRBG_SRC_NONE   0
78 #define DRBG_SRC_ENTROPY        1
79 #define DRBG_SRC_LFSR   2
80 #define SE_RNG_CONFIG_SRC(x)            (x << DRBG_SRC_SHIFT)
81
82 #define SE_RNG_RESEED_INTERVAL_REG_OFFSET               0x348
83
84 #define SE_KEYTABLE_REG_OFFSET          0x31c
85 #define SE_KEYTABLE_SLOT_SHIFT          4
86 #define SE_KEYTABLE_SLOT(x)                     (x << SE_KEYTABLE_SLOT_SHIFT)
87 #define SE_KEYTABLE_QUAD_SHIFT          2
88 #define QUAD_KEYS_128   0
89 #define QUAD_KEYS_192   1
90 #define QUAD_KEYS_256   1
91 #define QUAD_ORG_IV             2
92 #define QUAD_UPDTD_IV   3
93 #define SE_KEYTABLE_QUAD(x)                     (x << SE_KEYTABLE_QUAD_SHIFT)
94 #define SE_KEYTABLE_OP_TYPE_SHIFT       9
95 #define OP_READ                 0
96 #define OP_WRITE                1
97 #define SE_KEYTABLE_OP_TYPE(x)          (x << SE_KEYTABLE_OP_TYPE_SHIFT)
98 #define SE_KEYTABLE_TABLE_SEL_SHIFT             8
99 #define TABLE_KEYIV             0
100 #define TABLE_SCHEDULE  1
101 #define SE_KEYTABLE_TABLE_SEL(x)        (x << SE_KEYTABLE_TABLE_SEL_SHIFT)
102 #define SE_KEYTABLE_PKT_SHIFT           0
103 #define SE_KEYTABLE_PKT(x)                      (x << SE_KEYTABLE_PKT_SHIFT)
104
105 #define SE_CRYPTO_REG_OFFSET            0x304
106 #define SE_CRYPTO_HASH_SHIFT            0
107 #define HASH_DISABLE    0
108 #define HASH_ENABLE             1
109 #define SE_CRYPTO_HASH(x)                       (x << SE_CRYPTO_HASH_SHIFT)
110 #define SE_CRYPTO_XOR_POS_SHIFT         1
111 #define XOR_BYPASS              0
112 #define XOR_TOP                 2
113 #define XOR_BOTTOM              3
114 #define SE_CRYPTO_XOR_POS(x)            (x << SE_CRYPTO_XOR_POS_SHIFT)
115 #define SE_CRYPTO_INPUT_SEL_SHIFT       3
116 #define INPUT_AHB               0
117 #define INPUT_RANDOM    1
118 #define INPUT_AESOUT    2
119 #define INPUT_LNR_CTR   3
120 #define SE_CRYPTO_INPUT_SEL(x)          (x << SE_CRYPTO_INPUT_SEL_SHIFT)
121 #define SE_CRYPTO_VCTRAM_SEL_SHIFT      5
122 #define VCTRAM_AHB              0
123 #define VCTRAM_AESOUT   2
124 #define VCTRAM_PREVAHB  3
125 #define SE_CRYPTO_VCTRAM_SEL(x)         (x << SE_CRYPTO_VCTRAM_SEL_SHIFT)
126 #define SE_CRYPTO_IV_SEL_SHIFT          7
127 #define IV_ORIGINAL             0
128 #define IV_UPDATED              1
129 #define SE_CRYPTO_IV_SEL(x)                     (x << SE_CRYPTO_IV_SEL_SHIFT)
130 #define SE_CRYPTO_CORE_SEL_SHIFT        8
131 #define CORE_DECRYPT    0
132 #define CORE_ENCRYPT    1
133 #define SE_CRYPTO_CORE_SEL(x)           (x << SE_CRYPTO_CORE_SEL_SHIFT)
134 #define SE_CRYPTO_CTR_VAL_SHIFT         11
135 #define SE_CRYPTO_CTR_VAL(x)            (x << SE_CRYPTO_CTR_VAL_SHIFT)
136 #define SE_CRYPTO_KEY_INDEX_SHIFT       24
137 #define SE_CRYPTO_KEY_INDEX(x)          (x << SE_CRYPTO_KEY_INDEX_SHIFT)
138 #define SE_CRYPTO_CTR_CNTN_SHIFT        11
139 #define SE_CRYPTO_CTR_CNTN(x)           (x << SE_CRYPTO_CTR_CNTN_SHIFT)
140
141 #define SE_CRYPTO_CTR_REG_COUNT         4
142 #define SE_CRYPTO_CTR_REG_OFFSET        0x308
143
144 #define SE_OPERATION_REG_OFFSET         0x008
145 #define SE_OPERATION_SHIFT                      0
146 #define OP_ABORT                0
147 #define OP_SRART                1
148 #define OP_RESTART              2
149 #define OP_CTX_SAVE             3
150 #define SE_OPERATION(x)                         (x << SE_OPERATION_SHIFT)
151
152 #define SE_CONTEXT_SAVE_CONFIG_REG_OFFSET               0x070
153 #define SE_CONTEXT_SAVE_WORD_QUAD_SHIFT         0
154 #define KEYS_0_3                0
155 #define KEYS_4_7                1
156 #define ORIG_IV         2
157 #define UPD_IV          3
158 #define SE_CONTEXT_SAVE_WORD_QUAD(x)    (x << SE_CONTEXT_SAVE_WORD_QUAD_SHIFT)
159
160 #define SE_CONTEXT_SAVE_KEY_INDEX_SHIFT         8
161 #define SE_CONTEXT_SAVE_KEY_INDEX(x)    (x << SE_CONTEXT_SAVE_KEY_INDEX_SHIFT)
162
163
164 #define SE_CONTEXT_SAVE_SRC_SHIFT               30
165 #define STICKY_BITS             0
166 #define KEYTABLE                1
167 #define MEM             2
168 #define SRK             3
169 #define SE_CONTEXT_SAVE_SRC(x)          (x << SE_CONTEXT_SAVE_SRC_SHIFT)
170
171 #define SE_INT_ENABLE_REG_OFFSET        0x00c
172 #define SE_INT_STATUS_REG_OFFSET        0x010
173 #define INT_DISABLE             0
174 #define INT_ENABLE              1
175 #define INT_UNSET               0
176 #define INT_SET                 1
177 #define SE_INT_OP_DONE_SHIFT            4
178 #define SE_INT_OP_DONE(x)                       (x << SE_INT_OP_DONE_SHIFT)
179 #define SE_INT_ERROR_SHIFT              16
180 #define SE_INT_ERROR(x)                 (x << SE_INT_ERROR_SHIFT)
181
182 #define SE_CRYPTO_KEYTABLE_DST_REG_OFFSET       0X330
183 #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT          0
184 #define SE_CRYPTO_KEYTABLE_DST_WORD_QUAD(x)             \
185                 (x << SE_CRYPTO_KEYTABLE_DST_WORD_QUAD_SHIFT)
186
187 #define SE_KEY_INDEX_SHIFT              8
188 #define SE_CRYPTO_KEYTABLE_DST_KEY_INDEX(x)     (x << SE_KEY_INDEX_SHIFT)
189
190 #define SE_IN_LL_ADDR_REG_OFFSET        0x018
191 #define SE_OUT_LL_ADDR_REG_OFFSET       0x024
192
193 #define SE_KEYTABLE_DATA0_REG_OFFSET    0x320
194 #define SE_KEYTABLE_REG_MAX_DATA                16
195
196 #define SE_BLOCK_COUNT_REG_OFFSET       0x318
197
198 #define SE_SPARE_0_REG_OFFSET           0x80c
199
200 #define SE_SHA_CONFIG_REG_OFFSET        0x200
201 #define SHA_DISABLE             0
202 #define SHA_ENABLE              1
203
204 #define SE_SHA_MSG_LENGTH_REG_OFFSET    0x204
205 #define SE_SHA_MSG_LEFT_REG_OFFSET              0x214
206
207
208 #define SE_HASH_RESULT_REG_COUNT        16
209 #define SE_HASH_RESULT_REG_OFFSET       0x030
210
211
212 #define TEGRA_SE_KEY_256_SIZE           32
213 #define TEGRA_SE_KEY_192_SIZE           24
214 #define TEGRA_SE_KEY_128_SIZE           16
215 #define TEGRA_SE_AES_BLOCK_SIZE         16
216 #define TEGRA_SE_AES_MIN_KEY_SIZE       16
217 #define TEGRA_SE_AES_MAX_KEY_SIZE       32
218 #define TEGRA_SE_AES_IV_SIZE            16
219 #define TEGRA_SE_RNG_IV_SIZE            16
220 #define TEGRA_SE_RNG_DT_SIZE            16
221 #define TEGRA_SE_RNG_KEY_SIZE           16
222 #define TEGRA_SE_RNG_SEED_SIZE          (TEGRA_SE_RNG_IV_SIZE + \
223                                                 TEGRA_SE_RNG_KEY_SIZE + \
224                                                 TEGRA_SE_RNG_DT_SIZE)
225 #define TEGRA_SE_AES_CMAC_DIGEST_SIZE   16
226 #define TEGRA_SE_RSA512_DIGEST_SIZE     64
227 #define TEGRA_SE_RSA1024_DIGEST_SIZE    128
228 #define TEGRA_SE_RSA1536_DIGEST_SIZE    192
229 #define TEGRA_SE_RSA2048_DIGEST_SIZE    256
230
231 #define SE_KEY_TABLE_ACCESS_REG_OFFSET  0x284
232 #define SE_KEY_READ_DISABLE_SHIFT               0
233
234 #define SE_CONTEXT_BUFER_SIZE   1072
235 #define SE_CONTEXT_SAVE_RANDOM_DATA_OFFSET      0
236 #define SE_CONTEXT_SAVE_RANDOM_DATA_SIZE        16
237 #define SE_CONTEXT_SAVE_STICKY_BITS_OFFSET      \
238         (SE_CONTEXT_SAVE_RANDOM_DATA_OFFSET + SE_CONTEXT_SAVE_RANDOM_DATA_SIZE)
239 #define SE_CONTEXT_SAVE_STICKY_BITS_SIZE        16
240 #define SE_CONTEXT_SAVE_KEYS_OFFSET     (SE_CONTEXT_SAVE_STICKY_BITS_OFFSET + \
241                                         SE_CONTEXT_SAVE_STICKY_BITS_SIZE)
242 #define SE_CONTEXT_SAVE_KEY_LENGTH      512
243 #define SE_CONTEXT_ORIGINAL_IV_OFFSET   (SE_CONTEXT_SAVE_KEYS_OFFSET + \
244                         SE_CONTEXT_SAVE_KEY_LENGTH)
245 #define SE_CONTEXT_ORIGINAL_IV_LENGTH   256
246
247 #define SE_CONTEXT_UPDATED_IV_OFFSET    (SE_CONTEXT_ORIGINAL_IV_OFFSET + \
248                         SE_CONTEXT_ORIGINAL_IV_LENGTH)
249
250 #define SE_CONTEXT_UPDATED_IV_LENGTH    256
251 #define SE_CONTEXT_KNOWN_PATTERN_OFFSET (SE_CONTEXT_UPDATED_IV_OFFSET + \
252                         SE_CONTEXT_UPDATED_IV_LENGTH)
253 #define SE_CONTEXT_KNOWN_PATTERN_SIZE   16
254
255 #define TEGRA_SE_RSA_KEYSLOT_COUNT              2
256
257 #define SE_RSA_KEYTABLE_ADDR    0x420
258 #define SE_RSA_KEYTABLE_DATA    0x424
259 #define SE_RSA_OUTPUT 0x428
260
261 #define RSA_KEY_READ    0
262 #define RSA_KEY_WRITE   1
263 #define SE_RSA_KEY_OP_SHIFT     10
264 #define SE_RSA_KEY_OP(x)        (x << SE_RSA_KEY_OP_SHIFT)
265
266 #define RSA_KEY_INPUT_MODE_REG  0
267 #define RSA_KEY_INPUT_MODE_DMA  1
268 #define RSA_KEY_INPUT_MODE_SHIFT        8
269 #define RSA_KEY_INPUT_MODE(x)   (x << RSA_KEY_INPUT_MODE_SHIFT)
270
271
272 #define RSA_KEY_SLOT_ONE        0
273 #define RSA_KEY_SLOT_TW0        1
274 #define RSA_KEY_NUM_SHIFT       7
275 #define RSA_KEY_NUM(x)  (x << RSA_KEY_NUM_SHIFT)
276
277 #define RSA_KEY_TYPE_EXP        0
278 #define RSA_KEY_TYPE_MOD        1
279 #define RSA_KEY_TYPE_SHIFT      6
280 #define RSA_KEY_TYPE(x) (x << RSA_KEY_TYPE_SHIFT)
281
282 #define SE_RSA_KEY_SIZE_REG_OFFSET      0x404
283 #define SE_RSA_EXP_SIZE_REG_OFFSET      0x408
284
285 #define RSA_KEY_SLOT_SHIFT      24
286 #define RSA_KEY_SLOT(x) (x << RSA_KEY_SLOT_SHIFT)
287 #define SE_RSA_CONFIG   0x400
288
289 #define RSA_KEY_PKT_WORD_ADDR_SHIFT     0
290 #define RSA_KEY_PKT_WORD_ADDR(x)        (x << RSA_KEY_PKT_WORD_ADDR_SHIFT)
291
292 #define RSA_KEY_WORD_ADDR_SHIFT 0
293 #define RSA_KEY_WORD_ADDR(x)    (x << RSA_KEY_WORD_ADDR_SHIFT)
294
295 #define SE_RSA_KEYTABLE_PKT_SHIFT       0
296 #define SE_RSA_KEYTABLE_PKT(x)  (x << SE_RSA_KEYTABLE_PKT_SHIFT)
297
298 #endif /* _CRYPTO_TEGRA_SE_H */