rk_v1crypto.h revision 1.1
11.1Sriastrad/*	$NetBSD: rk_v1crypto.h,v 1.1 2020/05/17 19:57:25 riastradh Exp $	*/
21.1Sriastrad
31.1Sriastrad/*-
41.1Sriastrad * Copyright (c) 2020 The NetBSD Foundation, Inc.
51.1Sriastrad * All rights reserved.
61.1Sriastrad *
71.1Sriastrad * This code is derived from software contributed to The NetBSD Foundation
81.1Sriastrad * by Taylor R. Campbell.
91.1Sriastrad *
101.1Sriastrad * Redistribution and use in source and binary forms, with or without
111.1Sriastrad * modification, are permitted provided that the following conditions
121.1Sriastrad * are met:
131.1Sriastrad * 1. Redistributions of source code must retain the above copyright
141.1Sriastrad *    notice, this list of conditions and the following disclaimer.
151.1Sriastrad * 2. Redistributions in binary form must reproduce the above copyright
161.1Sriastrad *    notice, this list of conditions and the following disclaimer in the
171.1Sriastrad *    documentation and/or other materials provided with the distribution.
181.1Sriastrad *
191.1Sriastrad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
201.1Sriastrad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
211.1Sriastrad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221.1Sriastrad * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
231.1Sriastrad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
241.1Sriastrad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
251.1Sriastrad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
261.1Sriastrad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
271.1Sriastrad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
281.1Sriastrad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
291.1Sriastrad * POSSIBILITY OF SUCH DAMAGE.
301.1Sriastrad */
311.1Sriastrad
321.1Sriastrad#ifndef	_ARM_ROCKCHIP_RK_V1CRYPTO_H
331.1Sriastrad#define	_ARM_ROCKCHIP_RK_V1CRYPTO_H
341.1Sriastrad
351.1Sriastrad#define	RK_V1CRYPTO_INTSTS	0x0000 /* Interrupt Status */
361.1Sriastrad#define	RK_V1CRYPTO_INTSTS_PKA_DONE	__BIT(5)
371.1Sriastrad#define	RK_V1CRYPTO_INTSTS_HASH_DONE	__BIT(4)
381.1Sriastrad#define	RK_V1CRYPTO_INTSTS_HRDMA_ERR	__BIT(3)
391.1Sriastrad#define	RK_V1CRYPTO_INTSTS_HRDMA_DONE	__BIT(2)
401.1Sriastrad#define	RK_V1CRYPTO_INTSTS_BCDMA_ERR	__BIT(1)
411.1Sriastrad#define	RK_V1CRYPTO_INTSTS_BCDMA_DONE	__BIT(0)
421.1Sriastrad
431.1Sriastrad#define	RK_V1CRYPTO_INTENA	0x0004 /* Interrupt Enable */
441.1Sriastrad#define	RK_V1CRYPTO_INTENA_PKA_DONE	__BIT(5)
451.1Sriastrad#define	RK_V1CRYPTO_INTENA_HASH_DONE	__BIT(4)
461.1Sriastrad#define	RK_V1CRYPTO_INTENA_HRDMA_ERR	__BIT(3)
471.1Sriastrad#define	RK_V1CRYPTO_INTENA_HRDMA_DONE	__BIT(2)
481.1Sriastrad#define	RK_V1CRYPTO_INTENA_BCDMA_ERR	__BIT(1)
491.1Sriastrad#define	RK_V1CRYPTO_INTENA_BCDMA_DONE	__BIT(0)
501.1Sriastrad
511.1Sriastrad#define	RK_V1CRYPTO_CTRL	0x0008 /* Control */
521.1Sriastrad#define	RK_V1CRYPTO_CTRL_MASK		__BITS(31,16)
531.1Sriastrad#define	RK_V1CRYPTO_CTRL_TRNG_FLUSH	__BIT(9)
541.1Sriastrad#define	RK_V1CRYPTO_CTRL_TRNG_START	__BIT(8)
551.1Sriastrad#define	RK_V1CRYPTO_CTRL_PKA_FLUSH	__BIT(7)
561.1Sriastrad#define	RK_V1CRYPTO_CTRL_HASH_FLUSH	__BIT(6)
571.1Sriastrad#define	RK_V1CRYPTO_CTRL_BLOCK_FLUSH	__BIT(5)
581.1Sriastrad#define	RK_V1CRYPTO_CTRL_PKA_START	__BIT(4)
591.1Sriastrad#define	RK_V1CRYPTO_CTRL_HASH_START	__BIT(3)
601.1Sriastrad#define	RK_V1CRYPTO_CTRL_BLOCK_START	__BIT(2)
611.1Sriastrad#define	RK_V1CRYPTO_CTRL_TDES_START	__BIT(1)
621.1Sriastrad#define	RK_V1CRYPTO_CTRL_AES_START	__BIT(0)
631.1Sriastrad
641.1Sriastrad#define	RK_V1CRYPTO_CONF	0x000c /* ? */
651.1Sriastrad#define	RK_V1CRYPTO_CONF_HR_ADDR_MODE	__BIT(8)
661.1Sriastrad#define	RK_V1CRYPTO_CONF_BT_ADDR_MODE	__BIT(7)
671.1Sriastrad#define	RK_V1CRYPTO_CONF_BR_ADDR_MODE	__BIT(6)
681.1Sriastrad#define	RK_V1CRYPTO_CONF_MODE_FIX		1
691.1Sriastrad#define	RK_V1CRYPTO_CONF_MODE_INCR		0
701.1Sriastrad#define	RK_V1CRYPTO_CONF_BYTESWAP_HRFIFO __BIT(5)
711.1Sriastrad#define	RK_V1CRYPTO_CONF_BYTESWAP_BTFIFO __BIT(4)
721.1Sriastrad#define	RK_V1CRYPTO_CONF_BYTESWAP_BRFIFO __BIT(3)
731.1Sriastrad#define	RK_V1CRYPTO_CONF_DESSEL		__BIT(2)
741.1Sriastrad#define	RK_V1CRYPTO_CONF_DESSEL_AES		0
751.1Sriastrad#define	RK_V1CRYPTO_CONF_DESSEL_DES		1 /* 3DES? */
761.1Sriastrad#define	RK_V1CRYPTO_CONF_HASHINSEL	__BITS(1,0)
771.1Sriastrad#define	RK_V1CRYPTO_CONF_HASHINSEL_INDEP	0
781.1Sriastrad#define	RK_V1CRYPTO_CONF_HASHINSEL_BLKIN	1
791.1Sriastrad#define	RK_V1CRYPTO_CONF_HASHINSEL_BLKOUT	2
801.1Sriastrad
811.1Sriastrad#define	RK_V1CRYPTO_BRDMAS	0x0010 /* Block Rx DMA Start */
821.1Sriastrad#define	RK_V1CRYPTO_BTDMAS	0x0014 /* Block Tx DMA Start */
831.1Sriastrad#define	RK_V1CRYPTO_BRDMAL	0x0018 /* Block Rx DMA Length */
841.1Sriastrad#define	RK_V1CRYPTO_BTDMAL	0x0020 /* Block Tx DMA Length */
851.1Sriastrad#define	RK_V1CRYPTO_HRDMAS	0x001c /* Hash Rx DMA Start */
861.1Sriastrad#define	RK_V1CRYPTO_HRDMAL	0x0020 /* Hash Rx DMA Length */
871.1Sriastrad
881.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL	0x0080 /* AES Control */
891.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_CNT __BIT(11)
901.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_KEY __BIT(10)
911.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_IV __BIT(9)
921.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_DO __BIT(8)
931.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_BYTESWAP_DI __BIT(7)
941.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_KEYCHANGE	__BIT(6)
951.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_MODE	__BITS(5,4)
961.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_MODE_ECB		0
971.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_MODE_CBC		1
981.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_MODE_CTR		2
991.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_KEYSIZE	__BITS(3,2)
1001.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_128	0
1011.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_192	1
1021.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_KEYSIZE_256	2
1031.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_FIFOMODE	__BIT(1)
1041.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_DIR	__BIT(0)
1051.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_DIR_ENC		0
1061.1Sriastrad#define	RK_V1CRYPTO_AES_CTRL_DIR_DEC		1
1071.1Sriastrad
1081.1Sriastrad#define	RK_V1CRYPTO_AES_STS	0x0084 /* AES Status */
1091.1Sriastrad#define	RK_V1CRYPTO_AES_STS_DONE	__BIT(0)
1101.1Sriastrad
1111.1Sriastrad#define	RK_V1CRYPTO_AES_DIN(n)  (0x0088 + 4*(n)) /* AES Input */
1121.1Sriastrad#define	RK_V1CRYPTO_AES_DOUT(n) (0x0098 + 4*(n)) /* AES Output */
1131.1Sriastrad#define	RK_V1CRYPTO_AES_IV(n)   (0x00a8 + 4*(n)) /* AES IV */
1141.1Sriastrad#define	RK_V1CRYPTO_AES_KEY(n)  (0x00b8 + 4*(n)) /* AES Key */
1151.1Sriastrad#define	RK_V1CRYPTO_AES_CNT(n)  (0x00d8 + 4*(n)) /* AES Input Counter */
1161.1Sriastrad
1171.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL	0x0100 /* 3DES Control */
1181.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_KEY __BIT(8)
1191.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_IV __BIT(7)
1201.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_DO __BIT(6)
1211.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_BYTESWAP_DI __BIT(5)
1221.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_MODE	__BIT(4)
1231.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_MODE_ECB		0
1241.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_MODE_CBC		1
1251.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_KEYMODE	__BIT(3)
1261.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_KEYMODE_EDE	0
1271.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_KEYMODE_EEE	1
1281.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_SELECT	__BIT(2)
1291.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_SELECT_DES	0
1301.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_SELECT_TDES	1
1311.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_FIFOMODE	__BIT(1)
1321.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_DIR	__BIT(0)
1331.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_DIR_ENC		0
1341.1Sriastrad#define	RK_V1CRYPTO_TDES_CTRL_DIR_DEC		1
1351.1Sriastrad
1361.1Sriastrad#define	RK_V1CRYPTO_TDES_STS	0x0104 /* 3DES Status */
1371.1Sriastrad#define	RK_V1CRYPTO_TDES_STS_DONE	__BIT(0)
1381.1Sriastrad
1391.1Sriastrad#define	RK_V1CRYPTO_TDES_DIN(n) (0x0108 + 4*(n)) /* 3DES Input */
1401.1Sriastrad#define	RK_V1CRYPTO_TDES_DOUT(n)(0x0110 + 4*(n)) /* 3DES Output */
1411.1Sriastrad#define	RK_V1CRYPTO_TDES_IV(n)  (0x0118 + 4*(n)) /* 3DES IV */
1421.1Sriastrad#define	RK_V1CRYPTO_TDES_KEY(n) (0x0120 + 4*(n)) /* 3DES Key(1,2,3) */
1431.1Sriastrad
1441.1Sriastrad#define	RK_V1CRYPTO_HASH_CTRL	0x0180 /* Hash Control */
1451.1Sriastrad#define	RK_V1CRYPTO_HASH_SWAP_DO	__BIT(3)
1461.1Sriastrad#define	RK_V1CRYPTO_HASH_SWAP_DI	__BIT(2)
1471.1Sriastrad#define	RK_V1CRYPTO_HASH_SELECT		__BITS(1,0)
1481.1Sriastrad#define	RK_V1CRYPTO_HASH_SELECT_SHA1		0
1491.1Sriastrad#define	RK_V1CRYPTO_HASH_SELECT_MD5		1
1501.1Sriastrad#define	RK_V1CRYPTO_HASH_SELECT_SHA256		2
1511.1Sriastrad#define	RK_V1CRYPTO_HASH_SELECT_PRNG		3 /* ??? */
1521.1Sriastrad
1531.1Sriastrad#define	RK_V1CRYPTO_HASH_STS	0x0184 /* Hash Status */
1541.1Sriastrad#define	RK_V1CRYPTO_HASH_STS_DONE	__BIT(0)
1551.1Sriastrad
1561.1Sriastrad#define	RK_V1CRYPTO_HASH_MSG_LEN	0x0188 /* Hash Message Len */
1571.1Sriastrad#define	RK_V1CRYPTO_HASH_DOUT(n)(0x018c + 4*(n)) /* Hash Result */
1581.1Sriastrad#define	RK_V1CRYPTO_HASH_SEED(n)(0x01ac + 4*(n)) /* HMAC/PRNG key */
1591.1Sriastrad
1601.1Sriastrad#define	RK_V1CRYPTO_TRNG_CTRL	0x0200 /* TRNG Control */
1611.1Sriastrad#define	RK_V1CRYPTO_TRNG_CTRL_OSC_ENABLE __BIT(16)
1621.1Sriastrad#define	RK_V1CRYPTO_TRNG_CTRL_CYCLES	__BITS(15,0)
1631.1Sriastrad
1641.1Sriastrad#define	RK_V1CRYPTO_TRNG_DOUT(n)(0x0204 + 4*(n)) /* TRNG Output */
1651.1Sriastrad#define	RK_V1CRYPTO_TRNG_NOUT		8	/* up to 8 32-bit */
1661.1Sriastrad
1671.1Sriastrad#define	RK_V1CRYPTO_PKA_CTRL	0x0280 /* PKA Control (RSA?) */
1681.1Sriastrad#define	RK_V1CRYPTO_PKA_CTRL_SIZE	__BITS(1,0)
1691.1Sriastrad#define	RK_V1CRYPTO_PKA_CTRL_SIZE_512		0
1701.1Sriastrad#define	RK_V1CRYPTO_PKA_CTRL_SIZE_1024		1
1711.1Sriastrad#define	RK_V1CRYPTO_PKA_CTRL_SIZE_2048		2
1721.1Sriastrad
1731.1Sriastrad#define	RK_V1CRYPTO_M		0x0400 /* RSA `message' */
1741.1Sriastrad#define	RK_V1CRYPTO_C		0x0500 /* 2^(2 ceil(lg n) + 2) mod n */
1751.1Sriastrad#define	RK_V1CRYPTO_N		0x0600 /* RSA modulus? */
1761.1Sriastrad#define	RK_V1CRYPTO_E		0x0700 /* RSA exponent? */
1771.1Sriastrad
1781.1Sriastrad#endif	/* _ARM_ROCKCHIP_RK_V1CRYPTO_H */
179