blob: 302453e482ef08ff99b207363a4351fad8033750 (
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
|
/* SPDX-License-Identifier: GPL-2.0 */
/*
* TRNG driver for the StarFive JH7110 SoC
*
* Copyright (C) 2021 StarFive Technology Co., Ltd.
*/
/* trng register offset */
#define CCORE_CTRL 0x00
#define CCORE_STAT 0x04
#define CCORE_MODE 0x08
#define CCORE_SMODE 0x0C
#define CCORE_IE 0x10
#define CCORE_ISTAT 0x14
#define CCORE_FEATURES 0x1C
#define CCORE_RAND0 0x20
#define CCORE_RAND1 0x24
#define CCORE_RAND2 0x28
#define CCORE_RAND3 0x2C
#define CCORE_RAND4 0x30
#define CCORE_RAND5 0x34
#define CCORE_RAND6 0x38
#define CCORE_RAND7 0x3C
#define CCORE_SEED0 0x40
#define CCORE_SEED1 0x44
#define CCORE_SEED2 0x48
#define CCORE_SEED3 0x4C
#define CCORE_SEED4 0x50
#define CCORE_SEED5 0x54
#define CCORE_SEED6 0x58
#define CCORE_SEED7 0x5C
#define CCORE_AUTO_RQSTS 0x60
#define CCORE_AUTO_AGE 0x64
#define CCORE_BUILD_CONFIG 0x68
/* CTRL CMD */
#define CCORE_CTRL_EXEC_NOP (0x0)
#define CCORE_CTRL_GENE_RANDOM (0x1)
#define CCORE_CTRL_EXEC_RANDRESEED (0x2)
#define CCORE_CTRL_EXEC_NONCRESEED (0x3)
/* STAT */
#define _CCORE_STAT_NONCE_MODE 2
#define _CCORE_STAT_R256 3
#define _CCORE_STAT_MISSION_MODE 8
#define _CCORE_STAT_SEEDED 9
#define _CCORE_STAT_LAST_RESEED 16
#define _CCORE_STAT_SRVC_RQST 27
#define _CCORE_STAT_RAND_GENERATING 30
#define _CCORE_STAT_RAND_SEEDING 31
#define CCORE_STAT_NONCE_MODE BIT(_CCORE_STAT_NONCE_MODE)
#define CCORE_STAT_R256 BIT(_CCORE_STAT_R256)
#define CCORE_STAT_MISSION_MODE BIT(_CCORE_STAT_MISSION_MODE)
#define CCORE_STAT_SEEDED BIT(_CCORE_STAT_SEEDED)
#define CCORE_STAT_LAST_RESEED(x) ((x) << _CCORE_STAT_LAST_RESEED)
#define CCORE_STAT_SRVC_RQST BIT(_CCORE_STAT_SRVC_RQST)
#define CCORE_STAT_RAND_GENERATING BIT(_CCORE_STAT_RAND_GENERATING)
#define CCORE_STAT_RAND_SEEDING BIT(_CCORE_STAT_RAND_SEEDING)
/* MODE */
#define _CCORE_MODE_R256 3
#define CCORE_MODE_R256 BIT(_CCORE_MODE_R256)
/* SMODE */
#define _CCORE_SMODE_NONCE_MODE 2
#define _CCORE_SMODE_MISSION_MODE 8
#define _CCORE_SMODE_MAX_REJECTS 16
#define CCORE_SMODE_NONCE_MODE BIT(_CCORE_SMODE_NONCE_MODE)
#define CCORE_SMODE_MISSION_MODE BIT(_CCORE_SMODE_MISSION_MODE)
#define CCORE_SMODE_MAX_REJECTS(x) ((x) << _CCORE_SMODE_MAX_REJECTS)
/* IE */
#define _CCORE_IE_RAND_REY_EN 0
#define _CCORE_IE_SEED_DONE_EN 1
#define _CCORE_IE_AGE_ALARM_EN 2
#define _CCORE_IE_RQST_ALARM_EN 3
#define _CCORE_IE_LOCKUP_EN 4
#define _CCORE_IE_GLBL_EN 31
#define CCORE_IE_RAND_REY_EN BIT(_CCORE_IE_RAND_REY_EN)
#define CCORE_IE_SEED_DONE_EN BIT(_CCORE_IE_SEED_DONE_EN)
#define CCORE_IE_AGE_ALARM_EN BIT(_CCORE_IE_AGE_ALARM_EN)
#define CCORE_IE_RQST_ALARM_EN BIT(_CCORE_IE_RQST_ALARM_EN)
#define CCORE_IE_LOCKUP_EN BIT(_CCORE_IE_LOCKUP_EN)
#define CCORE_IE_GLBL_EN BIT(_CCORE_IE_GLBL_EN)
#define CCORE_IE_ALL (CCORE_IE_GLBL_EN | CCORE_IE_RAND_REY_EN | \
CCORE_IE_SEED_DONE_EN | CCORE_IE_AGE_ALARM_EN | \
CCORE_IE_RQST_ALARM_EN | CCORE_IE_LOCKUP_EN)
/* ISTAT */
#define _CCORE_ISTAT_RAND_RDY 0
#define _CCORE_ISTAT_SEED_DONE 1
#define _CCORE_ISTAT_AGE_ALARM 2
#define _CCORE_ISTAT_RQST_ALARM 3
#define _CCORE_ISTAT_LFSR_LOOKUP 4
#define CCORE_ISTAT_RAND_RDY BIT(_CCORE_ISTAT_RAND_RDY)
#define CCORE_ISTAT_SEED_DONE BIT(_CCORE_ISTAT_SEED_DONE)
#define CCORE_ISTAT_AGE_ALARM BIT(_CCORE_ISTAT_AGE_ALARM)
#define CCORE_ISTAT_LFSR_LOOKUP BIT(_CCORE_ISTAT_LFSR_LOOKUP)
/* FEATURES */
#define _CCORE_FEATURES_MAX_RAND_LENGTH 0
#define _CCORE_FEATURES_RAND_SEED_AVAIL 2
#define _CCORE_FEATURES_MISSION_MODE_RESET_STATE 3
#define CCORE_FEATURES_MAX_RAND_LENGTH(x) ((x) << _CCORE_FEATURES_MAX_RAND_LENGTH)
#define CCORE_FEATURES_RAND_SEED_AVAIL BIT(_CCORE_FEATURES_RAND_SEED_AVAIL)
#define CCORE_FEATURES_MISSION_MODE_RESET_STATE BIT(_CCORE_FEATURES_MISSION_MODE_RESET_STATE)
#define AUTOREQ_DISABLED (0x0)
#define AUTOAGE_DISABLED (0x0)
/* BUILD_CONFIG */
#define _CCORE_BUILD_CONFIG_MAX_PRNG_LEN 2
#define _CCORE_BUILD_CONFIG_PRNG_LEN_AFTER_REST 3
#define _CCORE_BUILD_CONFIG_MODE_AFTER_REST 4
#define _CCORE_BUILD_CONFIG_AUTO_RESEED_LOOPBACK 5
#define CCORE_BUILD_CONFIG_MAX_PRNG_LEN BIT(_CCORE_BUILD_CONFIG_MAX_PRNG_LEN)
#define CCORE_BUILD_CONFIG_PRNG_LEN_AFTER_REST BIT(_CCORE_BUILD_CONFIG_PRNG_LEN_AFTER_REST)
#define CCORE_BUILD_CONFIG_MODE_AFTER_REST BIT(_CCORE_BUILD_CONFIG_MODE_AFTER_REST)
#define CCORE_BUILD_CONFIG_AUTO_RESEED_LOOPBACK BIT(_CCORE_BUILD_CONFIG_AUTO_RESEED_LOOPBACK)
#define CCORE_RAND_LEN 8
#define CCORE_SEED_LEN 8
enum sec_opmode {
poll_mode,
int_mode,
};
enum sec_trng_reseed {
RANDOM_RESEED,
NONCE_RESEED,
};
enum sec_trng_mode {
PRNG_128BIT, //PRNG set up for 128bit maximum
PRNG_256BIT, //PRNG set up for 256bit maximum
};
|