| 1 | /* $OpenBSD: armreg.h,v 1.44 2025/07/22 09:20:41 kettenis Exp $ */ |
| 2 | /*- |
| 3 | * Copyright (c) 2013, 2014 Andrew Turner |
| 4 | * Copyright (c) 2015 The FreeBSD Foundation |
| 5 | * All rights reserved. |
| 6 | * |
| 7 | * This software was developed by Andrew Turner under |
| 8 | * sponsorship from the FreeBSD Foundation. |
| 9 | * |
| 10 | * Redistribution and use in source and binary forms, with or without |
| 11 | * modification, are permitted provided that the following conditions |
| 12 | * are met: |
| 13 | * 1. Redistributions of source code must retain the above copyright |
| 14 | * notice, this list of conditions and the following disclaimer. |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in the |
| 17 | * documentation and/or other materials provided with the distribution. |
| 18 | * |
| 19 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| 23 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 24 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 25 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 26 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 27 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 28 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 29 | * SUCH DAMAGE. |
| 30 | * |
| 31 | * $FreeBSD: head/sys/arm64/include/armreg.h 309248 2016-11-28 14:24:07Z andrew $ |
| 32 | */ |
| 33 | |
| 34 | #ifndef _MACHINE_ARMREG_H_ |
| 35 | #define	_MACHINE_ARMREG_H_ |
| 36 | |
| 37 | #define	INSN_SIZE		4 |
| 38 | |
| 39 | #define	READ_SPECIALREG(reg)						\ |
| 40 | ({	uint64_t val;							\ |
| 41 | 	__asm volatile("mrs	%0, " __STRING(reg) : "=&r" (val));	\ |
| 42 | 	val;								\ |
| 43 | }) |
| 44 | #define	WRITE_SPECIALREG(reg, val)					\ |
| 45 | 	__asm volatile("msr	" __STRING(reg) ", %0" : : "r"((uint64_t)val)) |
| 46 | |
| 47 | /* CCSIDR_EL1 - Current Cache Size ID Register */ |
| 48 | #define	CCSIDR_SETS_MASK	0x0fffe000 |
| 49 | #define	CCSIDR_SETS_SHIFT	13 |
| 50 | #define	CCSIDR_SETS(reg)	\ |
| 51 | ((((reg) & CCSIDR_SETS_MASK) >> CCSIDR_SETS_SHIFT) + 1) |
| 52 | #define	CCSIDR_WAYS_MASK	0x00001ff8 |
| 53 | #define	CCSIDR_WAYS_SHIFT	3 |
| 54 | #define	CCSIDR_WAYS(reg)	\ |
| 55 | ((((reg) & CCSIDR_WAYS_MASK) >> CCSIDR_WAYS_SHIFT) + 1) |
| 56 | #define	CCSIDR_LINE_MASK	0x00000007 |
| 57 | #define	CCSIDR_LINE_SIZE(reg)	(1 << (((reg) & CCSIDR_LINE_MASK) + 4)) |
| 58 | |
| 59 | #define	CCSIDR_CCIDX_SETS_MASK	0x00ffffff00000000ULL |
| 60 | #define	CCSIDR_CCIDX_SETS_SHIFT	32 |
| 61 | #define	CCSIDR_CCIDX_SETS(reg)	\ |
| 62 | ((((reg) & CCSIDR_CCIDX_SETS_MASK) >> CCSIDR_CCIDX_SETS_SHIFT) + 1) |
| 63 | #define	CCSIDR_CCIDX_WAYS_MASK	0x0000000000fffff8ULL |
| 64 | #define	CCSIDR_CCIDX_WAYS_SHIFT	3 |
| 65 | #define	CCSIDR_CCIDX_WAYS(reg)	\ |
| 66 | ((((reg) & CCSIDR_CCIDX_WAYS_MASK) >> CCSIDR_CCIDX_WAYS_SHIFT) + 1) |
| 67 | #define	CCSIDR_CCIDX_LINE_MASK	0x0000000000000007ULL |
| 68 | #define	CCSIDR_CCIDX_LINE_SIZE(reg) \ |
| 69 | (1 << (((reg) & CCSIDR_CCIDX_LINE_MASK) + 4)) |
| 70 | |
| 71 | /* CLIDR_EL1 - Cache Level ID Register */ |
| 72 | #define	CLIDR_CTYPE_MASK	0x7 |
| 73 | #define	CLIDR_CTYPE_INSN	0x1 |
| 74 | #define	CLIDR_CTYPE_DATA	0x2 |
| 75 | #define	CLIDR_CTYPE_UNIFIED	0x4 |
| 76 | |
| 77 | /* CNTHCTL_EL2 - Counter-timer Hypervisor Control Register */ |
| 78 | #define	CNTHCTL_EVNTI_MASK	(0xf << 4) /* Bit to trigger event stream */ |
| 79 | #define	CNTHCTL_EVNTDIR		(1 << 3) /* Control transition trigger bit */ |
| 80 | #define	CNTHCTL_EVNTEN		(1 << 2) /* Enable event stream */ |
| 81 | #define	CNTHCTL_EL1PCEN		(1 << 1) /* Allow EL0/1 physical timer access */ |
| 82 | #define	CNTHCTL_EL1PCTEN	(1 << 0) /*Allow EL0/1 physical counter access*/ |
| 83 | |
| 84 | /* CNTKCTL_EL1 - Counter-timer Kernel Control Register */ |
| 85 | #define	CNTKCTL_EL0VCTEN	(1 << 1) /* Allow EL0 virtual counter access */ |
| 86 | |
| 87 | /* CNTV_CTL_EL0 */ |
| 88 | #define	CNTV_CTL_ENABLE		(1 << 0) |
| 89 | #define	CNTV_CTL_IMASK		(1 << 1) |
| 90 | #define	CNTV_CTL_ISTATUS	(1 << 2) |
| 91 | |
| 92 | /* CPACR_EL1 */ |
| 93 | #define	CPACR_ZEN_MASK		(0x3 << 16) |
| 94 | #define	 CPACR_ZEN_TRAP_ALL1	(0x0 << 16) /* Traps from EL0 and EL1 */ |
| 95 | #define	 CPACR_ZEN_TRAP_EL0	(0x1 << 16) /* Traps from EL0 */ |
| 96 | #define	 CPACR_ZEN_TRAP_ALL2	(0x2 << 16) /* Traps from EL0 and EL1 */ |
| 97 | #define	 CPACR_ZEN_TRAP_NONE	(0x3 << 16) /* No traps */ |
| 98 | #define	CPACR_FPEN_MASK		(0x3 << 20) |
| 99 | #define	 CPACR_FPEN_TRAP_ALL1	(0x0 << 20) /* Traps from EL0 and EL1 */ |
| 100 | #define	 CPACR_FPEN_TRAP_EL0	(0x1 << 20) /* Traps from EL0 */ |
| 101 | #define	 CPACR_FPEN_TRAP_ALL2	(0x2 << 20) /* Traps from EL0 and EL1 */ |
| 102 | #define	 CPACR_FPEN_TRAP_NONE	(0x3 << 20) /* No traps */ |
| 103 | #define	CPACR_TTA		(0x1 << 28) |
| 104 | |
| 105 | /* CSSELR_EL1 - Cache Size Selection Register */ |
| 106 | #define	CSSELR_IND		(1 << 0) |
| 107 | #define	CSSELR_LEVEL_SHIFT	1 |
| 108 | |
| 109 | /* CTR_EL0 - Cache Type Register */ |
| 110 | #define	CTR_DLINE_SHIFT		16 |
| 111 | #define	CTR_DLINE_MASK		(0xf << CTR_DLINE_SHIFT) |
| 112 | #define	CTR_DLINE_SIZE(reg)	(((reg) & CTR_DLINE_MASK) >> CTR_DLINE_SHIFT) |
| 113 | #define	CTR_IL1P_SHIFT		14 |
| 114 | #define	CTR_IL1P_MASK		(0x3 << CTR_IL1P_SHIFT) |
| 115 | #define	CTR_IL1P_AIVIVT		(0x1 << CTR_IL1P_SHIFT) |
| 116 | #define	CTR_IL1P_VIPT		(0x2 << CTR_IL1P_SHIFT) |
| 117 | #define	CTR_IL1P_PIPT		(0x3 << CTR_IL1P_SHIFT) |
| 118 | #define	CTR_ILINE_SHIFT		0 |
| 119 | #define	CTR_ILINE_MASK		(0xf << CTR_ILINE_SHIFT) |
| 120 | #define	CTR_ILINE_SIZE(reg)	(((reg) & CTR_ILINE_MASK) >> CTR_ILINE_SHIFT) |
| 121 | |
| 122 | /* MPIDR_EL1 - Multiprocessor Affinity Register */ |
| 123 | #define MPIDR_AFF3		(0xFFULL << 32) |
| 124 | #define MPIDR_AFF2		(0xFFULL << 16) |
| 125 | #define MPIDR_AFF1		(0xFFULL << 8) |
| 126 | #define MPIDR_AFF0		(0xFFULL << 0) |
| 127 | #define MPIDR_AFF		(MPIDR_AFF3|MPIDR_AFF2|MPIDR_AFF1|MPIDR_AFF0) |
| 128 | |
| 129 | /* DCZID_EL0 - Data Cache Zero ID register */ |
| 130 | #define DCZID_DZP		(1 << 4) /* DC ZVA prohibited if non-0 */ |
| 131 | #define DCZID_BS_SHIFT		0 |
| 132 | #define DCZID_BS_MASK		(0xf << DCZID_BS_SHIFT) |
| 133 | #define	DCZID_BS_SIZE(reg)	(((reg) & DCZID_BS_MASK) >> DCZID_BS_SHIFT) |
| 134 | |
| 135 | /* ESR_ELx */ |
| 136 | #define	ESR_ELx_ISS_MASK	0x00ffffff |
| 137 | #define	 ISS_INSN_FnV		(0x01 << 10) |
| 138 | #define	 ISS_INSN_EA		(0x01 << 9) |
| 139 | #define	 ISS_INSN_S1PTW		(0x01 << 7) |
| 140 | #define	 ISS_INSN_IFSC_MASK	(0x1f << 0) |
| 141 | #define	 ISS_DATA_ISV		(0x01 << 24) |
| 142 | #define	 ISS_DATA_SAS_MASK	(0x03 << 22) |
| 143 | #define	 ISS_DATA_SSE		(0x01 << 21) |
| 144 | #define	 ISS_DATA_SRT_MASK	(0x1f << 16) |
| 145 | #define	 ISS_DATA_SF		(0x01 << 15) |
| 146 | #define	 ISS_DATA_AR		(0x01 << 14) |
| 147 | #define	 ISS_DATA_FnV		(0x01 << 10) |
| 148 | #define	 ISS_DATA_EA		(0x01 << 9) |
| 149 | #define	 ISS_DATA_CM		(0x01 << 8) |
| 150 | #define	 ISS_DATA_S1PTW		(0x01 << 7) |
| 151 | #define	 ISS_DATA_WnR		(0x01 << 6) |
| 152 | #define	 ISS_DATA_DFSC_MASK	(0x3f << 0) |
| 153 | #define	 ISS_DATA_DFSC_ASF_L0	(0x00 << 0) |
| 154 | #define	 ISS_DATA_DFSC_ASF_L1	(0x01 << 0) |
| 155 | #define	 ISS_DATA_DFSC_ASF_L2	(0x02 << 0) |
| 156 | #define	 ISS_DATA_DFSC_ASF_L3	(0x03 << 0) |
| 157 | #define	 ISS_DATA_DFSC_TF_L0	(0x04 << 0) |
| 158 | #define	 ISS_DATA_DFSC_TF_L1	(0x05 << 0) |
| 159 | #define	 ISS_DATA_DFSC_TF_L2	(0x06 << 0) |
| 160 | #define	 ISS_DATA_DFSC_TF_L3	(0x07 << 0) |
| 161 | #define	 ISS_DATA_DFSC_AFF_L1	(0x09 << 0) |
| 162 | #define	 ISS_DATA_DFSC_AFF_L2	(0x0a << 0) |
| 163 | #define	 ISS_DATA_DFSC_AFF_L3	(0x0b << 0) |
| 164 | #define	 ISS_DATA_DFSC_PF_L1	(0x0d << 0) |
| 165 | #define	 ISS_DATA_DFSC_PF_L2	(0x0e << 0) |
| 166 | #define	 ISS_DATA_DFSC_PF_L3	(0x0f << 0) |
| 167 | #define	 ISS_DATA_DFSC_EXT	(0x10 << 0) |
| 168 | #define	 ISS_DATA_DFSC_EXT_L0	(0x14 << 0) |
| 169 | #define	 ISS_DATA_DFSC_EXT_L1	(0x15 << 0) |
| 170 | #define	 ISS_DATA_DFSC_EXT_L2	(0x16 << 0) |
| 171 | #define	 ISS_DATA_DFSC_EXT_L3	(0x17 << 0) |
| 172 | #define	 ISS_DATA_DFSC_ECC	(0x18 << 0) |
| 173 | #define	 ISS_DATA_DFSC_ECC_L0	(0x1c << 0) |
| 174 | #define	 ISS_DATA_DFSC_ECC_L1	(0x1d << 0) |
| 175 | #define	 ISS_DATA_DFSC_ECC_L2	(0x1e << 0) |
| 176 | #define	 ISS_DATA_DFSC_ECC_L3	(0x1f << 0) |
| 177 | #define	 ISS_DATA_DFSC_ALIGN	(0x21 << 0) |
| 178 | #define	 ISS_DATA_DFSC_TLB_CONFLICT (0x30 << 0) |
| 179 | #define	 ISS_MSR_DIR_SHIFT	0 |
| 180 | #define	 ISS_MSR_DIR		(0x01 << ISS_MSR_DIR_SHIFT) |
| 181 | #define	 ISS_MSR_Rt_SHIFT	5 |
| 182 | #define	 ISS_MSR_Rt_MASK	(0x1f << ISS_MSR_Rt_SHIFT) |
| 183 | #define	 ISS_MSR_Rt(x)		(((x) & ISS_MSR_Rt_MASK) >> ISS_MSR_Rt_SHIFT) |
| 184 | #define	 ISS_MSR_CRm_SHIFT	1 |
| 185 | #define	 ISS_MSR_CRm_MASK	(0xf << ISS_MSR_CRm_SHIFT) |
| 186 | #define	 ISS_MSR_CRm(x)		(((x) & ISS_MSR_CRm_MASK) >> ISS_MSR_CRm_SHIFT) |
| 187 | #define	 ISS_MSR_CRn_SHIFT	10 |
| 188 | #define	 ISS_MSR_CRn_MASK	(0xf << ISS_MSR_CRn_SHIFT) |
| 189 | #define	 ISS_MSR_CRn(x)		(((x) & ISS_MSR_CRn_MASK) >> ISS_MSR_CRn_SHIFT) |
| 190 | #define	 ISS_MSR_OP1_SHIFT	14 |
| 191 | #define	 ISS_MSR_OP1_MASK	(0x7 << ISS_MSR_OP1_SHIFT) |
| 192 | #define	 ISS_MSR_OP1(x)		(((x) & ISS_MSR_OP1_MASK) >> ISS_MSR_OP1_SHIFT) |
| 193 | #define	 ISS_MSR_OP2_SHIFT	17 |
| 194 | #define	 ISS_MSR_OP2_MASK	(0x7 << ISS_MSR_OP2_SHIFT) |
| 195 | #define	 ISS_MSR_OP2(x)		(((x) & ISS_MSR_OP2_MASK) >> ISS_MSR_OP2_SHIFT) |
| 196 | #define	 ISS_MSR_OP0_SHIFT	20 |
| 197 | #define	 ISS_MSR_OP0_MASK	(0x3 << ISS_MSR_OP0_SHIFT) |
| 198 | #define	 ISS_MSR_OP0(x)		(((x) & ISS_MSR_OP0_MASK) >> ISS_MSR_OP0_SHIFT) |
| 199 | #define	 ISS_BRK_COMMENT_MASK	0xffff |
| 200 | #define	ESR_ELx_IL		(0x01 << 25) |
| 201 | #define	ESR_ELx_EC_SHIFT	26 |
| 202 | #define	ESR_ELx_EC_MASK		(0x3f << 26) |
| 203 | #define	ESR_ELx_EXCEPTION(esr)	(((esr) & ESR_ELx_EC_MASK) >> ESR_ELx_EC_SHIFT) |
| 204 | #define	 EXCP_UNKNOWN		0x00	/* Unkwn exception */ |
| 205 | #define	 EXCP_FP_SIMD		0x07	/* FP/SIMD trap */ |
| 206 | #define	 EXCP_BRANCH_TGT	0x0d	/* Branch target exception */ |
| 207 | #define	 EXCP_ILL_STATE		0x0e	/* Illegal execution state */ |
| 208 | #define	 EXCP_SVC		0x15	/* SVC trap */ |
| 209 | #define	 EXCP_MSR		0x18	/* MSR/MRS trap */ |
| 210 | #define	 EXCP_SVE		0x19	/* SVE trap */ |
| 211 | #define	 EXCP_FPAC		0x1c	/* Faulting PAC trap */ |
| 212 | #define	 EXCP_INSN_ABORT_L	0x20	/* Instruction abort, from lower EL */ |
| 213 | #define	 EXCP_INSN_ABORT	0x21	/* Instruction abort, from same EL */ |
| 214 | #define	 EXCP_PC_ALIGN		0x22	/* PC alignment fault */ |
| 215 | #define	 EXCP_DATA_ABORT_L	0x24	/* Data abort, from lower EL */ |
| 216 | #define	 EXCP_DATA_ABORT	0x25	/* Data abort, from same EL */ |
| 217 | #define	 EXCP_SP_ALIGN		0x26	/* SP alignment fault */ |
| 218 | #define	 EXCP_TRAP_FP		0x2c	/* Trapped FP exception */ |
| 219 | #define	 EXCP_SERROR		0x2f	/* SError interrupt */ |
| 220 | #define	 EXCP_SOFTSTP_EL0	0x32	/* Software Step, from lower EL */ |
| 221 | #define	 EXCP_SOFTSTP_EL1	0x33	/* Software Step, from same EL */ |
| 222 | #define	 EXCP_WATCHPT_EL1	0x35	/* Watchpoint, from same EL */ |
| 223 | #define	 EXCP_BRK		0x3c	/* Breakpoint */ |
| 224 | |
| 225 | /* ICC_CTLR_EL1 */ |
| 226 | #define	ICC_CTLR_EL1_EOIMODE		(1U << 1) |
| 227 | #define	ICC_CTLR_EL1_PRIBITS_SHIFT	8 |
| 228 | #define	ICC_CTLR_EL1_PRIBITS_MASK	(0x7UL << 8) |
| 229 | #define	ICC_CTLR_EL1_PRIBITS(reg)	\ |
| 230 | (((reg) & ICC_CTLR_EL1_PRIBITS_MASK) >> ICC_CTLR_EL1_PRIBITS_SHIFT) |
| 231 | |
| 232 | /* ICC_IAR1_EL1 */ |
| 233 | #define	ICC_IAR1_EL1_SPUR	(0x03ff) |
| 234 | |
| 235 | /* ICC_IGRPEN0_EL1 */ |
| 236 | #define	ICC_IGRPEN0_EL1_EN	(1U << 0) |
| 237 | |
| 238 | /* ICC_PMR_EL1 */ |
| 239 | #define	ICC_PMR_EL1_PRIO_MASK	(0xFFUL) |
| 240 | |
| 241 | /* ICC_SGI1R_EL1 */ |
| 242 | #define	ICC_SGI1R_EL1_TL_MASK		0xffffUL |
| 243 | #define	ICC_SGI1R_EL1_AFF1_SHIFT	16 |
| 244 | #define	ICC_SGI1R_EL1_SGIID_SHIFT	24 |
| 245 | #define	ICC_SGI1R_EL1_AFF2_SHIFT	32 |
| 246 | #define	ICC_SGI1R_EL1_AFF3_SHIFT	48 |
| 247 | #define	ICC_SGI1R_EL1_SGIID_MASK	0xfUL |
| 248 | #define	ICC_SGI1R_EL1_IRM		(0x1UL << 40) |
| 249 | |
| 250 | /* ICC_SRE_EL1 */ |
| 251 | #define	ICC_SRE_EL1_SRE		(1U << 0) |
| 252 | |
| 253 | /* ICC_SRE_EL2 */ |
| 254 | #define	ICC_SRE_EL2_SRE		(1U << 0) |
| 255 | #define	ICC_SRE_EL2_EN		(1U << 3) |
| 256 | |
| 257 | /* ID_AA64DFR0_EL1 */ |
| 258 | #define	ID_AA64DFR0_MASK		0x00000000f0f0ffffUL |
| 259 | #define	ID_AA64DFR0_DEBUG_VER_SHIFT	0 |
| 260 | #define	ID_AA64DFR0_DEBUG_VER_MASK	(0xfULL << ID_AA64DFR0_DEBUG_VER_SHIFT) |
| 261 | #define	ID_AA64DFR0_DEBUG_VER(x)	((x) & ID_AA64DFR0_DEBUG_VER_MASK) |
| 262 | #define	 ID_AA64DFR0_DEBUG_VER_8	(0x6ULL << ID_AA64DFR0_DEBUG_VER_SHIFT) |
| 263 | #define	 ID_AA64DFR0_DEBUG_VER_8_VHE	(0x7ULL << ID_AA64DFR0_DEBUG_VER_SHIFT) |
| 264 | #define	ID_AA64DFR0_TRACE_VER_SHIFT	4 |
| 265 | #define	ID_AA64DFR0_TRACE_VER_MASK	(0xfULL << ID_AA64DFR0_TRACE_VER_SHIFT) |
| 266 | #define	ID_AA64DFR0_TRACE_VER(x)	((x) & ID_AA64DFR0_TRACE_VER_MASK) |
| 267 | #define	 ID_AA64DFR0_TRACE_VER_NONE	(0x0ULL << ID_AA64DFR0_TRACE_VER_SHIFT) |
| 268 | #define	 ID_AA64DFR0_TRACE_VER_IMPL	(0x1ULL << ID_AA64DFR0_TRACE_VER_SHIFT) |
| 269 | #define	ID_AA64DFR0_PMU_VER_SHIFT	8 |
| 270 | #define	ID_AA64DFR0_PMU_VER_MASK	(0xfULL << ID_AA64DFR0_PMU_VER_SHIFT) |
| 271 | #define	ID_AA64DFR0_PMU_VER(x)		((x) & ID_AA64DFR0_PMU_VER_MASK) |
| 272 | #define	 ID_AA64DFR0_PMU_VER_NONE	(0x0ULL << ID_AA64DFR0_PMU_VER_SHIFT) |
| 273 | #define	 ID_AA64DFR0_PMU_VER_3		(0x1ULL << ID_AA64DFR0_PMU_VER_SHIFT) |
| 274 | #define	 ID_AA64DFR0_PMU_VER_3_1	(0x4ULL << ID_AA64DFR0_PMU_VER_SHIFT) |
| 275 | #define	 ID_AA64DFR0_PMU_VER_IMPL	(0xfULL << ID_AA64DFR0_PMU_VER_SHIFT) |
| 276 | #define	ID_AA64DFR0_BRPS_SHIFT		12 |
| 277 | #define	ID_AA64DFR0_BRPS_MASK		(0xfULL << ID_AA64DFR0_BRPS_SHIFT) |
| 278 | #define	ID_AA64DFR0_BRPS(x)		\ |
| 279 | ((((x) >> ID_AA64DFR0_BRPS_SHIFT) & 0xf) + 1) |
| 280 | #define	ID_AA64DFR0_WRPS_SHIFT		20 |
| 281 | #define	ID_AA64DFR0_WRPS_MASK		(0xfULL << ID_AA64DFR0_WRPS_SHIFT) |
| 282 | #define	ID_AA64DFR0_WRPS(x)		\ |
| 283 | ((((x) >> ID_AA64DFR0_WRPS_SHIFT) & 0xf) + 1) |
| 284 | #define	ID_AA64DFR0_CTX_CMPS_SHIFT	28 |
| 285 | #define	ID_AA64DFR0_CTX_CMPS_MASK	(0xfULL << ID_AA64DFR0_CTX_CMPS_SHIFT) |
| 286 | #define	ID_AA64DFR0_CTX_CMPS(x)		\ |
| 287 | ((((x) >> ID_AA64DFR0_CTX_CMPS_SHIFT) & 0xf) + 1) |
| 288 | |
| 289 | /* ID_AA64ISAR0_EL1 */ |
| 290 | #define	ID_AA64ISAR0_MASK		0xfffffffff0fffff0ULL |
| 291 | #define	ID_AA64ISAR0_AES_SHIFT		4 |
| 292 | #define	ID_AA64ISAR0_AES_MASK		(0xfULL << ID_AA64ISAR0_AES_SHIFT) |
| 293 | #define	ID_AA64ISAR0_AES(x)		((x) & ID_AA64ISAR0_AES_MASK) |
| 294 | #define	 ID_AA64ISAR0_AES_NONE		(0x0ULL << ID_AA64ISAR0_AES_SHIFT) |
| 295 | #define	 ID_AA64ISAR0_AES_BASE		(0x1ULL << ID_AA64ISAR0_AES_SHIFT) |
| 296 | #define	 ID_AA64ISAR0_AES_PMULL		(0x2ULL << ID_AA64ISAR0_AES_SHIFT) |
| 297 | #define	ID_AA64ISAR0_SHA1_SHIFT		8 |
| 298 | #define	ID_AA64ISAR0_SHA1_MASK		(0xfULL << ID_AA64ISAR0_SHA1_SHIFT) |
| 299 | #define	ID_AA64ISAR0_SHA1(x)		((x) & ID_AA64ISAR0_SHA1_MASK) |
| 300 | #define	 ID_AA64ISAR0_SHA1_NONE		(0x0ULL << ID_AA64ISAR0_SHA1_SHIFT) |
| 301 | #define	 ID_AA64ISAR0_SHA1_BASE		(0x1ULL << ID_AA64ISAR0_SHA1_SHIFT) |
| 302 | #define	ID_AA64ISAR0_SHA2_SHIFT		12 |
| 303 | #define	ID_AA64ISAR0_SHA2_MASK		(0xfULL << ID_AA64ISAR0_SHA2_SHIFT) |
| 304 | #define	ID_AA64ISAR0_SHA2(x)		((x) & ID_AA64ISAR0_SHA2_MASK) |
| 305 | #define	 ID_AA64ISAR0_SHA2_NONE		(0x0ULL << ID_AA64ISAR0_SHA2_SHIFT) |
| 306 | #define	 ID_AA64ISAR0_SHA2_BASE		(0x1ULL << ID_AA64ISAR0_SHA2_SHIFT) |
| 307 | #define	 ID_AA64ISAR0_SHA2_512		(0x2ULL << ID_AA64ISAR0_SHA2_SHIFT) |
| 308 | #define	ID_AA64ISAR0_CRC32_SHIFT	16 |
| 309 | #define	ID_AA64ISAR0_CRC32_MASK		(0xfULL << ID_AA64ISAR0_CRC32_SHIFT) |
| 310 | #define	ID_AA64ISAR0_CRC32(x)		((x) & ID_AA64ISAR0_CRC32_MASK) |
| 311 | #define	 ID_AA64ISAR0_CRC32_NONE	(0x0ULL << ID_AA64ISAR0_CRC32_SHIFT) |
| 312 | #define	 ID_AA64ISAR0_CRC32_BASE	(0x1ULL << ID_AA64ISAR0_CRC32_SHIFT) |
| 313 | #define	ID_AA64ISAR0_ATOMIC_SHIFT	20 |
| 314 | #define	ID_AA64ISAR0_ATOMIC_MASK	(0xfULL << ID_AA64ISAR0_ATOMIC_SHIFT) |
| 315 | #define	ID_AA64ISAR0_ATOMIC(x)		((x) & ID_AA64ISAR0_ATOMIC_MASK) |
| 316 | #define	 ID_AA64ISAR0_ATOMIC_NONE	(0x0ULL << ID_AA64ISAR0_ATOMIC_SHIFT) |
| 317 | #define	 ID_AA64ISAR0_ATOMIC_IMPL	(0x2ULL << ID_AA64ISAR0_ATOMIC_SHIFT) |
| 318 | #define	ID_AA64ISAR0_RDM_SHIFT		28 |
| 319 | #define	ID_AA64ISAR0_RDM_MASK		(0xfULL << ID_AA64ISAR0_RDM_SHIFT) |
| 320 | #define	ID_AA64ISAR0_RDM(x)		((x) & ID_AA64ISAR0_RDM_MASK) |
| 321 | #define	 ID_AA64ISAR0_RDM_NONE		(0x0ULL << ID_AA64ISAR0_RDM_SHIFT) |
| 322 | #define	 ID_AA64ISAR0_RDM_IMPL		(0x1ULL << ID_AA64ISAR0_RDM_SHIFT) |
| 323 | #define	ID_AA64ISAR0_SHA3_SHIFT		32 |
| 324 | #define	ID_AA64ISAR0_SHA3_MASK		(0xfULL << ID_AA64ISAR0_SHA3_SHIFT) |
| 325 | #define	ID_AA64ISAR0_SHA3(x)		((x) & ID_AA64ISAR0_SHA3_MASK) |
| 326 | #define	 ID_AA64ISAR0_SHA3_NONE		(0x0ULL << ID_AA64ISAR0_SHA3_SHIFT) |
| 327 | #define	 ID_AA64ISAR0_SHA3_IMPL		(0x1ULL << ID_AA64ISAR0_SHA3_SHIFT) |
| 328 | #define	ID_AA64ISAR0_SM3_SHIFT		36 |
| 329 | #define	ID_AA64ISAR0_SM3_MASK		(0xfULL << ID_AA64ISAR0_SM3_SHIFT) |
| 330 | #define	ID_AA64ISAR0_SM3(x)		((x) & ID_AA64ISAR0_SM3_MASK) |
| 331 | #define	 ID_AA64ISAR0_SM3_NONE		(0x0ULL << ID_AA64ISAR0_SM3_SHIFT) |
| 332 | #define	 ID_AA64ISAR0_SM3_IMPL		(0x1ULL << ID_AA64ISAR0_SM3_SHIFT) |
| 333 | #define	ID_AA64ISAR0_SM4_SHIFT		40 |
| 334 | #define	ID_AA64ISAR0_SM4_MASK		(0xfULL << ID_AA64ISAR0_SM4_SHIFT) |
| 335 | #define	ID_AA64ISAR0_SM4(x)		((x) & ID_AA64ISAR0_SM4_MASK) |
| 336 | #define	 ID_AA64ISAR0_SM4_NONE		(0x0ULL << ID_AA64ISAR0_SM4_SHIFT) |
| 337 | #define	 ID_AA64ISAR0_SM4_IMPL		(0x1ULL << ID_AA64ISAR0_SM4_SHIFT) |
| 338 | #define	ID_AA64ISAR0_DP_SHIFT		44 |
| 339 | #define	ID_AA64ISAR0_DP_MASK		(0xfULL << ID_AA64ISAR0_DP_SHIFT) |
| 340 | #define	ID_AA64ISAR0_DP(x)		((x) & ID_AA64ISAR0_DP_MASK) |
| 341 | #define	 ID_AA64ISAR0_DP_NONE		(0x0ULL << ID_AA64ISAR0_DP_SHIFT) |
| 342 | #define	 ID_AA64ISAR0_DP_IMPL		(0x1ULL << ID_AA64ISAR0_DP_SHIFT) |
| 343 | #define	ID_AA64ISAR0_FHM_SHIFT		48 |
| 344 | #define	ID_AA64ISAR0_FHM_MASK		(0xfULL << ID_AA64ISAR0_FHM_SHIFT) |
| 345 | #define	ID_AA64ISAR0_FHM(x)		((x) & ID_AA64ISAR0_FHM_MASK) |
| 346 | #define	 ID_AA64ISAR0_FHM_NONE		(0x0ULL << ID_AA64ISAR0_FHM_SHIFT) |
| 347 | #define	 ID_AA64ISAR0_FHM_IMPL		(0x1ULL << ID_AA64ISAR0_FHM_SHIFT) |
| 348 | #define	ID_AA64ISAR0_TS_SHIFT		52 |
| 349 | #define	ID_AA64ISAR0_TS_MASK		(0xfULL << ID_AA64ISAR0_TS_SHIFT) |
| 350 | #define	ID_AA64ISAR0_TS(x)		((x) & ID_AA64ISAR0_TS_MASK) |
| 351 | #define	 ID_AA64ISAR0_TS_NONE		(0x0ULL << ID_AA64ISAR0_TS_SHIFT) |
| 352 | #define	 ID_AA64ISAR0_TS_BASE		(0x1ULL << ID_AA64ISAR0_TS_SHIFT) |
| 353 | #define	 ID_AA64ISAR0_TS_AXFLAG		(0x2ULL << ID_AA64ISAR0_TS_SHIFT) |
| 354 | #define	ID_AA64ISAR0_TLB_SHIFT		56 |
| 355 | #define	ID_AA64ISAR0_TLB_MASK		(0xfULL << ID_AA64ISAR0_TLB_SHIFT) |
| 356 | #define	ID_AA64ISAR0_TLB(x)		((x) & ID_AA64ISAR0_TLB_MASK) |
| 357 | #define	 ID_AA64ISAR0_TLB_NONE		(0x0ULL << ID_AA64ISAR0_TLB_SHIFT) |
| 358 | #define	 ID_AA64ISAR0_TLB_IOS		(0x1ULL << ID_AA64ISAR0_TLB_SHIFT) |
| 359 | #define	 ID_AA64ISAR0_TLB_IRANGE	(0x2ULL << ID_AA64ISAR0_TLB_SHIFT) |
| 360 | #define	ID_AA64ISAR0_RNDR_SHIFT		60 |
| 361 | #define	ID_AA64ISAR0_RNDR_MASK		(0xfULL << ID_AA64ISAR0_RNDR_SHIFT) |
| 362 | #define	ID_AA64ISAR0_RNDR(x)		((x) & ID_AA64ISAR0_RNDR_MASK) |
| 363 | #define	 ID_AA64ISAR0_RNDR_NONE		(0x0ULL << ID_AA64ISAR0_RNDR_SHIFT) |
| 364 | #define	 ID_AA64ISAR0_RNDR_IMPL		(0x1ULL << ID_AA64ISAR0_RNDR_SHIFT) |
| 365 | |
| 366 | /* ID_AA64ISAR1_EL1 */ |
| 367 | #define	ID_AA64ISAR1_MASK		0xffffffffffffffffULL |
| 368 | #define	ID_AA64ISAR1_DPB_SHIFT		0 |
| 369 | #define	ID_AA64ISAR1_DPB_MASK		(0xfULL << ID_AA64ISAR1_DPB_SHIFT) |
| 370 | #define	ID_AA64ISAR1_DPB(x)		((x) & ID_AA64ISAR1_DPB_MASK) |
| 371 | #define	 ID_AA64ISAR1_DPB_NONE		(0x0ULL << ID_AA64ISAR1_DPB_SHIFT) |
| 372 | #define	 ID_AA64ISAR1_DPB_IMPL		(0x1ULL << ID_AA64ISAR1_DPB_SHIFT) |
| 373 | #define	 ID_AA64ISAR1_DPB_DCCVADP	(0x2ULL << ID_AA64ISAR1_DPB_SHIFT) |
| 374 | #define	ID_AA64ISAR1_APA_SHIFT		4 |
| 375 | #define	ID_AA64ISAR1_APA_MASK		(0xfULL << ID_AA64ISAR1_APA_SHIFT) |
| 376 | #define	ID_AA64ISAR1_APA(x)		((x) & ID_AA64ISAR1_APA_MASK) |
| 377 | #define	 ID_AA64ISAR1_APA_NONE		(0x0ULL << ID_AA64ISAR1_APA_SHIFT) |
| 378 | #define	 ID_AA64ISAR1_APA_PAC		(0x1ULL << ID_AA64ISAR1_APA_SHIFT) |
| 379 | #define	 ID_AA64ISAR1_APA_EPAC		(0x2ULL << ID_AA64ISAR1_APA_SHIFT) |
| 380 | #define	 ID_AA64ISAR1_APA_EPAC2		(0x3ULL << ID_AA64ISAR1_APA_SHIFT) |
| 381 | #define	 ID_AA64ISAR1_APA_FPAC		(0x4ULL << ID_AA64ISAR1_APA_SHIFT) |
| 382 | #define	 ID_AA64ISAR1_APA_FPAC_COMBINED	(0x5ULL << ID_AA64ISAR1_APA_SHIFT) |
| 383 | #define	ID_AA64ISAR1_API_SHIFT		8 |
| 384 | #define	ID_AA64ISAR1_API_MASK		(0xfULL << ID_AA64ISAR1_API_SHIFT) |
| 385 | #define	ID_AA64ISAR1_API(x)		((x) & ID_AA64ISAR1_API_MASK) |
| 386 | #define	 ID_AA64ISAR1_API_NONE		(0x0ULL << ID_AA64ISAR1_API_SHIFT) |
| 387 | #define	 ID_AA64ISAR1_API_PAC		(0x1ULL << ID_AA64ISAR1_API_SHIFT) |
| 388 | #define	 ID_AA64ISAR1_API_EPAC		(0x2ULL << ID_AA64ISAR1_API_SHIFT) |
| 389 | #define	 ID_AA64ISAR1_API_EPAC2		(0x3ULL << ID_AA64ISAR1_API_SHIFT) |
| 390 | #define	 ID_AA64ISAR1_API_FPAC		(0x4ULL << ID_AA64ISAR1_API_SHIFT) |
| 391 | #define	 ID_AA64ISAR1_API_FPAC_COMBINED	(0x5ULL << ID_AA64ISAR1_API_SHIFT) |
| 392 | #define	ID_AA64ISAR1_JSCVT_SHIFT	12 |
| 393 | #define	ID_AA64ISAR1_JSCVT_MASK		(0xfULL << ID_AA64ISAR1_JSCVT_SHIFT) |
| 394 | #define	ID_AA64ISAR1_JSCVT(x)		((x) & ID_AA64ISAR1_JSCVT_MASK) |
| 395 | #define	 ID_AA64ISAR1_JSCVT_NONE	(0x0ULL << ID_AA64ISAR1_JSCVT_SHIFT) |
| 396 | #define	 ID_AA64ISAR1_JSCVT_IMPL	(0x1ULL << ID_AA64ISAR1_JSCVT_SHIFT) |
| 397 | #define	ID_AA64ISAR1_FCMA_SHIFT		16 |
| 398 | #define	ID_AA64ISAR1_FCMA_MASK		(0xfULL << ID_AA64ISAR1_FCMA_SHIFT) |
| 399 | #define	ID_AA64ISAR1_FCMA(x)		((x) & ID_AA64ISAR1_FCMA_MASK) |
| 400 | #define	 ID_AA64ISAR1_FCMA_NONE		(0x0ULL << ID_AA64ISAR1_FCMA_SHIFT) |
| 401 | #define	 ID_AA64ISAR1_FCMA_IMPL		(0x1ULL << ID_AA64ISAR1_FCMA_SHIFT) |
| 402 | #define	ID_AA64ISAR1_LRCPC_SHIFT	20 |
| 403 | #define	ID_AA64ISAR1_LRCPC_MASK		(0xfULL << ID_AA64ISAR1_LRCPC_SHIFT) |
| 404 | #define	ID_AA64ISAR1_LRCPC(x)		((x) & ID_AA64ISAR1_LRCPC_MASK) |
| 405 | #define	 ID_AA64ISAR1_LRCPC_NONE	(0x0ULL << ID_AA64ISAR1_LRCPC_SHIFT) |
| 406 | #define	 ID_AA64ISAR1_LRCPC_BASE	(0x1ULL << ID_AA64ISAR1_LRCPC_SHIFT) |
| 407 | #define	 ID_AA64ISAR1_LRCPC_LDAPUR	(0x2ULL << ID_AA64ISAR1_LRCPC_SHIFT) |
| 408 | #define	ID_AA64ISAR1_GPA_SHIFT		24 |
| 409 | #define	ID_AA64ISAR1_GPA_MASK		(0xfULL << ID_AA64ISAR1_GPA_SHIFT) |
| 410 | #define	ID_AA64ISAR1_GPA(x)		((x) & ID_AA64ISAR1_GPA_MASK) |
| 411 | #define	 ID_AA64ISAR1_GPA_NONE		(0x0ULL << ID_AA64ISAR1_GPA_SHIFT) |
| 412 | #define	 ID_AA64ISAR1_GPA_IMPL		(0x1ULL << ID_AA64ISAR1_GPA_SHIFT) |
| 413 | #define	ID_AA64ISAR1_GPI_SHIFT		28 |
| 414 | #define	ID_AA64ISAR1_GPI_MASK		(0xfULL << ID_AA64ISAR1_GPI_SHIFT) |
| 415 | #define	ID_AA64ISAR1_GPI(x)		((x) & ID_AA64ISAR1_GPI_MASK) |
| 416 | #define	 ID_AA64ISAR1_GPI_NONE		(0x0ULL << ID_AA64ISAR1_GPI_SHIFT) |
| 417 | #define	 ID_AA64ISAR1_GPI_IMPL		(0x1ULL << ID_AA64ISAR1_GPI_SHIFT) |
| 418 | #define	ID_AA64ISAR1_FRINTTS_SHIFT	32 |
| 419 | #define	ID_AA64ISAR1_FRINTTS_MASK	(0xfULL << ID_AA64ISAR1_FRINTTS_SHIFT) |
| 420 | #define	ID_AA64ISAR1_FRINTTS(x)		((x) & ID_AA64ISAR1_FRINTTS_MASK) |
| 421 | #define	 ID_AA64ISAR1_FRINTTS_NONE	(0x0ULL << ID_AA64ISAR1_FRINTTS_SHIFT) |
| 422 | #define	 ID_AA64ISAR1_FRINTTS_IMPL	(0x1ULL << ID_AA64ISAR1_FRINTTS_SHIFT) |
| 423 | #define	ID_AA64ISAR1_SB_SHIFT		36 |
| 424 | #define	ID_AA64ISAR1_SB_MASK		(0xfULL << ID_AA64ISAR1_SB_SHIFT) |
| 425 | #define	ID_AA64ISAR1_SB(x)		((x) & ID_AA64ISAR1_SB_MASK) |
| 426 | #define	 ID_AA64ISAR1_SB_NONE		(0x0ULL << ID_AA64ISAR1_SB_SHIFT) |
| 427 | #define	 ID_AA64ISAR1_SB_IMPL		(0x1ULL << ID_AA64ISAR1_SB_SHIFT) |
| 428 | #define	ID_AA64ISAR1_SPECRES_SHIFT	40 |
| 429 | #define	ID_AA64ISAR1_SPECRES_MASK	(0xfULL << ID_AA64ISAR1_SPECRES_SHIFT) |
| 430 | #define	ID_AA64ISAR1_SPECRES(x)		((x) & ID_AA64ISAR1_SPECRES_MASK) |
| 431 | #define	 ID_AA64ISAR1_SPECRES_NONE	(0x0ULL << ID_AA64ISAR1_SPECRES_SHIFT) |
| 432 | #define	 ID_AA64ISAR1_SPECRES_IMPL	(0x1ULL << ID_AA64ISAR1_SPECRES_SHIFT) |
| 433 | #define	ID_AA64ISAR1_BF16_SHIFT		44 |
| 434 | #define	ID_AA64ISAR1_BF16_MASK		(0xfULL << ID_AA64ISAR1_BF16_SHIFT) |
| 435 | #define	ID_AA64ISAR1_BF16(x)		((x) & ID_AA64ISAR1_BF16_MASK) |
| 436 | #define	 ID_AA64ISAR1_BF16_NONE		(0x0ULL << ID_AA64ISAR1_BF16_SHIFT) |
| 437 | #define	 ID_AA64ISAR1_BF16_BASE		(0x1ULL << ID_AA64ISAR1_BF16_SHIFT) |
| 438 | #define	 ID_AA64ISAR1_BF16_EBF		(0x2ULL << ID_AA64ISAR1_BF16_SHIFT) |
| 439 | #define	ID_AA64ISAR1_DGH_SHIFT		48 |
| 440 | #define	ID_AA64ISAR1_DGH_MASK		(0xfULL << ID_AA64ISAR1_DGH_SHIFT) |
| 441 | #define	ID_AA64ISAR1_DGH(x)		((x) & ID_AA64ISAR1_DGH_MASK) |
| 442 | #define	 ID_AA64ISAR1_DGH_NONE		(0x0ULL << ID_AA64ISAR1_DGH_SHIFT) |
| 443 | #define	 ID_AA64ISAR1_DGH_IMPL		(0x1ULL << ID_AA64ISAR1_DGH_SHIFT) |
| 444 | #define	ID_AA64ISAR1_I8MM_SHIFT		52 |
| 445 | #define	ID_AA64ISAR1_I8MM_MASK		(0xfULL << ID_AA64ISAR1_I8MM_SHIFT) |
| 446 | #define	ID_AA64ISAR1_I8MM(x)		((x) & ID_AA64ISAR1_I8MM_MASK) |
| 447 | #define	 ID_AA64ISAR1_I8MM_NONE		(0x0ULL << ID_AA64ISAR1_I8MM_SHIFT) |
| 448 | #define	 ID_AA64ISAR1_I8MM_IMPL		(0x1ULL << ID_AA64ISAR1_I8MM_SHIFT) |
| 449 | #define	ID_AA64ISAR1_XS_SHIFT		56 |
| 450 | #define	ID_AA64ISAR1_XS_MASK		(0xfULL << ID_AA64ISAR1_XS_SHIFT) |
| 451 | #define	ID_AA64ISAR1_XS(x)		((x) & ID_AA64ISAR1_XS_MASK) |
| 452 | #define	 ID_AA64ISAR1_XS_NONE		(0x0ULL << ID_AA64ISAR1_XS_SHIFT) |
| 453 | #define	 ID_AA64ISAR1_XS_IMPL		(0x1ULL << ID_AA64ISAR1_XS_SHIFT) |
| 454 | #define	ID_AA64ISAR1_LS64_SHIFT		60 |
| 455 | #define	ID_AA64ISAR1_LS64_MASK		(0xfULL << ID_AA64ISAR1_LS64_SHIFT) |
| 456 | #define	ID_AA64ISAR1_LS64(x)		((x) & ID_AA64ISAR1_LS64_MASK) |
| 457 | #define	 ID_AA64ISAR1_LS64_NONE		(0x0ULL << ID_AA64ISAR1_LS64_SHIFT) |
| 458 | #define	 ID_AA64ISAR1_LS64_BASE		(0x1ULL << ID_AA64ISAR1_LS64_SHIFT) |
| 459 | #define	 ID_AA64ISAR1_LS64_V		(0x2ULL << ID_AA64ISAR1_LS64_SHIFT) |
| 460 | #define	 ID_AA64ISAR1_LS64_ACCDATA	(0x3ULL << ID_AA64ISAR1_LS64_SHIFT) |
| 461 | |
| 462 | /* ID_AA64ISAR2_EL1 */ |
| 463 | #define	ID_AA64ISAR2_MASK		0x00ff0000f0ffffffULL |
| 464 | #define	ID_AA64ISAR2_WFXT_SHIFT		0 |
| 465 | #define	ID_AA64ISAR2_WFXT_MASK		(0xfULL << ID_AA64ISAR2_WFXT_SHIFT) |
| 466 | #define	ID_AA64ISAR2_WFXT(x)		((x) & ID_AA64ISAR2_WFXT_MASK) |
| 467 | #define	 ID_AA64ISAR2_WFXT_NONE		(0x0ULL << ID_AA64ISAR2_WFXT_SHIFT) |
| 468 | #define	 ID_AA64ISAR2_WFXT_IMPL		(0x2ULL << ID_AA64ISAR2_WFXT_SHIFT) |
| 469 | #define	ID_AA64ISAR2_RPRES_SHIFT	4 |
| 470 | #define	ID_AA64ISAR2_RPRES_MASK		(0xfULL << ID_AA64ISAR2_RPRES_SHIFT) |
| 471 | #define	ID_AA64ISAR2_RPRES(x)		((x) & ID_AA64ISAR2_RPRES_MASK) |
| 472 | #define	 ID_AA64ISAR2_RPRES_NONE	(0x0ULL << ID_AA64ISAR2_RPRES_SHIFT) |
| 473 | #define	 ID_AA64ISAR2_RPRES_IMPL	(0x1ULL << ID_AA64ISAR2_RPRES_SHIFT) |
| 474 | #define	ID_AA64ISAR2_GPA3_SHIFT		8 |
| 475 | #define	ID_AA64ISAR2_GPA3_WIDTH		4 |
| 476 | #define	ID_AA64ISAR2_GPA3_MASK		(0xfULL << ID_AA64ISAR2_GPA3_SHIFT) |
| 477 | #define	ID_AA64ISAR2_GPA3(x)		((x) & ID_AA64ISAR2_GPA3_MASK) |
| 478 | #define	 ID_AA64ISAR2_GPA3_NONE		(0x0ULL << ID_AA64ISAR2_GPA3_SHIFT) |
| 479 | #define	 ID_AA64ISAR2_GPA3_IMPL		(0x1ULL << ID_AA64ISAR2_GPA3_SHIFT) |
| 480 | #define	ID_AA64ISAR2_APA3_SHIFT		12 |
| 481 | #define	ID_AA64ISAR2_APA3_WIDTH		4 |
| 482 | #define	ID_AA64ISAR2_APA3_MASK		(0xfULL << ID_AA64ISAR2_APA3_SHIFT) |
| 483 | #define	ID_AA64ISAR2_APA3(x)		((x) & ID_AA64ISAR2_APA3_MASK) |
| 484 | #define	 ID_AA64ISAR2_APA3_NONE		(0x0ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 485 | #define	 ID_AA64ISAR2_APA3_PAC		(0x1ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 486 | #define	 ID_AA64ISAR2_APA3_EPAC		(0x2ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 487 | #define	 ID_AA64ISAR2_APA3_EPAC2	(0x3ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 488 | #define	 ID_AA64ISAR2_APA3_FPAC		(0x4ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 489 | #define	 ID_AA64ISAR2_APA3_FPAC_COMBINED (0x5ULL << ID_AA64ISAR2_APA3_SHIFT) |
| 490 | #define	ID_AA64ISAR2_MOPS_SHIFT		16 |
| 491 | #define	ID_AA64ISAR2_MOPS_MASK		(0xfULL << ID_AA64ISAR2_MOPS_SHIFT) |
| 492 | #define	ID_AA64ISAR2_MOPS(x)		((x) & ID_AA64ISAR2_MOPS_MASK) |
| 493 | #define	 ID_AA64ISAR2_MOPS_NONE		(0x0ULL << ID_AA64ISAR2_MOPS_SHIFT) |
| 494 | #define	 ID_AA64ISAR2_MOPS_IMPL		(0x1ULL << ID_AA64ISAR2_MOPS_SHIFT) |
| 495 | #define	ID_AA64ISAR2_BC_SHIFT		20 |
| 496 | #define	ID_AA64ISAR2_BC_MASK		(0xfULL << ID_AA64ISAR2_BC_SHIFT) |
| 497 | #define	ID_AA64ISAR2_BC(x)		((x) & ID_AA64ISAR2_BC_MASK) |
| 498 | #define	 ID_AA64ISAR2_BC_NONE		(0x0ULL << ID_AA64ISAR2_BC_SHIFT) |
| 499 | #define	 ID_AA64ISAR2_BC_IMPL		(0x1ULL << ID_AA64ISAR2_BC_SHIFT) |
| 500 | #define	ID_AA64ISAR2_CLRBHB_SHIFT	28 |
| 501 | #define	ID_AA64ISAR2_CLRBHB_MASK	(0xfULL << ID_AA64ISAR2_CLRBHB_SHIFT) |
| 502 | #define	ID_AA64ISAR2_CLRBHB(x)		((x) & ID_AA64ISAR2_CLRBHB_MASK) |
| 503 | #define	 ID_AA64ISAR2_CLRBHB_NONE	(0x0ULL << ID_AA64ISAR2_CLRBHB_SHIFT) |
| 504 | #define	 ID_AA64ISAR2_CLRBHB_IMPL	(0x1ULL << ID_AA64ISAR2_CLRBHB_SHIFT) |
| 505 | #define	ID_AA64ISAR2_RPRFM_SHIFT	48 |
| 506 | #define	ID_AA64ISAR2_RPRFM_MASK		(0xfULL << ID_AA64ISAR2_RPRFM_SHIFT) |
| 507 | #define	ID_AA64ISAR2_RPRFM(x)		((x) & ID_AA64ISAR2_RPRFM_MASK) |
| 508 | #define	 ID_AA64ISAR2_RPRFM_NONE	(0x0ULL << ID_AA64ISAR2_RPRFM_SHIFT) |
| 509 | #define	 ID_AA64ISAR2_RPRFM_IMPL	(0x1ULL << ID_AA64ISAR2_RPRFM_SHIFT) |
| 510 | #define	ID_AA64ISAR2_CSSC_SHIFT		52 |
| 511 | #define	ID_AA64ISAR2_CSSC_MASK		(0xfULL << ID_AA64ISAR2_CSSC_SHIFT) |
| 512 | #define	ID_AA64ISAR2_CSSC(x)		((x) & ID_AA64ISAR2_CSSC_MASK) |
| 513 | #define	 ID_AA64ISAR2_CSSC_NONE		(0x0ULL << ID_AA64ISAR2_CSSC_SHIFT) |
| 514 | #define	 ID_AA64ISAR2_CSSC_IMPL		(0x1ULL << ID_AA64ISAR2_CSSC_SHIFT) |
| 515 | |
| 516 | /* ID_AA64MMFR0_EL1 */ |
| 517 | #define	ID_AA64MMFR0_MASK		0xf0000000ffffffffULL |
| 518 | #define	ID_AA64MMFR0_PA_RANGE_SHIFT	0 |
| 519 | #define	ID_AA64MMFR0_PA_RANGE_MASK	(0xfULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 520 | #define	ID_AA64MMFR0_PA_RANGE(x)	((x) & ID_AA64MMFR0_PA_RANGE_MASK) |
| 521 | #define	 ID_AA64MMFR0_PA_RANGE_4G	(0x0ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 522 | #define	 ID_AA64MMFR0_PA_RANGE_64G	(0x1ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 523 | #define	 ID_AA64MMFR0_PA_RANGE_1T	(0x2ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 524 | #define	 ID_AA64MMFR0_PA_RANGE_4T	(0x3ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 525 | #define	 ID_AA64MMFR0_PA_RANGE_16T	(0x4ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 526 | #define	 ID_AA64MMFR0_PA_RANGE_256T	(0x5ULL << ID_AA64MMFR0_PA_RANGE_SHIFT) |
| 527 | #define	ID_AA64MMFR0_ASID_BITS_SHIFT	4 |
| 528 | #define	ID_AA64MMFR0_ASID_BITS_MASK	(0xfULL << ID_AA64MMFR0_ASID_BITS_SHIFT) |
| 529 | #define	ID_AA64MMFR0_ASID_BITS(x)	((x) & ID_AA64MMFR0_ASID_BITS_MASK) |
| 530 | #define	 ID_AA64MMFR0_ASID_BITS_8	(0x0ULL << ID_AA64MMFR0_ASID_BITS_SHIFT) |
| 531 | #define	 ID_AA64MMFR0_ASID_BITS_16	(0x2ULL << ID_AA64MMFR0_ASID_BITS_SHIFT) |
| 532 | #define	ID_AA64MMFR0_BIGEND_SHIFT	8 |
| 533 | #define	ID_AA64MMFR0_BIGEND_MASK	(0xfULL << ID_AA64MMFR0_BIGEND_SHIFT) |
| 534 | #define	ID_AA64MMFR0_BIGEND(x)		((x) & ID_AA64MMFR0_BIGEND_MASK) |
| 535 | #define	 ID_AA64MMFR0_BIGEND_FIXED	(0x0ULL << ID_AA64MMFR0_BIGEND_SHIFT) |
| 536 | #define	 ID_AA64MMFR0_BIGEND_MIXED	(0x1ULL << ID_AA64MMFR0_BIGEND_SHIFT) |
| 537 | #define	ID_AA64MMFR0_S_NS_MEM_SHIFT	12 |
| 538 | #define	ID_AA64MMFR0_S_NS_MEM_MASK	(0xfULL << ID_AA64MMFR0_S_NS_MEM_SHIFT) |
| 539 | #define	ID_AA64MMFR0_S_NS_MEM(x)	((x) & ID_AA64MMFR0_S_NS_MEM_MASK) |
| 540 | #define	 ID_AA64MMFR0_S_NS_MEM_NONE	(0x0ULL << ID_AA64MMFR0_S_NS_MEM_SHIFT) |
| 541 | #define	 ID_AA64MMFR0_S_NS_MEM_DISTINCT	(0x1ULL << ID_AA64MMFR0_S_NS_MEM_SHIFT) |
| 542 | #define	ID_AA64MMFR0_BIGEND_EL0_SHIFT	16 |
| 543 | #define	ID_AA64MMFR0_BIGEND_EL0_MASK	(0xfULL << ID_AA64MMFR0_BIGEND_EL0_SHIFT) |
| 544 | #define	ID_AA64MMFR0_BIGEND_EL0(x)	((x) & ID_AA64MMFR0_BIGEND_EL0_MASK) |
| 545 | #define	 ID_AA64MMFR0_BIGEND_EL0_FIXED	(0x0ULL << ID_AA64MMFR0_BIGEND_EL0_SHIFT) |
| 546 | #define	 ID_AA64MMFR0_BIGEND_EL0_MIXED	(0x1ULL << ID_AA64MMFR0_BIGEND_EL0_SHIFT) |
| 547 | #define	ID_AA64MMFR0_TGRAN16_SHIFT	20 |
| 548 | #define	ID_AA64MMFR0_TGRAN16_MASK	(0xfULL << ID_AA64MMFR0_TGRAN16_SHIFT) |
| 549 | #define	ID_AA64MMFR0_TGRAN16(x)		((x) & ID_AA64MMFR0_TGRAN16_MASK) |
| 550 | #define	 ID_AA64MMFR0_TGRAN16_NONE	(0x0ULL << ID_AA64MMFR0_TGRAN16_SHIFT) |
| 551 | #define	 ID_AA64MMFR0_TGRAN16_IMPL	(0x1ULL << ID_AA64MMFR0_TGRAN16_SHIFT) |
| 552 | #define	ID_AA64MMFR0_TGRAN64_SHIFT	24 |
| 553 | #define	ID_AA64MMFR0_TGRAN64_MASK	(0xfULL << ID_AA64MMFR0_TGRAN64_SHIFT) |
| 554 | #define	ID_AA64MMFR0_TGRAN64(x)		((x) & ID_AA64MMFR0_TGRAN64_MASK) |
| 555 | #define	 ID_AA64MMFR0_TGRAN64_IMPL	(0x0ULL << ID_AA64MMFR0_TGRAN64_SHIFT) |
| 556 | #define	 ID_AA64MMFR0_TGRAN64_NONE	(0xfULL << ID_AA64MMFR0_TGRAN64_SHIFT) |
| 557 | #define	ID_AA64MMFR0_TGRAN4_SHIFT	28 |
| 558 | #define	ID_AA64MMFR0_TGRAN4_MASK	(0xfULL << ID_AA64MMFR0_TGRAN4_SHIFT) |
| 559 | #define	ID_AA64MMFR0_TGRAN4(x)		((x) & ID_AA64MMFR0_TGRAN4_MASK) |
| 560 | #define	 ID_AA64MMFR0_TGRAN4_IMPL	(0x0ULL << ID_AA64MMFR0_TGRAN4_SHIFT) |
| 561 | #define	 ID_AA64MMFR0_TGRAN4_NONE	(0xfULL << ID_AA64MMFR0_TGRAN4_SHIFT) |
| 562 | #define	ID_AA64MMFR0_ECV_SHIFT		60 |
| 563 | #define	ID_AA64MMFR0_ECV_MASK		(0xfULL << ID_AA64MMFR0_ECV_SHIFT) |
| 564 | #define	ID_AA64MMFR0_ECV(x)		((x) & ID_AA64MMFR0_ECV_MASK) |
| 565 | #define	 ID_AA64MMFR0_ECV_NONE		(0x0ULL << ID_AA64MMFR0_ECV_SHIFT) |
| 566 | #define	 ID_AA64MMFR0_ECV_IMPL		(0x1ULL << ID_AA64MMFR0_ECV_SHIFT) |
| 567 | #define	 ID_AA64MMFR0_ECV_CNTHCTL	(0x2ULL << ID_AA64MMFR0_ECV_SHIFT) |
| 568 | |
| 569 | /* ID_AA64MMFR1_EL1 */ |
| 570 | #define	ID_AA64MMFR1_MASK		0xf000f000ffffffffULL |
| 571 | #define	ID_AA64MMFR1_HAFDBS_SHIFT	0 |
| 572 | #define	ID_AA64MMFR1_HAFDBS_MASK	(0xfULL << ID_AA64MMFR1_HAFDBS_SHIFT) |
| 573 | #define	ID_AA64MMFR1_HAFDBS(x)		((x) & ID_AA64MMFR1_HAFDBS_MASK) |
| 574 | #define	 ID_AA64MMFR1_HAFDBS_NONE	(0x0ULL << ID_AA64MMFR1_HAFDBS_SHIFT) |
| 575 | #define	 ID_AA64MMFR1_HAFDBS_AF		(0x1ULL << ID_AA64MMFR1_HAFDBS_SHIFT) |
| 576 | #define	 ID_AA64MMFR1_HAFDBS_AF_DBS	(0x2ULL << ID_AA64MMFR1_HAFDBS_SHIFT) |
| 577 | #define	ID_AA64MMFR1_VMIDBITS_SHIFT	4 |
| 578 | #define	ID_AA64MMFR1_VMIDBITS_MASK	(0xfULL << ID_AA64MMFR1_VMIDBITS_SHIFT) |
| 579 | #define	ID_AA64MMFR1_VMIDBITS(x)	((x) & ID_AA64MMFR1_VMIDBITS_MASK) |
| 580 | #define	 ID_AA64MMFR1_VMIDBITS_8	(0x0ULL << ID_AA64MMFR1_VMIDBITS_SHIFT) |
| 581 | #define	 ID_AA64MMFR1_VMIDBITS_16	(0x2ULL << ID_AA64MMFR1_VMIDBITS_SHIFT) |
| 582 | #define	ID_AA64MMFR1_VH_SHIFT		8 |
| 583 | #define	ID_AA64MMFR1_VH_MASK		(0xfULL << ID_AA64MMFR1_VH_SHIFT) |
| 584 | #define	ID_AA64MMFR1_VH(x)		((x) & ID_AA64MMFR1_VH_MASK) |
| 585 | #define	 ID_AA64MMFR1_VH_NONE		(0x0ULL << ID_AA64MMFR1_VH_SHIFT) |
| 586 | #define	 ID_AA64MMFR1_VH_IMPL		(0x1ULL << ID_AA64MMFR1_VH_SHIFT) |
| 587 | #define	ID_AA64MMFR1_HPDS_SHIFT		12 |
| 588 | #define	ID_AA64MMFR1_HPDS_MASK		(0xfULL << ID_AA64MMFR1_HPDS_SHIFT) |
| 589 | #define	ID_AA64MMFR1_HPDS(x)		((x) & ID_AA64MMFR1_HPDS_MASK) |
| 590 | #define	 ID_AA64MMFR1_HPDS_NONE		(0x0ULL << ID_AA64MMFR1_HPDS_SHIFT) |
| 591 | #define	 ID_AA64MMFR1_HPDS_IMPL		(0x1ULL << ID_AA64MMFR1_HPDS_SHIFT) |
| 592 | #define	ID_AA64MMFR1_LO_SHIFT		16 |
| 593 | #define	ID_AA64MMFR1_LO_MASK		(0xfULL << ID_AA64MMFR1_LO_SHIFT) |
| 594 | #define	ID_AA64MMFR1_LO(x)		((x) & ID_AA64MMFR1_LO_MASK) |
| 595 | #define	 ID_AA64MMFR1_LO_NONE		(0x0ULL << ID_AA64MMFR1_LO_SHIFT) |
| 596 | #define	 ID_AA64MMFR1_LO_IMPL		(0x1ULL << ID_AA64MMFR1_LO_SHIFT) |
| 597 | #define	ID_AA64MMFR1_PAN_SHIFT		20 |
| 598 | #define	ID_AA64MMFR1_PAN_MASK		(0xfULL << ID_AA64MMFR1_PAN_SHIFT) |
| 599 | #define	ID_AA64MMFR1_PAN(x)		((x) & ID_AA64MMFR1_PAN_MASK) |
| 600 | #define	 ID_AA64MMFR1_PAN_NONE		(0x0ULL << ID_AA64MMFR1_PAN_SHIFT) |
| 601 | #define	 ID_AA64MMFR1_PAN_IMPL		(0x1ULL << ID_AA64MMFR1_PAN_SHIFT) |
| 602 | #define	 ID_AA64MMFR1_PAN_ATS1E1	(0x2ULL << ID_AA64MMFR1_PAN_SHIFT) |
| 603 | #define	 ID_AA64MMFR1_PAN_EPAN		(0x3ULL << ID_AA64MMFR1_PAN_SHIFT) |
| 604 | #define	ID_AA64MMFR1_SPECSEI_SHIFT	24 |
| 605 | #define	ID_AA64MMFR1_SPECSEI_MASK	(0xfULL << ID_AA64MMFR1_SPECSEI_SHIFT) |
| 606 | #define	ID_AA64MMFR1_SPECSEI(x)		((x) & ID_AA64MMFR1_SPECSEI_MASK) |
| 607 | #define	 ID_AA64MMFR1_SPECSEI_NONE	(0x0ULL << ID_AA64MMFR1_SPECSEI_SHIFT) |
| 608 | #define	 ID_AA64MMFR1_SPECSEI_IMPL	(0x1ULL << ID_AA64MMFR1_SPECSEI_SHIFT) |
| 609 | #define	ID_AA64MMFR1_XNX_SHIFT		28 |
| 610 | #define	ID_AA64MMFR1_XNX_MASK		(0xfULL << ID_AA64MMFR1_XNX_SHIFT) |
| 611 | #define	ID_AA64MMFR1_XNX(x)		((x) & ID_AA64MMFR1_XNX_MASK) |
| 612 | #define	 ID_AA64MMFR1_XNX_NONE		(0x0ULL << ID_AA64MMFR1_XNX_SHIFT) |
| 613 | #define	 ID_AA64MMFR1_XNX_IMPL		(0x1ULL << ID_AA64MMFR1_XNX_SHIFT) |
| 614 | #define	ID_AA64MMFR1_AFP_SHIFT		44 |
| 615 | #define	ID_AA64MMFR1_AFP_MASK		(0xfULL << ID_AA64MMFR1_AFP_SHIFT) |
| 616 | #define	ID_AA64MMFR1_AFP(x)		((x) & ID_AA64MMFR1_AFP_MASK) |
| 617 | #define	 ID_AA64MMFR1_AFP_NONE		(0x0ULL << ID_AA64MMFR1_AFP_SHIFT) |
| 618 | #define	 ID_AA64MMFR1_AFP_IMPL		(0x1ULL << ID_AA64MMFR1_AFP_SHIFT) |
| 619 | #define	ID_AA64MMFR1_ECBHB_SHIFT	60 |
| 620 | #define	ID_AA64MMFR1_ECBHB_MASK		(0xfULL << ID_AA64MMFR1_ECBHB_SHIFT) |
| 621 | #define	ID_AA64MMFR1_ECBHB(x)		((x) & ID_AA64MMFR1_ECBHB_MASK) |
| 622 | #define	 ID_AA64MMFR1_ECBHB_NONE	(0x0ULL << ID_AA64MMFR1_ECBHB_SHIFT) |
| 623 | #define	 ID_AA64MMFR1_ECBHB_IMPL	(0x1ULL << ID_AA64MMFR1_ECBHB_SHIFT) |
| 624 | |
| 625 | /* ID_AA64MMFR2_EL1 */ |
| 626 | #define	ID_AA64MMFR2_MASK		0xffff0fffffffffffULL |
| 627 | #define	ID_AA64MMFR2_CCIDX_SHIFT	20 |
| 628 | #define	ID_AA64MMFR2_CCIDX_MASK		(0xfULL << ID_AA64MMFR2_CCIDX_SHIFT) |
| 629 | #define	ID_AA64MMFR2_CCIDX(x)		((x) & ID_AA64MMFR2_CCIDX_MASK) |
| 630 | #define	 ID_AA64MMFR2_CCIDX_IMPL	(0x1ULL << ID_AA64MMFR2_CCIDX_SHIFT) |
| 631 | #define	ID_AA64MMFR2_AT_SHIFT		32 |
| 632 | #define	ID_AA64MMFR2_AT_MASK		(0xfULL << ID_AA64MMFR2_AT_SHIFT) |
| 633 | #define	ID_AA64MMFR2_AT(x)		((x) & ID_AA64MMFR2_AT_MASK) |
| 634 | #define	 ID_AA64MMFR2_AT_NONE		(0x0ULL << ID_AA64MMFR2_AT_SHIFT) |
| 635 | #define	 ID_AA64MMFR2_AT_IMPL		(0x1ULL << ID_AA64MMFR2_AT_SHIFT) |
| 636 | #define	ID_AA64MMFR2_IDS_SHIFT		36 |
| 637 | #define	ID_AA64MMFR2_IDS_MASK		(0xfULL << ID_AA64MMFR2_IDS_SHIFT) |
| 638 | #define	ID_AA64MMFR2_IDS(x)		((x) & ID_AA64MMFR2_IDS_MASK) |
| 639 | #define	 ID_AA64MMFR2_IDS_NONE		(0x0ULL << ID_AA64MMFR2_IDS_SHIFT) |
| 640 | #define	 ID_AA64MMFR2_IDS_IMPL		(0x1ULL << ID_AA64MMFR2_IDS_SHIFT) |
| 641 | |
| 642 | /* ID_AA64PFR0_EL1 */ |
| 643 | #define	ID_AA64PFR0_MASK		0xff0fffffffffffffULL |
| 644 | #define	ID_AA64PFR0_EL0_SHIFT		0 |
| 645 | #define	ID_AA64PFR0_EL0_MASK		(0xfULL << ID_AA64PFR0_EL0_SHIFT) |
| 646 | #define	ID_AA64PFR0_EL0(x)		((x) & ID_AA64PFR0_EL0_MASK) |
| 647 | #define	 ID_AA64PFR0_EL0_64		(0x1ULL << ID_AA64PFR0_EL0_SHIFT) |
| 648 | #define	 ID_AA64PFR0_EL0_64_32		(0x2ULL << ID_AA64PFR0_EL0_SHIFT) |
| 649 | #define	ID_AA64PFR0_EL1_SHIFT		4 |
| 650 | #define	ID_AA64PFR0_EL1_MASK		(0xfULL << ID_AA64PFR0_EL1_SHIFT) |
| 651 | #define	ID_AA64PFR0_EL1(x)		((x) & ID_AA64PFR0_EL1_MASK) |
| 652 | #define	 ID_AA64PFR0_EL1_64		(0x1ULL << ID_AA64PFR0_EL1_SHIFT) |
| 653 | #define	 ID_AA64PFR0_EL1_64_32		(0x2ULL << ID_AA64PFR0_EL1_SHIFT) |
| 654 | #define	ID_AA64PFR0_EL2_SHIFT		8 |
| 655 | #define	ID_AA64PFR0_EL2_MASK		(0xfULL << ID_AA64PFR0_EL2_SHIFT) |
| 656 | #define	ID_AA64PFR0_EL2(x)		((x) & ID_AA64PFR0_EL2_MASK) |
| 657 | #define	 ID_AA64PFR0_EL2_NONE		(0x0ULL << ID_AA64PFR0_EL2_SHIFT) |
| 658 | #define	 ID_AA64PFR0_EL2_64		(0x1ULL << ID_AA64PFR0_EL2_SHIFT) |
| 659 | #define	 ID_AA64PFR0_EL2_64_32		(0x2ULL << ID_AA64PFR0_EL2_SHIFT) |
| 660 | #define	ID_AA64PFR0_EL3_SHIFT		12 |
| 661 | #define	ID_AA64PFR0_EL3_MASK		(0xfULL << ID_AA64PFR0_EL3_SHIFT) |
| 662 | #define	ID_AA64PFR0_EL3(x)		((x) & ID_AA64PFR0_EL3_MASK) |
| 663 | #define	 ID_AA64PFR0_EL3_NONE		(0x0ULL << ID_AA64PFR0_EL3_SHIFT) |
| 664 | #define	 ID_AA64PFR0_EL3_64		(0x1ULL << ID_AA64PFR0_EL3_SHIFT) |
| 665 | #define	 ID_AA64PFR0_EL3_64_32		(0x2ULL << ID_AA64PFR0_EL3_SHIFT) |
| 666 | #define	ID_AA64PFR0_FP_SHIFT		16 |
| 667 | #define	ID_AA64PFR0_FP_MASK		(0xfULL << ID_AA64PFR0_FP_SHIFT) |
| 668 | #define	ID_AA64PFR0_FP(x)		((x) & ID_AA64PFR0_FP_MASK) |
| 669 | #define	 ID_AA64PFR0_FP_IMPL		(0x0ULL << ID_AA64PFR0_FP_SHIFT) |
| 670 | #define	 ID_AA64PFR0_FP_HP		(0x1ULL << ID_AA64PFR0_FP_SHIFT) |
| 671 | #define	 ID_AA64PFR0_FP_NONE		(0xfULL << ID_AA64PFR0_FP_SHIFT) |
| 672 | #define	ID_AA64PFR0_ADV_SIMD_SHIFT	20 |
| 673 | #define	ID_AA64PFR0_ADV_SIMD_MASK	(0xfULL << ID_AA64PFR0_ADV_SIMD_SHIFT) |
| 674 | #define	ID_AA64PFR0_ADV_SIMD(x)		((x) & ID_AA64PFR0_ADV_SIMD_MASK) |
| 675 | #define	 ID_AA64PFR0_ADV_SIMD_IMPL	(0x0ULL << ID_AA64PFR0_ADV_SIMD_SHIFT) |
| 676 | #define	 ID_AA64PFR0_ADV_SIMD_HP	(0x1ULL << ID_AA64PFR0_ADV_SIMD_SHIFT) |
| 677 | #define	 ID_AA64PFR0_ADV_SIMD_NONE	(0xfULL << ID_AA64PFR0_ADV_SIMD_SHIFT) |
| 678 | #define	ID_AA64PFR0_GIC_BITS		0x4 /* Number of bits in GIC field */ |
| 679 | #define	ID_AA64PFR0_GIC_SHIFT		24 |
| 680 | #define	ID_AA64PFR0_GIC_MASK		(0xfULL << ID_AA64PFR0_GIC_SHIFT) |
| 681 | #define	ID_AA64PFR0_GIC(x)		((x) & ID_AA64PFR0_GIC_MASK) |
| 682 | #define	 ID_AA64PFR0_GIC_CPUIF_NONE	(0x0ULL << ID_AA64PFR0_GIC_SHIFT) |
| 683 | #define	 ID_AA64PFR0_GIC_CPUIF_EN	(0x1ULL << ID_AA64PFR0_GIC_SHIFT) |
| 684 | #define	ID_AA64PFR0_RAS_SHIFT		28 |
| 685 | #define	ID_AA64PFR0_RAS_MASK		(0xfULL << ID_AA64PFR0_RAS_SHIFT) |
| 686 | #define	ID_AA64PFR0_RAS(x)		((x) & ID_AA64PFR0_RAS_MASK) |
| 687 | #define	 ID_AA64PFR0_RAS_NONE		(0x0ULL << ID_AA64PFR0_RAS_SHIFT) |
| 688 | #define	 ID_AA64PFR0_RAS_IMPL		(0x1ULL << ID_AA64PFR0_RAS_SHIFT) |
| 689 | #define	 ID_AA64PFR0_RAS_IMPL_V1P1	(0x2ULL << ID_AA64PFR0_RAS_SHIFT) |
| 690 | #define	ID_AA64PFR0_SVE_SHIFT		32 |
| 691 | #define	ID_AA64PFR0_SVE_MASK		(0xfULL << ID_AA64PFR0_SVE_SHIFT) |
| 692 | #define	ID_AA64PFR0_SVE(x)		((x) & ID_AA64PFR0_SVE_MASK) |
| 693 | #define	 ID_AA64PFR0_SVE_NONE		(0x0ULL << ID_AA64PFR0_SVE_SHIFT) |
| 694 | #define	 ID_AA64PFR0_SVE_IMPL		(0x1ULL << ID_AA64PFR0_SVE_SHIFT) |
| 695 | #define	ID_AA64PFR0_SEL2_SHIFT		36 |
| 696 | #define	ID_AA64PFR0_SEL2_MASK		(0xfULL << ID_AA64PFR0_SEL2_SHIFT) |
| 697 | #define	ID_AA64PFR0_SEL2(x)		((x) & ID_AA64PFR0_SEL2_MASK) |
| 698 | #define	 ID_AA64PFR0_SEL2_NONE		(0x0ULL << ID_AA64PFR0_SEL2_SHIFT) |
| 699 | #define	 ID_AA64PFR0_SEL2_IMPL		(0x1ULL << ID_AA64PFR0_SEL2_SHIFT) |
| 700 | #define	ID_AA64PFR0_MPAM_SHIFT		40 |
| 701 | #define	ID_AA64PFR0_MPAM_MASK		(0xfULL << ID_AA64PFR0_MPAM_SHIFT) |
| 702 | #define	ID_AA64PFR0_MPAM(x)		((x) & ID_AA64PFR0_MPAM_MASK) |
| 703 | #define	 ID_AA64PFR0_MPAM_NONE		(0x0ULL << ID_AA64PFR0_MPAM_SHIFT) |
| 704 | #define	 ID_AA64PFR0_MPAM_IMPL		(0x1ULL << ID_AA64PFR0_MPAM_SHIFT) |
| 705 | #define	ID_AA64PFR0_AMU_SHIFT		44 |
| 706 | #define	ID_AA64PFR0_AMU_MASK		(0xfULL << ID_AA64PFR0_AMU_SHIFT) |
| 707 | #define	ID_AA64PFR0_AMU(x)		((x) & ID_AA64PFR0_AMU_MASK) |
| 708 | #define	 ID_AA64PFR0_AMU_NONE		(0x0ULL << ID_AA64PFR0_AMU_SHIFT) |
| 709 | #define	 ID_AA64PFR0_AMU_IMPL		(0x1ULL << ID_AA64PFR0_AMU_SHIFT) |
| 710 | #define	 ID_AA64PFR0_AMU_IMPL_V1P1	(0x2ULL << ID_AA64PFR0_AMU_SHIFT) |
| 711 | #define	ID_AA64PFR0_DIT_SHIFT		48 |
| 712 | #define	ID_AA64PFR0_DIT_MASK		(0xfULL << ID_AA64PFR0_DIT_SHIFT) |
| 713 | #define	ID_AA64PFR0_DIT(x)		((x) & ID_AA64PFR0_DIT_MASK) |
| 714 | #define	 ID_AA64PFR0_DIT_UNKNOWN	(0x0ULL << ID_AA64PFR0_DIT_SHIFT) |
| 715 | #define	 ID_AA64PFR0_DIT_IMPL		(0x1ULL << ID_AA64PFR0_DIT_SHIFT) |
| 716 | #define	ID_AA64PFR0_CSV2_SHIFT		56 |
| 717 | #define	ID_AA64PFR0_CSV2_MASK		(0xfULL << ID_AA64PFR0_CSV2_SHIFT) |
| 718 | #define	ID_AA64PFR0_CSV2(x)		((x) & ID_AA64PFR0_CSV2_MASK) |
| 719 | #define	 ID_AA64PFR0_CSV2_UNKNOWN	(0x0ULL << ID_AA64PFR0_CSV2_SHIFT) |
| 720 | #define	 ID_AA64PFR0_CSV2_IMPL		(0x1ULL << ID_AA64PFR0_CSV2_SHIFT) |
| 721 | #define	 ID_AA64PFR0_CSV2_SCXT		(0x2ULL << ID_AA64PFR0_CSV2_SHIFT) |
| 722 | #define	 ID_AA64PFR0_CSV2_HCXT		(0x3ULL << ID_AA64PFR0_CSV2_SHIFT) |
| 723 | #define	ID_AA64PFR0_CSV3_SHIFT		60 |
| 724 | #define	ID_AA64PFR0_CSV3_MASK		(0xfULL << ID_AA64PFR0_CSV3_SHIFT) |
| 725 | #define	ID_AA64PFR0_CSV3(x)		((x) & ID_AA64PFR0_CSV3_MASK) |
| 726 | #define	 ID_AA64PFR0_CSV3_UNKNOWN	(0x0ULL << ID_AA64PFR0_CSV3_SHIFT) |
| 727 | #define	 ID_AA64PFR0_CSV3_IMPL		(0x1ULL << ID_AA64PFR0_CSV3_SHIFT) |
| 728 | |
| 729 | /* ID_AA64PFR1_EL1 */ |
| 730 | #define	ID_AA64PFR1_MASK		0x000000000000ffffULL |
| 731 | #define	ID_AA64PFR1_BT_SHIFT		0 |
| 732 | #define	ID_AA64PFR1_BT_MASK		(0xfULL << ID_AA64PFR1_BT_SHIFT) |
| 733 | #define	ID_AA64PFR1_BT(x)		((x) & ID_AA64PFR1_BT_MASK) |
| 734 | #define	 ID_AA64PFR1_BT_NONE		(0x0ULL << ID_AA64PFR1_BT_SHIFT) |
| 735 | #define	 ID_AA64PFR1_BT_IMPL		(0x1ULL << ID_AA64PFR1_BT_SHIFT) |
| 736 | #define	ID_AA64PFR1_SSBS_SHIFT		4 |
| 737 | #define	ID_AA64PFR1_SSBS_MASK		(0xfULL << ID_AA64PFR1_SSBS_SHIFT) |
| 738 | #define	ID_AA64PFR1_SSBS(x)		((x) & ID_AA64PFR1_SSBS_MASK) |
| 739 | #define	 ID_AA64PFR1_SSBS_NONE		(0x0ULL << ID_AA64PFR1_SSBS_SHIFT) |
| 740 | #define	 ID_AA64PFR1_SSBS_PSTATE	(0x1ULL << ID_AA64PFR1_SSBS_SHIFT) |
| 741 | #define	 ID_AA64PFR1_SSBS_PSTATE_MSR	(0x2ULL << ID_AA64PFR1_SSBS_SHIFT) |
| 742 | #define	ID_AA64PFR1_MTE_SHIFT		8 |
| 743 | #define	ID_AA64PFR1_MTE_MASK		(0xfULL << ID_AA64PFR1_MTE_SHIFT) |
| 744 | #define	ID_AA64PFR1_MTE(x)		((x) & ID_AA64PFR1_MTE_MASK) |
| 745 | #define	 ID_AA64PFR1_MTE_NONE		(0x0ULL << ID_AA64PFR1_MTE_SHIFT) |
| 746 | #define	 ID_AA64PFR1_MTE_IMPL		(0x1ULL << ID_AA64PFR1_MTE_SHIFT) |
| 747 | #define	ID_AA64PFR1_RAS_FRAC_SHIFT	12 |
| 748 | #define	ID_AA64PFR1_RAS_FRAC_MASK	(0xfULL << ID_AA64PFR1_RAS_FRAC_SHIFT) |
| 749 | #define	ID_AA64PFR1_RAS_FRAC(x)		((x) & ID_AA64PFR1_RAS_FRAC_MASK) |
| 750 | #define	 ID_AA64PFR1_RAS_FRAC_NONE	(0x0ULL << ID_AA64PFR1_RAS_FRAC_SHIFT) |
| 751 | #define	 ID_AA64PFR1_RAS_FRAC_IMPL	(0x1ULL << ID_AA64PFR1_RAS_FRAC_SHIFT) |
| 752 | |
| 753 | /* ID_AA64ZFR0_EL1 */ |
| 754 | #define	ID_AA64ZFR0_MASK		0x0ff0ff0f00ff00ffULL |
| 755 | #define	ID_AA64ZFR0_SVEVER_SHIFT	0 |
| 756 | #define	ID_AA64ZFR0_SVEVER_MASK		(0xfULL << ID_AA64ZFR0_SVEVER_SHIFT) |
| 757 | #define	ID_AA64ZFR0_SVEVER(x)		((x) & ID_AA64ZFR0_SVEVER_MASK) |
| 758 | #define	 ID_AA64ZFR0_SVEVER_SVE1	(0x0ULL << ID_AA64ZFR0_SVEVER_SHIFT) |
| 759 | #define	 ID_AA64ZFR0_SVEVER_SVE2	(0x1ULL << ID_AA64ZFR0_SVEVER_SHIFT) |
| 760 | #define	 ID_AA64ZFR0_SVEVER_SVE2P1	(0x2ULL << ID_AA64ZFR0_SVEVER_SHIFT) |
| 761 | #define	ID_AA64ZFR0_AES_SHIFT		4 |
| 762 | #define	ID_AA64ZFR0_AES_MASK		(0xfULL << ID_AA64ZFR0_AES_SHIFT) |
| 763 | #define	ID_AA64ZFR0_AES(x)		((x) & ID_AA64ZFR0_AES_MASK) |
| 764 | #define	 ID_AA64ZFR0_AES_NONE		(0x0ULL << ID_AA64ZFR0_AES_SHIFT) |
| 765 | #define	 ID_AA64ZFR0_AES_BASE		(0x1ULL << ID_AA64ZFR0_AES_SHIFT) |
| 766 | #define	 ID_AA64ZFR0_AES_PMULL		(0x2ULL << ID_AA64ZFR0_AES_SHIFT) |
| 767 | #define	ID_AA64ZFR0_BITPERM_SHIFT	16 |
| 768 | #define	ID_AA64ZFR0_BITPERM_MASK	(0xfULL << ID_AA64ZFR0_BITPERM_SHIFT) |
| 769 | #define	ID_AA64ZFR0_BITPERM(x)		((x) & ID_AA64ZFR0_BITPERM_MASK) |
| 770 | #define	 ID_AA64ZFR0_BITPERM_NONE	(0x0ULL << ID_AA64ZFR0_BITPERM_SHIFT) |
| 771 | #define	 ID_AA64ZFR0_BITPERM_IMPL	(0x1ULL << ID_AA64ZFR0_BITPERM_SHIFT) |
| 772 | #define	ID_AA64ZFR0_BF16_SHIFT		20 |
| 773 | #define	ID_AA64ZFR0_BF16_MASK		(0xfULL << ID_AA64ZFR0_BF16_SHIFT) |
| 774 | #define	ID_AA64ZFR0_BF16(x)		((x) & ID_AA64ZFR0_BF16_MASK) |
| 775 | #define	 ID_AA64ZFR0_BF16_NONE		(0x0ULL << ID_AA64ZFR0_BF16_SHIFT) |
| 776 | #define	 ID_AA64ZFR0_BF16_BASE		(0x1ULL << ID_AA64ZFR0_BF16_SHIFT) |
| 777 | #define	 ID_AA64ZFR0_BF16_EBF		(0x2ULL << ID_AA64ZFR0_BF16_SHIFT) |
| 778 | #define	ID_AA64ZFR0_SHA3_SHIFT		32 |
| 779 | #define	ID_AA64ZFR0_SHA3_MASK		(0xfULL << ID_AA64ZFR0_SHA3_SHIFT) |
| 780 | #define	ID_AA64ZFR0_SHA3(x)		((x) & ID_AA64ZFR0_SHA3_MASK) |
| 781 | #define	 ID_AA64ZFR0_SHA3_NONE		(0x0ULL << ID_AA64ZFR0_SHA3_SHIFT) |
| 782 | #define	 ID_AA64ZFR0_SHA3_IMPL		(0x1ULL << ID_AA64ZFR0_SHA3_SHIFT) |
| 783 | #define	ID_AA64ZFR0_SM4_SHIFT		40 |
| 784 | #define	ID_AA64ZFR0_SM4_MASK		(0xfULL << ID_AA64ZFR0_SM4_SHIFT) |
| 785 | #define	ID_AA64ZFR0_SM4(x)		((x) & ID_AA64ZFR0_SM4_MASK) |
| 786 | #define	 ID_AA64ZFR0_SM4_NONE		(0x0ULL << ID_AA64ZFR0_SM4_SHIFT) |
| 787 | #define	 ID_AA64ZFR0_SM4_IMPL		(0x1ULL << ID_AA64ZFR0_SM4_SHIFT) |
| 788 | #define	ID_AA64ZFR0_I8MM_SHIFT		44 |
| 789 | #define	ID_AA64ZFR0_I8MM_MASK		(0xfULL << ID_AA64ZFR0_I8MM_SHIFT) |
| 790 | #define	ID_AA64ZFR0_I8MM(x)		((x) & ID_AA64ZFR0_I8MM_MASK) |
| 791 | #define	 ID_AA64ZFR0_I8MM_NONE		(0x0ULL << ID_AA64ZFR0_I8MM_SHIFT) |
| 792 | #define	 ID_AA64ZFR0_I8MM_IMPL		(0x1ULL << ID_AA64ZFR0_I8MM_SHIFT) |
| 793 | #define	ID_AA64ZFR0_F32MM_SHIFT		52 |
| 794 | #define	ID_AA64ZFR0_F32MM_MASK		(0xfULL << ID_AA64ZFR0_F32MM_SHIFT) |
| 795 | #define	ID_AA64ZFR0_F32MM(x)		((x) & ID_AA64ZFR0_F32MM_MASK) |
| 796 | #define	 ID_AA64ZFR0_F32MM_NONE		(0x0ULL << ID_AA64ZFR0_F32MM_SHIFT) |
| 797 | #define	 ID_AA64ZFR0_F32MM_IMPL		(0x1ULL << ID_AA64ZFR0_F32MM_SHIFT) |
| 798 | #define	ID_AA64ZFR0_F64MM_SHIFT		56 |
| 799 | #define	ID_AA64ZFR0_F64MM_MASK		(0xfULL << ID_AA64ZFR0_F64MM_SHIFT) |
| 800 | #define	ID_AA64ZFR0_F64MM(x)		((x) & ID_AA64ZFR0_F64MM_MASK) |
| 801 | #define	 ID_AA64ZFR0_F64MM_NONE		(0x0ULL << ID_AA64ZFR0_F64MM_SHIFT) |
| 802 | #define	 ID_AA64ZFR0_F64MM_IMPL		(0x1ULL << ID_AA64ZFR0_F64MM_SHIFT) |
| 803 | |
| 804 | /* MAIR_EL1 - Memory Attribute Indirection Register */ |
| 805 | #define	MAIR_ATTR_MASK(idx)	(0xff << ((n)* 8)) |
| 806 | #define	MAIR_ATTR(attr, idx) ((attr) << ((idx) * 8)) |
| 807 | #define	 MAIR_DEVICE_nGnRnE	0x00 |
| 808 | #define	 MAIR_NORMAL_NC		0x44 |
| 809 | #define	 MAIR_NORMAL_WT		0x88 |
| 810 | #define	 MAIR_NORMAL_WB		0xff |
| 811 | |
| 812 | /* PAR_EL1 - Physical Address Register */ |
| 813 | #define	PAR_F_SHIFT		0 |
| 814 | #define	PAR_F			(0x1 << PAR_F_SHIFT) |
| 815 | #define	PAR_SUCCESS(x)		(((x) & PAR_F) == 0) |
| 816 | /* When PAR_F == 0 (success) */ |
| 817 | #define	PAR_SH_SHIFT		7 |
| 818 | #define	PAR_SH_MASK		(0x3 << PAR_SH_SHIFT) |
| 819 | #define	PAR_NS_SHIFT		9 |
| 820 | #define	PAR_NS_MASK		(0x3 << PAR_NS_SHIFT) |
| 821 | #define	PAR_PA_SHIFT		12 |
| 822 | #define	PAR_PA_MASK		0x0000fffffffff000 |
| 823 | #define	PAR_ATTR_SHIFT		56 |
| 824 | #define	PAR_ATTR_MASK		(0xff << PAR_ATTR_SHIFT) |
| 825 | /* When PAR_F == 1 (aborted) */ |
| 826 | #define	PAR_FST_SHIFT		1 |
| 827 | #define	PAR_FST_MASK		(0x3f << PAR_FST_SHIFT) |
| 828 | #define	PAR_PTW_SHIFT		8 |
| 829 | #define	PAR_PTW_MASK		(0x1 << PAR_PTW_SHIFT) |
| 830 | #define	PAR_S_SHIFT		9 |
| 831 | #define	PAR_S_MASK		(0x1 << PAR_S_SHIFT) |
| 832 | |
| 833 | /* SCTLR_EL1 - System Control Register */ |
| 834 | #define	SCTLR_RES0	0xffffffffc8222400	/* Reserved, write 0 */ |
| 835 | #define	SCTLR_RES1	0x0000000030d00800	/* Reserved, write 1 */ |
| 836 | |
| 837 | #define	SCTLR_M		0x0000000000000001 |
| 838 | #define	SCTLR_A		0x0000000000000002 |
| 839 | #define	SCTLR_C		0x0000000000000004 |
| 840 | #define	SCTLR_SA	0x0000000000000008 |
| 841 | #define	SCTLR_SA0	0x0000000000000010 |
| 842 | #define	SCTLR_CP15BEN	0x0000000000000020 |
| 843 | #define	SCTLR_THEE	0x0000000000000040 |
| 844 | #define	SCTLR_ITD	0x0000000000000080 |
| 845 | #define	SCTLR_SED	0x0000000000000100 |
| 846 | #define	SCTLR_UMA	0x0000000000000200 |
| 847 | #define	SCTLR_I		0x0000000000001000 |
| 848 | #define	SCTLR_EnDB	0x0000000000002000 |
| 849 | #define	SCTLR_DZE	0x0000000000004000 |
| 850 | #define	SCTLR_UCT	0x0000000000008000 |
| 851 | #define	SCTLR_nTWI	0x0000000000010000 |
| 852 | #define	SCTLR_nTWE	0x0000000000040000 |
| 853 | #define	SCTLR_WXN	0x0000000000080000 |
| 854 | #define	SCTLR_SPAN	0x0000000000800000 |
| 855 | #define	SCTLR_EOE	0x0000000001000000 |
| 856 | #define	SCTLR_EE	0x0000000002000000 |
| 857 | #define	SCTLR_UCI	0x0000000004000000 |
| 858 | #define	SCTLR_EnDA	0x0000000008000000 |
| 859 | #define	SCTLR_EnIB	0x0000000040000000 |
| 860 | #define	SCTLR_EnIA	0x0000000080000000 |
| 861 | #define	SCTLR_BT0	0x0000000800000000 |
| 862 | #define	SCTLR_BT1	0x0000001000000000 |
| 863 | #define	SCTLR_EPAN	0x0200000000000000 |
| 864 | |
| 865 | /* SPSR_EL1 */ |
| 866 | /* |
| 867 | * When the exception is taken in AArch64: |
| 868 | * M[4] is 0 for AArch64 mode |
| 869 | * M[3:2] is the exception level |
| 870 | * M[1] is unused |
| 871 | * M[0] is the SP select: |
| 872 | * 0: always SP0 |
| 873 | * 1: current ELs SP |
| 874 | */ |
| 875 | #define	PSR_M_EL0t	0x00000000 |
| 876 | #define	PSR_M_EL1t	0x00000004 |
| 877 | #define	PSR_M_EL1h	0x00000005 |
| 878 | #define	PSR_M_EL2t	0x00000008 |
| 879 | #define	PSR_M_EL2h	0x00000009 |
| 880 | #define	PSR_M_MASK	0x0000001f |
| 881 | |
| 882 | #define	PSR_F		0x00000040 |
| 883 | #define	PSR_I		0x00000080 |
| 884 | #define	PSR_A		0x00000100 |
| 885 | #define	PSR_D		0x00000200 |
| 886 | #define	PSR_BTYPE	0x00000c00 |
| 887 | #define	PSR_SSBS	0x00001000 |
| 888 | #define	PSR_IL		0x00100000 |
| 889 | #define	PSR_SS		0x00200000 |
| 890 | #define	PSR_PAN		0x00400000 |
| 891 | #define	PSR_UAO		0x00800000 |
| 892 | #define	PSR_DIT		0x01000000 |
| 893 | #define	PSR_TCO		0x02000000 |
| 894 | #define	PSR_V		0x10000000 |
| 895 | #define	PSR_C		0x20000000 |
| 896 | #define	PSR_Z		0x40000000 |
| 897 | #define	PSR_N		0x80000000 |
| 898 | |
| 899 | /* TCR_EL1 - Translation Control Register */ |
| 900 | #define	TCR_AS		(1UL << 36) |
| 901 | |
| 902 | #define	TCR_IPS_SHIFT	32 |
| 903 | #define	TCR_IPS_32BIT	(0UL << TCR_IPS_SHIFT) |
| 904 | #define	TCR_IPS_36BIT	(1UL << TCR_IPS_SHIFT) |
| 905 | #define	TCR_IPS_40BIT	(2UL << TCR_IPS_SHIFT) |
| 906 | #define	TCR_IPS_42BIT	(3UL << TCR_IPS_SHIFT) |
| 907 | #define	TCR_IPS_44BIT	(4UL << TCR_IPS_SHIFT) |
| 908 | #define	TCR_IPS_48BIT	(5UL << TCR_IPS_SHIFT) |
| 909 | |
| 910 | #define	TCR_TG1_SHIFT	30 |
| 911 | #define	TCR_TG1_16K	(1UL << TCR_TG1_SHIFT) |
| 912 | #define	TCR_TG1_4K	(2UL << TCR_TG1_SHIFT) |
| 913 | #define	TCR_TG1_64K	(3UL << TCR_TG1_SHIFT) |
| 914 | |
| 915 | #define	TCR_SH1_SHIFT	28 |
| 916 | #define	TCR_SH1_IS	(0x3UL << TCR_SH1_SHIFT) |
| 917 | #define	TCR_ORGN1_SHIFT	26 |
| 918 | #define	TCR_ORGN1_WBWA	(0x1UL << TCR_ORGN1_SHIFT) |
| 919 | #define	TCR_IRGN1_SHIFT	24 |
| 920 | #define	TCR_IRGN1_WBWA	(0x1UL << TCR_IRGN1_SHIFT) |
| 921 | |
| 922 | #define	TCR_A1		(1UL << 22) |
| 923 | |
| 924 | #define	TCR_TG0_SHIFT	14 |
| 925 | #define	TCR_TG0_4K	(0UL << TCR_TG0_SHIFT) |
| 926 | #define	TCR_TG0_64K	(1UL << TCR_TG0_SHIFT) |
| 927 | #define	TCR_TG0_16K	(2UL << TCR_TG0_SHIFT) |
| 928 | |
| 929 | #define	TCR_SH0_SHIFT	12 |
| 930 | #define	TCR_SH0_IS	(0x3UL << TCR_SH0_SHIFT) |
| 931 | #define	TCR_ORGN0_SHIFT	10 |
| 932 | #define	TCR_ORGN0_WBWA	(0x1UL << TCR_ORGN0_SHIFT) |
| 933 | #define	TCR_IRGN0_SHIFT	8 |
| 934 | #define	TCR_IRGN0_WBWA	(0x1UL << TCR_IRGN0_SHIFT) |
| 935 | |
| 936 | #define	TCR_CACHE_ATTRS	((TCR_IRGN0_WBWA | TCR_IRGN1_WBWA) |\ |
| 937 | 				(TCR_ORGN0_WBWA | TCR_ORGN1_WBWA)) |
| 938 | #define	TCR_SMP_ATTRS	(TCR_SH0_IS | TCR_SH1_IS) |
| 939 | |
| 940 | #define	TCR_T1SZ_SHIFT	16 |
| 941 | #define	TCR_T0SZ_SHIFT	0 |
| 942 | #define	TCR_T1SZ(x)	((x) << TCR_T1SZ_SHIFT) |
| 943 | #define	TCR_T0SZ(x)	((x) << TCR_T0SZ_SHIFT) |
| 944 | #define	TCR_TxSZ(x)	(TCR_T1SZ(x) | TCR_T0SZ(x)) |
| 945 | |
| 946 | /* Monitor Debug System Control Register */ |
| 947 | #define	DBG_MDSCR_SS	(0x1 << 0) |
| 948 | #define	DBG_MDSCR_TDCC	(0x1 << 12) |
| 949 | #define	DBG_MDSCR_KDE	(0x1 << 13) |
| 950 | #define	DBG_MDSCR_MDE	(0x1 << 15) |
| 951 | |
| 952 | /* Performance Monitoring Counters */ |
| 953 | #define	PMCR_E		(1 << 0) /* Enable all counters */ |
| 954 | #define	PMCR_P		(1 << 1) /* Reset all counters */ |
| 955 | #define	PMCR_C		(1 << 2) /* Clock counter reset */ |
| 956 | #define	PMCR_D		(1 << 3) /* CNTR counts every 64 clk cycles */ |
| 957 | #define	PMCR_X		(1 << 4) /* Export to ext. monitoring (ETM) */ |
| 958 | #define	PMCR_DP		(1 << 5) /* Disable CCNT if non-invasive debug*/ |
| 959 | #define	PMCR_LC		(1 << 6) /* Long cycle count enable */ |
| 960 | #define	PMCR_IMP_SHIFT	24 /* Implementer code */ |
| 961 | #define	PMCR_IMP_MASK	(0xff << PMCR_IMP_SHIFT) |
| 962 | #define	PMCR_IDCODE_SHIFT	16 /* Identification code */ |
| 963 | #define	PMCR_IDCODE_MASK	(0xff << PMCR_IDCODE_SHIFT) |
| 964 | #define	 PMCR_IDCODE_CORTEX_A57	0x01 |
| 965 | #define	 PMCR_IDCODE_CORTEX_A72	0x02 |
| 966 | #define	 PMCR_IDCODE_CORTEX_A53	0x03 |
| 967 | #define	PMCR_N_SHIFT	11 /* Number of counters implemented */ |
| 968 | #define	PMCR_N_MASK	(0x1f << PMCR_N_SHIFT) |
| 969 | |
| 970 | #define I_bit (1 << 7)		/* IRQ disable */ |
| 971 | #define F_bit 0			/* FIQ disable - not actually used */ |
| 972 | |
| 973 | #endif /* !_MACHINE_ARMREG_H_ */ |