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