summaryrefslogtreecommitdiff
path: root/drivers/char/hw_random/starfive-vic-rng.h
blob: b3bbabde0cfb13ce217fcc51b7e07b39c90e2c0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
 ******************************************************************************
 * @file  starfive-vic-rng.h
 * @author  StarFive Technology
 * @version  V1.0
 * @date  08/13/2020
 * @brief
 ******************************************************************************
 * @copy
 *
 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 *
 * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
 */

#define VIC_CTRL		0x00
#define VIC_MODE		0x04
#define VIC_SMODE		0x08
#define VIC_STAT		0x0C
#define VIC_IE			0x10
#define VIC_ISTAT		0x14
#define VIC_ALARM		0x18
#define VIC_BUILD_ID		0x1C
#define VIC_FEATURES		0x20
#define VIC_RAND0		0x24
#define VIC_NPA_DATA0		0x34
#define VIC_SEED0		0x74
#define VIC_IA_RDATA		0xA4
#define VIC_IA_WDATA		0xA8
#define VIC_IA_ADDR		0xAC
#define VIC_IA_CMD		0xB0

/* CTRL */
#define VIC_CTRL_CMD_NOP		0
#define VIC_CTRL_CMD_GEN_NOISE		1
#define VIC_CTRL_CMD_GEN_NONCE		2
#define VIC_CTRL_CMD_CREATE_STATE	3
#define VIC_CTRL_CMD_RENEW_STATE	4
#define VIC_CTRL_CMD_REFRESH_ADDIN	5
#define VIC_CTRL_CMD_GEN_RANDOM		6
#define VIC_CTRL_CMD_ADVANCE_STATE	7
#define VIC_CTRL_CMD_KAT		8
#define VIC_CTRL_CMD_ZEROIZE		15

/* MODE */
#define _VIC_MODE_ADDIN_PRESENT		4
#define _VIC_MODE_PRED_RESIST		3
#define _VIC_MODE_KAT_SEL		2
#define _VIC_MODE_KAT_VEC		1
#define _VIC_MODE_SEC_ALG		0

#define VIC_MODE_ADDIN_PRESENT	(1UL << _VIC_MODE_ADDIN_PRESENT)
#define VIC_MODE_PRED_RESIST	(1UL << _VIC_MODE_PRED_RESIST)
#define VIC_MODE_KAT_SEL	(1UL << _VIC_MODE_KAT_SEL)
#define VIC_MODE_KAT_VEC	(1UL << _VIC_MODE_KAT_VEC)
#define VIC_MODE_SEC_ALG	(1UL << _VIC_MODE_SEC_ALG)

/* SMODE */
#define _VIC_SMODE_MAX_REJECTS	2
#define _VIC_SMODE_SECURE_EN	1
#define _VIC_SMODE_NONCE	0

#define VIC_SMODE_MAX_REJECTS(x)	((x) << _VIC_SMODE_MAX_REJECTS)
#define VIC_SMODE_SECURE_EN(x)		((x) << _VIC_SMODE_SECURE_EN)
#define VIC_SMODE_NONCE			(1UL << _VIC_SMODE_NONCE)

/* STAT */
#define _VIC_STAT_BUSY		31
#define _VIC_STAT_DRBG_STATE	7
#define _VIC_STAT_SECURE	6
#define _VIC_STAT_NONCE_MODE	5
#define _VIC_STAT_SEC_ALG	4
#define _VIC_STAT_LAST_CMD	0

#define VIC_STAT_BUSY		(1UL << _VIC_STAT_BUSY)
#define VIC_STAT_DRBG_STATE	(1UL << _VIC_STAT_DRBG_STATE)
#define VIC_STAT_SECURE		(1UL << _VIC_STAT_SECURE)
#define VIC_STAT_NONCE_MODE	(1UL << _VIC_STAT_NONCE_MODE)
#define VIC_STAT_SEC_ALG	(1UL << _VIC_STAT_SEC_ALG)
#define VIC_STAT_LAST_CMD(x)	(((x) >> _VIC_STAT_LAST_CMD) & 0xF)

/* IE */
#define _VIC_IE_GLBL		31
#define _VIC_IE_DONE		4
#define _VIC_IE_ALARMS		3
#define _VIC_IE_NOISE_RDY	2
#define _VIC_IE_KAT_COMPLETE	1
#define _VIC_IE_ZEROIZE		0

#define VIC_IE_GLBL		(1UL << _VIC_IE_GLBL)
#define VIC_IE_DONE		(1UL << _VIC_IE_DONE)
#define VIC_IE_ALARMS		(1UL << _VIC_IE_ALARMS)
#define VIC_IE_NOISE_RDY	(1UL << _VIC_IE_NOISE_RDY)
#define VIC_IE_KAT_COMPLETE	(1UL << _VIC_IE_KAT_COMPLETE)
#define VIC_IE_ZEROIZE		(1UL << _VIC_IE_ZEROIZE)
#define VIC_IE_ALL		(VIC_IE_GLBL | VIC_IE_DONE | VIC_IE_ALARMS | \
				 VIC_IE_NOISE_RDY | VIC_IE_KAT_COMPLETE | VIC_IE_ZEROIZE)

/* ISTAT */
#define _VIC_ISTAT_DONE		4
#define _VIC_ISTAT_ALARMS	3
#define _VIC_ISTAT_NOISE_RDY	2
#define _VIC_ISTAT_KAT_COMPLETE	1
#define _VIC_ISTAT_ZEROIZE	0

