1 // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #ifndef __HWCRYPTO_REG_H__
15 #define __HWCRYPTO_REG_H__
16 
17 #include "soc.h"
18 
19 /* registers for RSA acceleration via Multiple Precision Integer ops */
20 #define RSA_MEM_M_BLOCK_BASE          ((DR_REG_RSA_BASE)+0x000)
21 /* RB & Z use the same memory block, depending on phase of operation */
22 #define RSA_MEM_RB_BLOCK_BASE         ((DR_REG_RSA_BASE)+0x200)
23 #define RSA_MEM_Z_BLOCK_BASE          ((DR_REG_RSA_BASE)+0x200)
24 #define RSA_MEM_Y_BLOCK_BASE          ((DR_REG_RSA_BASE)+0x400)
25 #define RSA_MEM_X_BLOCK_BASE          ((DR_REG_RSA_BASE)+0x600)
26 
27 /* Configuration registers */
28 #define RSA_M_DASH_REG                (DR_REG_RSA_BASE + 0x800)
29 #define RSA_LENGTH_REG                (DR_REG_RSA_BASE + 0x804)
30 #define RSA_CONSTANT_TIME_REG         (DR_REG_RSA_BASE + 0x820)
31 #define RSA_SEARCH_OPEN_REG           (DR_REG_RSA_BASE + 0x824)
32 #define RSA_SEARCH_POS_REG            (DR_REG_RSA_BASE + 0x828)
33 
34 /* Initialization registers */
35 #define RSA_QUERY_CLEAN_REG           (DR_REG_RSA_BASE + 0x808)
36 
37 /* Calculation start registers */
38 #define RSA_MODEXP_START_REG          (DR_REG_RSA_BASE + 0x80c)
39 #define RSA_MOD_MULT_START_REG        (DR_REG_RSA_BASE + 0x810)
40 #define RSA_MULT_START_REG            (DR_REG_RSA_BASE + 0x814)
41 
42 /* Interrupt registers */
43 #define RSA_QUERY_INTERRUPT_REG       (DR_REG_RSA_BASE + 0x818)
44 #define RSA_CLEAR_INTERRUPT_REG       (DR_REG_RSA_BASE + 0x81C)
45 #define RSA_INTERRUPT_REG             (DR_REG_RSA_BASE + 0x82C)
46 
47 #define SHA_MODE_SHA1       0
48 #define SHA_MODE_SHA224     1
49 #define SHA_MODE_SHA256     2
50 #define SHA_MODE_SHA384     3
51 #define SHA_MODE_SHA512     4
52 #define SHA_MODE_SHA512_224 5
53 #define SHA_MODE_SHA512_256 6
54 #define SHA_MODE_SHA512_T   7
55 
56 /* SHA acceleration registers */
57 #define SHA_MODE_REG                  ((DR_REG_SHA_BASE) + 0x00)
58 #define SHA_T_STRING_REG              ((DR_REG_SHA_BASE) + 0x04)
59 #define SHA_T_LENGTH_REG              ((DR_REG_SHA_BASE) + 0x08)
60 #define SHA_BLOCK_NUM_REG             ((DR_REG_SHA_BASE) + 0x0C)
61 #define SHA_START_REG                 ((DR_REG_SHA_BASE) + 0x10)
62 #define SHA_CONTINUE_REG              ((DR_REG_SHA_BASE) + 0x14)
63 #define SHA_BUSY_REG                  ((DR_REG_SHA_BASE) + 0x18)
64 #define SHA_DMA_START_REG             ((DR_REG_SHA_BASE) + 0x1C)
65 #define SHA_DMA_CONTINUE_REG          ((DR_REG_SHA_BASE) + 0x20)
66 #define SHA_CLEAR_IRQ_REG             ((DR_REG_SHA_BASE) + 0x24)
67 #define SHA_INT_ENA_REG               ((DR_REG_SHA_BASE) + 0x28)
68 
69 #define SHA_H_BASE                    ((DR_REG_SHA_BASE) + 0x40)
70 #define SHA_TEXT_BASE                 ((DR_REG_SHA_BASE) + 0x80)
71 
72 /* AES acceleration registers */
73 #define AES_MODE_REG            ((DR_REG_AES_BASE) + 0x40)
74 #define AES_ENDIAN_REG          ((DR_REG_AES_BASE) + 0x44)
75 #define AES_TRIGGER_REG         ((DR_REG_AES_BASE) + 0x48)
76 #define AES_STATE_REG           ((DR_REG_AES_BASE) + 0x4c)
77 #define AES_DMA_ENABLE_REG      ((DR_REG_AES_BASE) + 0x90)
78 #define AES_BLOCK_MODE_REG      ((DR_REG_AES_BASE) + 0x94)
79 #define AES_BLOCK_NUM_REG       ((DR_REG_AES_BASE) + 0x98)
80 #define AES_INC_SEL_REG         ((DR_REG_AES_BASE) + 0x9C)
81 #define AES_AAD_BLOCK_NUM_REG   ((DR_REG_AES_BASE) + 0xA0)
82 #define AES_BIT_VALID_NUM_REG   ((DR_REG_AES_BASE) + 0xA4)
83 #define AES_CONTINUE_REG        ((DR_REG_AES_BASE) + 0xA8)
84 #define AES_INT_CLEAR_REG       ((DR_REG_AES_BASE) + 0xAC)
85 #define AES_INT_ENA_REG         ((DR_REG_AES_BASE) + 0xB0)
86 #define AES_DATE_REG            ((DR_REG_AES_BASE) + 0xB4)
87 #define AES_DMA_EXIT_REG        ((DR_REG_AES_BASE) + 0xB8)
88 
89 #define AES_DMA_ENABLE_REG      ((DR_REG_AES_BASE) + 0x90)
90 #define AES_BLOCK_MODE_REG      ((DR_REG_AES_BASE) + 0x94)
91 #define AES_BLOCK_NUM_REG       ((DR_REG_AES_BASE) + 0x98)
92 #define AES_INC_SEL_REG         ((DR_REG_AES_BASE) + 0x9C)
93 #define AES_AAD_BLOCK_NUM_REG   ((DR_REG_AES_BASE) + 0xA0)
94 #define AES_BIT_VALID_NUM_REG   ((DR_REG_AES_BASE) + 0xA4)
95 #define AES_CONTINUE_REG        ((DR_REG_AES_BASE) + 0xA8)
96 
97 #define AES_KEY_BASE            ((DR_REG_AES_BASE) + 0x00)
98 #define AES_TEXT_IN_BASE        ((DR_REG_AES_BASE) + 0x20)
99 #define AES_TEXT_OUT_BASE       ((DR_REG_AES_BASE) + 0x30)
100 #define AES_IV_BASE             ((DR_REG_AES_BASE) + 0x50)
101 #define AES_H_BASE              ((DR_REG_AES_BASE) + 0x60)
102 #define AES_J_BASE              ((DR_REG_AES_BASE) + 0x70)
103 #define AES_T_BASE              ((DR_REG_AES_BASE) + 0x80)
104 
105 #define AES_INT_CLR_REG         ((DR_REG_AES_BASE) + 0xAC)
106 #define AES_INT_ENA_REG         ((DR_REG_AES_BASE) + 0xB0)
107 #define AES_DATE_REG            ((DR_REG_AES_BASE) + 0xB4)
108 #define AES_DMA_EXIT_REG        ((DR_REG_AES_BASE) + 0xB8)
109 
110 /* AES_STATE_REG values */
111 #define AES_STATE_IDLE 0
112 #define AES_STATE_BUSY 1
113 #define AES_STATE_DONE 2
114 
115 
116 /* Crypto DMA */
117 #define CRYPTO_DMA_CONF0_REG             ((DR_REG_CRYPTO_DMA_BASE) + 0x00)
118 #define CRYPTO_DMA_INT_RAW_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x04)
119 #define CRYPTO_DMA_INT_ST_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x08)
120 #define CRYPTO_DMA_INT_ENA_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x0C)
121 #define CRYPTO_DMA_INT_CLR_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x10)
122 #define CRYPTO_DMA_OUT_STATUS_REG        ((DR_REG_CRYPTO_DMA_BASE) + 0x14)
123 #define CRYPTO_DMA_OUT_PUSH_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x18)
124 #define CRYPTO_DMA_IN_STATUS_REG         ((DR_REG_CRYPTO_DMA_BASE) + 0x1C)
125 #define CRYPTO_DMA_IN_POP_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x20)
126 #define CRYPTO_DMA_OUT_LINK_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x24)
127 #define CRYPTO_DMA_IN_LINK_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x28)
128 #define CRYPTO_DMA_CONF1_REG             ((DR_REG_CRYPTO_DMA_BASE) + 0x2C)
129 #define CRYPTO_DMA_STATE0_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x30)
130 #define CRYPTO_DMA_STATE1_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x34)
131 #define CRYPTO_DMA_OUT_EOF_DES_ADDR_REG  ((DR_REG_CRYPTO_DMA_BASE) + 0x38)
132 #define CRYPTO_DMA_IN_SUC_EOF_DES_ADDR   ((DR_REG_CRYPTO_DMA_BASE) + 0x3C)
133 #define CRYPTO_DMA_IN_ERR_EOF_DES_ADDR   ((DR_REG_CRYPTO_DMA_BASE) + 0x40)
134 #define CRYPTO_DMA_OUT_EOF_BFR_DES_ADDR  ((DR_REG_CRYPTO_DMA_BASE) + 0x44)
135 #define CRYPTO_DMA_AHB_TEST              ((DR_REG_CRYPTO_DMA_BASE) + 0x48)
136 #define CRYPTO_DMA_IN_DSCR_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x4C)
137 #define CRYPTO_DMA_IN_DSCR_BF0_REG       ((DR_REG_CRYPTO_DMA_BASE) + 0x50)
138 #define CRYPTO_DMA_IN_DSCR_BF1_REG       ((DR_REG_CRYPTO_DMA_BASE) + 0x54)
139 #define CRYPTO_DMA_OUT_DSCR_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x58)
140 #define CRYPTO_DMA_OUT_DSCR_BF0_REG      ((DR_REG_CRYPTO_DMA_BASE) + 0x5C)
141 #define CRYPTO_DMA_OUT_DSCR_BF1_REG      ((DR_REG_CRYPTO_DMA_BASE) + 0x60)
142 #define CRYPTO_DMA_AES_SHA_SELECT_REG    ((DR_REG_CRYPTO_DMA_BASE) + 0x64)
143 #define CRYPTO_DMA_DATE_REG              ((DR_REG_CRYPTO_DMA_BASE) + 0xFC)
144 
145 /* HMAC Module */
146 #define HMAC_SET_START_REG             ((DR_REG_HMAC_BASE) + 0x40)
147 #define HMAC_SET_PARA_PURPOSE_REG      ((DR_REG_HMAC_BASE) + 0x44)
148 #define HMAC_SET_PARA_KEY_REG          ((DR_REG_HMAC_BASE) + 0x48)
149 #define HMAC_SET_PARA_FINISH_REG       ((DR_REG_HMAC_BASE) + 0x4c)
150 #define HMAC_SET_MESSAGE_ONE_REG       ((DR_REG_HMAC_BASE) + 0x50)
151 #define HMAC_SET_MESSAGE_ING_REG       ((DR_REG_HMAC_BASE) + 0x54)
152 #define HMAC_SET_MESSAGE_END_REG       ((DR_REG_HMAC_BASE) + 0x58)
153 #define HMAC_SET_RESULT_FINISH_REG     ((DR_REG_HMAC_BASE) + 0x5c)
154 #define HMAC_SET_INVALIDATE_JTAG_REG   ((DR_REG_HMAC_BASE) + 0x60)
155 #define HMAC_SET_INVALIDATE_DS_REG     ((DR_REG_HMAC_BASE) + 0x64)
156 #define HMAC_QUERY_ERROR_REG           ((DR_REG_HMAC_BASE) + 0x68)
157 #define HMAC_QUERY_BUSY_REG            ((DR_REG_HMAC_BASE) + 0x6c)
158 
159 #define HMAC_WDATA_BASE                ((DR_REG_HMAC_BASE) + 0x80)
160 #define HMAC_RDATA_BASE                ((DR_REG_HMAC_BASE) + 0xC0)
161 #define HMAC_SET_MESSAGE_PAD_REG       ((DR_REG_HMAC_BASE) + 0xF0)
162 #define HMAC_ONE_BLOCK_REG             ((DR_REG_HMAC_BASE) + 0xF4)
163 
164 /* AES-XTS registers */
165 #define AES_XTS_PLAIN_BASE        ((DR_REG_AES_BASE) + 0x100)
166 #define AES_XTS_SIZE_REG          ((DR_REG_AES_BASE) + 0x140)
167 #define AES_XTS_DESTINATION_REG   ((DR_REG_AES_BASE) + 0x144)
168 #define AES_XTS_PHYSICAL_ADDR_REG ((DR_REG_AES_BASE) + 0x148)
169 
170 #define AES_XTS_TRIGGER_REG       ((DR_REG_AES_BASE) + 0x14C)
171 #define AES_XTS_RELEASE_REG       ((DR_REG_AES_BASE) + 0x150)
172 #define AES_XTS_DESTROY_REG       ((DR_REG_AES_BASE) + 0x154)
173 #define AES_XTS_STATE_REG         ((DR_REG_AES_BASE) + 0x158)
174 
175 /* Digital Signature registers*/
176 #define DS_C_BASE                 ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0x000 )
177 #define DS_IV_BASE                ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0x630 )
178 #define DS_X_BASE                 ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0x800 )
179 #define DS_Z_BASE                 ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xA00 )
180 
181 #define DS_SET_START_REG          ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE00)
182 #define DS_SET_ME_REG             ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE04)
183 #define DS_SET_FINISH_REG         ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE08)
184 
185 #define DS_QUERY_BUSY_REG         ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE0C)
186 #define DS_QUERY_KEY_WRONG_REG    ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE10)
187 #define DS_QUERY_CHECK_REG        ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE14)
188 
189 #define DS_QUERY_CHECK_INVALID_DIGEST  (1<<0)
190 #define DS_QUERY_CHECK_INVALID_PADDING (1<<1)
191 
192 #define DS_DATE_REG               ((DR_REG_DIGITAL_SIGNATURE_BASE) + 0xE20)
193 
194 /* Crypto DMA */
195 #define CRYPTO_DMA_CONF0_REG             ((DR_REG_CRYPTO_DMA_BASE) + 0x00)
196 #define CRYPTO_DMA_INT_RAW_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x04)
197 #define CRYPTO_DMA_INT_ST_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x08)
198 #define CRYPTO_DMA_INT_ENA_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x0C)
199 #define CRYPTO_DMA_INT_CLR_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x10)
200 #define CRYPTO_DMA_OUT_STATUS_REG        ((DR_REG_CRYPTO_DMA_BASE) + 0x14)
201 #define CRYPTO_DMA_OUT_PUSH_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x18)
202 #define CRYPTO_DMA_IN_STATUS_REG         ((DR_REG_CRYPTO_DMA_BASE) + 0x1C)
203 #define CRYPTO_DMA_IN_POP_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x20)
204 #define CRYPTO_DMA_OUT_LINK_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x24)
205 #define CRYPTO_DMA_IN_LINK_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x28)
206 #define CRYPTO_DMA_CONF1_REG             ((DR_REG_CRYPTO_DMA_BASE) + 0x2C)
207 #define CRYPTO_DMA_STATE0_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x30)
208 #define CRYPTO_DMA_STATE1_REG            ((DR_REG_CRYPTO_DMA_BASE) + 0x34)
209 #define CRYPTO_DMA_OUT_EOF_DES_ADDR_REG  ((DR_REG_CRYPTO_DMA_BASE) + 0x38)
210 #define CRYPTO_DMA_IN_SUC_EOF_DES_ADDR   ((DR_REG_CRYPTO_DMA_BASE) + 0x3C)
211 #define CRYPTO_DMA_IN_ERR_EOF_DES_ADDR   ((DR_REG_CRYPTO_DMA_BASE) + 0x40)
212 #define CRYPTO_DMA_OUT_EOF_BFR_DES_ADDR  ((DR_REG_CRYPTO_DMA_BASE) + 0x44)
213 #define CRYPTO_DMA_AHB_TEST              ((DR_REG_CRYPTO_DMA_BASE) + 0x48)
214 #define CRYPTO_DMA_IN_DSCR_REG           ((DR_REG_CRYPTO_DMA_BASE) + 0x4C)
215 #define CRYPTO_DMA_IN_DSCR_BF0_REG       ((DR_REG_CRYPTO_DMA_BASE) + 0x50)
216 #define CRYPTO_DMA_IN_DSCR_BF1_REG       ((DR_REG_CRYPTO_DMA_BASE) + 0x54)
217 #define CRYPTO_DMA_OUT_DSCR_REG          ((DR_REG_CRYPTO_DMA_BASE) + 0x58)
218 #define CRYPTO_DMA_OUT_DSCR_BF0_REG      ((DR_REG_CRYPTO_DMA_BASE) + 0x5C)
219 #define CRYPTO_DMA_OUT_DSCR_BF1_REG      ((DR_REG_CRYPTO_DMA_BASE) + 0x60)
220 #define CRYPTO_DMA_AES_SHA_SELECT_REG    ((DR_REG_CRYPTO_DMA_BASE) + 0x64)
221 #define CRYPTO_DMA_DATE_REG              ((DR_REG_CRYPTO_DMA_BASE) + 0xFC)
222 
223 #endif
224