xref: /linux/drivers/crypto/inside-secure/eip93/eip93-regs.h (revision bbfd5594756011167b8f8de9a00e0c946afda1e6)
1*9739f5f9SChristian Marangi /* SPDX-License-Identifier: GPL-2.0 */
2*9739f5f9SChristian Marangi /*
3*9739f5f9SChristian Marangi  * Copyright (C) 2019 - 2021
4*9739f5f9SChristian Marangi  *
5*9739f5f9SChristian Marangi  * Richard van Schagen <vschagen@icloud.com>
6*9739f5f9SChristian Marangi  * Christian Marangi <ansuelsmth@gmail.com
7*9739f5f9SChristian Marangi  */
8*9739f5f9SChristian Marangi #ifndef REG_EIP93_H
9*9739f5f9SChristian Marangi #define REG_EIP93_H
10*9739f5f9SChristian Marangi 
11*9739f5f9SChristian Marangi #define EIP93_REG_PE_CTRL_STAT			0x0
12*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_PAD_CTRL_STAT	GENMASK(31, 24)
13*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_CODE		GENMASK(23, 20)
14*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_PROCESSING	0x8
15*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_BLOCK_SIZE_ERR 0x7
16*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_INVALID_PK_LENGTH 0x6
17*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_ZERO_LENGTH	0x5
18*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_SPI		0x4
19*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_INVALID_CRYPTO_ALGO 0x3
20*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_INVALID_CRYPTO_OP 0x2
21*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_DESC_OWNER	0x1
22*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR_BUS		0x0
23*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_EXT_ERR		BIT(19)
24*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_SEQNUM_ERR		BIT(18)
25*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_PAD_ERR		BIT(17)
26*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_AUTH_ERR		BIT(16)
27*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_PAD_VALUE		GENMASK(15, 8)
28*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_PRNG_MODE		GENMASK(7, 6)
29*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_HASH_FINAL		BIT(4)
30*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_INIT_ARC4		BIT(3)
31*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_READY_DES_TRING_OWN	GENMASK(1, 0)
32*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_PE_READY		0x2
33*9739f5f9SChristian Marangi #define   EIP93_PE_CTRL_HOST_READY		0x1
34*9739f5f9SChristian Marangi #define EIP93_REG_PE_SOURCE_ADDR		0x4
35*9739f5f9SChristian Marangi #define EIP93_REG_PE_DEST_ADDR			0x8
36*9739f5f9SChristian Marangi #define EIP93_REG_PE_SA_ADDR			0xc
37*9739f5f9SChristian Marangi #define EIP93_REG_PE_ADDR			0x10 /* STATE_ADDR */
38*9739f5f9SChristian Marangi /*
39*9739f5f9SChristian Marangi  * Special implementation for user ID
40*9739f5f9SChristian Marangi  * user_id in eip93_descriptor is used to identify the
41*9739f5f9SChristian Marangi  * descriptor and is opaque and can be used by the driver
42*9739f5f9SChristian Marangi  * in custom way.
43*9739f5f9SChristian Marangi  *
44*9739f5f9SChristian Marangi  * The usage of this should be to put an address to the crypto
45*9739f5f9SChristian Marangi  * request struct from the kernel but this can't work in 64bit
46*9739f5f9SChristian Marangi  * world.
47*9739f5f9SChristian Marangi  *
48*9739f5f9SChristian Marangi  * Also it's required to put some flags to identify the last
49*9739f5f9SChristian Marangi  * descriptor.
50*9739f5f9SChristian Marangi  *
51*9739f5f9SChristian Marangi  * To handle this, split the u32 in 2 part:
52*9739f5f9SChristian Marangi  * - 31:16 descriptor flags
53*9739f5f9SChristian Marangi  * - 15:0 IDR to connect the crypto request address
54*9739f5f9SChristian Marangi  */
55*9739f5f9SChristian Marangi #define EIP93_REG_PE_USER_ID			0x18
56*9739f5f9SChristian Marangi #define   EIP93_PE_USER_ID_DESC_FLAGS		GENMASK(31, 16)
57*9739f5f9SChristian Marangi #define   EIP93_PE_USER_ID_CRYPTO_IDR		GENMASK(15, 0)
58*9739f5f9SChristian Marangi #define EIP93_REG_PE_LENGTH			0x1c
59*9739f5f9SChristian Marangi #define   EIP93_PE_LENGTH_BYPASS		GENMASK(31, 24)
60*9739f5f9SChristian Marangi #define   EIP93_PE_LENGTH_HOST_PE_READY		GENMASK(23, 22)
61*9739f5f9SChristian Marangi #define   EIP93_PE_LENGTH_PE_READY		0x2
62*9739f5f9SChristian Marangi #define   EIP93_PE_LENGTH_HOST_READY		0x1
63*9739f5f9SChristian Marangi #define   EIP93_PE_LENGTH_LENGTH		GENMASK(19, 0)
64*9739f5f9SChristian Marangi 
65*9739f5f9SChristian Marangi /* PACKET ENGINE RING configuration registers */
66*9739f5f9SChristian Marangi #define EIP93_REG_PE_CDR_BASE			0x80
67*9739f5f9SChristian Marangi #define EIP93_REG_PE_RDR_BASE			0x84
68*9739f5f9SChristian Marangi #define EIP93_REG_PE_RING_CONFIG		0x88
69*9739f5f9SChristian Marangi #define   EIP93_PE_EN_EXT_TRIG			BIT(31)
70*9739f5f9SChristian Marangi /* Absent in later revision of eip93 */
71*9739f5f9SChristian Marangi /* #define   EIP93_PE_RING_OFFSET		GENMASK(23, 15) */
72*9739f5f9SChristian Marangi #define   EIP93_PE_RING_SIZE			GENMASK(9, 0)
73*9739f5f9SChristian Marangi #define EIP93_REG_PE_RING_THRESH		0x8c
74*9739f5f9SChristian Marangi #define   EIPR93_PE_TIMEROUT_EN			BIT(31)
75*9739f5f9SChristian Marangi #define   EIPR93_PE_RD_TIMEOUT			GENMASK(29, 26)
76*9739f5f9SChristian Marangi #define   EIPR93_PE_RDR_THRESH			GENMASK(25, 16)
77*9739f5f9SChristian Marangi #define   EIPR93_PE_CDR_THRESH			GENMASK(9, 0)
78*9739f5f9SChristian Marangi #define EIP93_REG_PE_CD_COUNT			0x90
79*9739f5f9SChristian Marangi #define   EIP93_PE_CD_COUNT			GENMASK(10, 0)
80*9739f5f9SChristian Marangi /*
81*9739f5f9SChristian Marangi  * In the same register, writing a value in GENMASK(7, 0) will
82*9739f5f9SChristian Marangi  * increment the descriptor count and start DMA action.
83*9739f5f9SChristian Marangi  */
84*9739f5f9SChristian Marangi #define   EIP93_PE_CD_COUNT_INCR		GENMASK(7, 0)
85*9739f5f9SChristian Marangi #define EIP93_REG_PE_RD_COUNT			0x94
86*9739f5f9SChristian Marangi #define   EIP93_PE_RD_COUNT			GENMASK(10, 0)
87*9739f5f9SChristian Marangi /*
88*9739f5f9SChristian Marangi  * In the same register, writing a value in GENMASK(7, 0) will
89*9739f5f9SChristian Marangi  * increment the descriptor count and start DMA action.
90*9739f5f9SChristian Marangi  */
91*9739f5f9SChristian Marangi #define   EIP93_PE_RD_COUNT_INCR		GENMASK(7, 0)
92*9739f5f9SChristian Marangi #define EIP93_REG_PE_RING_RW_PNTR		0x98 /* RING_PNTR */
93*9739f5f9SChristian Marangi 
94*9739f5f9SChristian Marangi /* PACKET ENGINE  configuration registers */
95*9739f5f9SChristian Marangi #define EIP93_REG_PE_CONFIG			0x100
96*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_SWAP_TARGET		BIT(20)
97*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_SWAP_DATA		BIT(18)
98*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_SWAP_SA		BIT(17)
99*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_SWAP_CDRD		BIT(16)
100*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_EN_CDR_UPDATE		BIT(10)
101*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_PE_MODE		GENMASK(9, 8)
102*9739f5f9SChristian Marangi #define   EIP93_PE_TARGET_AUTO_RING_MODE	FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x3)
103*9739f5f9SChristian Marangi #define   EIP93_PE_TARGET_COMMAND_NO_RDR_MODE	FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x2)
104*9739f5f9SChristian Marangi #define   EIP93_PE_TARGET_COMMAND_WITH_RDR_MODE	FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x1)
105*9739f5f9SChristian Marangi #define   EIP93_PE_DIRECT_HOST_MODE		FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x0)
106*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_RST_RING		BIT(2)
107*9739f5f9SChristian Marangi #define   EIP93_PE_CONFIG_RST_PE		BIT(0)
108*9739f5f9SChristian Marangi #define EIP93_REG_PE_STATUS			0x104
109*9739f5f9SChristian Marangi #define EIP93_REG_PE_BUF_THRESH			0x10c
110*9739f5f9SChristian Marangi #define   EIP93_PE_OUTBUF_THRESH		GENMASK(23, 16)
111*9739f5f9SChristian Marangi #define   EIP93_PE_INBUF_THRESH			GENMASK(7, 0)
112*9739f5f9SChristian Marangi #define EIP93_REG_PE_INBUF_COUNT		0x100
113*9739f5f9SChristian Marangi #define EIP93_REG_PE_OUTBUF_COUNT		0x114
114*9739f5f9SChristian Marangi #define EIP93_REG_PE_BUF_RW_PNTR		0x118 /* BUF_PNTR */
115*9739f5f9SChristian Marangi 
116*9739f5f9SChristian Marangi /* PACKET ENGINE endian config */
117*9739f5f9SChristian Marangi #define EIP93_REG_PE_ENDIAN_CONFIG		0x1cc
118*9739f5f9SChristian Marangi #define EIP93_AIROHA_REG_PE_ENDIAN_CONFIG	0x1d0
119*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_TARGET_BYTE_SWAP	GENMASK(23, 16)
120*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_MASTER_BYTE_SWAP	GENMASK(7, 0)
121*9739f5f9SChristian Marangi /*
122*9739f5f9SChristian Marangi  * Byte goes 2 and 2 and are referenced by ID
123*9739f5f9SChristian Marangi  * Split GENMASK(7, 0) in 4 part, one for each byte.
124*9739f5f9SChristian Marangi  * Example LITTLE ENDIAN: Example BIG ENDIAN
125*9739f5f9SChristian Marangi  * GENMASK(7, 6) 0x3	  GENMASK(7, 6) 0x0
126*9739f5f9SChristian Marangi  * GENMASK(5, 4) 0x2	  GENMASK(7, 6) 0x1
127*9739f5f9SChristian Marangi  * GENMASK(3, 2) 0x1	  GENMASK(3, 2) 0x2
128*9739f5f9SChristian Marangi  * GENMASK(1, 0) 0x0	  GENMASK(1, 0) 0x3
129*9739f5f9SChristian Marangi  */
130*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_BYTE0			0x0
131*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_BYTE1			0x1
132*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_BYTE2			0x2
133*9739f5f9SChristian Marangi #define   EIP93_PE_ENDIAN_BYTE3			0x3
134*9739f5f9SChristian Marangi 
135*9739f5f9SChristian Marangi /* EIP93 CLOCK control registers */
136*9739f5f9SChristian Marangi #define EIP93_REG_PE_CLOCK_CTRL			0x1e8
137*9739f5f9SChristian Marangi #define   EIP93_PE_CLOCK_EN_HASH_CLK		BIT(4)
138*9739f5f9SChristian Marangi #define   EIP93_PE_CLOCK_EN_ARC4_CLK		BIT(3)
139*9739f5f9SChristian Marangi #define   EIP93_PE_CLOCK_EN_AES_CLK		BIT(2)
140*9739f5f9SChristian Marangi #define   EIP93_PE_CLOCK_EN_DES_CLK		BIT(1)
141*9739f5f9SChristian Marangi #define   EIP93_PE_CLOCK_EN_PE_CLK		BIT(0)
142*9739f5f9SChristian Marangi 
143*9739f5f9SChristian Marangi /* EIP93 Device Option and Revision Register */
144*9739f5f9SChristian Marangi #define EIP93_REG_PE_OPTION_1			0x1f4
145*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_MAC_KEY256		BIT(31)
146*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_MAC_KEY192		BIT(30)
147*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_MAC_KEY128		BIT(29)
148*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES_CBC_MAC		BIT(28)
149*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES_XCBX		BIT(23)
150*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_SHA_256		BIT(19)
151*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_SHA_224		BIT(18)
152*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_SHA_1			BIT(17)
153*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_MD5			BIT(16)
154*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES_KEY256		BIT(15)
155*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES_KEY192		BIT(14)
156*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES_KEY128		BIT(13)
157*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_AES			BIT(2)
158*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_ARC4			BIT(1)
159*9739f5f9SChristian Marangi #define   EIP93_PE_OPTION_TDES			BIT(0) /* DES and TDES */
160*9739f5f9SChristian Marangi #define EIP93_REG_PE_OPTION_0			0x1f8
161*9739f5f9SChristian Marangi #define EIP93_REG_PE_REVISION			0x1fc
162*9739f5f9SChristian Marangi #define   EIP93_PE_REVISION_MAJ_HW_REV		GENMASK(27, 24)
163*9739f5f9SChristian Marangi #define   EIP93_PE_REVISION_MIN_HW_REV		GENMASK(23, 20)
164*9739f5f9SChristian Marangi #define   EIP93_PE_REVISION_HW_PATCH		GENMASK(19, 16)
165*9739f5f9SChristian Marangi #define   EIP93_PE_REVISION_EIP_NO		GENMASK(7, 0)
166*9739f5f9SChristian Marangi 
167*9739f5f9SChristian Marangi /* EIP93 Interrupt Control Register */
168*9739f5f9SChristian Marangi #define EIP93_REG_INT_UNMASK_STAT		0x200
169*9739f5f9SChristian Marangi #define EIP93_REG_INT_MASK_STAT			0x204
170*9739f5f9SChristian Marangi #define EIP93_REG_INT_CLR			0x204
171*9739f5f9SChristian Marangi #define EIP93_REG_INT_MASK			0x208 /* INT_EN */
172*9739f5f9SChristian Marangi /* Each int reg have the same bitmap */
173*9739f5f9SChristian Marangi #define   EIP93_INT_INTERFACE_ERR		BIT(18)
174*9739f5f9SChristian Marangi #define   EIP93_INT_RPOC_ERR			BIT(17)
175*9739f5f9SChristian Marangi #define   EIP93_INT_PE_RING_ERR			BIT(16)
176*9739f5f9SChristian Marangi #define   EIP93_INT_HALT			BIT(15)
177*9739f5f9SChristian Marangi #define   EIP93_INT_OUTBUF_THRESH		BIT(11)
178*9739f5f9SChristian Marangi #define   EIP93_INT_INBUF_THRESH		BIT(10)
179*9739f5f9SChristian Marangi #define   EIP93_INT_OPERATION_DONE		BIT(9)
180*9739f5f9SChristian Marangi #define   EIP93_INT_RDR_THRESH			BIT(1)
181*9739f5f9SChristian Marangi #define   EIP93_INT_CDR_THRESH			BIT(0)
182*9739f5f9SChristian Marangi #define   EIP93_INT_ALL				(EIP93_INT_INTERFACE_ERR | \
183*9739f5f9SChristian Marangi 						 EIP93_INT_RPOC_ERR | \
184*9739f5f9SChristian Marangi 						 EIP93_INT_PE_RING_ERR | \
185*9739f5f9SChristian Marangi 						 EIP93_INT_HALT | \
186*9739f5f9SChristian Marangi 						 EIP93_INT_OUTBUF_THRESH | \
187*9739f5f9SChristian Marangi 						 EIP93_INT_INBUF_THRESH | \
188*9739f5f9SChristian Marangi 						 EIP93_INT_OPERATION_DONE | \
189*9739f5f9SChristian Marangi 						 EIP93_INT_RDR_THRESH | \
190*9739f5f9SChristian Marangi 						 EIP93_INT_CDR_THRESH)
191*9739f5f9SChristian Marangi 
192*9739f5f9SChristian Marangi #define EIP93_REG_INT_CFG			0x20c
193*9739f5f9SChristian Marangi #define   EIP93_INT_TYPE_PULSE			BIT(0)
194*9739f5f9SChristian Marangi #define EIP93_REG_MASK_ENABLE			0x210
195*9739f5f9SChristian Marangi #define EIP93_REG_MASK_DISABLE			0x214
196*9739f5f9SChristian Marangi 
197*9739f5f9SChristian Marangi /* EIP93 SA Record register */
198*9739f5f9SChristian Marangi #define EIP93_REG_SA_CMD_0			0x400
199*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_SAVE_HASH		BIT(29)
200*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_SAVE_IV			BIT(28)
201*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_SOURCE		GENMASK(27, 26)
202*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_NO_LOAD		FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x3)
203*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_FROM_STATE		FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x2)
204*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_FROM_SA		FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x0)
205*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_IV_SOURCE		GENMASK(25, 24)
206*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_IV_FROM_PRNG		FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x3)
207*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_IV_FROM_STATE		FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x2)
208*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_IV_FROM_INPUT		FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x1)
209*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_IV_NO_LOAD		FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x0)
210*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_LENGTH		GENMASK(23, 20)
211*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_10WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0xa) /* SRTP and TLS */
212*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_8WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x8) /* SHA-256 */
213*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_7WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x7) /* SHA-224 */
214*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_6WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x6)
215*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_5WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x5) /* SHA1 */
216*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_4WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x4) /* MD5 and AES-based */
217*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_3WORD_IPSEC	FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x3) /* IPSEC */
218*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_2WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x2)
219*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_1WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x1)
220*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIGEST_3WORD		FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x0) /* 96bit output */
221*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HDR_PROC			BIT(19)
222*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_EXT_PAD			BIT(18)
223*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_SCPAD			BIT(17)
224*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH			GENMASK(15, 12)
225*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_NULL		FIELD_PREP(EIP93_SA_CMD_HASH, 0xf)
226*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_SHA256		FIELD_PREP(EIP93_SA_CMD_HASH, 0x3)
227*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_SHA224		FIELD_PREP(EIP93_SA_CMD_HASH, 0x2)
228*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_SHA1		FIELD_PREP(EIP93_SA_CMD_HASH, 0x1)
229*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_MD5			FIELD_PREP(EIP93_SA_CMD_HASH, 0x0)
230*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER			GENMASK(11, 8)
231*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER_NULL		FIELD_PREP(EIP93_SA_CMD_CIPHER, 0xf)
232*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER_AES		FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x3)
233*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER_ARC4		FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x2)
234*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER_3DES		FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x1)
235*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CIPHER_DES		FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x0)
236*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_TYPE			GENMASK(7, 6)
237*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_CONST_SSL		FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x6)
238*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_TLS_DTLS		FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x5)
239*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_ZERO			FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x3)
240*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_CONST		FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x2)
241*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_PKCS7		FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x1)
242*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_PAD_IPSEC		FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x0)
243*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPGROUP			GENMASK(5, 4)
244*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OP_EXT			FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x2)
245*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OP_PROTOCOL		FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x1)
246*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OP_BASIC			FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x0)
247*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_DIRECTION_IN		BIT(3) /* 0: outbount 1: inbound */
248*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE			GENMASK(2, 0)
249*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_OUT_PRNG	0x7
250*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_OUT_HASH	0x3
251*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_OUT_ENC_HASH 0x1
252*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_OUT_ENC	0x0
253*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_IN_HASH	0x3
254*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_IN_HASH_DEC	0x1
255*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_BASIC_IN_DEC	0x0
256*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_ESP	0x0
257*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_SSL	0x4
258*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_TLS	0x5
259*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_SRTP	0x7
260*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_IN_ESP	0x0
261*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_IN_SSL	0x2
262*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_IN_TLS	0x3
263*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_PROTOCOL_IN_SRTP	0x7
264*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_OUT_DTSL	0x1
265*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_OUT_SSL	0x4
266*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_OUT_TLSV10	0x5
267*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_OUT_TLSV11	0x6
268*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_IN_DTSL	0x1
269*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_IN_SSL	0x4
270*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_IN_TLSV10	0x5
271*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_OPCODE_EXT_IN_TLSV11	0x6
272*9739f5f9SChristian Marangi #define EIP93_REG_SA_CMD_1			0x404
273*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_EN_SEQNUM_CHK		BIT(29)
274*9739f5f9SChristian Marangi /* This mask can be either used for ARC4 or AES */
275*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_ARC4_KEY_LENGHT		GENMASK(28, 24)
276*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_AES_DEC_KEY		BIT(28) /* 0: encrypt key 1: decrypt key */
277*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_AES_KEY_LENGTH		GENMASK(26, 24)
278*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_AES_KEY_256BIT		FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x4)
279*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_AES_KEY_192BIT		FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x3)
280*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_AES_KEY_128BIT		FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x2)
281*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HASH_CRYPT_OFFSET	GENMASK(23, 16)
282*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_BYTE_OFFSET		BIT(13) /* 0: CRYPT_OFFSET in 32bit word 1: CRYPT_OFFSET in 8bit bytes */
283*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_HMAC			BIT(12)
284*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_SSL_MAC			BIT(12)
285*9739f5f9SChristian Marangi /* This mask can be either used for ARC4 or AES */
286*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE		GENMASK(9, 8)
287*9739f5f9SChristian Marangi /* AES or DES operations */
288*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_ICM		FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x3)
289*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_CTR		FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x2)
290*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_CBC		FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x1)
291*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_ECB		FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x0)
292*9739f5f9SChristian Marangi /* ARC4 operations */
293*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_STATEFULL	FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x1)
294*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_CHIPER_MODE_STATELESS	FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x0)
295*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_COPY_PAD			BIT(3)
296*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_COPY_PAYLOAD		BIT(2)
297*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_COPY_HEADER		BIT(1)
298*9739f5f9SChristian Marangi #define   EIP93_SA_CMD_COPY_DIGEST		BIT(0) /* With this enabled, COPY_PAD is required */
299*9739f5f9SChristian Marangi 
300*9739f5f9SChristian Marangi /* State save register */
301*9739f5f9SChristian Marangi #define EIP93_REG_STATE_IV_0			0x500
302*9739f5f9SChristian Marangi #define EIP93_REG_STATE_IV_1			0x504
303*9739f5f9SChristian Marangi 
304*9739f5f9SChristian Marangi #define EIP93_REG_PE_ARC4STATE			0x700
305*9739f5f9SChristian Marangi 
306*9739f5f9SChristian Marangi struct sa_record {
307*9739f5f9SChristian Marangi 	u32 sa_cmd0_word;
308*9739f5f9SChristian Marangi 	u32 sa_cmd1_word;
309*9739f5f9SChristian Marangi 	u32 sa_key[8];
310*9739f5f9SChristian Marangi 	u8 sa_i_digest[32];
311*9739f5f9SChristian Marangi 	u8 sa_o_digest[32];
312*9739f5f9SChristian Marangi 	u32 sa_spi;
313*9739f5f9SChristian Marangi 	u32 sa_seqnum[2];
314*9739f5f9SChristian Marangi 	u32 sa_seqmum_mask[2];
315*9739f5f9SChristian Marangi 	u32 sa_nonce;
316*9739f5f9SChristian Marangi } __packed;
317*9739f5f9SChristian Marangi 
318*9739f5f9SChristian Marangi struct sa_state {
319*9739f5f9SChristian Marangi 	u32 state_iv[4];
320*9739f5f9SChristian Marangi 	u32 state_byte_cnt[2];
321*9739f5f9SChristian Marangi 	u8 state_i_digest[32];
322*9739f5f9SChristian Marangi } __packed;
323*9739f5f9SChristian Marangi 
324*9739f5f9SChristian Marangi struct eip93_descriptor {
325*9739f5f9SChristian Marangi 	u32 pe_ctrl_stat_word;
326*9739f5f9SChristian Marangi 	u32 src_addr;
327*9739f5f9SChristian Marangi 	u32 dst_addr;
328*9739f5f9SChristian Marangi 	u32 sa_addr;
329*9739f5f9SChristian Marangi 	u32 state_addr;
330*9739f5f9SChristian Marangi 	u32 arc4_addr;
331*9739f5f9SChristian Marangi 	u32 user_id;
332*9739f5f9SChristian Marangi 	u32 pe_length_word;
333*9739f5f9SChristian Marangi } __packed;
334*9739f5f9SChristian Marangi 
335*9739f5f9SChristian Marangi #endif
336