#define VIC_ISTAT_DONE		(1UL << _VIC_ISTAT_DONE)
#define VIC_ISTAT_ALARMS	(1UL << _VIC_ISTAT_ALARMS)
#define VIC_ISTAT_NOISE_RDY	(1UL << _VIC_ISTAT_NOISE_RDY)
#define VIC_ISTAT_KAT_COMPLETE	(1UL << _VIC_ISTAT_KAT_COMPLETE)
#define VIC_ISTAT_ZEROIZE	(1UL << _VIC_ISTAT_ZEROIZE)

/* ALARMS */
#define VIC_ALARM_ILLEGAL_CMD_SEQ			(1UL << 4)
#define VIC_ALARM_FAILED_TEST_ID_OK			0
#define VIC_ALARM_FAILED_TEST_ID_KAT_STAT		1
#define VIC_ALARM_FAILED_TEST_ID_KAT			2
#define VIC_ALARM_FAILED_TEST_ID_MONOBIT		3
#define VIC_ALARM_FAILED_TEST_ID_RUN			4
#define VIC_ALARM_FAILED_TEST_ID_LONGRUN		5
#define VIC_ALARM_FAILED_TEST_ID_AUTOCORRELATION	6
#define VIC_ALARM_FAILED_TEST_ID_POKER			7
#define VIC_ALARM_FAILED_TEST_ID_REPETITION_COUNT	8
#define VIC_ALARM_FAILED_TEST_ID_ADAPATIVE_PROPORTION	9

/* BUILD_ID */
#define VIC_BUILD_ID_STEPPING(x)		(((x) >> 28) & 0xF)
#define VIC_BUILD_ID_EPN(x)			((x) & 0xFFFF)

/* FEATURES */
#define VIC_FEATURES_AES_256(x)			(((x) >> 9) & 1)
#define VIC_FEATURES_EXTRA_PS_PRESENT(x)	(((x) >> 8) & 1)
#define VIC_FEATURES_DIAG_LEVEL_NS(x)		(((x) >> 7) & 1)
#define VIC_FEATURES_DIAG_LEVEL_CLP800(x)	(((x) >> 4) & 7)
#define VIC_FEATURES_DIAG_LEVEL_ST_HLT(x)	(((x) >> 1) & 7)
#define VIC_FEATURES_SECURE_RST_STATE(x)	((x) & 1)

/* IA_CMD */
#define VIC_IA_CMD_GO			(1UL << 31)
#define VIC_IA_CMD_WR			(1)

#define _VIC_SMODE_MAX_REJECTS_MASK	255UL
#define _VIC_SMODE_SECURE_EN_MASK	1UL
#define _VIC_SMODE_NONCE_MASK		1UL
#define _VIC_MODE_SEC_ALG_MASK		1UL
#define _VIC_MODE_ADDIN_PRESENT_MASK	1UL
#define _VIC_MODE_PRED_RESIST_MASK	1UL

#define VIC_SMODE_SET_MAX_REJECTS(y, x)	(((y) & ~(_VIC_SMODE_MAX_REJECTS_MASK << _VIC_SMODE_MAX_REJECTS)) | ((x) << _VIC_SMODE_MAX_REJECTS))
#define VIC_SMODE_SET_SECURE_EN(y, x)	(((y) & ~(_VIC_SMODE_SECURE_EN_MASK   << _VIC_SMODE_SECURE_EN))   | ((x) << _VIC_SMODE_SECURE_EN))
#define VIC_SMODE_SET_NONCE(y, x)	(((y) & ~(_VIC_SMODE_NONCE_MASK       << _VIC_SMODE_NONCE))       | ((x) << _VIC_SMODE_NONCE))
#define VIC_SMODE_GET_MAX_REJECTS(x)	(((x) >> _VIC_SMODE_MAX_REJECTS) & _VIC_SMODE_MAX_REJECTS_MASK)
#define VIC_SMODE_GET_SECURE_EN(x)	(((x) >> _VIC_SMODE_SECURE_EN)   & _VIC_SMODE_SECURE_EN_MASK)
#define VIC_SMODE_GET_NONCE(x)		(((x) >> _VIC_SMODE_NONCE)       & _VIC_SMODE_NONCE_MASK)

#define VIC_MODE_SET_SEC_ALG(y, x)	(((y) & ~(_VIC_MODE_SEC_ALG_MASK       << _VIC_MODE_SEC_ALG))	| ((x) << _VIC_MODE_SEC_ALG))
#define VIC_MODE_SET_PRED_RESIST(y, x)	(((y) & ~(_VIC_MODE_PRED_RESIST_MASK   << _VIC_MODE_PRED_RESIST))    | ((x) << _VIC_MODE_PRED_RESIST))
#define VIC_MODE_SET_ADDIN_PRESENT(y, x) (((y) & ~(_VIC_MODE_ADDIN_PRESENT_MASK << _VIC_MODE_ADDIN_PRESENT))  | ((x) << _VIC_MODE_ADDIN_PRESENT))
#define VIC_MODE_GET_SEC_ALG(x)		(((x) >> _VIC_MODE_SEC_ALG)       & _VIC_MODE_SEC_ALG_MASK)
#define VIC_MODE_GET_PRED_RESIST(x)	(((x) >> _VIC_MODE_PRED_RESIST)   & _VIC_MODE_PRED_RESIST_MASK)
#define VIC_MODE_GET_ADDIN_PRESENT(x)	(((x) >> _VIC_MODE_ADDIN_PRESENT) & _VIC_MODE_ADDIN_PRESENT_MASK)

#define VIC_RAND_LEN 4