blob: c43685fc78afef7eba24b77f97aa479f3584bc2e [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#ifndef _TE200_H_
2#define _TE200_H_
3
4#include "asr-cipher.h"
5#include "asr-sha.h"
6#include "./asr-aca/se_rsa.h"
7
8#define TE200_CTRL 0x0000
9#define TE200_CLOCK_CTRL (TE200_CTRL+0x00)
10#define TE200_RESET_CTRL (TE200_CTRL+0x04)
11
12#define TE200_STATUS 0x0100
13#define TE200_INIT_STATUS_HOST0 (TE200_STATUS+0x10)
14
15#define DMA_AHB_CLK_EN (1 << 5)
16#define TMG_CLK_EN (1 << 4)
17#define OTP_CLK_EN (1 << 3)
18#define ACA_CLK_EN (1 << 2)
19#define SCA_CLK_EN (1 << 1)
20#define HASH_CLK_EN (1 << 0)
21
22/* OTP registers */
23#define TE200_OTP_MANAGER 0x0400
24#define TE200_OTP_SPACE 0x1000
25#define TE200_OTP_DUMMY_CFG (TE200_OTP_MANAGER+0x28)
26
27/* SECURE SCA registers */
28#define TE200_SSCA_QUEUE 0x3200
29#define TE200_SSCA_CTRL 0x3204
30#define TE200_SSCA_STAT 0x3208
31#define TE200_SSCA_INTR_STAT 0x320C
32#define TE200_SSCA_INTR_MSK 0x3210
33#define TE200_SSCA_SUSP_MSK 0x3214
34
35/* sca queue register bits */
36#define SCA_INIT_CMD (0x80 << 24)
37#define SCA_PROCESS_CMD (0x40 << 24)
38#define SCA_FINISH_CMD (0x20 << 24)
39
40/* sca intr msk register */
41#define WM_INTR_MSK (1 << 4)
42#define BUS_RROR_MSK (1 << 3)
43#define INVALID_KEY_MSK (1 << 2)
44#define INVALID_CMD_MSK (1 << 1)
45#define CMD_INIR_MSK (1 << 0)
46
47/* sca queue registers bits */
48#define SCA_INTER_TRIGGERD (1 << 0)
49
50/* sca ctrl registers bits */
51#define SCA_RUN (1 << 0)
52
53/* sca intr stat registers bits */
54#define SCA_WM_INTR (1 << 4)
55#define SCA_BUS_ERROR (1 << 3)
56#define SCA_INVALID_KEY (1 << 2)
57#define SCA_INVALID_CMD (1 << 1)
58#define SCA_CMD_INTR (1 << 0)
59
60/* sca queue: sca init */
61#define SCA_MODEL_KEY (~(1 << 22))
62#define SCA_DEVICE_ROOT_KEY (1 << 22)
63#define SCA_EXTERNAL_KEY (2 << 22)
64
65#define SCA_KEY_128_BITS (~(1 << 20))
66#define SCA_KEY_192_BITS (1 << 20)
67#define SCA_KEY_256_BITS (2 << 20)
68
69#define SCA_NORMAL_AES (~(1 << 19))
70#define SCA_SM4 (1 << 19)
71#define SCA_KEY_IS_ADDR (1 << 18)
72#define SCA_SET_IV (1 << 15)
73#define SCA_SET_IV_ADDR (1 << 14)
74
75#define SCA_MODE_ECB (~(1 << 4))
76#define SCA_MODE_CTR (1 << 4)
77#define SCA_MODE_CBC (2 << 4)
78#define SCA_MODE_CBC_MAC (3 << 4)
79#define SCA_MODE_CMAC (4 << 4)
80#define SCA_MODE_GHASH (5 << 4)
81
82/* sca queue: sca process */
83#define SCA_LAST_ONE_SESSION (1 << 6)
84#define SCA_ENCRYPTION (1 << 5)
85
86/* SECURE HASH registers */
87#define TE200_SHASH_QUEUE 0x3280
88#define TE200_SHASH_CTRL 0x3284
89#define TE200_SHASH_STAT 0x3288
90#define TE200_SHASH_INTR_STAT 0x328C
91#define TE200_SHASH_INTR_MSK 0x3290
92#define TE200_SHASH_SUSP_MSK 0x3294
93
94/* hash queue register bits */
95#define HASH_INIT_CMD (0x80 << 24)
96#define HASH_PROCESS_CMD (0x40 << 24)
97#define HASH_FINISH_CMD (0x20 << 24)
98
99/* hash queue registers bits */
100#define HASH_INTER_TRIGGERD (1 << 0)
101
102/* scahash ctrl registers bits */
103#define HASH_RUN (1 << 0)
104
105/* hash queue: hash init */
106#define HASH_MODE_SHA1 (~(1 << 5))
107#define HASH_MODE_SHA224 (1 << 5)
108#define HASH_MODE_SHA256 (2 << 5)
109#define HASH_MODE_SM3 (3 << 5)
110
111#define HASH_SET_EXT_IV (1 << 4)
112#define HASH_PARAM_IS_ADDR (1 << 3)
113
114/* hash queue: hash process */
115#define HASH_LITTLE_ENDIAN (1 << 1)
116
117/* hash queue: hash finish */
118#define HASH_PADDING (1 << 7)
119
120/* hash intr stat registers bits */
121#define HASH_WM_INTR (1 << 4)
122#define HASH_BUS_ERROR (1 << 3)
123#define HASH_PADDING_ERROR (1 << 2)
124#define HASH_INVALID_CMD (1 << 1)
125#define HASH_CMD_INTR (1 << 0)
126
127
128
129struct asr_te200_dev {
130 unsigned long phys_base;
131 void __iomem *io_base;
132 struct mutex te200_lock;
133 struct device *dev;
134
135 struct clk *te200_clk;
136 int clk_synced;
137 refcount_t refcount;
138
139 struct asr_te200_cipher asr_cipher;
140 struct asr_te200_sha asr_sha;
141 struct asr_te200_rsa asr_rsa;
142
143 struct asr_te200_ops *te200_ops;
144};
145
146struct asr_te200_ops {
147 int (*dev_get)(struct asr_te200_dev *);
148 int (*dev_put)(struct asr_te200_dev *);
149};
150
151int asr_te200_cipher_register(struct asr_te200_dev *te200_dd);
152int asr_te200_cipher_unregister(struct asr_te200_dev *te200_dd);
153
154int asr_te200_sha_register(struct asr_te200_dev *te200_dd);
155int asr_te200_sha_unregister(struct asr_te200_dev *te200_dd);
156
157int asr_te200_rsa_register(struct asr_te200_dev *te200_dd);
158int asr_te200_rsa_unregister(struct asr_te200_dev *te200_dd);
159#endif