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