xref: /freebsd/sys/arm64/include/armreg.h (revision a7b05eb16c9d84e1fd59864f5da67d23897ed91c)
1e5acd89cSAndrew Turner /*-
2e5acd89cSAndrew Turner  * Copyright (c) 2013, 2014 Andrew Turner
3e5acd89cSAndrew Turner  * Copyright (c) 2015 The FreeBSD Foundation
4e5acd89cSAndrew Turner  * All rights reserved.
5e5acd89cSAndrew Turner  *
6e5acd89cSAndrew Turner  * This software was developed by Andrew Turner under
7e5acd89cSAndrew Turner  * sponsorship from the FreeBSD Foundation.
8e5acd89cSAndrew Turner  *
9e5acd89cSAndrew Turner  * Redistribution and use in source and binary forms, with or without
10e5acd89cSAndrew Turner  * modification, are permitted provided that the following conditions
11e5acd89cSAndrew Turner  * are met:
12e5acd89cSAndrew Turner  * 1. Redistributions of source code must retain the above copyright
13e5acd89cSAndrew Turner  *    notice, this list of conditions and the following disclaimer.
14e5acd89cSAndrew Turner  * 2. Redistributions in binary form must reproduce the above copyright
15e5acd89cSAndrew Turner  *    notice, this list of conditions and the following disclaimer in the
16e5acd89cSAndrew Turner  *    documentation and/or other materials provided with the distribution.
17e5acd89cSAndrew Turner  *
18e5acd89cSAndrew Turner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19e5acd89cSAndrew Turner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20e5acd89cSAndrew Turner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21e5acd89cSAndrew Turner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22e5acd89cSAndrew Turner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23e5acd89cSAndrew Turner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24e5acd89cSAndrew Turner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25e5acd89cSAndrew Turner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26e5acd89cSAndrew Turner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27e5acd89cSAndrew Turner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28e5acd89cSAndrew Turner  * SUCH DAMAGE.
29e5acd89cSAndrew Turner  *
30e5acd89cSAndrew Turner  * $FreeBSD$
31e5acd89cSAndrew Turner  */
32e5acd89cSAndrew Turner 
33e5acd89cSAndrew Turner #ifndef _MACHINE_ARMREG_H_
34e5acd89cSAndrew Turner #define	_MACHINE_ARMREG_H_
35e5acd89cSAndrew Turner 
368a1867f4SWojciech Macek #define	INSN_SIZE		4
378a1867f4SWojciech Macek 
38cb5343c2SAndrew Turner #define	MRS_MASK			0xfff00000
39cb5343c2SAndrew Turner #define	MRS_VALUE			0xd5300000
40cb5343c2SAndrew Turner #define	MRS_SPECIAL(insn)		((insn) & 0x000fffe0)
41cb5343c2SAndrew Turner #define	MRS_REGISTER(insn)		((insn) & 0x0000001f)
42cb5343c2SAndrew Turner #define	 MRS_Op0_SHIFT			19
43cb5343c2SAndrew Turner #define	 MRS_Op0_MASK			0x00080000
44cb5343c2SAndrew Turner #define	 MRS_Op1_SHIFT			16
45cb5343c2SAndrew Turner #define	 MRS_Op1_MASK			0x00070000
46cb5343c2SAndrew Turner #define	 MRS_CRn_SHIFT			12
47cb5343c2SAndrew Turner #define	 MRS_CRn_MASK			0x0000f000
48cb5343c2SAndrew Turner #define	 MRS_CRm_SHIFT			8
49cb5343c2SAndrew Turner #define	 MRS_CRm_MASK			0x00000f00
50cb5343c2SAndrew Turner #define	 MRS_Op2_SHIFT			5
51cb5343c2SAndrew Turner #define	 MRS_Op2_MASK			0x000000e0
52cb5343c2SAndrew Turner #define	 MRS_Rt_SHIFT			0
53cb5343c2SAndrew Turner #define	 MRS_Rt_MASK			0x0000001f
54e68508e1SAndrew Turner #define	MRS_REG(op0, op1, crn, crm, op2)				\
55e68508e1SAndrew Turner     (((op0) << MRS_Op0_SHIFT) | ((op1) << MRS_Op1_SHIFT) |		\
56e68508e1SAndrew Turner      ((crn) << MRS_CRn_SHIFT) | ((crm) << MRS_CRm_SHIFT) |		\
57e68508e1SAndrew Turner      ((op2) << MRS_Op2_SHIFT))
58cb5343c2SAndrew Turner 
59e5acd89cSAndrew Turner #define	READ_SPECIALREG(reg)						\
60c749d685SJulian Elischer ({	uint64_t _val;							\
61c749d685SJulian Elischer 	__asm __volatile("mrs	%0, " __STRING(reg) : "=&r" (_val));	\
62c749d685SJulian Elischer 	_val;								\
63e5acd89cSAndrew Turner })
64c749d685SJulian Elischer #define	WRITE_SPECIALREG(reg, _val)					\
65c749d685SJulian Elischer 	__asm __volatile("msr	" __STRING(reg) ", %0" : : "r"((uint64_t)_val))
66e5acd89cSAndrew Turner 
67f31c5955SAndrew Turner #define	UL(x)	UINT64_C(x)
68f31c5955SAndrew Turner 
693a1c1a30SAndrew Turner /* CNTHCTL_EL2 - Counter-timer Hypervisor Control register */
703a1c1a30SAndrew Turner #define	CNTHCTL_EVNTI_MASK	(0xf << 4) /* Bit to trigger event stream */
713a1c1a30SAndrew Turner #define	CNTHCTL_EVNTDIR		(1 << 3) /* Control transition trigger bit */
723a1c1a30SAndrew Turner #define	CNTHCTL_EVNTEN		(1 << 2) /* Enable event stream */
733a1c1a30SAndrew Turner #define	CNTHCTL_EL1PCEN		(1 << 1) /* Allow EL0/1 physical timer access */
743a1c1a30SAndrew Turner #define	CNTHCTL_EL1PCTEN	(1 << 0) /*Allow EL0/1 physical counter access*/
753a1c1a30SAndrew Turner 
763a1c1a30SAndrew Turner /* CNTP_CTL_EL0 - Counter-timer Physical Timer Control register */
773a1c1a30SAndrew Turner #define	CNTP_CTL_ENABLE		(1 << 0)
783a1c1a30SAndrew Turner #define	CNTP_CTL_IMASK		(1 << 1)
793a1c1a30SAndrew Turner #define	CNTP_CTL_ISTATUS	(1 << 2)
803a1c1a30SAndrew Turner 
81e5acd89cSAndrew Turner /* CPACR_EL1 */
82e5acd89cSAndrew Turner #define	CPACR_FPEN_MASK		(0x3 << 20)
83e5acd89cSAndrew Turner #define	 CPACR_FPEN_TRAP_ALL1	(0x0 << 20) /* Traps from EL0 and EL1 */
84e5acd89cSAndrew Turner #define	 CPACR_FPEN_TRAP_EL0	(0x1 << 20) /* Traps from EL0 */
85e5acd89cSAndrew Turner #define	 CPACR_FPEN_TRAP_ALL2	(0x2 << 20) /* Traps from EL0 and EL1 */
86e5acd89cSAndrew Turner #define	 CPACR_FPEN_TRAP_NONE	(0x3 << 20) /* No traps */
87e5acd89cSAndrew Turner #define	CPACR_TTA		(0x1 << 28)
88e5acd89cSAndrew Turner 
89e5acd89cSAndrew Turner /* CTR_EL0 - Cache Type Register */
90c32e28d5SAndrew Turner #define	CTR_RES1		(1 << 31)
91c32e28d5SAndrew Turner #define	CTR_TminLine_SHIFT	32
92c32e28d5SAndrew Turner #define	CTR_TminLine_MASK	(UL(0x3f) << CTR_TminLine_SHIFT)
93c32e28d5SAndrew Turner #define	CTR_TminLine_VAL(reg)	((reg) & CTR_TminLine_MASK)
94c32e28d5SAndrew Turner #define	CTR_DIC_SHIFT		29
95c32e28d5SAndrew Turner #define	CTR_DIC_MASK		(0x1 << CTR_DIC_SHIFT)
96c32e28d5SAndrew Turner #define	CTR_DIC_VAL(reg)	((reg) & CTR_DIC_MASK)
97c32e28d5SAndrew Turner #define	CTR_IDC_SHIFT		28
98c32e28d5SAndrew Turner #define	CTR_IDC_MASK		(0x1 << CTR_IDC_SHIFT)
99c32e28d5SAndrew Turner #define	CTR_IDC_VAL(reg)	((reg) & CTR_IDC_MASK)
100c32e28d5SAndrew Turner #define	CTR_CWG_SHIFT		24
101c32e28d5SAndrew Turner #define	CTR_CWG_MASK		(0xf << CTR_CWG_SHIFT)
102c32e28d5SAndrew Turner #define	CTR_CWG_VAL(reg)	((reg) & CTR_CWG_MASK)
103c32e28d5SAndrew Turner #define	CTR_CWG_SIZE(reg)	(4 << (CTR_CWG_VAL(reg) >> CTR_CWG_SHIFT))
104c32e28d5SAndrew Turner #define	CTR_ERG_SHIFT		20
105c32e28d5SAndrew Turner #define	CTR_ERG_MASK		(0xf << CTR_ERG_SHIFT)
106c32e28d5SAndrew Turner #define	CTR_ERG_VAL(reg)	((reg) & CTR_ERG_MASK)
107c32e28d5SAndrew Turner #define	CTR_ERG_SIZE(reg)	(4 << (CTR_ERG_VAL(reg) >> CTR_ERG_SHIFT))
108e5acd89cSAndrew Turner #define	CTR_DLINE_SHIFT		16
109e5acd89cSAndrew Turner #define	CTR_DLINE_MASK		(0xf << CTR_DLINE_SHIFT)
110c32e28d5SAndrew Turner #define	CTR_DLINE_VAL(reg)	((reg) & CTR_DLINE_MASK)
111c32e28d5SAndrew Turner #define	CTR_DLINE_SIZE(reg)	(4 << (CTR_DLINE_VAL(reg) >> CTR_DLINE_SHIFT))
112c32e28d5SAndrew Turner #define	CTR_L1IP_SHIFT		14
113c32e28d5SAndrew Turner #define	CTR_L1IP_MASK		(0x3 << CTR_L1IP_SHIFT)
114c32e28d5SAndrew Turner #define	CTR_L1IP_VAL(reg)	((reg) & CTR_L1IP_MASK)
115c32e28d5SAndrew Turner #define	 CTR_L1IP_VPIPT		(0 << CTR_L1IP_SHIFT)
116c32e28d5SAndrew Turner #define	 CTR_L1IP_AIVIVT	(1 << CTR_L1IP_SHIFT)
1172923027cSAndrew Turner #define	 CTR_L1IP_VIPT		(2 << CTR_L1IP_SHIFT)
118c32e28d5SAndrew Turner #define	 CTR_L1IP_PIPT		(3 << CTR_L1IP_SHIFT)
119e5acd89cSAndrew Turner #define	CTR_ILINE_SHIFT		0
120e5acd89cSAndrew Turner #define	CTR_ILINE_MASK		(0xf << CTR_ILINE_SHIFT)
121c32e28d5SAndrew Turner #define	CTR_ILINE_VAL(reg)	((reg) & CTR_ILINE_MASK)
122c32e28d5SAndrew Turner #define	CTR_ILINE_SIZE(reg)	(4 << (CTR_ILINE_VAL(reg) >> CTR_ILINE_SHIFT))
123e5acd89cSAndrew Turner 
12471374d5dSAndrew Turner /* DAIF - Interrupt Mask Bits */
12571374d5dSAndrew Turner #define	DAIF_D_MASKED		(1 << 9)
12671374d5dSAndrew Turner #define	DAIF_A_MASKED		(1 << 8)
12771374d5dSAndrew Turner #define	DAIF_I_MASKED		(1 << 7)
12871374d5dSAndrew Turner #define	DAIF_F_MASKED		(1 << 6)
12971374d5dSAndrew Turner 
130db278182SWojciech Macek /* DCZID_EL0 - Data Cache Zero ID register */
131db278182SWojciech Macek #define DCZID_DZP		(1 << 4) /* DC ZVA prohibited if non-0 */
132db278182SWojciech Macek #define DCZID_BS_SHIFT		0
133db278182SWojciech Macek #define DCZID_BS_MASK		(0xf << DCZID_BS_SHIFT)
134db278182SWojciech Macek #define	DCZID_BS_SIZE(reg)	(((reg) & DCZID_BS_MASK) >> DCZID_BS_SHIFT)
135db278182SWojciech Macek 
136e5acd89cSAndrew Turner /* ESR_ELx */
1373a1c1a30SAndrew Turner #define	ESR_ELx_ISS_MASK	0x01ffffff
138e5acd89cSAndrew Turner #define	 ISS_INSN_FnV		(0x01 << 10)
139e5acd89cSAndrew Turner #define	 ISS_INSN_EA		(0x01 << 9)
140e5acd89cSAndrew Turner #define	 ISS_INSN_S1PTW		(0x01 << 7)
141e5acd89cSAndrew Turner #define	 ISS_INSN_IFSC_MASK	(0x1f << 0)
1423a1c1a30SAndrew Turner 
1433a1c1a30SAndrew Turner #define	 ISS_MSR_DIR_SHIFT	0
1443a1c1a30SAndrew Turner #define	 ISS_MSR_DIR		(0x01 << ISS_MSR_DIR_SHIFT)
1453a1c1a30SAndrew Turner #define	 ISS_MSR_Rt_SHIFT	5
1463a1c1a30SAndrew Turner #define	 ISS_MSR_Rt_MASK	(0x1f << ISS_MSR_Rt_SHIFT)
1473a1c1a30SAndrew Turner #define	 ISS_MSR_Rt(x)		(((x) & ISS_MSR_Rt_MASK) >> ISS_MSR_Rt_SHIFT)
1483a1c1a30SAndrew Turner #define	 ISS_MSR_CRm_SHIFT	1
1493a1c1a30SAndrew Turner #define	 ISS_MSR_CRm_MASK	(0xf << ISS_MSR_CRm_SHIFT)
1503a1c1a30SAndrew Turner #define	 ISS_MSR_CRm(x)		(((x) & ISS_MSR_CRm_MASK) >> ISS_MSR_CRm_SHIFT)
1513a1c1a30SAndrew Turner #define	 ISS_MSR_CRn_SHIFT	10
1523a1c1a30SAndrew Turner #define	 ISS_MSR_CRn_MASK	(0xf << ISS_MSR_CRn_SHIFT)
1533a1c1a30SAndrew Turner #define	 ISS_MSR_CRn(x)		(((x) & ISS_MSR_CRn_MASK) >> ISS_MSR_CRn_SHIFT)
1543a1c1a30SAndrew Turner #define	 ISS_MSR_OP1_SHIFT	14
1553a1c1a30SAndrew Turner #define	 ISS_MSR_OP1_MASK	(0x7 << ISS_MSR_OP1_SHIFT)
1563a1c1a30SAndrew Turner #define	 ISS_MSR_OP1(x)		(((x) & ISS_MSR_OP1_MASK) >> ISS_MSR_OP1_SHIFT)
1573a1c1a30SAndrew Turner #define	 ISS_MSR_OP2_SHIFT	17
1583a1c1a30SAndrew Turner #define	 ISS_MSR_OP2_MASK	(0x7 << ISS_MSR_OP2_SHIFT)
1593a1c1a30SAndrew Turner #define	 ISS_MSR_OP2(x)		(((x) & ISS_MSR_OP2_MASK) >> ISS_MSR_OP2_SHIFT)
1603a1c1a30SAndrew Turner #define	 ISS_MSR_OP0_SHIFT	20
1613a1c1a30SAndrew Turner #define	 ISS_MSR_OP0_MASK	(0x3 << ISS_MSR_OP0_SHIFT)
1623a1c1a30SAndrew Turner #define	 ISS_MSR_OP0(x)		(((x) & ISS_MSR_OP0_MASK) >> ISS_MSR_OP0_SHIFT)
1633a1c1a30SAndrew Turner #define	 ISS_MSR_REG_MASK	\
1643a1c1a30SAndrew Turner     (ISS_MSR_OP0_MASK | ISS_MSR_OP2_MASK | ISS_MSR_OP1_MASK | 	\
1653a1c1a30SAndrew Turner      ISS_MSR_CRn_MASK | ISS_MSR_CRm_MASK)
1663a1c1a30SAndrew Turner 
1673a1c1a30SAndrew Turner #define	 ISS_DATA_ISV_SHIFT	24
1683a1c1a30SAndrew Turner #define	 ISS_DATA_ISV		(0x01 << ISS_DATA_ISV_SHIFT)
1693a1c1a30SAndrew Turner #define	 ISS_DATA_SAS_SHIFT	22
1703a1c1a30SAndrew Turner #define	 ISS_DATA_SAS_MASK	(0x03 << ISS_DATA_SAS_SHIFT)
1713a1c1a30SAndrew Turner #define	 ISS_DATA_SSE_SHIFT	21
1723a1c1a30SAndrew Turner #define	 ISS_DATA_SSE		(0x01 << ISS_DATA_SSE_SHIFT)
1733a1c1a30SAndrew Turner #define	 ISS_DATA_SRT_SHIFT	16
1743a1c1a30SAndrew Turner #define	 ISS_DATA_SRT_MASK	(0x1f << ISS_DATA_SRT_SHIFT)
175e5acd89cSAndrew Turner #define	 ISS_DATA_SF		(0x01 << 15)
176e5acd89cSAndrew Turner #define	 ISS_DATA_AR		(0x01 << 14)
177e5acd89cSAndrew Turner #define	 ISS_DATA_FnV		(0x01 << 10)
178a9da8477SMark Johnston #define	 ISS_DATA_EA		(0x01 << 9)
179a9da8477SMark Johnston #define	 ISS_DATA_CM		(0x01 << 8)
180a9da8477SMark Johnston #define	 ISS_DATA_S1PTW		(0x01 << 7)
1813a1c1a30SAndrew Turner #define	 ISS_DATA_WnR_SHIFT	6
1823a1c1a30SAndrew Turner #define	 ISS_DATA_WnR		(0x01 << ISS_DATA_WnR_SHIFT)
183a70475caSAndrew Turner #define	 ISS_DATA_DFSC_MASK	(0x3f << 0)
18463512a12SAndrew Turner #define	 ISS_DATA_DFSC_ASF_L0	(0x00 << 0)
18563512a12SAndrew Turner #define	 ISS_DATA_DFSC_ASF_L1	(0x01 << 0)
18663512a12SAndrew Turner #define	 ISS_DATA_DFSC_ASF_L2	(0x02 << 0)
18763512a12SAndrew Turner #define	 ISS_DATA_DFSC_ASF_L3	(0x03 << 0)
18863512a12SAndrew Turner #define	 ISS_DATA_DFSC_TF_L0	(0x04 << 0)
18963512a12SAndrew Turner #define	 ISS_DATA_DFSC_TF_L1	(0x05 << 0)
19063512a12SAndrew Turner #define	 ISS_DATA_DFSC_TF_L2	(0x06 << 0)
19163512a12SAndrew Turner #define	 ISS_DATA_DFSC_TF_L3	(0x07 << 0)
19263512a12SAndrew Turner #define	 ISS_DATA_DFSC_AFF_L1	(0x09 << 0)
19363512a12SAndrew Turner #define	 ISS_DATA_DFSC_AFF_L2	(0x0a << 0)
19463512a12SAndrew Turner #define	 ISS_DATA_DFSC_AFF_L3	(0x0b << 0)
19563512a12SAndrew Turner #define	 ISS_DATA_DFSC_PF_L1	(0x0d << 0)
19663512a12SAndrew Turner #define	 ISS_DATA_DFSC_PF_L2	(0x0e << 0)
19763512a12SAndrew Turner #define	 ISS_DATA_DFSC_PF_L3	(0x0f << 0)
19863512a12SAndrew Turner #define	 ISS_DATA_DFSC_EXT	(0x10 << 0)
19963512a12SAndrew Turner #define	 ISS_DATA_DFSC_EXT_L0	(0x14 << 0)
20063512a12SAndrew Turner #define	 ISS_DATA_DFSC_EXT_L1	(0x15 << 0)
20163512a12SAndrew Turner #define	 ISS_DATA_DFSC_EXT_L2	(0x16 << 0)
20263512a12SAndrew Turner #define	 ISS_DATA_DFSC_EXT_L3	(0x17 << 0)
20363512a12SAndrew Turner #define	 ISS_DATA_DFSC_ECC	(0x18 << 0)
20463512a12SAndrew Turner #define	 ISS_DATA_DFSC_ECC_L0	(0x1c << 0)
20563512a12SAndrew Turner #define	 ISS_DATA_DFSC_ECC_L1	(0x1d << 0)
20663512a12SAndrew Turner #define	 ISS_DATA_DFSC_ECC_L2	(0x1e << 0)
20763512a12SAndrew Turner #define	 ISS_DATA_DFSC_ECC_L3	(0x1f << 0)
20863512a12SAndrew Turner #define	 ISS_DATA_DFSC_ALIGN	(0x21 << 0)
209dc836c65SAndrew Turner #define	 ISS_DATA_DFSC_TLB_CONFLICT (0x30 << 0)
210e5acd89cSAndrew Turner #define	ESR_ELx_IL		(0x01 << 25)
211e5acd89cSAndrew Turner #define	ESR_ELx_EC_SHIFT	26
212e5acd89cSAndrew Turner #define	ESR_ELx_EC_MASK		(0x3f << 26)
213e5acd89cSAndrew Turner #define	ESR_ELx_EXCEPTION(esr)	(((esr) & ESR_ELx_EC_MASK) >> ESR_ELx_EC_SHIFT)
214e5acd89cSAndrew Turner #define	 EXCP_UNKNOWN		0x00	/* Unkwn exception */
2153a1c1a30SAndrew Turner #define	 EXCP_TRAP_WFI_WFE	0x01	/* Trapped WFI or WFE */
216e5acd89cSAndrew Turner #define	 EXCP_FP_SIMD		0x07	/* VFP/SIMD trap */
217e5acd89cSAndrew Turner #define	 EXCP_ILL_STATE		0x0e	/* Illegal execution state */
2187af24ff7SEd Schouten #define	 EXCP_SVC32		0x11	/* SVC trap for AArch32 */
2197af24ff7SEd Schouten #define	 EXCP_SVC64		0x15	/* SVC trap for AArch64 */
2203a1c1a30SAndrew Turner #define	 EXCP_HVC		0x16	/* HVC trap */
221e5acd89cSAndrew Turner #define	 EXCP_MSR		0x18	/* MSR/MRS trap */
222e5acd89cSAndrew Turner #define	 EXCP_INSN_ABORT_L	0x20	/* Instruction abort, from lower EL */
223e5acd89cSAndrew Turner #define	 EXCP_INSN_ABORT	0x21	/* Instruction abort, from same EL */
224e5acd89cSAndrew Turner #define	 EXCP_PC_ALIGN		0x22	/* PC alignment fault */
225e5acd89cSAndrew Turner #define	 EXCP_DATA_ABORT_L	0x24	/* Data abort, from lower EL */
226e5acd89cSAndrew Turner #define	 EXCP_DATA_ABORT	0x25	/* Data abort, from same EL */
227e5acd89cSAndrew Turner #define	 EXCP_SP_ALIGN		0x26	/* SP slignment fault */
228e5acd89cSAndrew Turner #define	 EXCP_TRAP_FP		0x2c	/* Trapped FP exception */
229e5acd89cSAndrew Turner #define	 EXCP_SERROR		0x2f	/* SError interrupt */
23005f39d1aSAndrew Turner #define	 EXCP_BRKPT_EL0		0x30	/* Hardware breakpoint, from same EL */
23187e19994SAndrew Turner #define	 EXCP_SOFTSTP_EL0	0x32	/* Software Step, from lower EL */
232e5acd89cSAndrew Turner #define	 EXCP_SOFTSTP_EL1	0x33	/* Software Step, from same EL */
233bd012c71SMitchell Horne #define	 EXCP_WATCHPT_EL0	0x34	/* Watchpoint, from lower EL */
234e5acd89cSAndrew Turner #define	 EXCP_WATCHPT_EL1	0x35	/* Watchpoint, from same EL */
235e5acd89cSAndrew Turner #define	 EXCP_BRK		0x3c	/* Breakpoint */
236e5acd89cSAndrew Turner 
23742cb216aSZbigniew Bodek /* ICC_CTLR_EL1 */
23842cb216aSZbigniew Bodek #define	ICC_CTLR_EL1_EOIMODE	(1U << 1)
23942cb216aSZbigniew Bodek 
24042cb216aSZbigniew Bodek /* ICC_IAR1_EL1 */
24142cb216aSZbigniew Bodek #define	ICC_IAR1_EL1_SPUR	(0x03ff)
24242cb216aSZbigniew Bodek 
24342cb216aSZbigniew Bodek /* ICC_IGRPEN0_EL1 */
24442cb216aSZbigniew Bodek #define	ICC_IGRPEN0_EL1_EN	(1U << 0)
24542cb216aSZbigniew Bodek 
24642cb216aSZbigniew Bodek /* ICC_PMR_EL1 */
24742cb216aSZbigniew Bodek #define	ICC_PMR_EL1_PRIO_MASK	(0xFFUL)
24842cb216aSZbigniew Bodek 
2498133eda9SZbigniew Bodek /* ICC_SGI1R_EL1 */
2508133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_TL_MASK		0xffffUL
2518133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_AFF1_SHIFT	16
2528133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_SGIID_SHIFT	24
2538133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_AFF2_SHIFT	32
2548133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_AFF3_SHIFT	48
2558133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_SGIID_MASK	0xfUL
2568133eda9SZbigniew Bodek #define	ICC_SGI1R_EL1_IRM		(0x1UL << 40)
2578133eda9SZbigniew Bodek 
25842cb216aSZbigniew Bodek /* ICC_SRE_EL1 */
25942cb216aSZbigniew Bodek #define	ICC_SRE_EL1_SRE		(1U << 0)
26042cb216aSZbigniew Bodek 
2615f0a5fefSAndrew Turner /* ID_AA64DFR0_EL1 */
262e68508e1SAndrew Turner #define	ID_AA64DFR0_EL1			MRS_REG(3, 0, 0, 5, 0)
263f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_DebugVer_SHIFT	0
264f31c5955SAndrew Turner #define	ID_AA64DFR0_DebugVer_MASK	(UL(0xf) << ID_AA64DFR0_DebugVer_SHIFT)
26544e446a1SAndrew Turner #define	ID_AA64DFR0_DebugVer_VAL(x)	((x) & ID_AA64DFR0_DebugVer_MASK)
266f31c5955SAndrew Turner #define	 ID_AA64DFR0_DebugVer_8		(UL(0x6) << ID_AA64DFR0_DebugVer_SHIFT)
267f31c5955SAndrew Turner #define	 ID_AA64DFR0_DebugVer_8_VHE	(UL(0x7) << ID_AA64DFR0_DebugVer_SHIFT)
268f31c5955SAndrew Turner #define	 ID_AA64DFR0_DebugVer_8_2	(UL(0x8) << ID_AA64DFR0_DebugVer_SHIFT)
269*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_DebugVer_8_4	(UL(0x9) << ID_AA64DFR0_DebugVer_SHIFT)
270f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_TraceVer_SHIFT	4
271f31c5955SAndrew Turner #define	ID_AA64DFR0_TraceVer_MASK	(UL(0xf) << ID_AA64DFR0_TraceVer_SHIFT)
27244e446a1SAndrew Turner #define	ID_AA64DFR0_TraceVer_VAL(x)	((x) & ID_AA64DFR0_TraceVer_MASK)
273f31c5955SAndrew Turner #define	 ID_AA64DFR0_TraceVer_NONE	(UL(0x0) << ID_AA64DFR0_TraceVer_SHIFT)
274f31c5955SAndrew Turner #define	 ID_AA64DFR0_TraceVer_IMPL	(UL(0x1) << ID_AA64DFR0_TraceVer_SHIFT)
275f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_PMUVer_SHIFT	8
276f31c5955SAndrew Turner #define	ID_AA64DFR0_PMUVer_MASK		(UL(0xf) << ID_AA64DFR0_PMUVer_SHIFT)
27744e446a1SAndrew Turner #define	ID_AA64DFR0_PMUVer_VAL(x)	((x) & ID_AA64DFR0_PMUVer_MASK)
278f31c5955SAndrew Turner #define	 ID_AA64DFR0_PMUVer_NONE	(UL(0x0) << ID_AA64DFR0_PMUVer_SHIFT)
279f31c5955SAndrew Turner #define	 ID_AA64DFR0_PMUVer_3		(UL(0x1) << ID_AA64DFR0_PMUVer_SHIFT)
280f31c5955SAndrew Turner #define	 ID_AA64DFR0_PMUVer_3_1		(UL(0x4) << ID_AA64DFR0_PMUVer_SHIFT)
281*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_PMUVer_3_4		(UL(0x5) << ID_AA64DFR0_PMUVer_SHIFT)
282*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_PMUVer_3_5		(UL(0x6) << ID_AA64DFR0_PMUVer_SHIFT)
283f31c5955SAndrew Turner #define	 ID_AA64DFR0_PMUVer_IMPL	(UL(0xf) << ID_AA64DFR0_PMUVer_SHIFT)
284f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_BRPs_SHIFT		12
285f31c5955SAndrew Turner #define	ID_AA64DFR0_BRPs_MASK		(UL(0xf) << ID_AA64DFR0_BRPs_SHIFT)
28644e446a1SAndrew Turner #define	ID_AA64DFR0_BRPs_VAL(x)	\
287f1fbf9c3SAndrew Turner     ((((x) >> ID_AA64DFR0_BRPs_SHIFT) & 0xf) + 1)
288f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_WRPs_SHIFT		20
289f31c5955SAndrew Turner #define	ID_AA64DFR0_WRPs_MASK		(UL(0xf) << ID_AA64DFR0_WRPs_SHIFT)
29044e446a1SAndrew Turner #define	ID_AA64DFR0_WRPs_VAL(x)	\
291f1fbf9c3SAndrew Turner     ((((x) >> ID_AA64DFR0_WRPs_SHIFT) & 0xf) + 1)
292f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_CTX_CMPs_SHIFT	28
293f31c5955SAndrew Turner #define	ID_AA64DFR0_CTX_CMPs_MASK	(UL(0xf) << ID_AA64DFR0_CTX_CMPs_SHIFT)
29444e446a1SAndrew Turner #define	ID_AA64DFR0_CTX_CMPs_VAL(x)	\
295f1fbf9c3SAndrew Turner     ((((x) >> ID_AA64DFR0_CTX_CMPs_SHIFT) & 0xf) + 1)
296f1fbf9c3SAndrew Turner #define	ID_AA64DFR0_PMSVer_SHIFT	32
297f31c5955SAndrew Turner #define	ID_AA64DFR0_PMSVer_MASK		(UL(0xf) << ID_AA64DFR0_PMSVer_SHIFT)
29844e446a1SAndrew Turner #define	ID_AA64DFR0_PMSVer_VAL(x)	((x) & ID_AA64DFR0_PMSVer_MASK)
299f31c5955SAndrew Turner #define	 ID_AA64DFR0_PMSVer_NONE	(UL(0x0) << ID_AA64DFR0_PMSVer_SHIFT)
300*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_PMSVer_SPE		(UL(0x1) << ID_AA64DFR0_PMSVer_SHIFT)
301*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_PMSVer_SPE_8_3	(UL(0x2) << ID_AA64DFR0_PMSVer_SHIFT)
302*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_DoubleLock_SHIFT	36
303*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_DoubleLock_MASK	(UL(0xf) << ID_AA64DFR0_DoubleLock_SHIFT)
304*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_DoubleLock_VAL(x)	((x) & ID_AA64DFR0_DoubleLock_MASK)
305*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_DoubleLock_IMPL	(UL(0x0) << ID_AA64DFR0_DoubleLock_SHIFT)
306*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_DoubleLock_NONE	(UL(0xf) << ID_AA64DFR0_DoubleLock_SHIFT)
307*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_TraceFilt_SHIFT	40
308*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_TraceFilt_MASK	(UL(0xf) << ID_AA64DFR0_TraceFilt_SHIFT)
309*a7b05eb1SAndrew Turner #define	ID_AA64DFR0_TraceFilt_VAL(x)	((x) & ID_AA64DFR0_TraceFilt_MASK)
310*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_TraceFilt_NONE	(UL(0x0) << ID_AA64DFR0_TraceFilt_SHIFT)
311*a7b05eb1SAndrew Turner #define	 ID_AA64DFR0_TraceFilt_8_4	(UL(0x1) << ID_AA64DFR0_TraceFilt_SHIFT)
3125f0a5fefSAndrew Turner 
3135f0a5fefSAndrew Turner /* ID_AA64ISAR0_EL1 */
314e68508e1SAndrew Turner #define	ID_AA64ISAR0_EL1		MRS_REG(3, 0, 0, 6, 0)
3155f0a5fefSAndrew Turner #define	ID_AA64ISAR0_AES_SHIFT		4
316f31c5955SAndrew Turner #define	ID_AA64ISAR0_AES_MASK		(UL(0xf) << ID_AA64ISAR0_AES_SHIFT)
31744e446a1SAndrew Turner #define	ID_AA64ISAR0_AES_VAL(x)		((x) & ID_AA64ISAR0_AES_MASK)
318f31c5955SAndrew Turner #define	 ID_AA64ISAR0_AES_NONE		(UL(0x0) << ID_AA64ISAR0_AES_SHIFT)
319f31c5955SAndrew Turner #define	 ID_AA64ISAR0_AES_BASE		(UL(0x1) << ID_AA64ISAR0_AES_SHIFT)
320f31c5955SAndrew Turner #define	 ID_AA64ISAR0_AES_PMULL		(UL(0x2) << ID_AA64ISAR0_AES_SHIFT)
3215f0a5fefSAndrew Turner #define	ID_AA64ISAR0_SHA1_SHIFT		8
322f31c5955SAndrew Turner #define	ID_AA64ISAR0_SHA1_MASK		(UL(0xf) << ID_AA64ISAR0_SHA1_SHIFT)
32344e446a1SAndrew Turner #define	ID_AA64ISAR0_SHA1_VAL(x)	((x) & ID_AA64ISAR0_SHA1_MASK)
324f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA1_NONE		(UL(0x0) << ID_AA64ISAR0_SHA1_SHIFT)
325f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA1_BASE		(UL(0x1) << ID_AA64ISAR0_SHA1_SHIFT)
3265f0a5fefSAndrew Turner #define	ID_AA64ISAR0_SHA2_SHIFT		12
327f31c5955SAndrew Turner #define	ID_AA64ISAR0_SHA2_MASK		(UL(0xf) << ID_AA64ISAR0_SHA2_SHIFT)
32844e446a1SAndrew Turner #define	ID_AA64ISAR0_SHA2_VAL(x)	((x) & ID_AA64ISAR0_SHA2_MASK)
329f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA2_NONE		(UL(0x0) << ID_AA64ISAR0_SHA2_SHIFT)
330f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA2_BASE		(UL(0x1) << ID_AA64ISAR0_SHA2_SHIFT)
331f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA2_512		(UL(0x2) << ID_AA64ISAR0_SHA2_SHIFT)
3325f0a5fefSAndrew Turner #define	ID_AA64ISAR0_CRC32_SHIFT	16
333f31c5955SAndrew Turner #define	ID_AA64ISAR0_CRC32_MASK		(UL(0xf) << ID_AA64ISAR0_CRC32_SHIFT)
33444e446a1SAndrew Turner #define	ID_AA64ISAR0_CRC32_VAL(x)	((x) & ID_AA64ISAR0_CRC32_MASK)
335f31c5955SAndrew Turner #define	 ID_AA64ISAR0_CRC32_NONE	(UL(0x0) << ID_AA64ISAR0_CRC32_SHIFT)
336f31c5955SAndrew Turner #define	 ID_AA64ISAR0_CRC32_BASE	(UL(0x1) << ID_AA64ISAR0_CRC32_SHIFT)
337f1fbf9c3SAndrew Turner #define	ID_AA64ISAR0_Atomic_SHIFT	20
338f31c5955SAndrew Turner #define	ID_AA64ISAR0_Atomic_MASK	(UL(0xf) << ID_AA64ISAR0_Atomic_SHIFT)
33944e446a1SAndrew Turner #define	ID_AA64ISAR0_Atomic_VAL(x)	((x) & ID_AA64ISAR0_Atomic_MASK)
340f31c5955SAndrew Turner #define	 ID_AA64ISAR0_Atomic_NONE	(UL(0x0) << ID_AA64ISAR0_Atomic_SHIFT)
341f31c5955SAndrew Turner #define	 ID_AA64ISAR0_Atomic_IMPL	(UL(0x2) << ID_AA64ISAR0_Atomic_SHIFT)
3422bafd72fSAndrew Turner #define	ID_AA64ISAR0_RDM_SHIFT		28
343f31c5955SAndrew Turner #define	ID_AA64ISAR0_RDM_MASK		(UL(0xf) << ID_AA64ISAR0_RDM_SHIFT)
34444e446a1SAndrew Turner #define	ID_AA64ISAR0_RDM_VAL(x)		((x) & ID_AA64ISAR0_RDM_MASK)
345f31c5955SAndrew Turner #define	 ID_AA64ISAR0_RDM_NONE		(UL(0x0) << ID_AA64ISAR0_RDM_SHIFT)
346f31c5955SAndrew Turner #define	 ID_AA64ISAR0_RDM_IMPL		(UL(0x1) << ID_AA64ISAR0_RDM_SHIFT)
347ca289945SAndrew Turner #define	ID_AA64ISAR0_SHA3_SHIFT		32
348f31c5955SAndrew Turner #define	ID_AA64ISAR0_SHA3_MASK		(UL(0xf) << ID_AA64ISAR0_SHA3_SHIFT)
34944e446a1SAndrew Turner #define	ID_AA64ISAR0_SHA3_VAL(x)	((x) & ID_AA64ISAR0_SHA3_MASK)
350f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA3_NONE		(UL(0x0) << ID_AA64ISAR0_SHA3_SHIFT)
351f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SHA3_IMPL		(UL(0x1) << ID_AA64ISAR0_SHA3_SHIFT)
352ca289945SAndrew Turner #define	ID_AA64ISAR0_SM3_SHIFT		36
353f31c5955SAndrew Turner #define	ID_AA64ISAR0_SM3_MASK		(UL(0xf) << ID_AA64ISAR0_SM3_SHIFT)
35444e446a1SAndrew Turner #define	ID_AA64ISAR0_SM3_VAL(x)		((x) & ID_AA64ISAR0_SM3_MASK)
355f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SM3_NONE		(UL(0x0) << ID_AA64ISAR0_SM3_SHIFT)
356f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SM3_IMPL		(UL(0x1) << ID_AA64ISAR0_SM3_SHIFT)
357ca289945SAndrew Turner #define	ID_AA64ISAR0_SM4_SHIFT		40
358f31c5955SAndrew Turner #define	ID_AA64ISAR0_SM4_MASK		(UL(0xf) << ID_AA64ISAR0_SM4_SHIFT)
35944e446a1SAndrew Turner #define	ID_AA64ISAR0_SM4_VAL(x)		((x) & ID_AA64ISAR0_SM4_MASK)
360f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SM4_NONE		(UL(0x0) << ID_AA64ISAR0_SM4_SHIFT)
361f31c5955SAndrew Turner #define	 ID_AA64ISAR0_SM4_IMPL		(UL(0x1) << ID_AA64ISAR0_SM4_SHIFT)
3625bb9cd61SAndrew Turner #define	ID_AA64ISAR0_DP_SHIFT		44
363f31c5955SAndrew Turner #define	ID_AA64ISAR0_DP_MASK		(UL(0xf) << ID_AA64ISAR0_DP_SHIFT)
36444e446a1SAndrew Turner #define	ID_AA64ISAR0_DP_VAL(x)		((x) & ID_AA64ISAR0_DP_MASK)
365f31c5955SAndrew Turner #define	 ID_AA64ISAR0_DP_NONE		(UL(0x0) << ID_AA64ISAR0_DP_SHIFT)
366f31c5955SAndrew Turner #define	 ID_AA64ISAR0_DP_IMPL		(UL(0x1) << ID_AA64ISAR0_DP_SHIFT)
36761949736SMitchell Horne #define	ID_AA64ISAR0_FHM_SHIFT		48
36861949736SMitchell Horne #define	ID_AA64ISAR0_FHM_MASK		(UL(0xf) << ID_AA64ISAR0_FHM_SHIFT)
36961949736SMitchell Horne #define	ID_AA64ISAR0_FHM_VAL(x)		((x) & ID_AA64ISAR0_FHM_MASK)
37061949736SMitchell Horne #define	 ID_AA64ISAR0_FHM_NONE		(UL(0x0) << ID_AA64ISAR0_FHM_SHIFT)
37161949736SMitchell Horne #define	 ID_AA64ISAR0_FHM_IMPL		(UL(0x1) << ID_AA64ISAR0_FHM_SHIFT)
37261949736SMitchell Horne #define	ID_AA64ISAR0_TS_SHIFT		52
37361949736SMitchell Horne #define	ID_AA64ISAR0_TS_MASK		(UL(0xf) << ID_AA64ISAR0_TS_SHIFT)
37461949736SMitchell Horne #define	ID_AA64ISAR0_TS_VAL(x)		((x) & ID_AA64ISAR0_TS_MASK)
37561949736SMitchell Horne #define	 ID_AA64ISAR0_TS_NONE		(UL(0x0) << ID_AA64ISAR0_TS_SHIFT)
37661949736SMitchell Horne #define	 ID_AA64ISAR0_TS_CondM_8_4	(UL(0x1) << ID_AA64ISAR0_TS_SHIFT)
37761949736SMitchell Horne #define	 ID_AA64ISAR0_TS_CondM_8_5	(UL(0x2) << ID_AA64ISAR0_TS_SHIFT)
37861949736SMitchell Horne #define	ID_AA64ISAR0_TLB_SHIFT		56
37961949736SMitchell Horne #define	ID_AA64ISAR0_TLB_MASK		(UL(0xf) << ID_AA64ISAR0_TLB_SHIFT)
38061949736SMitchell Horne #define	ID_AA64ISAR0_TLB_VAL(x)		((x) & ID_AA64ISAR0_TLB_MASK)
38161949736SMitchell Horne #define	 ID_AA64ISAR0_TLB_NONE		(UL(0x0) << ID_AA64ISAR0_TLB_SHIFT)
38261949736SMitchell Horne #define	 ID_AA64ISAR0_TLB_TLBIOS	(UL(0x1) << ID_AA64ISAR0_TLB_SHIFT)
38361949736SMitchell Horne #define	 ID_AA64ISAR0_TLB_TLBIOSR	(UL(0x2) << ID_AA64ISAR0_TLB_SHIFT)
38461949736SMitchell Horne #define	ID_AA64ISAR0_RNDR_SHIFT		60
38561949736SMitchell Horne #define	ID_AA64ISAR0_RNDR_MASK		(UL(0xf) << ID_AA64ISAR0_RNDR_SHIFT)
38661949736SMitchell Horne #define	ID_AA64ISAR0_RNDR_VAL(x)	((x) & ID_AA64ISAR0_RNDR_MASK)
38761949736SMitchell Horne #define	 ID_AA64ISAR0_RNDR_NONE		(UL(0x0) << ID_AA64ISAR0_RNDR_SHIFT)
38861949736SMitchell Horne #define	 ID_AA64ISAR0_RNDR_IMPL		(UL(0x1) << ID_AA64ISAR0_RNDR_SHIFT)
3895f0a5fefSAndrew Turner 
390f45dc694SAndrew Turner /* ID_AA64ISAR1_EL1 */
391e68508e1SAndrew Turner #define	ID_AA64ISAR1_EL1		MRS_REG(3, 0, 0, 6, 1)
3921a2e5c00SAndrew Turner #define	ID_AA64ISAR1_DPB_SHIFT		0
393f31c5955SAndrew Turner #define	ID_AA64ISAR1_DPB_MASK		(UL(0xf) << ID_AA64ISAR1_DPB_SHIFT)
39444e446a1SAndrew Turner #define	ID_AA64ISAR1_DPB_VAL(x)		((x) & ID_AA64ISAR1_DPB_MASK)
395f31c5955SAndrew Turner #define	 ID_AA64ISAR1_DPB_NONE		(UL(0x0) << ID_AA64ISAR1_DPB_SHIFT)
39661949736SMitchell Horne #define	 ID_AA64ISAR1_DPB_DCCVAP	(UL(0x1) << ID_AA64ISAR1_DPB_SHIFT)
39761949736SMitchell Horne #define	 ID_AA64ISAR1_DPB_DCCVADP	(UL(0x2) << ID_AA64ISAR1_DPB_SHIFT)
398ca289945SAndrew Turner #define	ID_AA64ISAR1_APA_SHIFT		4
399f31c5955SAndrew Turner #define	ID_AA64ISAR1_APA_MASK		(UL(0xf) << ID_AA64ISAR1_APA_SHIFT)
40044e446a1SAndrew Turner #define	ID_AA64ISAR1_APA_VAL(x)		((x) & ID_AA64ISAR1_APA_MASK)
401f31c5955SAndrew Turner #define	 ID_AA64ISAR1_APA_NONE		(UL(0x0) << ID_AA64ISAR1_APA_SHIFT)
402*a7b05eb1SAndrew Turner #define	 ID_AA64ISAR1_APA_PAC		(UL(0x1) << ID_AA64ISAR1_APA_SHIFT)
403*a7b05eb1SAndrew Turner #define	 ID_AA64ISAR1_APA_EPAC		(UL(0x2) << ID_AA64ISAR1_APA_SHIFT)
404ca289945SAndrew Turner #define	ID_AA64ISAR1_API_SHIFT		8
405f31c5955SAndrew Turner #define	ID_AA64ISAR1_API_MASK		(UL(0xf) << ID_AA64ISAR1_API_SHIFT)
40644e446a1SAndrew Turner #define	ID_AA64ISAR1_API_VAL(x)		((x) & ID_AA64ISAR1_API_MASK)
407f31c5955SAndrew Turner #define	 ID_AA64ISAR1_API_NONE		(UL(0x0) << ID_AA64ISAR1_API_SHIFT)
408*a7b05eb1SAndrew Turner #define	 ID_AA64ISAR1_API_PAC		(UL(0x1) << ID_AA64ISAR1_API_SHIFT)
409*a7b05eb1SAndrew Turner #define	 ID_AA64ISAR1_API_EPAC		(UL(0x2) << ID_AA64ISAR1_API_SHIFT)
410ca289945SAndrew Turner #define	ID_AA64ISAR1_JSCVT_SHIFT	12
411f31c5955SAndrew Turner #define	ID_AA64ISAR1_JSCVT_MASK		(UL(0xf) << ID_AA64ISAR1_JSCVT_SHIFT)
41244e446a1SAndrew Turner #define	ID_AA64ISAR1_JSCVT_VAL(x)	((x) & ID_AA64ISAR1_JSCVT_MASK)
413f31c5955SAndrew Turner #define	 ID_AA64ISAR1_JSCVT_NONE	(UL(0x0) << ID_AA64ISAR1_JSCVT_SHIFT)
414f31c5955SAndrew Turner #define	 ID_AA64ISAR1_JSCVT_IMPL	(UL(0x1) << ID_AA64ISAR1_JSCVT_SHIFT)
415ca289945SAndrew Turner #define	ID_AA64ISAR1_FCMA_SHIFT		16
416f31c5955SAndrew Turner #define	ID_AA64ISAR1_FCMA_MASK		(UL(0xf) << ID_AA64ISAR1_FCMA_SHIFT)
41744e446a1SAndrew Turner #define	ID_AA64ISAR1_FCMA_VAL(x)	((x) & ID_AA64ISAR1_FCMA_MASK)
418f31c5955SAndrew Turner #define	 ID_AA64ISAR1_FCMA_NONE		(UL(0x0) << ID_AA64ISAR1_FCMA_SHIFT)
419f31c5955SAndrew Turner #define	 ID_AA64ISAR1_FCMA_IMPL		(UL(0x1) << ID_AA64ISAR1_FCMA_SHIFT)
420ca289945SAndrew Turner #define	ID_AA64ISAR1_LRCPC_SHIFT	20
421f31c5955SAndrew Turner #define	ID_AA64ISAR1_LRCPC_MASK		(UL(0xf) << ID_AA64ISAR1_LRCPC_SHIFT)
42244e446a1SAndrew Turner #define	ID_AA64ISAR1_LRCPC_VAL(x)	((x) & ID_AA64ISAR1_LRCPC_MASK)
423f31c5955SAndrew Turner #define	 ID_AA64ISAR1_LRCPC_NONE	(UL(0x0) << ID_AA64ISAR1_LRCPC_SHIFT)
42461949736SMitchell Horne #define	 ID_AA64ISAR1_LRCPC_RCPC_8_3	(UL(0x1) << ID_AA64ISAR1_LRCPC_SHIFT)
42561949736SMitchell Horne #define	 ID_AA64ISAR1_LRCPC_RCPC_8_4	(UL(0x2) << ID_AA64ISAR1_LRCPC_SHIFT)
426ca289945SAndrew Turner #define	ID_AA64ISAR1_GPA_SHIFT		24
427f31c5955SAndrew Turner #define	ID_AA64ISAR1_GPA_MASK		(UL(0xf) << ID_AA64ISAR1_GPA_SHIFT)
42844e446a1SAndrew Turner #define	ID_AA64ISAR1_GPA_VAL(x)		((x) & ID_AA64ISAR1_GPA_MASK)
429f31c5955SAndrew Turner #define	 ID_AA64ISAR1_GPA_NONE		(UL(0x0) << ID_AA64ISAR1_GPA_SHIFT)
430f31c5955SAndrew Turner #define	 ID_AA64ISAR1_GPA_IMPL		(UL(0x1) << ID_AA64ISAR1_GPA_SHIFT)
431ca289945SAndrew Turner #define	ID_AA64ISAR1_GPI_SHIFT		28
432f31c5955SAndrew Turner #define	ID_AA64ISAR1_GPI_MASK		(UL(0xf) << ID_AA64ISAR1_GPI_SHIFT)
43344e446a1SAndrew Turner #define	ID_AA64ISAR1_GPI_VAL(x)		((x) & ID_AA64ISAR1_GPI_MASK)
434f31c5955SAndrew Turner #define	 ID_AA64ISAR1_GPI_NONE		(UL(0x0) << ID_AA64ISAR1_GPI_SHIFT)
435f31c5955SAndrew Turner #define	 ID_AA64ISAR1_GPI_IMPL		(UL(0x1) << ID_AA64ISAR1_GPI_SHIFT)
43661949736SMitchell Horne #define	ID_AA64ISAR1_FRINTTS_SHIFT	32
43761949736SMitchell Horne #define	ID_AA64ISAR1_FRINTTS_MASK	(UL(0xf) << ID_AA64ISAR1_FRINTTS_SHIFT)
43861949736SMitchell Horne #define	ID_AA64ISAR1_FRINTTS_VAL(x)	((x) & ID_AA64ISAR1_FRINTTS_MASK)
43961949736SMitchell Horne #define	 ID_AA64ISAR1_FRINTTS_NONE	(UL(0x0) << ID_AA64ISAR1_FRINTTS_SHIFT)
44061949736SMitchell Horne #define	 ID_AA64ISAR1_FRINTTS_IMPL	(UL(0x1) << ID_AA64ISAR1_FRINTTS_SHIFT)
44161949736SMitchell Horne #define	ID_AA64ISAR1_SB_SHIFT		36
44261949736SMitchell Horne #define	ID_AA64ISAR1_SB_MASK		(UL(0xf) << ID_AA64ISAR1_SB_SHIFT)
44361949736SMitchell Horne #define	ID_AA64ISAR1_SB_VAL(x)		((x) & ID_AA64ISAR1_SB_MASK)
44461949736SMitchell Horne #define	 ID_AA64ISAR1_SB_NONE		(UL(0x0) << ID_AA64ISAR1_SB_SHIFT)
44561949736SMitchell Horne #define	 ID_AA64ISAR1_SB_IMPL		(UL(0x1) << ID_AA64ISAR1_SB_SHIFT)
44661949736SMitchell Horne #define	ID_AA64ISAR1_SPECRES_SHIFT	40
44761949736SMitchell Horne #define	ID_AA64ISAR1_SPECRES_MASK	(UL(0xf) << ID_AA64ISAR1_SPECRES_SHIFT)
44861949736SMitchell Horne #define	ID_AA64ISAR1_SPECRES_VAL(x)	((x) & ID_AA64ISAR1_SPECRES_MASK)
44961949736SMitchell Horne #define	 ID_AA64ISAR1_SPECRES_NONE	(UL(0x0) << ID_AA64ISAR1_SPECRES_SHIFT)
45061949736SMitchell Horne #define	 ID_AA64ISAR1_SPECRES_IMPL	(UL(0x1) << ID_AA64ISAR1_SPECRES_SHIFT)
45161949736SMitchell Horne #define	ID_AA64ISAR1_BF16_SHIFT		44
45261949736SMitchell Horne #define	ID_AA64ISAR1_BF16_MASK		(UL(0xf) << ID_AA64ISAR1_BF16_SHIFT)
45361949736SMitchell Horne #define	ID_AA64ISAR1_BF16_VAL(x)	((x) & ID_AA64ISAR1_BF16_MASK)
45461949736SMitchell Horne #define	 ID_AA64ISAR1_BF16_NONE		(UL(0x0) << ID_AA64ISAR1_BF16_SHIFT)
45561949736SMitchell Horne #define	 ID_AA64ISAR1_BF16_IMPL		(UL(0x1) << ID_AA64ISAR1_BF16_SHIFT)
45661949736SMitchell Horne #define	ID_AA64ISAR1_DGH_SHIFT		48
45761949736SMitchell Horne #define	ID_AA64ISAR1_DGH_MASK		(UL(0xf) << ID_AA64ISAR1_DGH_SHIFT)
45861949736SMitchell Horne #define	ID_AA64ISAR1_DGH_VAL(x)		((x) & ID_AA64ISAR1_DGH_MASK)
45961949736SMitchell Horne #define	 ID_AA64ISAR1_DGH_NONE		(UL(0x0) << ID_AA64ISAR1_DGH_SHIFT)
46061949736SMitchell Horne #define	 ID_AA64ISAR1_DGH_IMPL		(UL(0x1) << ID_AA64ISAR1_DGH_SHIFT)
46161949736SMitchell Horne #define	ID_AA64ISAR1_I8MM_SHIFT		52
46261949736SMitchell Horne #define	ID_AA64ISAR1_I8MM_MASK		(UL(0xf) << ID_AA64ISAR1_I8MM_SHIFT)
46361949736SMitchell Horne #define	ID_AA64ISAR1_I8MM_VAL(x)	((x) & ID_AA64ISAR1_I8MM_MASK)
46461949736SMitchell Horne #define	 ID_AA64ISAR1_I8MM_NONE		(UL(0x0) << ID_AA64ISAR1_I8MM_SHIFT)
46561949736SMitchell Horne #define	 ID_AA64ISAR1_I8MM_IMPL		(UL(0x1) << ID_AA64ISAR1_I8MM_SHIFT)
466f45dc694SAndrew Turner 
4675f0a5fefSAndrew Turner /* ID_AA64MMFR0_EL1 */
468e68508e1SAndrew Turner #define	ID_AA64MMFR0_EL1		MRS_REG(3, 0, 0, 7, 0)
469f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_PARange_SHIFT	0
470f31c5955SAndrew Turner #define	ID_AA64MMFR0_PARange_MASK	(UL(0xf) << ID_AA64MMFR0_PARange_SHIFT)
47144e446a1SAndrew Turner #define	ID_AA64MMFR0_PARange_VAL(x)	((x) & ID_AA64MMFR0_PARange_MASK)
472f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_4G	(UL(0x0) << ID_AA64MMFR0_PARange_SHIFT)
473f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_64G	(UL(0x1) << ID_AA64MMFR0_PARange_SHIFT)
474f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_1T	(UL(0x2) << ID_AA64MMFR0_PARange_SHIFT)
475f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_4T	(UL(0x3) << ID_AA64MMFR0_PARange_SHIFT)
476f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_16T	(UL(0x4) << ID_AA64MMFR0_PARange_SHIFT)
477f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_256T	(UL(0x5) << ID_AA64MMFR0_PARange_SHIFT)
478f31c5955SAndrew Turner #define	 ID_AA64MMFR0_PARange_4P	(UL(0x6) << ID_AA64MMFR0_PARange_SHIFT)
479f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_ASIDBits_SHIFT	4
480f31c5955SAndrew Turner #define	ID_AA64MMFR0_ASIDBits_MASK	(UL(0xf) << ID_AA64MMFR0_ASIDBits_SHIFT)
48144e446a1SAndrew Turner #define	ID_AA64MMFR0_ASIDBits_VAL(x)	((x) & ID_AA64MMFR0_ASIDBits_MASK)
482f31c5955SAndrew Turner #define	 ID_AA64MMFR0_ASIDBits_8	(UL(0x0) << ID_AA64MMFR0_ASIDBits_SHIFT)
483f31c5955SAndrew Turner #define	 ID_AA64MMFR0_ASIDBits_16	(UL(0x2) << ID_AA64MMFR0_ASIDBits_SHIFT)
484f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_BigEnd_SHIFT	8
485f31c5955SAndrew Turner #define	ID_AA64MMFR0_BigEnd_MASK	(UL(0xf) << ID_AA64MMFR0_BigEnd_SHIFT)
48644e446a1SAndrew Turner #define	ID_AA64MMFR0_BigEnd_VAL(x)	((x) & ID_AA64MMFR0_BigEnd_MASK)
487f31c5955SAndrew Turner #define	 ID_AA64MMFR0_BigEnd_FIXED	(UL(0x0) << ID_AA64MMFR0_BigEnd_SHIFT)
488f31c5955SAndrew Turner #define	 ID_AA64MMFR0_BigEnd_MIXED	(UL(0x1) << ID_AA64MMFR0_BigEnd_SHIFT)
489f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_SNSMem_SHIFT	12
490f31c5955SAndrew Turner #define	ID_AA64MMFR0_SNSMem_MASK	(UL(0xf) << ID_AA64MMFR0_SNSMem_SHIFT)
49144e446a1SAndrew Turner #define	ID_AA64MMFR0_SNSMem_VAL(x)	((x) & ID_AA64MMFR0_SNSMem_MASK)
492f31c5955SAndrew Turner #define	 ID_AA64MMFR0_SNSMem_NONE	(UL(0x0) << ID_AA64MMFR0_SNSMem_SHIFT)
493f31c5955SAndrew Turner #define	 ID_AA64MMFR0_SNSMem_DISTINCT	(UL(0x1) << ID_AA64MMFR0_SNSMem_SHIFT)
494f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_BigEndEL0_SHIFT	16
495f31c5955SAndrew Turner #define	ID_AA64MMFR0_BigEndEL0_MASK	(UL(0xf) << ID_AA64MMFR0_BigEndEL0_SHIFT)
49644e446a1SAndrew Turner #define	ID_AA64MMFR0_BigEndEL0_VAL(x)	((x) & ID_AA64MMFR0_BigEndEL0_MASK)
497f31c5955SAndrew Turner #define	 ID_AA64MMFR0_BigEndEL0_FIXED	(UL(0x0) << ID_AA64MMFR0_BigEndEL0_SHIFT)
498f31c5955SAndrew Turner #define	 ID_AA64MMFR0_BigEndEL0_MIXED	(UL(0x1) << ID_AA64MMFR0_BigEndEL0_SHIFT)
499f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_TGran16_SHIFT	20
500f31c5955SAndrew Turner #define	ID_AA64MMFR0_TGran16_MASK	(UL(0xf) << ID_AA64MMFR0_TGran16_SHIFT)
50144e446a1SAndrew Turner #define	ID_AA64MMFR0_TGran16_VAL(x)	((x) & ID_AA64MMFR0_TGran16_MASK)
502f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran16_NONE	(UL(0x0) << ID_AA64MMFR0_TGran16_SHIFT)
503f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran16_IMPL	(UL(0x1) << ID_AA64MMFR0_TGran16_SHIFT)
504f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_TGran64_SHIFT	24
505f31c5955SAndrew Turner #define	ID_AA64MMFR0_TGran64_MASK	(UL(0xf) << ID_AA64MMFR0_TGran64_SHIFT)
50644e446a1SAndrew Turner #define	ID_AA64MMFR0_TGran64_VAL(x)	((x) & ID_AA64MMFR0_TGran64_MASK)
507f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran64_IMPL	(UL(0x0) << ID_AA64MMFR0_TGran64_SHIFT)
508f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran64_NONE	(UL(0xf) << ID_AA64MMFR0_TGran64_SHIFT)
509f1fbf9c3SAndrew Turner #define	ID_AA64MMFR0_TGran4_SHIFT	28
510f31c5955SAndrew Turner #define	ID_AA64MMFR0_TGran4_MASK	(UL(0xf) << ID_AA64MMFR0_TGran4_SHIFT)
51144e446a1SAndrew Turner #define	ID_AA64MMFR0_TGran4_VAL(x)	((x) & ID_AA64MMFR0_TGran4_MASK)
512f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran4_IMPL	(UL(0x0) << ID_AA64MMFR0_TGran4_SHIFT)
513f31c5955SAndrew Turner #define	 ID_AA64MMFR0_TGran4_NONE	(UL(0xf) << ID_AA64MMFR0_TGran4_SHIFT)
514*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran16_2_SHIFT	32
515*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran16_2_MASK	(UL(0xf) << ID_AA64MMFR0_TGran16_2_SHIFT)
516*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran16_2_VAL(x)	((x) & ID_AA64MMFR0_TGran16_2_MASK)
517*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran16_2_TGran16	(UL(0x0) << ID_AA64MMFR0_TGran16_2_SHIFT)
518*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran16_2_NONE	(UL(0x1) << ID_AA64MMFR0_TGran16_2_SHIFT)
519*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran16_2_IMPL	(UL(0x2) << ID_AA64MMFR0_TGran16_2_SHIFT)
520*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran64_2_SHIFT	36
521*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran64_2_MASK	(UL(0xf) << ID_AA64MMFR0_TGran64_2_SHIFT)
522*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran64_2_VAL(x)	((x) & ID_AA64MMFR0_TGran64_2_MASK)
523*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran64_2_TGran64	(UL(0x0) << ID_AA64MMFR0_TGran64_2_SHIFT)
524*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran64_2_NONE	(UL(0x1) << ID_AA64MMFR0_TGran64_2_SHIFT)
525*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran64_2_IMPL	(UL(0x2) << ID_AA64MMFR0_TGran64_2_SHIFT)
526*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran4_2_SHIFT	40
527*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran4_2_MASK	(UL(0xf) << ID_AA64MMFR0_TGran4_2_SHIFT)
528*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_TGran4_2_VAL(x)	((x) & ID_AA64MMFR0_TGran4_2_MASK)
529*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran4_2_TGran4	(UL(0x0) << ID_AA64MMFR0_TGran4_2_SHIFT)
530*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran4_2_NONE	(UL(0x1) << ID_AA64MMFR0_TGran4_2_SHIFT)
531*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_TGran4_2_IMPL	(UL(0x2) << ID_AA64MMFR0_TGran4_2_SHIFT)
532*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_ExS_SHIFT		44
533*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_ExS_MASK		(UL(0xf) << ID_AA64MMFR0_ExS_SHIFT)
534*a7b05eb1SAndrew Turner #define	ID_AA64MMFR0_ExS_VAL(x)		((x) & ID_AA64MMFR0_ExS_MASK)
535*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_ExS_ALL		(UL(0x0) << ID_AA64MMFR0_ExS_SHIFT)
536*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR0_ExS_IMPL		(UL(0x1) << ID_AA64MMFR0_ExS_SHIFT)
5375f0a5fefSAndrew Turner 
5382bafd72fSAndrew Turner /* ID_AA64MMFR1_EL1 */
539e68508e1SAndrew Turner #define	ID_AA64MMFR1_EL1		MRS_REG(3, 0, 0, 7, 1)
5402bafd72fSAndrew Turner #define	ID_AA64MMFR1_HAFDBS_SHIFT	0
541f31c5955SAndrew Turner #define	ID_AA64MMFR1_HAFDBS_MASK	(UL(0xf) << ID_AA64MMFR1_HAFDBS_SHIFT)
54244e446a1SAndrew Turner #define	ID_AA64MMFR1_HAFDBS_VAL(x)	((x) & ID_AA64MMFR1_HAFDBS_MASK)
543f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HAFDBS_NONE	(UL(0x0) << ID_AA64MMFR1_HAFDBS_SHIFT)
544f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HAFDBS_AF		(UL(0x1) << ID_AA64MMFR1_HAFDBS_SHIFT)
545f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HAFDBS_AF_DBS	(UL(0x2) << ID_AA64MMFR1_HAFDBS_SHIFT)
546f1fbf9c3SAndrew Turner #define	ID_AA64MMFR1_VMIDBits_SHIFT	4
547f31c5955SAndrew Turner #define	ID_AA64MMFR1_VMIDBits_MASK	(UL(0xf) << ID_AA64MMFR1_VMIDBits_SHIFT)
54844e446a1SAndrew Turner #define	ID_AA64MMFR1_VMIDBits_VAL(x)	((x) & ID_AA64MMFR1_VMIDBits_MASK)
549f31c5955SAndrew Turner #define	 ID_AA64MMFR1_VMIDBits_8	(UL(0x0) << ID_AA64MMFR1_VMIDBits_SHIFT)
550f31c5955SAndrew Turner #define	 ID_AA64MMFR1_VMIDBits_16	(UL(0x2) << ID_AA64MMFR1_VMIDBits_SHIFT)
5512bafd72fSAndrew Turner #define	ID_AA64MMFR1_VH_SHIFT		8
552f31c5955SAndrew Turner #define	ID_AA64MMFR1_VH_MASK		(UL(0xf) << ID_AA64MMFR1_VH_SHIFT)
55344e446a1SAndrew Turner #define	ID_AA64MMFR1_VH_VAL(x)		((x) & ID_AA64MMFR1_VH_MASK)
554f31c5955SAndrew Turner #define	 ID_AA64MMFR1_VH_NONE		(UL(0x0) << ID_AA64MMFR1_VH_SHIFT)
555f31c5955SAndrew Turner #define	 ID_AA64MMFR1_VH_IMPL		(UL(0x1) << ID_AA64MMFR1_VH_SHIFT)
5562bafd72fSAndrew Turner #define	ID_AA64MMFR1_HPDS_SHIFT		12
557f31c5955SAndrew Turner #define	ID_AA64MMFR1_HPDS_MASK		(UL(0xf) << ID_AA64MMFR1_HPDS_SHIFT)
55844e446a1SAndrew Turner #define	ID_AA64MMFR1_HPDS_VAL(x)	((x) & ID_AA64MMFR1_HPDS_MASK)
559f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HPDS_NONE		(UL(0x0) << ID_AA64MMFR1_HPDS_SHIFT)
560f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HPDS_HPD		(UL(0x1) << ID_AA64MMFR1_HPDS_SHIFT)
561f31c5955SAndrew Turner #define	 ID_AA64MMFR1_HPDS_TTPBHA	(UL(0x2) << ID_AA64MMFR1_HPDS_SHIFT)
5622bafd72fSAndrew Turner #define	ID_AA64MMFR1_LO_SHIFT		16
563f31c5955SAndrew Turner #define	ID_AA64MMFR1_LO_MASK		(UL(0xf) << ID_AA64MMFR1_LO_SHIFT)
56444e446a1SAndrew Turner #define	ID_AA64MMFR1_LO_VAL(x)		((x) & ID_AA64MMFR1_LO_MASK)
565f31c5955SAndrew Turner #define	 ID_AA64MMFR1_LO_NONE		(UL(0x0) << ID_AA64MMFR1_LO_SHIFT)
566f31c5955SAndrew Turner #define	 ID_AA64MMFR1_LO_IMPL		(UL(0x1) << ID_AA64MMFR1_LO_SHIFT)
5672bafd72fSAndrew Turner #define	ID_AA64MMFR1_PAN_SHIFT		20
568f31c5955SAndrew Turner #define	ID_AA64MMFR1_PAN_MASK		(UL(0xf) << ID_AA64MMFR1_PAN_SHIFT)
56944e446a1SAndrew Turner #define	ID_AA64MMFR1_PAN_VAL(x)		((x) & ID_AA64MMFR1_PAN_MASK)
570f31c5955SAndrew Turner #define	 ID_AA64MMFR1_PAN_NONE		(UL(0x0) << ID_AA64MMFR1_PAN_SHIFT)
571f31c5955SAndrew Turner #define	 ID_AA64MMFR1_PAN_IMPL		(UL(0x1) << ID_AA64MMFR1_PAN_SHIFT)
572f31c5955SAndrew Turner #define	 ID_AA64MMFR1_PAN_ATS1E1	(UL(0x2) << ID_AA64MMFR1_PAN_SHIFT)
573f1fbf9c3SAndrew Turner #define	ID_AA64MMFR1_SpecSEI_SHIFT	24
574f31c5955SAndrew Turner #define	ID_AA64MMFR1_SpecSEI_MASK	(UL(0xf) << ID_AA64MMFR1_SpecSEI_SHIFT)
57544e446a1SAndrew Turner #define	ID_AA64MMFR1_SpecSEI_VAL(x)	((x) & ID_AA64MMFR1_SpecSEI_MASK)
576f31c5955SAndrew Turner #define	 ID_AA64MMFR1_SpecSEI_NONE	(UL(0x0) << ID_AA64MMFR1_SpecSEI_SHIFT)
577f31c5955SAndrew Turner #define	 ID_AA64MMFR1_SpecSEI_IMPL	(UL(0x1) << ID_AA64MMFR1_SpecSEI_SHIFT)
578f45dc694SAndrew Turner #define	ID_AA64MMFR1_XNX_SHIFT		28
579f31c5955SAndrew Turner #define	ID_AA64MMFR1_XNX_MASK		(UL(0xf) << ID_AA64MMFR1_XNX_SHIFT)
58044e446a1SAndrew Turner #define	ID_AA64MMFR1_XNX_VAL(x)		((x) & ID_AA64MMFR1_XNX_MASK)
581f31c5955SAndrew Turner #define	 ID_AA64MMFR1_XNX_NONE		(UL(0x0) << ID_AA64MMFR1_XNX_SHIFT)
582f31c5955SAndrew Turner #define	 ID_AA64MMFR1_XNX_IMPL		(UL(0x1) << ID_AA64MMFR1_XNX_SHIFT)
583f45dc694SAndrew Turner 
584f45dc694SAndrew Turner /* ID_AA64MMFR2_EL1 */
585e68508e1SAndrew Turner #define	ID_AA64MMFR2_EL1		MRS_REG(3, 0, 0, 7, 2)
586f1fbf9c3SAndrew Turner #define	ID_AA64MMFR2_CnP_SHIFT		0
587f31c5955SAndrew Turner #define	ID_AA64MMFR2_CnP_MASK		(UL(0xf) << ID_AA64MMFR2_CnP_SHIFT)
58844e446a1SAndrew Turner #define	ID_AA64MMFR2_CnP_VAL(x)		((x) & ID_AA64MMFR2_CnP_MASK)
589f31c5955SAndrew Turner #define	 ID_AA64MMFR2_CnP_NONE		(UL(0x0) << ID_AA64MMFR2_CnP_SHIFT)
590f31c5955SAndrew Turner #define	 ID_AA64MMFR2_CnP_IMPL		(UL(0x1) << ID_AA64MMFR2_CnP_SHIFT)
591f45dc694SAndrew Turner #define	ID_AA64MMFR2_UAO_SHIFT		4
592f31c5955SAndrew Turner #define	ID_AA64MMFR2_UAO_MASK		(UL(0xf) << ID_AA64MMFR2_UAO_SHIFT)
59344e446a1SAndrew Turner #define	ID_AA64MMFR2_UAO_VAL(x)		((x) & ID_AA64MMFR2_UAO_MASK)
594f31c5955SAndrew Turner #define	 ID_AA64MMFR2_UAO_NONE		(UL(0x0) << ID_AA64MMFR2_UAO_SHIFT)
595f31c5955SAndrew Turner #define	 ID_AA64MMFR2_UAO_IMPL		(UL(0x1) << ID_AA64MMFR2_UAO_SHIFT)
596f45dc694SAndrew Turner #define	ID_AA64MMFR2_LSM_SHIFT		8
597f31c5955SAndrew Turner #define	ID_AA64MMFR2_LSM_MASK		(UL(0xf) << ID_AA64MMFR2_LSM_SHIFT)
59844e446a1SAndrew Turner #define	ID_AA64MMFR2_LSM_VAL(x)		((x) & ID_AA64MMFR2_LSM_MASK)
599f31c5955SAndrew Turner #define	 ID_AA64MMFR2_LSM_NONE		(UL(0x0) << ID_AA64MMFR2_LSM_SHIFT)
600f31c5955SAndrew Turner #define	 ID_AA64MMFR2_LSM_IMPL		(UL(0x1) << ID_AA64MMFR2_LSM_SHIFT)
601f45dc694SAndrew Turner #define	ID_AA64MMFR2_IESB_SHIFT		12
602f31c5955SAndrew Turner #define	ID_AA64MMFR2_IESB_MASK		(UL(0xf) << ID_AA64MMFR2_IESB_SHIFT)
60344e446a1SAndrew Turner #define	ID_AA64MMFR2_IESB_VAL(x)	((x) & ID_AA64MMFR2_IESB_MASK)
604f31c5955SAndrew Turner #define	 ID_AA64MMFR2_IESB_NONE		(UL(0x0) << ID_AA64MMFR2_IESB_SHIFT)
605f31c5955SAndrew Turner #define	 ID_AA64MMFR2_IESB_IMPL		(UL(0x1) << ID_AA64MMFR2_IESB_SHIFT)
606f1fbf9c3SAndrew Turner #define	ID_AA64MMFR2_VARange_SHIFT	16
607f31c5955SAndrew Turner #define	ID_AA64MMFR2_VARange_MASK	(UL(0xf) << ID_AA64MMFR2_VARange_SHIFT)
60844e446a1SAndrew Turner #define	ID_AA64MMFR2_VARange_VAL(x)	((x) & ID_AA64MMFR2_VARange_MASK)
609f31c5955SAndrew Turner #define	 ID_AA64MMFR2_VARange_48	(UL(0x0) << ID_AA64MMFR2_VARange_SHIFT)
610f31c5955SAndrew Turner #define	 ID_AA64MMFR2_VARange_52	(UL(0x1) << ID_AA64MMFR2_VARange_SHIFT)
611ca289945SAndrew Turner #define	ID_AA64MMFR2_CCIDX_SHIFT	20
612f31c5955SAndrew Turner #define	ID_AA64MMFR2_CCIDX_MASK		(UL(0xf) << ID_AA64MMFR2_CCIDX_SHIFT)
61344e446a1SAndrew Turner #define	ID_AA64MMFR2_CCIDX_VAL(x)	((x) & ID_AA64MMFR2_CCIDX_MASK)
614f31c5955SAndrew Turner #define	 ID_AA64MMFR2_CCIDX_32		(UL(0x0) << ID_AA64MMFR2_CCIDX_SHIFT)
615f31c5955SAndrew Turner #define	 ID_AA64MMFR2_CCIDX_64		(UL(0x1) << ID_AA64MMFR2_CCIDX_SHIFT)
616ca289945SAndrew Turner #define	ID_AA64MMFR2_NV_SHIFT		24
617f31c5955SAndrew Turner #define	ID_AA64MMFR2_NV_MASK		(UL(0xf) << ID_AA64MMFR2_NV_SHIFT)
61844e446a1SAndrew Turner #define	ID_AA64MMFR2_NV_VAL(x)		((x) & ID_AA64MMFR2_NV_MASK)
619f31c5955SAndrew Turner #define	 ID_AA64MMFR2_NV_NONE		(UL(0x0) << ID_AA64MMFR2_NV_SHIFT)
620*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR2_NV_8_3		(UL(0x1) << ID_AA64MMFR2_NV_SHIFT)
621*a7b05eb1SAndrew Turner #define	 ID_AA64MMFR2_NV_8_4		(UL(0x2) << ID_AA64MMFR2_NV_SHIFT)
6220387f2aaSMitchell Horne #define	ID_AA64MMFR2_ST_SHIFT		28
6230387f2aaSMitchell Horne #define	ID_AA64MMFR2_ST_MASK		(UL(0xf) << ID_AA64MMFR2_ST_SHIFT)
6240387f2aaSMitchell Horne #define	ID_AA64MMFR2_ST_VAL(x)		((x) & ID_AA64MMFR2_ST_MASK)
6250387f2aaSMitchell Horne #define	 ID_AA64MMFR2_ST_NONE		(UL(0x0) << ID_AA64MMFR2_ST_SHIFT)
6260387f2aaSMitchell Horne #define	 ID_AA64MMFR2_ST_IMPL		(UL(0x1) << ID_AA64MMFR2_ST_SHIFT)
6270387f2aaSMitchell Horne #define	ID_AA64MMFR2_AT_SHIFT		32
6280387f2aaSMitchell Horne #define	ID_AA64MMFR2_AT_MASK		(UL(0xf) << ID_AA64MMFR2_AT_SHIFT)
6290387f2aaSMitchell Horne #define	ID_AA64MMFR2_AT_VAL(x)		((x) & ID_AA64MMFR2_AT_MASK)
6300387f2aaSMitchell Horne #define	 ID_AA64MMFR2_AT_NONE		(UL(0x0) << ID_AA64MMFR2_AT_SHIFT)
6310387f2aaSMitchell Horne #define	 ID_AA64MMFR2_AT_IMPL		(UL(0x1) << ID_AA64MMFR2_AT_SHIFT)
6320387f2aaSMitchell Horne #define	ID_AA64MMFR2_IDS_SHIFT		36
6330387f2aaSMitchell Horne #define	ID_AA64MMFR2_IDS_MASK		(UL(0xf) << ID_AA64MMFR2_IDS_SHIFT)
6340387f2aaSMitchell Horne #define	ID_AA64MMFR2_IDS_VAL(x)		((x) & ID_AA64MMFR2_IDS_MASK)
6350387f2aaSMitchell Horne #define	 ID_AA64MMFR2_IDS_NONE		(UL(0x0) << ID_AA64MMFR2_IDS_SHIFT)
6360387f2aaSMitchell Horne #define	 ID_AA64MMFR2_IDS_IMPL		(UL(0x1) << ID_AA64MMFR2_IDS_SHIFT)
6370387f2aaSMitchell Horne #define	ID_AA64MMFR2_FWB_SHIFT		40
6380387f2aaSMitchell Horne #define	ID_AA64MMFR2_FWB_MASK		(UL(0xf) << ID_AA64MMFR2_FWB_SHIFT)
6390387f2aaSMitchell Horne #define	ID_AA64MMFR2_FWB_VAL(x)		((x) & ID_AA64MMFR2_FWB_MASK)
6400387f2aaSMitchell Horne #define	 ID_AA64MMFR2_FWB_NONE		(UL(0x0) << ID_AA64MMFR2_FWB_SHIFT)
6410387f2aaSMitchell Horne #define	 ID_AA64MMFR2_FWB_IMPL		(UL(0x1) << ID_AA64MMFR2_FWB_SHIFT)
6420387f2aaSMitchell Horne #define	ID_AA64MMFR2_TTL_SHIFT		48
6430387f2aaSMitchell Horne #define	ID_AA64MMFR2_TTL_MASK		(UL(0xf) << ID_AA64MMFR2_TTL_SHIFT)
6440387f2aaSMitchell Horne #define	ID_AA64MMFR2_TTL_VAL(x)		((x) & ID_AA64MMFR2_TTL_MASK)
6450387f2aaSMitchell Horne #define	 ID_AA64MMFR2_TTL_NONE		(UL(0x0) << ID_AA64MMFR2_TTL_SHIFT)
6460387f2aaSMitchell Horne #define	 ID_AA64MMFR2_TTL_IMPL		(UL(0x1) << ID_AA64MMFR2_TTL_SHIFT)
6470387f2aaSMitchell Horne #define	ID_AA64MMFR2_BBM_SHIFT		52
6480387f2aaSMitchell Horne #define	ID_AA64MMFR2_BBM_MASK		(UL(0xf) << ID_AA64MMFR2_BBM_SHIFT)
6490387f2aaSMitchell Horne #define	ID_AA64MMFR2_BBM_VAL(x)		((x) & ID_AA64MMFR2_BBM_MASK)
6500387f2aaSMitchell Horne #define	 ID_AA64MMFR2_BBM_LEVEL0	(UL(0x0) << ID_AA64MMFR2_BBM_SHIFT)
6510387f2aaSMitchell Horne #define	 ID_AA64MMFR2_BBM_LEVEL1	(UL(0x1) << ID_AA64MMFR2_BBM_SHIFT)
6520387f2aaSMitchell Horne #define	 ID_AA64MMFR2_BBM_LEVEL2	(UL(0x2) << ID_AA64MMFR2_BBM_SHIFT)
6530387f2aaSMitchell Horne #define	ID_AA64MMFR2_EVT_SHIFT		56
6540387f2aaSMitchell Horne #define	ID_AA64MMFR2_EVT_MASK		(UL(0xf) << ID_AA64MMFR2_EVT_SHIFT)
6550387f2aaSMitchell Horne #define	ID_AA64MMFR2_EVT_VAL(x)		((x) & ID_AA64MMFR2_EVT_MASK)
6560387f2aaSMitchell Horne #define	 ID_AA64MMFR2_EVT_NONE		(UL(0x0) << ID_AA64MMFR2_EVT_SHIFT)
6570387f2aaSMitchell Horne #define	 ID_AA64MMFR2_EVT_8_2		(UL(0x1) << ID_AA64MMFR2_EVT_SHIFT)
6580387f2aaSMitchell Horne #define	 ID_AA64MMFR2_EVT_8_5		(UL(0x2) << ID_AA64MMFR2_EVT_SHIFT)
6590387f2aaSMitchell Horne #define	ID_AA64MMFR2_E0PD_SHIFT		60
6600387f2aaSMitchell Horne #define	ID_AA64MMFR2_E0PD_MASK		(UL(0xf) << ID_AA64MMFR2_E0PD_SHIFT)
6610387f2aaSMitchell Horne #define	ID_AA64MMFR2_E0PD_VAL(x)	((x) & ID_AA64MMFR2_E0PD_MASK)
6620387f2aaSMitchell Horne #define	 ID_AA64MMFR2_E0PD_NONE		(UL(0x0) << ID_AA64MMFR2_E0PD_SHIFT)
6630387f2aaSMitchell Horne #define	 ID_AA64MMFR2_E0PD_IMPL		(UL(0x1) << ID_AA64MMFR2_E0PD_SHIFT)
6642bafd72fSAndrew Turner 
665e5acd89cSAndrew Turner /* ID_AA64PFR0_EL1 */
666e68508e1SAndrew Turner #define	ID_AA64PFR0_EL1			MRS_REG(3, 0, 0, 4, 0)
6675f0a5fefSAndrew Turner #define	ID_AA64PFR0_EL0_SHIFT		0
668f31c5955SAndrew Turner #define	ID_AA64PFR0_EL0_MASK		(UL(0xf) << ID_AA64PFR0_EL0_SHIFT)
66944e446a1SAndrew Turner #define	ID_AA64PFR0_EL0_VAL(x)		((x) & ID_AA64PFR0_EL0_MASK)
670f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL0_64		(UL(0x1) << ID_AA64PFR0_EL0_SHIFT)
671f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL0_64_32		(UL(0x2) << ID_AA64PFR0_EL0_SHIFT)
6725f0a5fefSAndrew Turner #define	ID_AA64PFR0_EL1_SHIFT		4
673f31c5955SAndrew Turner #define	ID_AA64PFR0_EL1_MASK		(UL(0xf) << ID_AA64PFR0_EL1_SHIFT)
67444e446a1SAndrew Turner #define	ID_AA64PFR0_EL1_VAL(x)		((x) & ID_AA64PFR0_EL1_MASK)
675f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL1_64		(UL(0x1) << ID_AA64PFR0_EL1_SHIFT)
676f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL1_64_32		(UL(0x2) << ID_AA64PFR0_EL1_SHIFT)
6775f0a5fefSAndrew Turner #define	ID_AA64PFR0_EL2_SHIFT		8
678f31c5955SAndrew Turner #define	ID_AA64PFR0_EL2_MASK		(UL(0xf) << ID_AA64PFR0_EL2_SHIFT)
67944e446a1SAndrew Turner #define	ID_AA64PFR0_EL2_VAL(x)		((x) & ID_AA64PFR0_EL2_MASK)
680f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL2_NONE		(UL(0x0) << ID_AA64PFR0_EL2_SHIFT)
681f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL2_64		(UL(0x1) << ID_AA64PFR0_EL2_SHIFT)
682f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL2_64_32		(UL(0x2) << ID_AA64PFR0_EL2_SHIFT)
6835f0a5fefSAndrew Turner #define	ID_AA64PFR0_EL3_SHIFT		12
684f31c5955SAndrew Turner #define	ID_AA64PFR0_EL3_MASK		(UL(0xf) << ID_AA64PFR0_EL3_SHIFT)
68544e446a1SAndrew Turner #define	ID_AA64PFR0_EL3_VAL(x)		((x) & ID_AA64PFR0_EL3_MASK)
686f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL3_NONE		(UL(0x0) << ID_AA64PFR0_EL3_SHIFT)
687f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL3_64		(UL(0x1) << ID_AA64PFR0_EL3_SHIFT)
688f31c5955SAndrew Turner #define	 ID_AA64PFR0_EL3_64_32		(UL(0x2) << ID_AA64PFR0_EL3_SHIFT)
6895f0a5fefSAndrew Turner #define	ID_AA64PFR0_FP_SHIFT		16
690f31c5955SAndrew Turner #define	ID_AA64PFR0_FP_MASK		(UL(0xf) << ID_AA64PFR0_FP_SHIFT)
69144e446a1SAndrew Turner #define	ID_AA64PFR0_FP_VAL(x)		((x) & ID_AA64PFR0_FP_MASK)
692f31c5955SAndrew Turner #define	 ID_AA64PFR0_FP_IMPL		(UL(0x0) << ID_AA64PFR0_FP_SHIFT)
693f31c5955SAndrew Turner #define	 ID_AA64PFR0_FP_HP		(UL(0x1) << ID_AA64PFR0_FP_SHIFT)
694f31c5955SAndrew Turner #define	 ID_AA64PFR0_FP_NONE		(UL(0xf) << ID_AA64PFR0_FP_SHIFT)
695f1fbf9c3SAndrew Turner #define	ID_AA64PFR0_AdvSIMD_SHIFT	20
696f31c5955SAndrew Turner #define	ID_AA64PFR0_AdvSIMD_MASK	(UL(0xf) << ID_AA64PFR0_AdvSIMD_SHIFT)
69744e446a1SAndrew Turner #define	ID_AA64PFR0_AdvSIMD_VAL(x)	((x) & ID_AA64PFR0_AdvSIMD_MASK)
698f31c5955SAndrew Turner #define	 ID_AA64PFR0_AdvSIMD_IMPL	(UL(0x0) << ID_AA64PFR0_AdvSIMD_SHIFT)
699f31c5955SAndrew Turner #define	 ID_AA64PFR0_AdvSIMD_HP		(UL(0x1) << ID_AA64PFR0_AdvSIMD_SHIFT)
700f31c5955SAndrew Turner #define	 ID_AA64PFR0_AdvSIMD_NONE	(UL(0xf) << ID_AA64PFR0_AdvSIMD_SHIFT)
7015f0a5fefSAndrew Turner #define	ID_AA64PFR0_GIC_BITS		0x4 /* Number of bits in GIC field */
7025f0a5fefSAndrew Turner #define	ID_AA64PFR0_GIC_SHIFT		24
703f31c5955SAndrew Turner #define	ID_AA64PFR0_GIC_MASK		(UL(0xf) << ID_AA64PFR0_GIC_SHIFT)
70444e446a1SAndrew Turner #define	ID_AA64PFR0_GIC_VAL(x)		((x) & ID_AA64PFR0_GIC_MASK)
705f31c5955SAndrew Turner #define	 ID_AA64PFR0_GIC_CPUIF_NONE	(UL(0x0) << ID_AA64PFR0_GIC_SHIFT)
706f31c5955SAndrew Turner #define	 ID_AA64PFR0_GIC_CPUIF_EN	(UL(0x1) << ID_AA64PFR0_GIC_SHIFT)
707f45dc694SAndrew Turner #define	ID_AA64PFR0_RAS_SHIFT		28
708f31c5955SAndrew Turner #define	ID_AA64PFR0_RAS_MASK		(UL(0xf) << ID_AA64PFR0_RAS_SHIFT)
70944e446a1SAndrew Turner #define	ID_AA64PFR0_RAS_VAL(x)		((x) & ID_AA64PFR0_RAS_MASK)
710f31c5955SAndrew Turner #define	 ID_AA64PFR0_RAS_NONE		(UL(0x0) << ID_AA64PFR0_RAS_SHIFT)
711*a7b05eb1SAndrew Turner #define	 ID_AA64PFR0_RAS_IMPL		(UL(0x1) << ID_AA64PFR0_RAS_SHIFT)
712*a7b05eb1SAndrew Turner #define	 ID_AA64PFR0_RAS_8_4		(UL(0x2) << ID_AA64PFR0_RAS_SHIFT)
713f9fc9faaSAndrew Turner #define	ID_AA64PFR0_SVE_SHIFT		32
714f31c5955SAndrew Turner #define	ID_AA64PFR0_SVE_MASK		(UL(0xf) << ID_AA64PFR0_SVE_SHIFT)
71544e446a1SAndrew Turner #define	ID_AA64PFR0_SVE_VAL(x)		((x) & ID_AA64PFR0_SVE_MASK)
716f31c5955SAndrew Turner #define	 ID_AA64PFR0_SVE_NONE		(UL(0x0) << ID_AA64PFR0_SVE_SHIFT)
717f31c5955SAndrew Turner #define	 ID_AA64PFR0_SVE_IMPL		(UL(0x1) << ID_AA64PFR0_SVE_SHIFT)
718b6cf94aeSMark Johnston #define	ID_AA64PFR0_SEL2_SHIFT		36
719b6cf94aeSMark Johnston #define	ID_AA64PFR0_SEL2_MASK		(UL(0xf) << ID_AA64PFR0_SEL2_SHIFT)
720b6cf94aeSMark Johnston #define	ID_AA64PFR0_SEL2_VAL(x)		((x) & ID_AA64PFR0_SEL2_MASK)
721b6cf94aeSMark Johnston #define	 ID_AA64PFR0_SEL2_NONE		(UL(0x0) << ID_AA64PFR0_SEL2_SHIFT)
722b6cf94aeSMark Johnston #define	 ID_AA64PFR0_SEL2_IMPL		(UL(0x1) << ID_AA64PFR0_SEL2_SHIFT)
723b6cf94aeSMark Johnston #define	ID_AA64PFR0_MPAM_SHIFT		40
724b6cf94aeSMark Johnston #define	ID_AA64PFR0_MPAM_MASK		(UL(0xf) << ID_AA64PFR0_MPAM_SHIFT)
725b6cf94aeSMark Johnston #define	ID_AA64PFR0_MPAM_VAL(x)		((x) & ID_AA64PFR0_MPAM_MASK)
726b6cf94aeSMark Johnston #define	 ID_AA64PFR0_MPAM_NONE		(UL(0x0) << ID_AA64PFR0_MPAM_SHIFT)
727b6cf94aeSMark Johnston #define	 ID_AA64PFR0_MPAM_IMPL		(UL(0x1) << ID_AA64PFR0_MPAM_SHIFT)
728b6cf94aeSMark Johnston #define	ID_AA64PFR0_AMU_SHIFT		44
729b6cf94aeSMark Johnston #define	ID_AA64PFR0_AMU_MASK		(UL(0xf) << ID_AA64PFR0_AMU_SHIFT)
730b6cf94aeSMark Johnston #define	ID_AA64PFR0_AMU_VAL(x)		((x) & ID_AA64PFR0_AMU_MASK)
731b6cf94aeSMark Johnston #define	 ID_AA64PFR0_AMU_NONE		(UL(0x0) << ID_AA64PFR0_AMU_SHIFT)
732b6cf94aeSMark Johnston #define	 ID_AA64PFR0_AMU_V1		(UL(0x1) << ID_AA64PFR0_AMU_SHIFT)
733b6cf94aeSMark Johnston #define	ID_AA64PFR0_DIT_SHIFT		48
734b6cf94aeSMark Johnston #define	ID_AA64PFR0_DIT_MASK		(UL(0xf) << ID_AA64PFR0_DIT_SHIFT)
735b6cf94aeSMark Johnston #define	ID_AA64PFR0_DIT_VAL(x)		((x) & ID_AA64PFR0_DIT_MASK)
736b6cf94aeSMark Johnston #define	 ID_AA64PFR0_DIT_NONE		(UL(0x0) << ID_AA64PFR0_DIT_SHIFT)
737b6cf94aeSMark Johnston #define	 ID_AA64PFR0_DIT_PSTATE		(UL(0x1) << ID_AA64PFR0_DIT_SHIFT)
738b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV2_SHIFT		56
739b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV2_MASK		(UL(0xf) << ID_AA64PFR0_CSV2_SHIFT)
740b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV2_VAL(x)		((x) & ID_AA64PFR0_CSV2_MASK)
741b6cf94aeSMark Johnston #define	 ID_AA64PFR0_CSV2_NONE		(UL(0x0) << ID_AA64PFR0_CSV2_SHIFT)
742b6cf94aeSMark Johnston #define	 ID_AA64PFR0_CSV2_ISOLATED	(UL(0x1) << ID_AA64PFR0_CSV2_SHIFT)
743b6cf94aeSMark Johnston #define	 ID_AA64PFR0_CSV2_SCXTNUM	(UL(0x2) << ID_AA64PFR0_CSV2_SHIFT)
744b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV3_SHIFT		60
745b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV3_MASK		(UL(0xf) << ID_AA64PFR0_CSV3_SHIFT)
746b6cf94aeSMark Johnston #define	ID_AA64PFR0_CSV3_VAL(x)		((x) & ID_AA64PFR0_CSV3_MASK)
747b6cf94aeSMark Johnston #define	 ID_AA64PFR0_CSV3_NONE		(UL(0x0) << ID_AA64PFR0_CSV3_SHIFT)
748b6cf94aeSMark Johnston #define	 ID_AA64PFR0_CSV3_ISOLATED	(UL(0x1) << ID_AA64PFR0_CSV3_SHIFT)
749b6cf94aeSMark Johnston 
750b6cf94aeSMark Johnston /* ID_AA64PFR1_EL1 */
751b6cf94aeSMark Johnston #define	ID_AA64PFR1_EL1			MRS_REG(3, 0, 0, 4, 1)
752b6cf94aeSMark Johnston #define	ID_AA64PFR1_BT_SHIFT		0
753b6cf94aeSMark Johnston #define	ID_AA64PFR1_BT_MASK		(UL(0xf) << ID_AA64PFR1_BT_SHIFT)
754b6cf94aeSMark Johnston #define	ID_AA64PFR1_BT_VAL(x)		((x) & ID_AA64PFR1_BT_MASK)
755b6cf94aeSMark Johnston #define	 ID_AA64PFR1_BT_NONE		(UL(0x0) << ID_AA64PFR1_BT_SHIFT)
756b6cf94aeSMark Johnston #define	 ID_AA64PFR1_BT_IMPL		(UL(0x1) << ID_AA64PFR1_BT_SHIFT)
757b6cf94aeSMark Johnston #define	ID_AA64PFR1_SSBS_SHIFT		4
758b6cf94aeSMark Johnston #define	ID_AA64PFR1_SSBS_MASK		(UL(0xf) << ID_AA64PFR1_SSBS_SHIFT)
759b6cf94aeSMark Johnston #define	ID_AA64PFR1_SSBS_VAL(x)		((x) & ID_AA64PFR1_SSBS_MASK)
760b6cf94aeSMark Johnston #define	 ID_AA64PFR1_SSBS_NONE		(UL(0x0) << ID_AA64PFR1_SSBS_SHIFT)
761b6cf94aeSMark Johnston #define	 ID_AA64PFR1_SSBS_PSTATE	(UL(0x1) << ID_AA64PFR1_SSBS_SHIFT)
762b6cf94aeSMark Johnston #define	 ID_AA64PFR1_SSBS_PSTATE_MSR	(UL(0x2) << ID_AA64PFR1_SSBS_SHIFT)
763b6cf94aeSMark Johnston #define	ID_AA64PFR1_MTE_SHIFT		8
764b6cf94aeSMark Johnston #define	ID_AA64PFR1_MTE_MASK		(UL(0xf) << ID_AA64PFR1_MTE_SHIFT)
765b6cf94aeSMark Johnston #define	ID_AA64PFR1_MTE_VAL(x)		((x) & ID_AA64PFR1_MTE_MASK)
766b6cf94aeSMark Johnston #define	 ID_AA64PFR1_MTE_NONE		(UL(0x0) << ID_AA64PFR1_MTE_SHIFT)
767b6cf94aeSMark Johnston #define	 ID_AA64PFR1_MTE_IMPL_EL0	(UL(0x1) << ID_AA64PFR1_MTE_SHIFT)
768b6cf94aeSMark Johnston #define	 ID_AA64PFR1_MTE_IMPL		(UL(0x2) << ID_AA64PFR1_MTE_SHIFT)
769b6cf94aeSMark Johnston #define	ID_AA64PFR1_RAS_frac_SHIFT	12
770b6cf94aeSMark Johnston #define	ID_AA64PFR1_RAS_frac_MASK	(UL(0xf) << ID_AA64PFR1_RAS_frac_SHIFT)
771b6cf94aeSMark Johnston #define	ID_AA64PFR1_RAS_frac_VAL(x)	((x) & ID_AA64PFR1_RAS_frac_MASK)
772b6cf94aeSMark Johnston #define	 ID_AA64PFR1_RAS_frac_V1	(UL(0x0) << ID_AA64PFR1_RAS_frac_SHIFT)
773b6cf94aeSMark Johnston #define	 ID_AA64PFR1_RAS_frac_V2	(UL(0x1) << ID_AA64PFR1_RAS_frac_SHIFT)
774e5acd89cSAndrew Turner 
775e5acd89cSAndrew Turner /* MAIR_EL1 - Memory Attribute Indirection Register */
776e5acd89cSAndrew Turner #define	MAIR_ATTR_MASK(idx)	(0xff << ((n)* 8))
777e5acd89cSAndrew Turner #define	MAIR_ATTR(attr, idx) ((attr) << ((idx) * 8))
778401d3029SAndrew Turner #define	 MAIR_DEVICE_nGnRnE	0x00
77913ec5a6dSAndrew Turner #define	 MAIR_DEVICE_nGnRE	0x04
780401d3029SAndrew Turner #define	 MAIR_NORMAL_NC		0x44
7812438ef76SAndrew Turner #define	 MAIR_NORMAL_WT		0xbb
782401d3029SAndrew Turner #define	 MAIR_NORMAL_WB		0xff
783e5acd89cSAndrew Turner 
78449a92cd4SAndrew Turner /* PAR_EL1 - Physical Address Register */
78549a92cd4SAndrew Turner #define	PAR_F_SHIFT		0
78649a92cd4SAndrew Turner #define	PAR_F			(0x1 << PAR_F_SHIFT)
78749a92cd4SAndrew Turner #define	PAR_SUCCESS(x)		(((x) & PAR_F) == 0)
78849a92cd4SAndrew Turner /* When PAR_F == 0 (success) */
789f64329bcSAndrew Turner #define	PAR_LOW_MASK		0xfff
79049a92cd4SAndrew Turner #define	PAR_SH_SHIFT		7
79149a92cd4SAndrew Turner #define	PAR_SH_MASK		(0x3 << PAR_SH_SHIFT)
79249a92cd4SAndrew Turner #define	PAR_NS_SHIFT		9
79349a92cd4SAndrew Turner #define	PAR_NS_MASK		(0x3 << PAR_NS_SHIFT)
79449a92cd4SAndrew Turner #define	PAR_PA_SHIFT		12
79549a92cd4SAndrew Turner #define	PAR_PA_MASK		0x0000fffffffff000
79649a92cd4SAndrew Turner #define	PAR_ATTR_SHIFT		56
79749a92cd4SAndrew Turner #define	PAR_ATTR_MASK		(0xff << PAR_ATTR_SHIFT)
79849a92cd4SAndrew Turner /* When PAR_F == 1 (aborted) */
79949a92cd4SAndrew Turner #define	PAR_FST_SHIFT		1
80049a92cd4SAndrew Turner #define	PAR_FST_MASK		(0x3f << PAR_FST_SHIFT)
80149a92cd4SAndrew Turner #define	PAR_PTW_SHIFT		8
80249a92cd4SAndrew Turner #define	PAR_PTW_MASK		(0x1 << PAR_PTW_SHIFT)
80349a92cd4SAndrew Turner #define	PAR_S_SHIFT		9
80449a92cd4SAndrew Turner #define	PAR_S_MASK		(0x1 << PAR_S_SHIFT)
80549a92cd4SAndrew Turner 
806e5acd89cSAndrew Turner /* SCTLR_EL1 - System Control Register */
807a9725b63SAndrew Turner #define	SCTLR_RES0	0xc8222440	/* Reserved ARMv8.0, write 0 */
808aec085f4SAndrew Turner #define	SCTLR_RES1	0x30d00800	/* Reserved ARMv8.0, write 1 */
809e5acd89cSAndrew Turner 
810e5acd89cSAndrew Turner #define	SCTLR_M		0x00000001
811e5acd89cSAndrew Turner #define	SCTLR_A		0x00000002
812e5acd89cSAndrew Turner #define	SCTLR_C		0x00000004
813e5acd89cSAndrew Turner #define	SCTLR_SA	0x00000008
814e5acd89cSAndrew Turner #define	SCTLR_SA0	0x00000010
815e5acd89cSAndrew Turner #define	SCTLR_CP15BEN	0x00000020
816a9725b63SAndrew Turner /* Bit 6 is reserved */
817e5acd89cSAndrew Turner #define	SCTLR_ITD	0x00000080
818e5acd89cSAndrew Turner #define	SCTLR_SED	0x00000100
819e5acd89cSAndrew Turner #define	SCTLR_UMA	0x00000200
820a9725b63SAndrew Turner /* Bit 10 is reserved */
821a9725b63SAndrew Turner /* Bit 11 is reserved */
822e5acd89cSAndrew Turner #define	SCTLR_I		0x00001000
823a9725b63SAndrew Turner #define	SCTLR_EnDB	0x00002000 /* ARMv8.3 */
824e5acd89cSAndrew Turner #define	SCTLR_DZE	0x00004000
825e5acd89cSAndrew Turner #define	SCTLR_UCT	0x00008000
826e5acd89cSAndrew Turner #define	SCTLR_nTWI	0x00010000
827a9725b63SAndrew Turner /* Bit 17 is reserved */
828e5acd89cSAndrew Turner #define	SCTLR_nTWE	0x00040000
829e5acd89cSAndrew Turner #define	SCTLR_WXN	0x00080000
830a9725b63SAndrew Turner /* Bit 20 is reserved */
831a9725b63SAndrew Turner #define	SCTLR_IESB	0x00200000 /* ARMv8.2 */
832a9725b63SAndrew Turner /* Bit 22 is reserved */
833a9725b63SAndrew Turner #define	SCTLR_SPAN	0x00800000 /* ARMv8.1 */
834e5acd89cSAndrew Turner #define	SCTLR_EOE	0x01000000
835e5acd89cSAndrew Turner #define	SCTLR_EE	0x02000000
836e5acd89cSAndrew Turner #define	SCTLR_UCI	0x04000000
837a9725b63SAndrew Turner #define	SCTLR_EnDA	0x08000000 /* ARMv8.3 */
838a9725b63SAndrew Turner #define	SCTLR_nTLSMD	0x10000000 /* ARMv8.2 */
839a9725b63SAndrew Turner #define	SCTLR_LSMAOE	0x20000000 /* ARMv8.2 */
840a9725b63SAndrew Turner #define	SCTLR_EnIB	0x40000000 /* ARMv8.3 */
841a9725b63SAndrew Turner #define	SCTLR_EnIA	0x80000000 /* ARMv8.3 */
842e5acd89cSAndrew Turner 
843e5acd89cSAndrew Turner /* SPSR_EL1 */
844e5acd89cSAndrew Turner /*
845e5acd89cSAndrew Turner  * When the exception is taken in AArch64:
846e5acd89cSAndrew Turner  * M[3:2] is the exception level
847e5acd89cSAndrew Turner  * M[1]   is unused
848e5acd89cSAndrew Turner  * M[0]   is the SP select:
849e5acd89cSAndrew Turner  *         0: always SP0
850e5acd89cSAndrew Turner  *         1: current ELs SP
851e5acd89cSAndrew Turner  */
852e5acd89cSAndrew Turner #define	PSR_M_EL0t	0x00000000
853e5acd89cSAndrew Turner #define	PSR_M_EL1t	0x00000004
854e5acd89cSAndrew Turner #define	PSR_M_EL1h	0x00000005
855e5acd89cSAndrew Turner #define	PSR_M_EL2t	0x00000008
856e5acd89cSAndrew Turner #define	PSR_M_EL2h	0x00000009
8578c9c3144SOlivier Houchard #define	PSR_M_64	0x00000000
8588c9c3144SOlivier Houchard #define	PSR_M_32	0x00000010
8592b6a8dd5SEd Schouten #define	PSR_M_MASK	0x0000000f
860e5acd89cSAndrew Turner 
8618c9c3144SOlivier Houchard #define	PSR_T		0x00000020
8628c9c3144SOlivier Houchard 
8632b6a8dd5SEd Schouten #define	PSR_AARCH32	0x00000010
864e5acd89cSAndrew Turner #define	PSR_F		0x00000040
865e5acd89cSAndrew Turner #define	PSR_I		0x00000080
866e5acd89cSAndrew Turner #define	PSR_A		0x00000100
867e5acd89cSAndrew Turner #define	PSR_D		0x00000200
868739e4482SAndrew Turner #define	PSR_DAIF	(PSR_D | PSR_A | PSR_I | PSR_F)
869e5acd89cSAndrew Turner #define	PSR_IL		0x00100000
870e5acd89cSAndrew Turner #define	PSR_SS		0x00200000
871e5acd89cSAndrew Turner #define	PSR_V		0x10000000
872e5acd89cSAndrew Turner #define	PSR_C		0x20000000
873e5acd89cSAndrew Turner #define	PSR_Z		0x40000000
874e5acd89cSAndrew Turner #define	PSR_N		0x80000000
875521018d3SAndrew Turner #define	PSR_FLAGS	0xf0000000
876e5acd89cSAndrew Turner 
877e5acd89cSAndrew Turner /* TCR_EL1 - Translation Control Register */
878f3e9395dSAndrew Turner /* Bits 63:59 are reserved */
879f3e9395dSAndrew Turner #define	TCR_TCMA1_SHIFT		58
880f3e9395dSAndrew Turner #define	TCR_TCMA1		(1UL << TCR_TCMA1_SHIFT)
881f3e9395dSAndrew Turner #define	TCR_TCMA0_SHIFT		57
882f3e9395dSAndrew Turner #define	TCR_TCMA0		(1UL << TCR_TCMA0_SHIFT)
883f3e9395dSAndrew Turner #define	TCR_E0PD1_SHIFT		56
884f3e9395dSAndrew Turner #define	TCR_E0PD1		(1UL << TCR_E0PD1_SHIFT)
885f3e9395dSAndrew Turner #define	TCR_E0PD0_SHIFT		55
886f3e9395dSAndrew Turner #define	TCR_E0PD0		(1UL << TCR_E0PD0_SHIFT)
887f3e9395dSAndrew Turner #define	TCR_NFD1_SHIFT		54
888f3e9395dSAndrew Turner #define	TCR_NFD1		(1UL << TCR_NFD1_SHIFT)
889f3e9395dSAndrew Turner #define	TCR_NFD0_SHIFT		53
890f3e9395dSAndrew Turner #define	TCR_NFD0		(1UL << TCR_NFD0_SHIFT)
891f3e9395dSAndrew Turner #define	TCR_TBID1_SHIFT		52
892f3e9395dSAndrew Turner #define	TCR_TBID1		(1UL << TCR_TBID1_SHIFT)
893f3e9395dSAndrew Turner #define	TCR_TBID0_SHIFT		51
894f3e9395dSAndrew Turner #define	TCR_TBID0		(1UL << TCR_TBID0_SHIFT)
895f3e9395dSAndrew Turner #define	TCR_HWU162_SHIFT	50
896f3e9395dSAndrew Turner #define	TCR_HWU162		(1UL << TCR_HWU162_SHIFT)
897f3e9395dSAndrew Turner #define	TCR_HWU161_SHIFT	49
898f3e9395dSAndrew Turner #define	TCR_HWU161		(1UL << TCR_HWU161_SHIFT)
899f3e9395dSAndrew Turner #define	TCR_HWU160_SHIFT	48
900f3e9395dSAndrew Turner #define	TCR_HWU160		(1UL << TCR_HWU160_SHIFT)
901f3e9395dSAndrew Turner #define	TCR_HWU159_SHIFT	47
902f3e9395dSAndrew Turner #define	TCR_HWU159		(1UL << TCR_HWU159_SHIFT)
903f3e9395dSAndrew Turner #define	TCR_HWU1		\
904f3e9395dSAndrew Turner     (TCR_HWU159 | TCR_HWU160 | TCR_HWU161 | TCR_HWU162)
905f3e9395dSAndrew Turner #define	TCR_HWU062_SHIFT	46
906f3e9395dSAndrew Turner #define	TCR_HWU062		(1UL << TCR_HWU062_SHIFT)
907f3e9395dSAndrew Turner #define	TCR_HWU061_SHIFT	45
908f3e9395dSAndrew Turner #define	TCR_HWU061		(1UL << TCR_HWU061_SHIFT)
909f3e9395dSAndrew Turner #define	TCR_HWU060_SHIFT	44
910f3e9395dSAndrew Turner #define	TCR_HWU060		(1UL << TCR_HWU060_SHIFT)
911f3e9395dSAndrew Turner #define	TCR_HWU059_SHIFT	43
912f3e9395dSAndrew Turner #define	TCR_HWU059		(1UL << TCR_HWU059_SHIFT)
913f3e9395dSAndrew Turner #define	TCR_HWU0		\
914f3e9395dSAndrew Turner     (TCR_HWU059 | TCR_HWU060 | TCR_HWU061 | TCR_HWU062)
915f3e9395dSAndrew Turner #define	TCR_HPD1_SHIFT		42
916f3e9395dSAndrew Turner #define	TCR_HPD1		(1UL << TCR_HPD1_SHIFT)
917f3e9395dSAndrew Turner #define	TCR_HPD0_SHIFT		41
918f3e9395dSAndrew Turner #define	TCR_HPD0		(1UL << TCR_HPD0_SHIFT)
919b0a0152aSAlan Cox #define	TCR_HD_SHIFT		40
920f3e9395dSAndrew Turner #define	TCR_HD			(1UL << TCR_HD_SHIFT)
921b0a0152aSAlan Cox #define	TCR_HA_SHIFT		39
922f3e9395dSAndrew Turner #define	TCR_HA			(1UL << TCR_HA_SHIFT)
923f3e9395dSAndrew Turner #define	TCR_TBI1_SHIFT		38
924e46cf959SEd Maste #define	TCR_TBI1		(1UL << TCR_TBI1_SHIFT)
925f3e9395dSAndrew Turner #define	TCR_TBI0_SHIFT		37
926f3e9395dSAndrew Turner #define	TCR_TBI0		(1U << TCR_TBI0_SHIFT)
92765565c97SAndrew Turner #define	TCR_ASID_SHIFT		36
92865565c97SAndrew Turner #define	TCR_ASID_WIDTH		1
929f3e9395dSAndrew Turner #define	TCR_ASID_16		(1UL << TCR_ASID_SHIFT)
930f3e9395dSAndrew Turner /* Bit 35 is reserved */
931e5acd89cSAndrew Turner #define	TCR_IPS_SHIFT		32
93265565c97SAndrew Turner #define	TCR_IPS_WIDTH		3
933f3e9395dSAndrew Turner #define	TCR_IPS_32BIT		(0UL << TCR_IPS_SHIFT)
934f3e9395dSAndrew Turner #define	TCR_IPS_36BIT		(1UL << TCR_IPS_SHIFT)
935f3e9395dSAndrew Turner #define	TCR_IPS_40BIT		(2UL << TCR_IPS_SHIFT)
936f3e9395dSAndrew Turner #define	TCR_IPS_42BIT		(3UL << TCR_IPS_SHIFT)
937f3e9395dSAndrew Turner #define	TCR_IPS_44BIT		(4UL << TCR_IPS_SHIFT)
938f3e9395dSAndrew Turner #define	TCR_IPS_48BIT		(5UL << TCR_IPS_SHIFT)
939e5acd89cSAndrew Turner #define	TCR_TG1_SHIFT		30
940f3e9395dSAndrew Turner #define	TCR_TG1_16K		(1UL << TCR_TG1_SHIFT)
941f3e9395dSAndrew Turner #define	TCR_TG1_4K		(2UL << TCR_TG1_SHIFT)
942f3e9395dSAndrew Turner #define	TCR_TG1_64K		(3UL << TCR_TG1_SHIFT)
9431038d102SZbigniew Bodek #define	TCR_SH1_SHIFT		28
944f3e9395dSAndrew Turner #define	TCR_SH1_IS		(3UL << TCR_SH1_SHIFT)
9451038d102SZbigniew Bodek #define	TCR_ORGN1_SHIFT		26
946f3e9395dSAndrew Turner #define	TCR_ORGN1_WBWA		(1UL << TCR_ORGN1_SHIFT)
9471038d102SZbigniew Bodek #define	TCR_IRGN1_SHIFT		24
948f3e9395dSAndrew Turner #define	TCR_IRGN1_WBWA		(1UL << TCR_IRGN1_SHIFT)
949f3e9395dSAndrew Turner #define	TCR_EPD1_SHIFT		23
950f3e9395dSAndrew Turner #define	TCR_EPD1		(1UL << TCR_EPD1_SHIFT)
95150e3ab6bSAlan Cox #define	TCR_A1_SHIFT		22
95250e3ab6bSAlan Cox #define	TCR_A1			(0x1UL << TCR_A1_SHIFT)
953f3e9395dSAndrew Turner #define	TCR_T1SZ_SHIFT		16
954f3e9395dSAndrew Turner #define	TCR_T1SZ(x)		((x) << TCR_T1SZ_SHIFT)
955f3e9395dSAndrew Turner #define	TCR_TG0_SHIFT		14
956f3e9395dSAndrew Turner #define	TCR_TG0_16K		(1UL << TCR_TG0_SHIFT)
957f3e9395dSAndrew Turner #define	TCR_TG0_4K		(2UL << TCR_TG0_SHIFT)
958f3e9395dSAndrew Turner #define	TCR_TG0_64K		(3UL << TCR_TG0_SHIFT)
9591038d102SZbigniew Bodek #define	TCR_SH0_SHIFT		12
960f3e9395dSAndrew Turner #define	TCR_SH0_IS		(3UL << TCR_SH0_SHIFT)
9611038d102SZbigniew Bodek #define	TCR_ORGN0_SHIFT		10
962f3e9395dSAndrew Turner #define	TCR_ORGN0_WBWA		(1UL << TCR_ORGN0_SHIFT)
9631038d102SZbigniew Bodek #define	TCR_IRGN0_SHIFT		8
964f3e9395dSAndrew Turner #define	TCR_IRGN0_WBWA		(1UL << TCR_IRGN0_SHIFT)
965f3e9395dSAndrew Turner #define	TCR_EPD0_SHIFT		7
966f3e9395dSAndrew Turner #define	TCR_EPD0		(1UL << TCR_EPD1_SHIFT)
967f3e9395dSAndrew Turner /* Bit 6 is reserved */
968f3e9395dSAndrew Turner #define	TCR_T0SZ_SHIFT		0
969f3e9395dSAndrew Turner #define	TCR_T0SZ_MASK		0x3f
970f3e9395dSAndrew Turner #define	TCR_T0SZ(x)		((x) << TCR_T0SZ_SHIFT)
971f3e9395dSAndrew Turner #define	TCR_TxSZ(x)		(TCR_T1SZ(x) | TCR_T0SZ(x))
9721038d102SZbigniew Bodek 
9731038d102SZbigniew Bodek #define	TCR_CACHE_ATTRS	((TCR_IRGN0_WBWA | TCR_IRGN1_WBWA) |\
9741038d102SZbigniew Bodek 				(TCR_ORGN0_WBWA | TCR_ORGN1_WBWA))
9751038d102SZbigniew Bodek #ifdef SMP
9761038d102SZbigniew Bodek #define	TCR_SMP_ATTRS	(TCR_SH0_IS | TCR_SH1_IS)
9771038d102SZbigniew Bodek #else
9781038d102SZbigniew Bodek #define	TCR_SMP_ATTRS	0
9791038d102SZbigniew Bodek #endif
9801038d102SZbigniew Bodek 
981e5acd89cSAndrew Turner /* Saved Program Status Register */
982e5acd89cSAndrew Turner #define	DBG_SPSR_SS	(0x1 << 21)
983e5acd89cSAndrew Turner 
984e5acd89cSAndrew Turner /* Monitor Debug System Control Register */
985e5acd89cSAndrew Turner #define	DBG_MDSCR_SS	(0x1 << 0)
986e5acd89cSAndrew Turner #define	DBG_MDSCR_KDE	(0x1 << 13)
987e5acd89cSAndrew Turner #define	DBG_MDSCR_MDE	(0x1 << 15)
988e5acd89cSAndrew Turner 
989de2b9422SMitchell Horne /* Debug Breakpoint Control Registers */
990de2b9422SMitchell Horne #define	DBG_BCR_EN		0x1
991de2b9422SMitchell Horne #define	DBG_BCR_PMC_SHIFT	1
992de2b9422SMitchell Horne #define	DBG_BCR_PMC		(0x3 << DBG_BCR_PMC_SHIFT)
993de2b9422SMitchell Horne #define	 DBG_BCR_PMC_EL1	(0x1 << DBG_BCR_PMC_SHIFT)
994de2b9422SMitchell Horne #define	 DBG_BCR_PMC_EL0	(0x2 << DBG_BCR_PMC_SHIFT)
995de2b9422SMitchell Horne #define	DBG_BCR_BAS_SHIFT	5
996de2b9422SMitchell Horne #define	DBG_BCR_BAS		(0xf << DBG_BCR_BAS_SHIFT)
997de2b9422SMitchell Horne #define	DBG_BCR_HMC_SHIFT	13
998de2b9422SMitchell Horne #define	DBG_BCR_HMC		(0x1 << DBG_BCR_HMC_SHIFT)
999de2b9422SMitchell Horne #define	DBG_BCR_SSC_SHIFT	14
1000de2b9422SMitchell Horne #define	DBG_BCR_SSC		(0x3 << DBG_BCR_SSC_SHIFT)
1001de2b9422SMitchell Horne #define	DBG_BCR_LBN_SHIFT	16
1002de2b9422SMitchell Horne #define	DBG_BCR_LBN		(0xf << DBG_BCR_LBN_SHIFT)
1003de2b9422SMitchell Horne #define	DBG_BCR_BT_SHIFT	20
1004de2b9422SMitchell Horne #define	DBG_BCR_BT		(0xf << DBG_BCR_BT_SHIFT)
1005de2b9422SMitchell Horne 
1006f2583be1SMitchell Horne /* Debug Watchpoint Control Registers */
1007f2583be1SMitchell Horne #define	DBG_WCR_EN		0x1
1008f2583be1SMitchell Horne #define	DBG_WCR_PAC_SHIFT	1
1009f2583be1SMitchell Horne #define	DBG_WCR_PAC		(0x3 << DBG_WCR_PAC_SHIFT)
1010f2583be1SMitchell Horne #define	 DBG_WCR_PAC_EL1	(0x1 << DBG_WCR_PAC_SHIFT)
1011f2583be1SMitchell Horne #define	 DBG_WCR_PAC_EL0	(0x2 << DBG_WCR_PAC_SHIFT)
1012f2583be1SMitchell Horne #define	DBG_WCR_LSC_SHIFT	3
1013f2583be1SMitchell Horne #define	DBG_WCR_LSC		(0x3 << DBG_WCR_LSC_SHIFT)
1014f2583be1SMitchell Horne #define	DBG_WCR_BAS_SHIFT	5
1015f2583be1SMitchell Horne #define	DBG_WCR_BAS		(0xff << DBG_WCR_BAS_SHIFT)
1016f2583be1SMitchell Horne #define	 DBG_WCR_BAS_MASK	DBG_WCR_BAS
1017f2583be1SMitchell Horne #define	DBG_WCR_HMC_SHIFT	13
1018f2583be1SMitchell Horne #define	DBG_WCR_HMC		(0x1 << DBG_WCR_HMC_SHIFT)
1019f2583be1SMitchell Horne #define	DBG_WCR_SSC_SHIFT	14
1020f2583be1SMitchell Horne #define	DBG_WCR_SSC		(0x3 << DBG_WCR_SSC_SHIFT)
1021f2583be1SMitchell Horne #define	DBG_WCR_LBN_SHIFT	16
1022f2583be1SMitchell Horne #define	DBG_WCR_LBN		(0xf << DBG_WCR_LBN_SHIFT)
1023f2583be1SMitchell Horne #define	DBG_WCR_WT_SHIFT	20
1024f2583be1SMitchell Horne #define	DBG_WCR_WT		(0x1 << DBG_WCR_WT_SHIFT)
1025f2583be1SMitchell Horne #define	DBG_WCR_MASK_SHIFT	24
1026f2583be1SMitchell Horne #define	DBG_WCR_MASK		(0x1f << DBG_WCR_MASK_SHIFT)
1027f2583be1SMitchell Horne 
1028bc88bb2bSRuslan Bukin /* Perfomance Monitoring Counters */
1029bc88bb2bSRuslan Bukin #define	PMCR_E		(1 << 0) /* Enable all counters */
1030bc88bb2bSRuslan Bukin #define	PMCR_P		(1 << 1) /* Reset all counters */
1031bc88bb2bSRuslan Bukin #define	PMCR_C		(1 << 2) /* Clock counter reset */
1032bc88bb2bSRuslan Bukin #define	PMCR_D		(1 << 3) /* CNTR counts every 64 clk cycles */
1033bc88bb2bSRuslan Bukin #define	PMCR_X		(1 << 4) /* Export to ext. monitoring (ETM) */
1034bc88bb2bSRuslan Bukin #define	PMCR_DP		(1 << 5) /* Disable CCNT if non-invasive debug*/
1035bc88bb2bSRuslan Bukin #define	PMCR_LC		(1 << 6) /* Long cycle count enable */
1036bc88bb2bSRuslan Bukin #define	PMCR_IMP_SHIFT	24 /* Implementer code */
1037bc88bb2bSRuslan Bukin #define	PMCR_IMP_MASK	(0xff << PMCR_IMP_SHIFT)
1038da11e1f9SAndrew Turner #define	 PMCR_IMP_ARM			0x41
1039bc88bb2bSRuslan Bukin #define	PMCR_IDCODE_SHIFT	16 /* Identification code */
1040bc88bb2bSRuslan Bukin #define	PMCR_IDCODE_MASK	(0xff << PMCR_IDCODE_SHIFT)
1041bc88bb2bSRuslan Bukin #define	 PMCR_IDCODE_CORTEX_A57		0x01
1042bc88bb2bSRuslan Bukin #define	 PMCR_IDCODE_CORTEX_A72		0x02
1043bc88bb2bSRuslan Bukin #define	 PMCR_IDCODE_CORTEX_A53		0x03
1044da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A73		0x04
1045da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A35		0x0a
1046da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A76		0x0b
1047da11e1f9SAndrew Turner #define	 PMCR_IDCODE_NEOVERSE_N1	0x0c
1048da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A77		0x10
1049da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A55		0x45
1050da11e1f9SAndrew Turner #define	 PMCR_IDCODE_NEOVERSE_E1	0x46
1051da11e1f9SAndrew Turner #define	 PMCR_IDCODE_CORTEX_A75		0x4a
1052bc88bb2bSRuslan Bukin #define	PMCR_N_SHIFT	11       /* Number of counters implemented */
1053bc88bb2bSRuslan Bukin #define	PMCR_N_MASK	(0x1f << PMCR_N_SHIFT)
1054bc88bb2bSRuslan Bukin 
1055e5acd89cSAndrew Turner #endif /* !_MACHINE_ARMREG_H_ */
1056