xref: /freebsd/sys/arm64/include/hypervisor.h (revision 4aa762f3cb97402f0345ce5112c47a303dd4107d)
1 /*-
2  * Copyright (c) 2013, 2014 Andrew Turner
3  * Copyright (c) 2021 The FreeBSD Foundation
4  *
5  * Portions of this software were developed by Andrew Turner
6  * under sponsorship from the FreeBSD Foundation.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #ifndef _MACHINE_HYPERVISOR_H_
31 #define	_MACHINE_HYPERVISOR_H_
32 
33 /*
34  * These registers are only useful when in hypervisor context,
35  * e.g. specific to EL2, or controlling the hypervisor.
36  */
37 
38 /* CNTHCTL_EL2 - Counter-timer Hypervisor Control register */
39 /* Valid if HCR_EL2.E2H == 0 */
40 #define	CNTHCTL_EL1PCTEN_SHIFT		0
41 #define	CNTHCTL_EL1PCTEN_MASK		(0x1ul << CNTHCTL_E2H_EL1PCTEN_SHIFT)
42 #define	 CNTHCTL_EL1PCTEN_TRAP		(0x0ul << CNTHCTL_E2H_EL1PCTEN_SHIFT)
43 #define	 CNTHCTL_EL1PCTEN_NOTRAP	(0x1ul << CNTHCTL_EL1PCTEN_SHIFT)
44 #define	CNTHCTL_EL1PCEN_SHIFT		1
45 #define	CNTHCTL_EL1PCEN_MASK		(0x1ul << CNTHCTL_EL1PCEN_SHIFT)
46 #define	 CNTHCTL_EL1PCEN_TRAP		(0x0ul << CNTHCTL_EL1PCEN_SHIFT)
47 #define	 CNTHCTL_EL1PCEN_NOTRAP		(0x1ul << CNTHCTL_EL1PCEN_SHIFT)
48 /* Valid if HCR_EL2.E2H == 1 */
49 #define	CNTHCTL_E2H_EL0PCTEN_SHIFT	0
50 #define	CNTHCTL_E2H_EL0PCTEN_MASK	(0x1ul << CNTHCTL_E2H_EL0PCTEN_SHIFT)
51 #define	 CNTHCTL_E2H_EL0PCTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL0PCTEN_SHIFT)
52 #define	 CNTHCTL_E2H_EL0PCTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL0PCTEN_SHIFT)
53 #define	CNTHCTL_E2H_EL0VCTEN_SHIFT	1
54 #define	CNTHCTL_E2H_EL0VCTEN_MASK	(0x1ul << CNTHCTL_E2H_EL0VCTEN_SHIFT)
55 #define	 CNTHCTL_E2H_EL0VCTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL0VCTEN_SHIFT)
56 #define	 CNTHCTL_E2H_EL0VCTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL0VCTEN_SHIFT)
57 #define	CNTHCTL_E2H_EL0VTEN_SHIFT	8
58 #define	CNTHCTL_E2H_EL0VTEN_MASK	(0x1ul << CNTHCTL_E2H_EL0VTEN_SHIFT)
59 #define	 CNTHCTL_E2H_EL0VTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL0VTEN_SHIFT)
60 #define	 CNTHCTL_E2H_EL0VTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL0VTEN_SHIFT)
61 #define	CNTHCTL_E2H_EL0PTEN_SHIFT	9
62 #define	CNTHCTL_E2H_EL0PTEN_MASK	(0x1ul << CNTHCTL_E2H_EL0PTEN_SHIFT)
63 #define	 CNTHCTL_E2H_EL0PTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL0PTEN_SHIFT)
64 #define	 CNTHCTL_E2H_EL0PTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL0PTEN_SHIFT)
65 #define	CNTHCTL_E2H_EL1PCTEN_SHIFT	10
66 #define	CNTHCTL_E2H_EL1PCTEN_MASK	(0x1ul << CNTHCTL_E2H_EL1PCTEN_SHIFT)
67 #define	 CNTHCTL_E2H_EL1PCTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL1PCTEN_SHIFT)
68 #define	 CNTHCTL_E2H_EL1PCTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL1PCTEN_SHIFT)
69 #define	CNTHCTL_E2H_EL1PTEN_SHIFT	11
70 #define	CNTHCTL_E2H_EL1PTEN_MASK	(0x1ul << CNTHCTL_E2H_EL1PTEN_SHIFT)
71 #define	 CNTHCTL_E2H_EL1PTEN_TRAP	(0x0ul << CNTHCTL_E2H_EL1PTEN_SHIFT)
72 #define	 CNTHCTL_E2H_EL1PTEN_NOTRAP	(0x1ul << CNTHCTL_E2H_EL1PTEN_SHIFT)
73 /* Unconditionally valid */
74 #define	CNTHCTL_EVNTEN_SHIFT		2
75 #define	CNTHCTL_EVNTEN_MASK		(0x1ul << CNTHCTL_EVNTEN_SHIFT)
76 #define	 CNTHCTL_EVNTEN_DIS		(0x0ul << CNTHCTL_EVNTEN_SHIFT)
77 #define	 CNTHCTL_EVNTEN_EN		(0x1ul << CNTHCTL_EVNTEN_SHIFT)
78 #define	CNTHCTL_EVNTDIR_SHIFT		3
79 #define	CNTHCTL_EVNTDIR_MASK		(0x1ul << CNTHCTL_EVNTDIR_SHIFT)
80 #define	 CNTHCTL_EVNTDIR_HIGH		(0x0ul << CNTHCTL_EVNTDIR_SHIFT)
81 #define	 CNTHCTL_EVNTDIR_LOW		(0x1ul << CNTHCTL_EVNTDIR_SHIFT)
82 #define	CNTHCTL_EVNTI_SHIFT		4
83 #define	CNTHCTL_EVNTI_MASK		(0xful << CNTHCTL_EVNTI_SHIFT)
84 #define	CNTHCTL_ECV_SHIFT		12
85 #define	CNTHCTL_ECV_MASK		(0x1ul << CNTHCTL_ECV_SHIFT)
86 #define	 CNTHCTL_ECV_DIS		(0x0ul << CNTHCTL_ECV_SHIFT)
87 #define	 CNTHCTL_ECV_EN			(0x1ul << CNTHCTL_ECV_SHIFT)
88 #define	CNTHCTL_EL1TVT_SHIFT		13
89 #define	CNTHCTL_EL1TVT_MASK		(0x1ul << CNTHCTL_EL1TVT_SHIFT)
90 #define	 CNTHCTL_EL1TVT_NOTRAP		(0x0ul << CNTHCTL_EL1TVT_SHIFT)
91 #define	 CNTHCTL_EL1TVT_TRAP		(0x1ul << CNTHCTL_EL1TVT_SHIFT)
92 #define	CNTHCTL_EL1TVCT_SHIFT		14
93 #define	CNTHCTL_EL1TVCT_MASK		(0x1ul << CNTHCTL_EL1TVCT_SHIFT)
94 #define	 CNTHCTL_EL1TVCT_NOTRAP		(0x0ul << CNTHCTL_EL1TVCT_SHIFT)
95 #define	 CNTHCTL_EL1TVCT_TRAP		(0x1ul << CNTHCTL_EL1TVCT_SHIFT)
96 #define	CNTHCTL_EL1NVPCT_SHIFT		15
97 #define	CNTHCTL_EL1NVPCT_MASK		(0x1ul << CNTHCTL_EL1NVPCT_SHIFT)
98 #define	 CNTHCTL_EL1NVPCT_NOTRAP	(0x0ul << CNTHCTL_EL1NVPCT_SHIFT)
99 #define	 CNTHCTL_EL1NVPCT_TRAP		(0x1ul << CNTHCTL_EL1NVPCT_SHIFT)
100 #define	CNTHCTL_EL1NVVCT_SHIFT		16
101 #define	CNTHCTL_EL1NVVCT_MASK		(0x1ul << CNTHCTL_EL1NVVCT_SHIFT)
102 #define	 CNTHCTL_EL1NVVCT_NOTRAP	(0x0ul << CNTHCTL_EL1NVVCT_SHIFT)
103 #define	 CNTHCTL_EL1NVVCT_TRAP		(0x1ul << CNTHCTL_EL1NVVCT_SHIFT)
104 #define	CNTHCTL_EVNTIS_SHIFT		17
105 #define	CNTHCTL_EVNTIS_MASK		(0x1ul << CNTHCTL_EVNTIS_SHIFT)
106 #define	CNTHCTL_CNTVMASK_SHIFT		18
107 #define	CNTHCTL_CNTVMASK_MASK		(0x1ul << CNTHCTL_CNTVMASK_SHIFT)
108 #define	CNTHCTL_CNTPMASK_SHIFT		19
109 #define	CNTHCTL_CNTPMASK_MASK		(0x1ul << CNTHCTL_CNTPMASK_SHIFT)
110 
111 /* CNTPOFF_EL2 - Counter-timer Physical Offset Register */
112 #define	CNTPOFF_EL2_REG			MRS_REG_ALT_NAME(CNTPOFF_EL2)
113 #define	CNTPOFF_EL2_op0			3
114 #define	CNTPOFF_EL2_op1			4
115 #define	CNTPOFF_EL2_CRn			14
116 #define	CNTPOFF_EL2_CRm			0
117 #define	CNTPOFF_EL2_op2			6
118 
119 /* CPTR_EL2 - Architecture feature trap register */
120 /* Valid if HCR_EL2.E2H == 0 */
121 #define	CPTR_TRAP_ALL		0xc01037ff /* Enable all traps */
122 #define	CPTR_RES0		0x7fefc800
123 #define	CPTR_RES1		0x000032ff
124 #define	CPTR_TZ			0x00000100
125 #define	CPTR_TFP		0x00000400
126 #define	CPTR_TTA		0x00100000
127 /* Valid if HCR_EL2.E2H == 1 */
128 #define	CPTR_E2H_TRAP_ALL	0xd0000000
129 #define	CPTR_E2H_ZPEN		0x00030000
130 #define	CPTR_E2H_FPEN		0x00300000
131 #define	CPTR_E2H_TTA		0x10000000
132 /* Unconditionally valid */
133 #define	CPTR_TCPAC		0x80000000
134 
135 /* HCR_EL2 - Hypervisor Config Register */
136 #define	HCR_VM				(UL(0x1) << 0)
137 #define	HCR_SWIO			(UL(0x1) << 1)
138 #define	HCR_PTW				(UL(0x1) << 2)
139 #define	HCR_FMO				(UL(0x1) << 3)
140 #define	HCR_IMO				(UL(0x1) << 4)
141 #define	HCR_AMO				(UL(0x1) << 5)
142 #define	HCR_VF				(UL(0x1) << 6)
143 #define	HCR_VI				(UL(0x1) << 7)
144 #define	HCR_VSE				(UL(0x1) << 8)
145 #define	HCR_FB				(UL(0x1) << 9)
146 #define	HCR_BSU_MASK			(UL(0x3) << 10)
147 #define	 HCR_BSU_IS			(UL(0x1) << 10)
148 #define	 HCR_BSU_OS			(UL(0x2) << 10)
149 #define	 HCR_BSU_FS			(UL(0x3) << 10)
150 #define	HCR_DC				(UL(0x1) << 12)
151 #define	HCR_TWI				(UL(0x1) << 13)
152 #define	HCR_TWE				(UL(0x1) << 14)
153 #define	HCR_TID0			(UL(0x1) << 15)
154 #define	HCR_TID1			(UL(0x1) << 16)
155 #define	HCR_TID2			(UL(0x1) << 17)
156 #define	HCR_TID3			(UL(0x1) << 18)
157 #define	HCR_TSC				(UL(0x1) << 19)
158 #define	HCR_TIDCP			(UL(0x1) << 20)
159 #define	HCR_TACR			(UL(0x1) << 21)
160 #define	HCR_TSW				(UL(0x1) << 22)
161 #define	HCR_TPCP			(UL(0x1) << 23)
162 #define	HCR_TPU				(UL(0x1) << 24)
163 #define	HCR_TTLB			(UL(0x1) << 25)
164 #define	HCR_TVM				(UL(0x1) << 26)
165 #define	HCR_TGE				(UL(0x1) << 27)
166 #define	HCR_TDZ				(UL(0x1) << 28)
167 #define	HCR_HCD				(UL(0x1) << 29)
168 #define	HCR_TRVM			(UL(0x1) << 30)
169 #define	HCR_RW				(UL(0x1) << 31)
170 #define	HCR_CD				(UL(0x1) << 32)
171 #define	HCR_ID				(UL(0x1) << 33)
172 #define	HCR_E2H				(UL(0x1) << 34)
173 #define	HCR_TLOR			(UL(0x1) << 35)
174 #define	HCR_TERR			(UL(0x1) << 36)
175 #define	HCR_TEA				(UL(0x1) << 37)
176 #define	HCR_MIOCNCE			(UL(0x1) << 38)
177 /* Bit 39 is reserved */
178 #define	HCR_APK				(UL(0x1) << 40)
179 #define	HCR_API				(UL(0x1) << 41)
180 #define	HCR_NV				(UL(0x1) << 42)
181 #define	HCR_NV1				(UL(0x1) << 43)
182 #define	HCR_AT				(UL(0x1) << 44)
183 #define	HCR_NV2				(UL(0x1) << 45)
184 #define	HCR_FWB				(UL(0x1) << 46)
185 #define	HCR_FIEN			(UL(0x1) << 47)
186 /* Bit 48 is reserved */
187 #define	HCR_TID4			(UL(0x1) << 49)
188 #define	HCR_TICAB			(UL(0x1) << 50)
189 #define	HCR_AMVOFFEN			(UL(0x1) << 51)
190 #define	HCR_TOCU			(UL(0x1) << 52)
191 #define	HCR_EnSCXT			(UL(0x1) << 53)
192 #define	HCR_TTLBIS			(UL(0x1) << 54)
193 #define	HCR_TTLBOS			(UL(0x1) << 55)
194 #define	HCR_ATA				(UL(0x1) << 56)
195 #define	HCR_DCT				(UL(0x1) << 57)
196 #define	HCR_TID5			(UL(0x1) << 58)
197 #define	HCR_TWEDEn			(UL(0x1) << 59)
198 #define	HCR_TWEDEL_MASK			(UL(0xf) << 60)
199 
200 /* HCRX_EL2 - Extended Hypervisor Configuration Register */
201 #define HCRX_EL2_REG		MRS_REG_ALT_NAME(HCRX_EL2)
202 #define HCRX_EL2_op0		3
203 #define HCRX_EL2_op1		4
204 #define HCRX_EL2_CRn		1
205 #define HCRX_EL2_CRm		2
206 #define HCRX_EL2_op2		2
207 
208 #define HCRX_EnAS0			(UL(0x1) << 0)
209 #define HCRX_EnALS			(UL(0x1) << 1)
210 #define HCRX_EnASR			(UL(0x1) << 2)
211 #define HCRX_FnXS			(UL(0x1) << 3)
212 #define HCRX_FGTnXS			(UL(0x1) << 4)
213 #define HCRX_SMPME			(UL(0x1) << 5)
214 #define HCRX_TALLINT			(UL(0x1) << 6)
215 #define HCRX_VINMI			(UL(0x1) << 7)
216 #define HCRX_VFNMI			(UL(0x1) << 8)
217 #define HCRX_CMOW			(UL(0x1) << 9)
218 #define HCRX_MCE2			(UL(0x1) << 10)
219 #define HCRX_MSCEn			(UL(0x1) << 11)
220 /* Bits 12 & 13 are reserved */
221 #define HCRX_TCR2En			(UL(0x1) << 14)
222 #define HCRX_SCTLR2En			(UL(0x1) << 15)
223 #define HCRX_PTTWI			(UL(0x1) << 16)
224 #define HCRX_D128En			(UL(0x1) << 17)
225 #define HCRX_EnSNERR			(UL(0x1) << 18)
226 #define HCRX_TMEA			(UL(0x1) << 19)
227 #define HCRX_EnSDERR			(UL(0x1) << 20)
228 #define HCRX_EnIDCP128			(UL(0x1) << 21)
229 #define HCRX_GCSEn			(UL(0x1) << 22)
230 #define HCRX_EnFPM			(UL(0x1) << 23)
231 #define HCRX_PACMEn			(UL(0x1) << 24)
232 /* Bit 25 is reserved */
233 #define HCRX_SRMASKEn			(UL(0x1) << 26)
234 
235 /* HPFAR_EL2 - Hypervisor IPA Fault Address Register */
236 #define	HPFAR_EL2_FIPA_SHIFT	4
237 #define	HPFAR_EL2_FIPA_MASK	0xfffffffff0
238 #define	HPFAR_EL2_FIPA_GET(x)	\
239     (((x) & HPFAR_EL2_FIPA_MASK) >> HPFAR_EL2_FIPA_SHIFT)
240 /* HPFAR_EL2_FIPA holds the 4k page address */
241 #define	HPFAR_EL2_FIPA_ADDR(x)	\
242     (HPFAR_EL2_FIPA_GET(x) << 12)
243 /* The bits from FAR_EL2 we need to add to HPFAR_EL2_FIPA_ADDR */
244 #define	FAR_EL2_HPFAR_PAGE_MASK	(0xffful)
245 
246 /* ICC_SRE_EL2 */
247 #define	ICC_SRE_EL2_SRE		(1UL << 0)
248 #define	ICC_SRE_EL2_EN		(1UL << 3)
249 
250 /* MDCR_EL2 - Hyp Debug Control Register */
251 #define	MDCR_EL2_HPMN_MASK	0x1f
252 #define	MDCR_EL2_HPMN_SHIFT	0
253 #define	MDCR_EL2_TPMCR_SHIFT	5
254 #define	MDCR_EL2_TPMCR		(0x1UL << MDCR_EL2_TPMCR_SHIFT)
255 #define	MDCR_EL2_TPM_SHIFT	6
256 #define	MDCR_EL2_TPM		(0x1UL << MDCR_EL2_TPM_SHIFT)
257 #define	MDCR_EL2_HPME_SHIFT	7
258 #define	MDCR_EL2_HPME		(0x1UL << MDCR_EL2_HPME_SHIFT)
259 #define	MDCR_EL2_TDE_SHIFT	8
260 #define	MDCR_EL2_TDE		(0x1UL << MDCR_EL2_TDE_SHIFT)
261 #define	MDCR_EL2_TDA_SHIFT	9
262 #define	MDCR_EL2_TDA		(0x1UL << MDCR_EL2_TDA_SHIFT)
263 #define	MDCR_EL2_TDOSA_SHIFT	10
264 #define	MDCR_EL2_TDOSA		(0x1UL << MDCR_EL2_TDOSA_SHIFT)
265 #define	MDCR_EL2_TDRA_SHIFT	11
266 #define	MDCR_EL2_TDRA		(0x1UL << MDCR_EL2_TDRA_SHIFT)
267 #define	MDCR_EL2_E2PB_SHIFT	12
268 #define	MDCR_EL2_E2PB_MASK	(0x3UL << MDCR_EL2_E2PB_SHIFT)
269 #define	MDCR_EL2_TPMS_SHIFT	14
270 #define	MDCR_EL2_TPMS		(0x1UL << MDCR_EL2_TPMS_SHIFT)
271 #define	MDCR_EL2_EnSPM_SHIFT	15
272 #define	MDCR_EL2_EnSPM		(0x1UL << MDCR_EL2_EnSPM_SHIFT)
273 #define	MDCR_EL2_HPMD_SHIFT	17
274 #define	MDCR_EL2_HPMD		(0x1UL << MDCR_EL2_HPMD_SHIFT)
275 #define	MDCR_EL2_TTRF_SHIFT	19
276 #define	MDCR_EL2_TTRF		(0x1UL << MDCR_EL2_TTRF_SHIFT)
277 #define	MDCR_EL2_HCCD_SHIFT	23
278 #define	MDCR_EL2_HCCD		(0x1UL << MDCR_EL2_HCCD_SHIFT)
279 #define	MDCR_EL2_E2TB_SHIFT	24
280 #define	MDCR_EL2_E2TB_MASK	(0x3UL << MDCR_EL2_E2TB_SHIFT)
281 #define	MDCR_EL2_HLP_SHIFT	26
282 #define	MDCR_EL2_HLP		(0x1UL << MDCR_EL2_HLP_SHIFT)
283 #define	MDCR_EL2_TDCC_SHIFT	27
284 #define	MDCR_EL2_TDCC		(0x1UL << MDCR_EL2_TDCC_SHIFT)
285 #define	MDCR_EL2_MTPME_SHIFT	28
286 #define	MDCR_EL2_MTPME		(0x1UL << MDCR_EL2_MTPME_SHIFT)
287 #define	MDCR_EL2_HPMFZO_SHIFT	29
288 #define	MDCR_EL2_HPMFZO		(0x1UL << MDCR_EL2_HPMFZO_SHIFT)
289 #define	MDCR_EL2_PMSSE_SHIFT	30
290 #define	MDCR_EL2_PMSSE_MASK	(0x3UL << MDCR_EL2_PMSSE_SHIFT)
291 #define	MDCR_EL2_HPMFZS_SHIFT	36
292 #define	MDCR_EL2_HPMFZS		(0x1UL << MDCR_EL2_HPMFZS_SHIFT)
293 #define	MDCR_EL2_PMEE_SHIFT	40
294 #define	MDCR_EL2_PMEE_MASK	(0x3UL << MDCR_EL2_PMEE_SHIFT)
295 #define	MDCR_EL2_EBWE_SHIFT	43
296 #define	MDCR_EL2_EBWE		(0x1UL << MDCR_EL2_EBWE_SHIFT)
297 
298 /* SCTLR_EL2 - System Control Register */
299 #define	SCTLR_EL2_RES1		0x30c50830
300 #define	SCTLR_EL2_M_SHIFT	0
301 #define	SCTLR_EL2_M		(0x1UL << SCTLR_EL2_M_SHIFT)
302 #define	SCTLR_EL2_A_SHIFT	1
303 #define	SCTLR_EL2_A		(0x1UL << SCTLR_EL2_A_SHIFT)
304 #define	SCTLR_EL2_C_SHIFT	2
305 #define	SCTLR_EL2_C		(0x1UL << SCTLR_EL2_C_SHIFT)
306 #define	SCTLR_EL2_SA_SHIFT	3
307 #define	SCTLR_EL2_SA		(0x1UL << SCTLR_EL2_SA_SHIFT)
308 #define	SCTLR_EL2_EOS_SHIFT	11
309 #define	SCTLR_EL2_EOS		(0x1UL << SCTLR_EL2_EOS_SHIFT)
310 #define	SCTLR_EL2_I_SHIFT	12
311 #define	SCTLR_EL2_I		(0x1UL << SCTLR_EL2_I_SHIFT)
312 #define	SCTLR_EL2_WXN_SHIFT	19
313 #define	SCTLR_EL2_WXN		(0x1UL << SCTLR_EL2_WXN_SHIFT)
314 #define	SCTLR_EL2_EIS_SHIFT	22
315 #define	SCTLR_EL2_EIS		(0x1UL << SCTLR_EL2_EIS_SHIFT)
316 #define	SCTLR_EL2_EE_SHIFT	25
317 #define	SCTLR_EL2_EE		(0x1UL << SCTLR_EL2_EE_SHIFT)
318 
319 /* TCR_EL2 - Translation Control Register */
320 #define	TCR_EL2_RES1		((0x1UL << 31) | (0x1UL << 23))
321 #define	TCR_EL2_T0SZ_SHIFT	0
322 #define	TCR_EL2_T0SZ_MASK	(0x3fUL << TCR_EL2_T0SZ_SHIFT)
323 #define	TCR_EL2_T0SZ(x)		((x) << TCR_EL2_T0SZ_SHIFT)
324 /* Bits 7:6 are reserved */
325 #define	TCR_EL2_IRGN0_SHIFT	8
326 #define	TCR_EL2_IRGN0_MASK	(0x3UL << TCR_EL2_IRGN0_SHIFT)
327 #define	TCR_EL2_IRGN0_WBWA	(1UL << TCR_EL2_IRGN0_SHIFT)
328 #define	TCR_EL2_ORGN0_SHIFT	10
329 #define	TCR_EL2_ORGN0_MASK	(0x3UL << TCR_EL2_ORGN0_SHIFT)
330 #define	TCR_EL2_ORGN0_WBWA	(1UL << TCR_EL2_ORGN0_SHIFT)
331 #define	TCR_EL2_SH0_SHIFT	12
332 #define	TCR_EL2_SH0_MASK	(0x3UL << TCR_EL2_SH0_SHIFT)
333 #define	TCR_EL2_SH0_IS		(3UL << TCR_EL2_SH0_SHIFT)
334 #define	TCR_EL2_TG0_SHIFT	14
335 #define	TCR_EL2_TG0_MASK	(0x3UL << TCR_EL2_TG0_SHIFT)
336 #define	TCR_EL2_TG0_4K		(0x0UL << TCR_EL2_TG0_SHIFT)
337 #define	TCR_EL2_TG0_64K		(0x1UL << TCR_EL2_TG0_SHIFT)
338 #define	TCR_EL2_TG0_16K		(0x2UL << TCR_EL2_TG0_SHIFT)
339 #define	TCR_EL2_PS_SHIFT	16
340 #define	TCR_EL2_PS_MASK		(0xfUL << TCR_EL2_PS_SHIFT)
341 #define	 TCR_EL2_PS_32BITS	(0UL << TCR_EL2_PS_SHIFT)
342 #define	 TCR_EL2_PS_36BITS	(1UL << TCR_EL2_PS_SHIFT)
343 #define	 TCR_EL2_PS_40BITS	(2UL << TCR_EL2_PS_SHIFT)
344 #define	 TCR_EL2_PS_42BITS	(3UL << TCR_EL2_PS_SHIFT)
345 #define	 TCR_EL2_PS_44BITS	(4UL << TCR_EL2_PS_SHIFT)
346 #define	 TCR_EL2_PS_48BITS	(5UL << TCR_EL2_PS_SHIFT)
347 #define	 TCR_EL2_PS_52BITS	(6UL << TCR_EL2_PS_SHIFT)
348 #define	TCR_EL2_HPD_SHIFT	24
349 #define	TCR_EL2_HPD		(1UL << TCR_EL2_HPD_SHIFT)
350 #define	TCR_EL2_HWU59_SHIFT	25
351 #define	TCR_EL2_HWU59		(1UL << TCR_EL2_HWU59_SHIFT)
352 #define	TCR_EL2_HWU60_SHIFT	26
353 #define	TCR_EL2_HWU60		(1UL << TCR_EL2_HWU60_SHIFT)
354 #define	TCR_EL2_HWU61_SHIFT	27
355 #define	TCR_EL2_HWU61		(1UL << TCR_EL2_HWU61_SHIFT)
356 #define	TCR_EL2_HWU62_SHIFT	28
357 #define	TCR_EL2_HWU62		(1UL << TCR_EL2_HWU62_SHIFT)
358 #define	TCR_EL2_HWU		\
359     (TCR_EL2_HWU59 | TCR_EL2_HWU60 | TCR_EL2_HWU61 | TCR_EL2_HWU62)
360 
361 /* VMPDIR_EL2 - Virtualization Multiprocessor ID Register */
362 #define	VMPIDR_EL2_U		0x0000000040000000
363 #define	VMPIDR_EL2_MT		0x0000000001000000
364 #define	VMPIDR_EL2_RES1		0x0000000080000000
365 
366 /* VTCR_EL2 - Virtualization Translation Control Register */
367 #define	VTCR_EL2_RES1		(0x1UL << 31)
368 #define	VTCR_EL2_T0SZ_SHIFT	0
369 #define	VTCR_EL2_T0SZ_MASK	(0x3fUL << VTCR_EL2_T0SZ_SHIFT)
370 #define	VTCR_EL2_T0SZ(x)	((x) << VTCR_EL2_T0SZ_SHIFT)
371 #define	VTCR_EL2_SL0_SHIFT	6
372 #define	 VTCR_EL2_SL0_4K_LVL2	(0x0UL << VTCR_EL2_SL0_SHIFT)
373 #define	 VTCR_EL2_SL0_4K_LVL1	(0x1UL << VTCR_EL2_SL0_SHIFT)
374 #define	 VTCR_EL2_SL0_4K_LVL0	(0x2UL << VTCR_EL2_SL0_SHIFT)
375 #define	 VTCR_EL2_SL0_16K_LVL2	(0x1UL << VTCR_EL2_SL0_SHIFT)
376 #define	 VTCR_EL2_SL0_16K_LVL1	(0x2UL << VTCR_EL2_SL0_SHIFT)
377 #define	 VTCR_EL2_SL0_16K_LVL0	(0x3UL << VTCR_EL2_SL0_SHIFT)
378 #define	VTCR_EL2_IRGN0_SHIFT	8
379 #define	 VTCR_EL2_IRGN0_WBWA	(0x1UL << VTCR_EL2_IRGN0_SHIFT)
380 #define	VTCR_EL2_ORGN0_SHIFT	10
381 #define	 VTCR_EL2_ORGN0_WBWA	(0x1UL << VTCR_EL2_ORGN0_SHIFT)
382 #define	VTCR_EL2_SH0_SHIFT	12
383 #define	 VTCR_EL2_SH0_NS	(0x0UL << VTCR_EL2_SH0_SHIFT)
384 #define	 VTCR_EL2_SH0_OS	(0x2UL << VTCR_EL2_SH0_SHIFT)
385 #define	 VTCR_EL2_SH0_IS	(0x3UL << VTCR_EL2_SH0_SHIFT)
386 #define	VTCR_EL2_TG0_SHIFT	14
387 #define	 VTCR_EL2_TG0_4K	(0x0UL << VTCR_EL2_TG0_SHIFT)
388 #define	 VTCR_EL2_TG0_64K	(0x1UL << VTCR_EL2_TG0_SHIFT)
389 #define	 VTCR_EL2_TG0_16K	(0x2UL << VTCR_EL2_TG0_SHIFT)
390 #define	VTCR_EL2_PS_SHIFT	16
391 #define	 VTCR_EL2_PS_32BIT	(0x0UL << VTCR_EL2_PS_SHIFT)
392 #define	 VTCR_EL2_PS_36BIT	(0x1UL << VTCR_EL2_PS_SHIFT)
393 #define	 VTCR_EL2_PS_40BIT	(0x2UL << VTCR_EL2_PS_SHIFT)
394 #define	 VTCR_EL2_PS_42BIT	(0x3UL << VTCR_EL2_PS_SHIFT)
395 #define	 VTCR_EL2_PS_44BIT	(0x4UL << VTCR_EL2_PS_SHIFT)
396 #define	 VTCR_EL2_PS_48BIT	(0x5UL << VTCR_EL2_PS_SHIFT)
397 #define	 VTCR_EL2_PS_52BIT	(0x6UL << VTCR_EL2_PS_SHIFT)
398 #define	VTCR_EL2_DS_SHIFT	32
399 #define	VTCR_EL2_DS		(0x1UL << VTCR_EL2_DS_SHIFT)
400 
401 /* VTTBR_EL2 - Virtualization Translation Table Base Register */
402 #define	VTTBR_VMID_MASK		0xffff000000000000
403 #define	VTTBR_VMID_SHIFT	48
404 /* Assumed to be 0 by locore.S */
405 #define	VTTBR_HOST		0x0000000000000000
406 
407 #endif /* !_MACHINE_HYPERVISOR_H_ */
408