]>
Commit | Line | Data |
---|---|---|
9a9dd4e8 OM |
1 | /** @file\r |
2 | *\r | |
9e7621c0 | 3 | * Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR>\r |
351fe776 | 4 | * Copyright (c) 2012 - 2022, Arm Limited. All rights reserved.\r |
9a9dd4e8 | 5 | *\r |
4059386c | 6 | * SPDX-License-Identifier: BSD-2-Clause-Patent\r |
9a9dd4e8 | 7 | *\r |
9e7621c0 | 8 | * @par Revision Reference:\r |
351fe776 | 9 | * - [1] SMC Calling Convention version 1.2\r |
9e7621c0 | 10 | * (https://developer.arm.com/documentation/den0028/c/?lang=en)\r |
351fe776 SM |
11 | * - [2] Arm True Random Number Generator Firmware, Interface 1.0,\r |
12 | * Platform Design Document.\r | |
13 | * (https://developer.arm.com/documentation/den0098/latest/)\r | |
14 | *\r | |
15 | * @par Glossary:\r | |
16 | * - TRNG - True Random Number Generator\r | |
17 | *\r | |
9a9dd4e8 OM |
18 | **/\r |
19 | \r | |
cc15a619 PG |
20 | #ifndef ARM_STD_SMC_H_\r |
21 | #define ARM_STD_SMC_H_\r | |
9a9dd4e8 OM |
22 | \r |
23 | /*\r | |
24 | * SMC function IDs for Standard Service queries\r | |
25 | */\r | |
26 | \r | |
429309e0 MK |
27 | #define ARM_SMC_ID_STD_CALL_COUNT 0x8400ff00\r |
28 | #define ARM_SMC_ID_STD_UID 0x8400ff01\r | |
9a9dd4e8 | 29 | /* 0x8400ff02 is reserved */\r |
429309e0 | 30 | #define ARM_SMC_ID_STD_REVISION 0x8400ff03\r |
9a9dd4e8 OM |
31 | \r |
32 | /*\r | |
33 | * The 'Standard Service Call UID' is supposed to return the Standard\r | |
34 | * Service UUID. This is a 128-bit value.\r | |
35 | */\r | |
429309e0 MK |
36 | #define ARM_SMC_STD_UUID0 0x108d905b\r |
37 | #define ARM_SMC_STD_UUID1 0x47e8f863\r | |
38 | #define ARM_SMC_STD_UUID2 0xfbc02dae\r | |
39 | #define ARM_SMC_STD_UUID3 0xe2f64156\r | |
9a9dd4e8 OM |
40 | \r |
41 | /*\r | |
42 | * ARM Standard Service Calls revision numbers\r | |
43 | * The current revision is: 0.1\r | |
44 | */\r | |
429309e0 MK |
45 | #define ARM_SMC_STD_REVISION_MAJOR 0x0\r |
46 | #define ARM_SMC_STD_REVISION_MINOR 0x1\r | |
9a9dd4e8 | 47 | \r |
542bc11a SV |
48 | /*\r |
49 | * Management Mode (MM) calls cover a subset of the Standard Service Call range.\r | |
50 | * The list below is not exhaustive.\r | |
51 | */\r | |
429309e0 MK |
52 | #define ARM_SMC_ID_MM_VERSION_AARCH32 0x84000040\r |
53 | #define ARM_SMC_ID_MM_VERSION_AARCH64 0xC4000040\r | |
542bc11a SV |
54 | \r |
55 | // Request service from secure standalone MM environment\r | |
429309e0 MK |
56 | #define ARM_SMC_ID_MM_COMMUNICATE_AARCH32 0x84000041\r |
57 | #define ARM_SMC_ID_MM_COMMUNICATE_AARCH64 0xC4000041\r | |
542bc11a | 58 | \r |
03e19e6b EC |
59 | /* Generic ID when using AArch32 or AArch64 execution state */\r |
60 | #ifdef MDE_CPU_AARCH64\r | |
429309e0 | 61 | #define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH64\r |
03e19e6b EC |
62 | #endif\r |
63 | #ifdef MDE_CPU_ARM\r | |
429309e0 | 64 | #define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH32\r |
03e19e6b EC |
65 | #endif\r |
66 | \r | |
542bc11a | 67 | /* MM return error codes */\r |
429309e0 MK |
68 | #define ARM_SMC_MM_RET_SUCCESS 0\r |
69 | #define ARM_SMC_MM_RET_NOT_SUPPORTED -1\r | |
70 | #define ARM_SMC_MM_RET_INVALID_PARAMS -2\r | |
71 | #define ARM_SMC_MM_RET_DENIED -3\r | |
72 | #define ARM_SMC_MM_RET_NO_MEMORY -4\r | |
542bc11a | 73 | \r |
9e7621c0 | 74 | // ARM Architecture Calls\r |
429309e0 MK |
75 | #define SMCCC_VERSION 0x80000000\r |
76 | #define SMCCC_ARCH_FEATURES 0x80000001\r | |
77 | #define SMCCC_ARCH_SOC_ID 0x80000002\r | |
78 | #define SMCCC_ARCH_WORKAROUND_1 0x80008000\r | |
79 | #define SMCCC_ARCH_WORKAROUND_2 0x80007FFF\r | |
9e7621c0 RC |
80 | \r |
81 | #define SMC_ARCH_CALL_SUCCESS 0\r | |
429309e0 MK |
82 | #define SMC_ARCH_CALL_NOT_SUPPORTED -1\r |
83 | #define SMC_ARCH_CALL_NOT_REQUIRED -2\r | |
84 | #define SMC_ARCH_CALL_INVALID_PARAMETER -3\r | |
9e7621c0 | 85 | \r |
9a9dd4e8 OM |
86 | /*\r |
87 | * Power State Coordination Interface (PSCI) calls cover a subset of the\r | |
88 | * Standard Service Call range.\r | |
89 | * The list below is not exhaustive.\r | |
90 | */\r | |
91 | #define ARM_SMC_ID_PSCI_VERSION 0x84000000\r | |
92 | #define ARM_SMC_ID_PSCI_CPU_SUSPEND_AARCH64 0xc4000001\r | |
93 | #define ARM_SMC_ID_PSCI_CPU_SUSPEND_AARCH32 0x84000001\r | |
94 | #define ARM_SMC_ID_PSCI_CPU_OFF 0x84000002\r | |
95 | #define ARM_SMC_ID_PSCI_CPU_ON_AARCH64 0xc4000003\r | |
96 | #define ARM_SMC_ID_PSCI_CPU_ON_AARCH32 0x84000003\r | |
97 | #define ARM_SMC_ID_PSCI_AFFINITY_INFO_AARCH64 0xc4000004\r | |
98 | #define ARM_SMC_ID_PSCI_AFFINITY_INFO_AARCH32 0x84000004\r | |
99 | #define ARM_SMC_ID_PSCI_MIGRATE_AARCH64 0xc4000005\r | |
100 | #define ARM_SMC_ID_PSCI_MIGRATE_AARCH32 0x84000005\r | |
ae9bc057 AB |
101 | #define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x84000008\r |
102 | #define ARM_SMC_ID_PSCI_SYSTEM_RESET 0x84000009\r | |
52bf4eba PM |
103 | #define ARM_SMC_ID_PSCI_FEATURES 0x8400000A\r |
104 | #define ARM_SMC_ID_PSCI_SYSTEM_RESET2_AARCH64 0xC4000012\r | |
9a9dd4e8 OM |
105 | \r |
106 | /* The current PSCI version is: 0.2 */\r | |
107 | #define ARM_SMC_PSCI_VERSION_MAJOR 0\r | |
108 | #define ARM_SMC_PSCI_VERSION_MINOR 2\r | |
109 | #define ARM_SMC_PSCI_VERSION \\r | |
110 | ((ARM_SMC_PSCI_VERSION_MAJOR << 16) | ARM_SMC_PSCI_VERSION_MINOR)\r | |
111 | \r | |
112 | /* PSCI return error codes */\r | |
429309e0 MK |
113 | #define ARM_SMC_PSCI_RET_SUCCESS 0\r |
114 | #define ARM_SMC_PSCI_RET_NOT_SUPPORTED -1\r | |
115 | #define ARM_SMC_PSCI_RET_INVALID_PARAMS -2\r | |
116 | #define ARM_SMC_PSCI_RET_DENIED -3\r | |
117 | #define ARM_SMC_PSCI_RET_ALREADY_ON -4\r | |
118 | #define ARM_SMC_PSCI_RET_ON_PENDING -5\r | |
119 | #define ARM_SMC_PSCI_RET_INTERN_FAIL -6\r | |
120 | #define ARM_SMC_PSCI_RET_NOT_PRESENT -7\r | |
121 | #define ARM_SMC_PSCI_RET_DISABLED -8\r | |
9a9dd4e8 OM |
122 | \r |
123 | #define ARM_SMC_PSCI_TARGET_CPU32(Aff2, Aff1, Aff0) \\r | |
124 | ((((Aff2) & 0xFF) << 16) | (((Aff1) & 0xFF) << 8) | ((Aff0) & 0xFF))\r | |
125 | \r | |
126 | #define ARM_SMC_PSCI_TARGET_CPU64(Aff3, Aff2, Aff1, Aff0) \\r | |
127 | ((((Aff3) & 0xFFULL) << 32) | (((Aff2) & 0xFF) << 16) | (((Aff1) & 0xFF) << 8) | ((Aff0) & 0xFF))\r | |
128 | \r | |
129 | #define ARM_SMC_PSCI_TARGET_GET_AFF0(TargetId) ((TargetId) & 0xFF)\r | |
130 | #define ARM_SMC_PSCI_TARGET_GET_AFF1(TargetId) (((TargetId) >> 8) & 0xFF)\r | |
131 | \r | |
429309e0 MK |
132 | #define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_0 0\r |
133 | #define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_1 1\r | |
134 | #define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_2 2\r | |
135 | #define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_3 3\r | |
9a9dd4e8 OM |
136 | \r |
137 | #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON 0\r | |
138 | #define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF 1\r | |
139 | #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING 2\r | |
140 | \r | |
d65b78f1 SG |
141 | /*\r |
142 | * SMC function IDs for Trusted OS Service queries\r | |
143 | */\r | |
429309e0 MK |
144 | #define ARM_SMC_ID_TOS_CALL_COUNT 0xbf00ff00\r |
145 | #define ARM_SMC_ID_TOS_UID 0xbf00ff01\r | |
d65b78f1 | 146 | /* 0xbf00ff02 is reserved */\r |
429309e0 | 147 | #define ARM_SMC_ID_TOS_REVISION 0xbf00ff03\r |
d65b78f1 | 148 | \r |
351fe776 SM |
149 | // Firmware TRNG interface Function IDs\r |
150 | \r | |
151 | /*\r | |
152 | SMC/HVC call to get the version of the TRNG backend,\r | |
153 | Cf. [2], 2.1 TRNG_VERSION\r | |
154 | Input values:\r | |
155 | W0 0x8400_0050\r | |
156 | W1-W7 Reserved (MBZ)\r | |
157 | Return values:\r | |
158 | Success (W0 > 0) W0[31] MBZ\r | |
159 | W0[30:16] Major revision\r | |
160 | W0[15:0] Minor revision\r | |
161 | W1 - W3 Reserved (MBZ)\r | |
162 | Error (W0 < 0)\r | |
163 | NOT_SUPPORTED Function not implemented\r | |
164 | */\r | |
165 | #define ARM_SMC_ID_TRNG_VERSION 0x84000050\r | |
166 | \r | |
167 | /*\r | |
168 | SMC/HVC call to check if a TRNG function ID is implemented by the backend,\r | |
169 | Cf. [2], Section 2.2 TRNG_FEATURES\r | |
170 | Input Values\r | |
171 | W0 0x8400_0051\r | |
172 | W1 trng_func_id\r | |
173 | W2-W7 Reserved (MBZ)\r | |
174 | Return values:\r | |
175 | Success (W0 >= 0):\r | |
176 | SUCCESS Function is implemented.\r | |
177 | > 0 Function is implemented and\r | |
178 | has specific capabilities,\r | |
179 | see function definition.\r | |
180 | Error (W0 < 0)\r | |
181 | NOT_SUPPORTED Function with FID=trng_func_id\r | |
182 | is not implemented\r | |
183 | */\r | |
184 | #define ARM_SMC_ID_TRNG_FEATURES 0x84000051\r | |
185 | \r | |
186 | /*\r | |
187 | SMC/HVC call to get the UUID of the TRNG backend,\r | |
188 | Cf. [2], Section 2.3 TRNG_GET_UUID\r | |
189 | Input Values:\r | |
190 | W0 0x8400_0052\r | |
191 | W1-W7 Reserved (MBZ)\r | |
192 | Return Values:\r | |
193 | Success (W0 != -1)\r | |
194 | W0 UUID[31:0]\r | |
195 | W1 UUID[63:32]\r | |
196 | W2 UUID[95:64]\r | |
197 | W3 UUID[127:96]\r | |
198 | Error (W0 = -1)\r | |
199 | W0 NOT_SUPPORTED\r | |
200 | */\r | |
201 | #define ARM_SMC_ID_TRNG_GET_UUID 0x84000052\r | |
202 | \r | |
203 | /*\r | |
204 | AARCH32 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND.\r | |
205 | Input values:\r | |
206 | W0 0x8400_0053\r | |
207 | W2-W7 Reserved (MBZ)\r | |
208 | Return values:\r | |
209 | Success (W0 = 0):\r | |
210 | W0 MBZ\r | |
211 | W1 Entropy[95:64]\r | |
212 | W2 Entropy[63:32]\r | |
213 | W3 Entropy[31:0]\r | |
214 | Error (W0 < 0)\r | |
215 | W0 NOT_SUPPORTED\r | |
216 | NO_ENTROPY\r | |
217 | INVALID_PARAMETERS\r | |
218 | W1 - W3 Reserved (MBZ)\r | |
219 | */\r | |
220 | #define ARM_SMC_ID_TRNG_RND_AARCH32 0x84000053\r | |
221 | \r | |
222 | /*\r | |
223 | AARCH64 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND.\r | |
224 | Input values:\r | |
225 | X0 0xC400_0053\r | |
226 | X2-X7 Reserved (MBZ)\r | |
227 | Return values:\r | |
228 | Success (X0 = 0):\r | |
229 | X0 MBZ\r | |
230 | X1 Entropy[191:128]\r | |
231 | X2 Entropy[127:64]\r | |
232 | X3 Entropy[63:0]\r | |
233 | Error (X0 < 0)\r | |
234 | X0 NOT_SUPPORTED\r | |
235 | NO_ENTROPY\r | |
236 | INVALID_PARAMETERS\r | |
237 | X1 - X3 Reserved (MBZ)\r | |
238 | */\r | |
239 | #define ARM_SMC_ID_TRNG_RND_AARCH64 0xC4000053\r | |
240 | \r | |
241 | // Firmware TRNG status codes\r | |
242 | #define TRNG_STATUS_SUCCESS (INT32)(0)\r | |
243 | #define TRNG_STATUS_NOT_SUPPORTED (INT32)(-1)\r | |
244 | #define TRNG_STATUS_INVALID_PARAMETER (INT32)(-2)\r | |
245 | #define TRNG_STATUS_NO_ENTROPY (INT32)(-3)\r | |
246 | \r | |
cc15a619 | 247 | #endif // ARM_STD_SMC_H_\r |