.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Macros for accessing system registers with older binutils. |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (C) 2014 ARM Ltd. |
---|
5 | 6 | * Author: Catalin Marinas <catalin.marinas@arm.com> |
---|
6 | | - * |
---|
7 | | - * This program is free software: you can redistribute it and/or modify |
---|
8 | | - * it under the terms of the GNU General Public License version 2 as |
---|
9 | | - * published by the Free Software Foundation. |
---|
10 | | - * |
---|
11 | | - * This program is distributed in the hope that it will be useful, |
---|
12 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
14 | | - * GNU General Public License for more details. |
---|
15 | | - * |
---|
16 | | - * You should have received a copy of the GNU General Public License |
---|
17 | | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
18 | 7 | */ |
---|
19 | 8 | |
---|
20 | 9 | #ifndef __ASM_SYSREG_H |
---|
21 | 10 | #define __ASM_SYSREG_H |
---|
22 | 11 | |
---|
23 | | -#include <asm/compiler.h> |
---|
| 12 | +#include <linux/bits.h> |
---|
24 | 13 | #include <linux/stringify.h> |
---|
| 14 | +#include <linux/kasan-tags.h> |
---|
25 | 15 | |
---|
26 | 16 | /* |
---|
27 | 17 | * ARMv8 ARM reserves the following encoding for system registers: |
---|
.. | .. |
---|
102 | 92 | #define PSTATE_PAN pstate_field(0, 4) |
---|
103 | 93 | #define PSTATE_UAO pstate_field(0, 3) |
---|
104 | 94 | #define PSTATE_SSBS pstate_field(3, 1) |
---|
| 95 | +#define PSTATE_TCO pstate_field(3, 4) |
---|
105 | 96 | |
---|
106 | 97 | #define SET_PSTATE_PAN(x) __emit_inst(0xd500401f | PSTATE_PAN | ((!!x) << PSTATE_Imm_shift)) |
---|
107 | 98 | #define SET_PSTATE_UAO(x) __emit_inst(0xd500401f | PSTATE_UAO | ((!!x) << PSTATE_Imm_shift)) |
---|
108 | 99 | #define SET_PSTATE_SSBS(x) __emit_inst(0xd500401f | PSTATE_SSBS | ((!!x) << PSTATE_Imm_shift)) |
---|
| 100 | +#define SET_PSTATE_TCO(x) __emit_inst(0xd500401f | PSTATE_TCO | ((!!x) << PSTATE_Imm_shift)) |
---|
| 101 | + |
---|
| 102 | +#define set_pstate_pan(x) asm volatile(SET_PSTATE_PAN(x)) |
---|
| 103 | +#define set_pstate_uao(x) asm volatile(SET_PSTATE_UAO(x)) |
---|
| 104 | +#define set_pstate_ssbs(x) asm volatile(SET_PSTATE_SSBS(x)) |
---|
| 105 | + |
---|
| 106 | +#define __SYS_BARRIER_INSN(CRm, op2, Rt) \ |
---|
| 107 | + __emit_inst(0xd5000000 | sys_insn(0, 3, 3, (CRm), (op2)) | ((Rt) & 0x1f)) |
---|
| 108 | + |
---|
| 109 | +#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 7, 31) |
---|
109 | 110 | |
---|
110 | 111 | #define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2) |
---|
| 112 | +#define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4) |
---|
| 113 | +#define SYS_DC_IGDSW sys_insn(1, 0, 7, 6, 6) |
---|
111 | 114 | #define SYS_DC_CSW sys_insn(1, 0, 7, 10, 2) |
---|
| 115 | +#define SYS_DC_CGSW sys_insn(1, 0, 7, 10, 4) |
---|
| 116 | +#define SYS_DC_CGDSW sys_insn(1, 0, 7, 10, 6) |
---|
112 | 117 | #define SYS_DC_CISW sys_insn(1, 0, 7, 14, 2) |
---|
| 118 | +#define SYS_DC_CIGSW sys_insn(1, 0, 7, 14, 4) |
---|
| 119 | +#define SYS_DC_CIGDSW sys_insn(1, 0, 7, 14, 6) |
---|
113 | 120 | |
---|
| 121 | +/* |
---|
| 122 | + * System registers, organised loosely by encoding but grouped together |
---|
| 123 | + * where the architected name contains an index. e.g. ID_MMFR<n>_EL1. |
---|
| 124 | + */ |
---|
114 | 125 | #define SYS_OSDTRRX_EL1 sys_reg(2, 0, 0, 0, 2) |
---|
115 | 126 | #define SYS_MDCCINT_EL1 sys_reg(2, 0, 0, 2, 0) |
---|
116 | 127 | #define SYS_MDSCR_EL1 sys_reg(2, 0, 0, 2, 2) |
---|
.. | .. |
---|
140 | 151 | |
---|
141 | 152 | #define SYS_ID_PFR0_EL1 sys_reg(3, 0, 0, 1, 0) |
---|
142 | 153 | #define SYS_ID_PFR1_EL1 sys_reg(3, 0, 0, 1, 1) |
---|
| 154 | +#define SYS_ID_PFR2_EL1 sys_reg(3, 0, 0, 3, 4) |
---|
143 | 155 | #define SYS_ID_DFR0_EL1 sys_reg(3, 0, 0, 1, 2) |
---|
| 156 | +#define SYS_ID_DFR1_EL1 sys_reg(3, 0, 0, 3, 5) |
---|
144 | 157 | #define SYS_ID_AFR0_EL1 sys_reg(3, 0, 0, 1, 3) |
---|
145 | 158 | #define SYS_ID_MMFR0_EL1 sys_reg(3, 0, 0, 1, 4) |
---|
146 | 159 | #define SYS_ID_MMFR1_EL1 sys_reg(3, 0, 0, 1, 5) |
---|
147 | 160 | #define SYS_ID_MMFR2_EL1 sys_reg(3, 0, 0, 1, 6) |
---|
148 | 161 | #define SYS_ID_MMFR3_EL1 sys_reg(3, 0, 0, 1, 7) |
---|
| 162 | +#define SYS_ID_MMFR4_EL1 sys_reg(3, 0, 0, 2, 6) |
---|
| 163 | +#define SYS_ID_MMFR5_EL1 sys_reg(3, 0, 0, 3, 6) |
---|
149 | 164 | |
---|
150 | 165 | #define SYS_ID_ISAR0_EL1 sys_reg(3, 0, 0, 2, 0) |
---|
151 | 166 | #define SYS_ID_ISAR1_EL1 sys_reg(3, 0, 0, 2, 1) |
---|
.. | .. |
---|
153 | 168 | #define SYS_ID_ISAR3_EL1 sys_reg(3, 0, 0, 2, 3) |
---|
154 | 169 | #define SYS_ID_ISAR4_EL1 sys_reg(3, 0, 0, 2, 4) |
---|
155 | 170 | #define SYS_ID_ISAR5_EL1 sys_reg(3, 0, 0, 2, 5) |
---|
156 | | -#define SYS_ID_MMFR4_EL1 sys_reg(3, 0, 0, 2, 6) |
---|
| 171 | +#define SYS_ID_ISAR6_EL1 sys_reg(3, 0, 0, 2, 7) |
---|
157 | 172 | |
---|
158 | 173 | #define SYS_MVFR0_EL1 sys_reg(3, 0, 0, 3, 0) |
---|
159 | 174 | #define SYS_MVFR1_EL1 sys_reg(3, 0, 0, 3, 1) |
---|
.. | .. |
---|
171 | 186 | |
---|
172 | 187 | #define SYS_ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0) |
---|
173 | 188 | #define SYS_ID_AA64ISAR1_EL1 sys_reg(3, 0, 0, 6, 1) |
---|
| 189 | +#define SYS_ID_AA64ISAR2_EL1 sys_reg(3, 0, 0, 6, 2) |
---|
174 | 190 | |
---|
175 | 191 | #define SYS_ID_AA64MMFR0_EL1 sys_reg(3, 0, 0, 7, 0) |
---|
176 | 192 | #define SYS_ID_AA64MMFR1_EL1 sys_reg(3, 0, 0, 7, 1) |
---|
.. | .. |
---|
179 | 195 | #define SYS_SCTLR_EL1 sys_reg(3, 0, 1, 0, 0) |
---|
180 | 196 | #define SYS_ACTLR_EL1 sys_reg(3, 0, 1, 0, 1) |
---|
181 | 197 | #define SYS_CPACR_EL1 sys_reg(3, 0, 1, 0, 2) |
---|
| 198 | +#define SYS_RGSR_EL1 sys_reg(3, 0, 1, 0, 5) |
---|
| 199 | +#define SYS_GCR_EL1 sys_reg(3, 0, 1, 0, 6) |
---|
182 | 200 | |
---|
183 | 201 | #define SYS_ZCR_EL1 sys_reg(3, 0, 1, 2, 0) |
---|
| 202 | +#define SYS_TRFCR_EL1 sys_reg(3, 0, 1, 2, 1) |
---|
184 | 203 | |
---|
185 | 204 | #define SYS_TTBR0_EL1 sys_reg(3, 0, 2, 0, 0) |
---|
186 | 205 | #define SYS_TTBR1_EL1 sys_reg(3, 0, 2, 0, 1) |
---|
187 | 206 | #define SYS_TCR_EL1 sys_reg(3, 0, 2, 0, 2) |
---|
| 207 | + |
---|
| 208 | +#define SYS_APIAKEYLO_EL1 sys_reg(3, 0, 2, 1, 0) |
---|
| 209 | +#define SYS_APIAKEYHI_EL1 sys_reg(3, 0, 2, 1, 1) |
---|
| 210 | +#define SYS_APIBKEYLO_EL1 sys_reg(3, 0, 2, 1, 2) |
---|
| 211 | +#define SYS_APIBKEYHI_EL1 sys_reg(3, 0, 2, 1, 3) |
---|
| 212 | + |
---|
| 213 | +#define SYS_APDAKEYLO_EL1 sys_reg(3, 0, 2, 2, 0) |
---|
| 214 | +#define SYS_APDAKEYHI_EL1 sys_reg(3, 0, 2, 2, 1) |
---|
| 215 | +#define SYS_APDBKEYLO_EL1 sys_reg(3, 0, 2, 2, 2) |
---|
| 216 | +#define SYS_APDBKEYHI_EL1 sys_reg(3, 0, 2, 2, 3) |
---|
| 217 | + |
---|
| 218 | +#define SYS_APGAKEYLO_EL1 sys_reg(3, 0, 2, 3, 0) |
---|
| 219 | +#define SYS_APGAKEYHI_EL1 sys_reg(3, 0, 2, 3, 1) |
---|
| 220 | + |
---|
| 221 | +#define SYS_SPSR_EL1 sys_reg(3, 0, 4, 0, 0) |
---|
| 222 | +#define SYS_ELR_EL1 sys_reg(3, 0, 4, 0, 1) |
---|
188 | 223 | |
---|
189 | 224 | #define SYS_ICC_PMR_EL1 sys_reg(3, 0, 4, 6, 0) |
---|
190 | 225 | |
---|
.. | .. |
---|
200 | 235 | #define SYS_ERXADDR_EL1 sys_reg(3, 0, 5, 4, 3) |
---|
201 | 236 | #define SYS_ERXMISC0_EL1 sys_reg(3, 0, 5, 5, 0) |
---|
202 | 237 | #define SYS_ERXMISC1_EL1 sys_reg(3, 0, 5, 5, 1) |
---|
| 238 | +#define SYS_TFSR_EL1 sys_reg(3, 0, 5, 6, 0) |
---|
| 239 | +#define SYS_TFSRE0_EL1 sys_reg(3, 0, 5, 6, 1) |
---|
203 | 240 | |
---|
204 | 241 | #define SYS_FAR_EL1 sys_reg(3, 0, 6, 0, 0) |
---|
205 | 242 | #define SYS_PAR_EL1 sys_reg(3, 0, 7, 4, 0) |
---|
| 243 | + |
---|
| 244 | +#define SYS_PAR_EL1_F BIT(0) |
---|
| 245 | +#define SYS_PAR_EL1_FST GENMASK(6, 1) |
---|
206 | 246 | |
---|
207 | 247 | /*** Statistical Profiling Extension ***/ |
---|
208 | 248 | /* ID registers */ |
---|
.. | .. |
---|
297 | 337 | |
---|
298 | 338 | /*** End of Statistical Profiling Extension ***/ |
---|
299 | 339 | |
---|
| 340 | +/* |
---|
| 341 | + * TRBE Registers |
---|
| 342 | + */ |
---|
| 343 | +#define SYS_TRBLIMITR_EL1 sys_reg(3, 0, 9, 11, 0) |
---|
| 344 | +#define SYS_TRBPTR_EL1 sys_reg(3, 0, 9, 11, 1) |
---|
| 345 | +#define SYS_TRBBASER_EL1 sys_reg(3, 0, 9, 11, 2) |
---|
| 346 | +#define SYS_TRBSR_EL1 sys_reg(3, 0, 9, 11, 3) |
---|
| 347 | +#define SYS_TRBMAR_EL1 sys_reg(3, 0, 9, 11, 4) |
---|
| 348 | +#define SYS_TRBTRG_EL1 sys_reg(3, 0, 9, 11, 6) |
---|
| 349 | +#define SYS_TRBIDR_EL1 sys_reg(3, 0, 9, 11, 7) |
---|
| 350 | + |
---|
| 351 | +#define TRBLIMITR_LIMIT_MASK GENMASK_ULL(51, 0) |
---|
| 352 | +#define TRBLIMITR_LIMIT_SHIFT 12 |
---|
| 353 | +#define TRBLIMITR_NVM BIT(5) |
---|
| 354 | +#define TRBLIMITR_TRIG_MODE_MASK GENMASK(1, 0) |
---|
| 355 | +#define TRBLIMITR_TRIG_MODE_SHIFT 3 |
---|
| 356 | +#define TRBLIMITR_FILL_MODE_MASK GENMASK(1, 0) |
---|
| 357 | +#define TRBLIMITR_FILL_MODE_SHIFT 1 |
---|
| 358 | +#define TRBLIMITR_ENABLE BIT(0) |
---|
| 359 | +#define TRBPTR_PTR_MASK GENMASK_ULL(63, 0) |
---|
| 360 | +#define TRBPTR_PTR_SHIFT 0 |
---|
| 361 | +#define TRBBASER_BASE_MASK GENMASK_ULL(51, 0) |
---|
| 362 | +#define TRBBASER_BASE_SHIFT 12 |
---|
| 363 | +#define TRBSR_EC_MASK GENMASK(5, 0) |
---|
| 364 | +#define TRBSR_EC_SHIFT 26 |
---|
| 365 | +#define TRBSR_IRQ BIT(22) |
---|
| 366 | +#define TRBSR_TRG BIT(21) |
---|
| 367 | +#define TRBSR_WRAP BIT(20) |
---|
| 368 | +#define TRBSR_ABORT BIT(18) |
---|
| 369 | +#define TRBSR_STOP BIT(17) |
---|
| 370 | +#define TRBSR_MSS_MASK GENMASK(15, 0) |
---|
| 371 | +#define TRBSR_MSS_SHIFT 0 |
---|
| 372 | +#define TRBSR_BSC_MASK GENMASK(5, 0) |
---|
| 373 | +#define TRBSR_BSC_SHIFT 0 |
---|
| 374 | +#define TRBSR_FSC_MASK GENMASK(5, 0) |
---|
| 375 | +#define TRBSR_FSC_SHIFT 0 |
---|
| 376 | +#define TRBMAR_SHARE_MASK GENMASK(1, 0) |
---|
| 377 | +#define TRBMAR_SHARE_SHIFT 8 |
---|
| 378 | +#define TRBMAR_OUTER_MASK GENMASK(3, 0) |
---|
| 379 | +#define TRBMAR_OUTER_SHIFT 4 |
---|
| 380 | +#define TRBMAR_INNER_MASK GENMASK(3, 0) |
---|
| 381 | +#define TRBMAR_INNER_SHIFT 0 |
---|
| 382 | +#define TRBTRG_TRG_MASK GENMASK(31, 0) |
---|
| 383 | +#define TRBTRG_TRG_SHIFT 0 |
---|
| 384 | +#define TRBIDR_FLAG BIT(5) |
---|
| 385 | +#define TRBIDR_PROG BIT(4) |
---|
| 386 | +#define TRBIDR_ALIGN_MASK GENMASK(3, 0) |
---|
| 387 | +#define TRBIDR_ALIGN_SHIFT 0 |
---|
| 388 | + |
---|
300 | 389 | #define SYS_PMINTENSET_EL1 sys_reg(3, 0, 9, 14, 1) |
---|
301 | 390 | #define SYS_PMINTENCLR_EL1 sys_reg(3, 0, 9, 14, 2) |
---|
| 391 | + |
---|
| 392 | +#define SYS_PMMIR_EL1 sys_reg(3, 0, 9, 14, 6) |
---|
302 | 393 | |
---|
303 | 394 | #define SYS_MAIR_EL1 sys_reg(3, 0, 10, 2, 0) |
---|
304 | 395 | #define SYS_AMAIR_EL1 sys_reg(3, 0, 10, 3, 0) |
---|
.. | .. |
---|
343 | 434 | #define SYS_CONTEXTIDR_EL1 sys_reg(3, 0, 13, 0, 1) |
---|
344 | 435 | #define SYS_TPIDR_EL1 sys_reg(3, 0, 13, 0, 4) |
---|
345 | 436 | |
---|
| 437 | +#define SYS_SCXTNUM_EL1 sys_reg(3, 0, 13, 0, 7) |
---|
| 438 | + |
---|
346 | 439 | #define SYS_CNTKCTL_EL1 sys_reg(3, 0, 14, 1, 0) |
---|
347 | 440 | |
---|
| 441 | +#define SYS_CCSIDR_EL1 sys_reg(3, 1, 0, 0, 0) |
---|
348 | 442 | #define SYS_CLIDR_EL1 sys_reg(3, 1, 0, 0, 1) |
---|
| 443 | +#define SYS_GMID_EL1 sys_reg(3, 1, 0, 0, 4) |
---|
349 | 444 | #define SYS_AIDR_EL1 sys_reg(3, 1, 0, 0, 7) |
---|
350 | 445 | |
---|
351 | 446 | #define SYS_CSSELR_EL1 sys_reg(3, 2, 0, 0, 0) |
---|
352 | 447 | |
---|
353 | 448 | #define SYS_CTR_EL0 sys_reg(3, 3, 0, 0, 1) |
---|
354 | 449 | #define SYS_DCZID_EL0 sys_reg(3, 3, 0, 0, 7) |
---|
| 450 | + |
---|
| 451 | +#define SYS_RNDR_EL0 sys_reg(3, 3, 2, 4, 0) |
---|
| 452 | +#define SYS_RNDRRS_EL0 sys_reg(3, 3, 2, 4, 1) |
---|
355 | 453 | |
---|
356 | 454 | #define SYS_PMCR_EL0 sys_reg(3, 3, 9, 12, 0) |
---|
357 | 455 | #define SYS_PMCNTENSET_EL0 sys_reg(3, 3, 9, 12, 1) |
---|
.. | .. |
---|
370 | 468 | #define SYS_TPIDR_EL0 sys_reg(3, 3, 13, 0, 2) |
---|
371 | 469 | #define SYS_TPIDRRO_EL0 sys_reg(3, 3, 13, 0, 3) |
---|
372 | 470 | |
---|
| 471 | +#define SYS_SCXTNUM_EL0 sys_reg(3, 3, 13, 0, 7) |
---|
| 472 | + |
---|
| 473 | +/* Definitions for system register interface to AMU for ARMv8.4 onwards */ |
---|
| 474 | +#define SYS_AM_EL0(crm, op2) sys_reg(3, 3, 13, (crm), (op2)) |
---|
| 475 | +#define SYS_AMCR_EL0 SYS_AM_EL0(2, 0) |
---|
| 476 | +#define SYS_AMCFGR_EL0 SYS_AM_EL0(2, 1) |
---|
| 477 | +#define SYS_AMCGCR_EL0 SYS_AM_EL0(2, 2) |
---|
| 478 | +#define SYS_AMUSERENR_EL0 SYS_AM_EL0(2, 3) |
---|
| 479 | +#define SYS_AMCNTENCLR0_EL0 SYS_AM_EL0(2, 4) |
---|
| 480 | +#define SYS_AMCNTENSET0_EL0 SYS_AM_EL0(2, 5) |
---|
| 481 | +#define SYS_AMCNTENCLR1_EL0 SYS_AM_EL0(3, 0) |
---|
| 482 | +#define SYS_AMCNTENSET1_EL0 SYS_AM_EL0(3, 1) |
---|
| 483 | + |
---|
| 484 | +/* |
---|
| 485 | + * Group 0 of activity monitors (architected): |
---|
| 486 | + * op0 op1 CRn CRm op2 |
---|
| 487 | + * Counter: 11 011 1101 010:n<3> n<2:0> |
---|
| 488 | + * Type: 11 011 1101 011:n<3> n<2:0> |
---|
| 489 | + * n: 0-15 |
---|
| 490 | + * |
---|
| 491 | + * Group 1 of activity monitors (auxiliary): |
---|
| 492 | + * op0 op1 CRn CRm op2 |
---|
| 493 | + * Counter: 11 011 1101 110:n<3> n<2:0> |
---|
| 494 | + * Type: 11 011 1101 111:n<3> n<2:0> |
---|
| 495 | + * n: 0-15 |
---|
| 496 | + */ |
---|
| 497 | + |
---|
| 498 | +#define SYS_AMEVCNTR0_EL0(n) SYS_AM_EL0(4 + ((n) >> 3), (n) & 7) |
---|
| 499 | +#define SYS_AMEVTYPER0_EL0(n) SYS_AM_EL0(6 + ((n) >> 3), (n) & 7) |
---|
| 500 | +#define SYS_AMEVCNTR1_EL0(n) SYS_AM_EL0(12 + ((n) >> 3), (n) & 7) |
---|
| 501 | +#define SYS_AMEVTYPER1_EL0(n) SYS_AM_EL0(14 + ((n) >> 3), (n) & 7) |
---|
| 502 | + |
---|
| 503 | +/* AMU v1: Fixed (architecturally defined) activity monitors */ |
---|
| 504 | +#define SYS_AMEVCNTR0_CORE_EL0 SYS_AMEVCNTR0_EL0(0) |
---|
| 505 | +#define SYS_AMEVCNTR0_CONST_EL0 SYS_AMEVCNTR0_EL0(1) |
---|
| 506 | +#define SYS_AMEVCNTR0_INST_RET_EL0 SYS_AMEVCNTR0_EL0(2) |
---|
| 507 | +#define SYS_AMEVCNTR0_MEM_STALL SYS_AMEVCNTR0_EL0(3) |
---|
| 508 | + |
---|
373 | 509 | #define SYS_CNTFRQ_EL0 sys_reg(3, 3, 14, 0, 0) |
---|
374 | 510 | |
---|
375 | 511 | #define SYS_CNTP_TVAL_EL0 sys_reg(3, 3, 14, 2, 0) |
---|
376 | 512 | #define SYS_CNTP_CTL_EL0 sys_reg(3, 3, 14, 2, 1) |
---|
377 | 513 | #define SYS_CNTP_CVAL_EL0 sys_reg(3, 3, 14, 2, 2) |
---|
| 514 | + |
---|
| 515 | +#define SYS_CNTV_CTL_EL0 sys_reg(3, 3, 14, 3, 1) |
---|
| 516 | +#define SYS_CNTV_CVAL_EL0 sys_reg(3, 3, 14, 3, 2) |
---|
| 517 | + |
---|
| 518 | +#define SYS_AARCH32_CNTP_TVAL sys_reg(0, 0, 14, 2, 0) |
---|
| 519 | +#define SYS_AARCH32_CNTP_CTL sys_reg(0, 0, 14, 2, 1) |
---|
| 520 | +#define SYS_AARCH32_CNTP_CVAL sys_reg(0, 2, 0, 14, 0) |
---|
378 | 521 | |
---|
379 | 522 | #define __PMEV_op2(n) ((n) & 0x7) |
---|
380 | 523 | #define __CNTR_CRm(n) (0x8 | (((n) >> 3) & 0x3)) |
---|
.. | .. |
---|
382 | 525 | #define __TYPER_CRm(n) (0xc | (((n) >> 3) & 0x3)) |
---|
383 | 526 | #define SYS_PMEVTYPERn_EL0(n) sys_reg(3, 3, 14, __TYPER_CRm(n), __PMEV_op2(n)) |
---|
384 | 527 | |
---|
385 | | -#define SYS_PMCCFILTR_EL0 sys_reg (3, 3, 14, 15, 7) |
---|
| 528 | +#define SYS_PMCCFILTR_EL0 sys_reg(3, 3, 14, 15, 7) |
---|
386 | 529 | |
---|
| 530 | +#define SYS_SCTLR_EL2 sys_reg(3, 4, 1, 0, 0) |
---|
387 | 531 | #define SYS_ZCR_EL2 sys_reg(3, 4, 1, 2, 0) |
---|
388 | | - |
---|
| 532 | +#define SYS_TRFCR_EL2 sys_reg(3, 4, 1, 2, 1) |
---|
389 | 533 | #define SYS_DACR32_EL2 sys_reg(3, 4, 3, 0, 0) |
---|
| 534 | +#define SYS_SPSR_EL2 sys_reg(3, 4, 4, 0, 0) |
---|
| 535 | +#define SYS_ELR_EL2 sys_reg(3, 4, 4, 0, 1) |
---|
390 | 536 | #define SYS_IFSR32_EL2 sys_reg(3, 4, 5, 0, 1) |
---|
| 537 | +#define SYS_ESR_EL2 sys_reg(3, 4, 5, 2, 0) |
---|
391 | 538 | #define SYS_VSESR_EL2 sys_reg(3, 4, 5, 2, 3) |
---|
392 | 539 | #define SYS_FPEXC32_EL2 sys_reg(3, 4, 5, 3, 0) |
---|
| 540 | +#define SYS_TFSR_EL2 sys_reg(3, 4, 5, 6, 0) |
---|
| 541 | +#define SYS_FAR_EL2 sys_reg(3, 4, 6, 0, 0) |
---|
393 | 542 | |
---|
394 | 543 | #define SYS_VDISR_EL2 sys_reg(3, 4, 12, 1, 1) |
---|
395 | 544 | #define __SYS__AP0Rx_EL2(x) sys_reg(3, 4, 12, 8, x) |
---|
.. | .. |
---|
410 | 559 | #define SYS_ICH_VTR_EL2 sys_reg(3, 4, 12, 11, 1) |
---|
411 | 560 | #define SYS_ICH_MISR_EL2 sys_reg(3, 4, 12, 11, 2) |
---|
412 | 561 | #define SYS_ICH_EISR_EL2 sys_reg(3, 4, 12, 11, 3) |
---|
413 | | -#define SYS_ICH_ELSR_EL2 sys_reg(3, 4, 12, 11, 5) |
---|
| 562 | +#define SYS_ICH_ELRSR_EL2 sys_reg(3, 4, 12, 11, 5) |
---|
414 | 563 | #define SYS_ICH_VMCR_EL2 sys_reg(3, 4, 12, 11, 7) |
---|
415 | 564 | |
---|
416 | 565 | #define __SYS__LR0_EL2(x) sys_reg(3, 4, 12, 12, x) |
---|
.. | .. |
---|
433 | 582 | #define SYS_ICH_LR14_EL2 __SYS__LR8_EL2(6) |
---|
434 | 583 | #define SYS_ICH_LR15_EL2 __SYS__LR8_EL2(7) |
---|
435 | 584 | |
---|
436 | | -/* Common SCTLR_ELx flags. */ |
---|
437 | | -#define SCTLR_ELx_DSSBS (1UL << 44) |
---|
438 | | -#define SCTLR_ELx_EE (1 << 25) |
---|
439 | | -#define SCTLR_ELx_IESB (1 << 21) |
---|
440 | | -#define SCTLR_ELx_WXN (1 << 19) |
---|
441 | | -#define SCTLR_ELx_I (1 << 12) |
---|
442 | | -#define SCTLR_ELx_SA (1 << 3) |
---|
443 | | -#define SCTLR_ELx_C (1 << 2) |
---|
444 | | -#define SCTLR_ELx_A (1 << 1) |
---|
445 | | -#define SCTLR_ELx_M 1 |
---|
| 585 | +/* VHE encodings for architectural EL0/1 system registers */ |
---|
| 586 | +#define SYS_SCTLR_EL12 sys_reg(3, 5, 1, 0, 0) |
---|
| 587 | +#define SYS_CPACR_EL12 sys_reg(3, 5, 1, 0, 2) |
---|
| 588 | +#define SYS_ZCR_EL12 sys_reg(3, 5, 1, 2, 0) |
---|
| 589 | +#define SYS_TTBR0_EL12 sys_reg(3, 5, 2, 0, 0) |
---|
| 590 | +#define SYS_TTBR1_EL12 sys_reg(3, 5, 2, 0, 1) |
---|
| 591 | +#define SYS_TCR_EL12 sys_reg(3, 5, 2, 0, 2) |
---|
| 592 | +#define SYS_SPSR_EL12 sys_reg(3, 5, 4, 0, 0) |
---|
| 593 | +#define SYS_ELR_EL12 sys_reg(3, 5, 4, 0, 1) |
---|
| 594 | +#define SYS_AFSR0_EL12 sys_reg(3, 5, 5, 1, 0) |
---|
| 595 | +#define SYS_AFSR1_EL12 sys_reg(3, 5, 5, 1, 1) |
---|
| 596 | +#define SYS_ESR_EL12 sys_reg(3, 5, 5, 2, 0) |
---|
| 597 | +#define SYS_TFSR_EL12 sys_reg(3, 5, 5, 6, 0) |
---|
| 598 | +#define SYS_FAR_EL12 sys_reg(3, 5, 6, 0, 0) |
---|
| 599 | +#define SYS_MAIR_EL12 sys_reg(3, 5, 10, 2, 0) |
---|
| 600 | +#define SYS_AMAIR_EL12 sys_reg(3, 5, 10, 3, 0) |
---|
| 601 | +#define SYS_VBAR_EL12 sys_reg(3, 5, 12, 0, 0) |
---|
| 602 | +#define SYS_CONTEXTIDR_EL12 sys_reg(3, 5, 13, 0, 1) |
---|
| 603 | +#define SYS_CNTKCTL_EL12 sys_reg(3, 5, 14, 1, 0) |
---|
| 604 | +#define SYS_CNTP_TVAL_EL02 sys_reg(3, 5, 14, 2, 0) |
---|
| 605 | +#define SYS_CNTP_CTL_EL02 sys_reg(3, 5, 14, 2, 1) |
---|
| 606 | +#define SYS_CNTP_CVAL_EL02 sys_reg(3, 5, 14, 2, 2) |
---|
| 607 | +#define SYS_CNTV_TVAL_EL02 sys_reg(3, 5, 14, 3, 0) |
---|
| 608 | +#define SYS_CNTV_CTL_EL02 sys_reg(3, 5, 14, 3, 1) |
---|
| 609 | +#define SYS_CNTV_CVAL_EL02 sys_reg(3, 5, 14, 3, 2) |
---|
446 | 610 | |
---|
447 | | -#define SCTLR_ELx_FLAGS (SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \ |
---|
448 | | - SCTLR_ELx_SA | SCTLR_ELx_I | SCTLR_ELx_IESB) |
---|
| 611 | +/* Common SCTLR_ELx flags. */ |
---|
| 612 | +#define SCTLR_ELx_DSSBS (BIT(44)) |
---|
| 613 | +#define SCTLR_ELx_ATA (BIT(43)) |
---|
| 614 | + |
---|
| 615 | +#define SCTLR_ELx_TCF_SHIFT 40 |
---|
| 616 | +#define SCTLR_ELx_TCF_NONE (UL(0x0) << SCTLR_ELx_TCF_SHIFT) |
---|
| 617 | +#define SCTLR_ELx_TCF_SYNC (UL(0x1) << SCTLR_ELx_TCF_SHIFT) |
---|
| 618 | +#define SCTLR_ELx_TCF_ASYNC (UL(0x2) << SCTLR_ELx_TCF_SHIFT) |
---|
| 619 | +#define SCTLR_ELx_TCF_MASK (UL(0x3) << SCTLR_ELx_TCF_SHIFT) |
---|
| 620 | + |
---|
| 621 | +#define SCTLR_ELx_ENIA_SHIFT 31 |
---|
| 622 | + |
---|
| 623 | +#define SCTLR_ELx_ITFSB (BIT(37)) |
---|
| 624 | +#define SCTLR_ELx_ENIA (BIT(SCTLR_ELx_ENIA_SHIFT)) |
---|
| 625 | +#define SCTLR_ELx_ENIB (BIT(30)) |
---|
| 626 | +#define SCTLR_ELx_ENDA (BIT(27)) |
---|
| 627 | +#define SCTLR_ELx_EE (BIT(25)) |
---|
| 628 | +#define SCTLR_ELx_IESB (BIT(21)) |
---|
| 629 | +#define SCTLR_ELx_WXN (BIT(19)) |
---|
| 630 | +#define SCTLR_ELx_ENDB (BIT(13)) |
---|
| 631 | +#define SCTLR_ELx_I (BIT(12)) |
---|
| 632 | +#define SCTLR_ELx_SA (BIT(3)) |
---|
| 633 | +#define SCTLR_ELx_C (BIT(2)) |
---|
| 634 | +#define SCTLR_ELx_A (BIT(1)) |
---|
| 635 | +#define SCTLR_ELx_M (BIT(0)) |
---|
449 | 636 | |
---|
450 | 637 | /* SCTLR_EL2 specific flags. */ |
---|
451 | | -#define SCTLR_EL2_RES1 ((1 << 4) | (1 << 5) | (1 << 11) | (1 << 16) | \ |
---|
452 | | - (1 << 18) | (1 << 22) | (1 << 23) | (1 << 28) | \ |
---|
453 | | - (1 << 29)) |
---|
454 | | -#define SCTLR_EL2_RES0 ((1 << 6) | (1 << 7) | (1 << 8) | (1 << 9) | \ |
---|
455 | | - (1 << 10) | (1 << 13) | (1 << 14) | (1 << 15) | \ |
---|
456 | | - (1 << 17) | (1 << 20) | (1 << 24) | (1 << 26) | \ |
---|
457 | | - (1 << 27) | (1 << 30) | (1 << 31) | \ |
---|
458 | | - (0xffffefffUL << 32)) |
---|
| 638 | +#define SCTLR_EL2_RES1 ((BIT(4)) | (BIT(5)) | (BIT(11)) | (BIT(16)) | \ |
---|
| 639 | + (BIT(18)) | (BIT(22)) | (BIT(23)) | (BIT(28)) | \ |
---|
| 640 | + (BIT(29))) |
---|
459 | 641 | |
---|
460 | 642 | #ifdef CONFIG_CPU_BIG_ENDIAN |
---|
461 | 643 | #define ENDIAN_SET_EL2 SCTLR_ELx_EE |
---|
462 | | -#define ENDIAN_CLEAR_EL2 0 |
---|
463 | 644 | #else |
---|
464 | 645 | #define ENDIAN_SET_EL2 0 |
---|
465 | | -#define ENDIAN_CLEAR_EL2 SCTLR_ELx_EE |
---|
466 | 646 | #endif |
---|
467 | 647 | |
---|
468 | | -/* SCTLR_EL2 value used for the hyp-stub */ |
---|
469 | | -#define SCTLR_EL2_SET (SCTLR_ELx_IESB | ENDIAN_SET_EL2 | SCTLR_EL2_RES1) |
---|
470 | | -#define SCTLR_EL2_CLEAR (SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \ |
---|
471 | | - SCTLR_ELx_SA | SCTLR_ELx_I | SCTLR_ELx_WXN | \ |
---|
472 | | - SCTLR_ELx_DSSBS | ENDIAN_CLEAR_EL2 | SCTLR_EL2_RES0) |
---|
| 648 | +#define INIT_SCTLR_EL2_MMU_ON \ |
---|
| 649 | + (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | SCTLR_ELx_I | \ |
---|
| 650 | + SCTLR_ELx_IESB | SCTLR_ELx_WXN | ENDIAN_SET_EL2 | SCTLR_EL2_RES1) |
---|
473 | 651 | |
---|
474 | | -#if (SCTLR_EL2_SET ^ SCTLR_EL2_CLEAR) != 0xffffffffffffffff |
---|
475 | | -#error "Inconsistent SCTLR_EL2 set/clear bits" |
---|
476 | | -#endif |
---|
| 652 | +#define INIT_SCTLR_EL2_MMU_OFF \ |
---|
| 653 | + (SCTLR_EL2_RES1 | ENDIAN_SET_EL2) |
---|
477 | 654 | |
---|
478 | 655 | /* SCTLR_EL1 specific flags. */ |
---|
479 | | -#define SCTLR_EL1_UCI (1 << 26) |
---|
480 | | -#define SCTLR_EL1_E0E (1 << 24) |
---|
481 | | -#define SCTLR_EL1_SPAN (1 << 23) |
---|
482 | | -#define SCTLR_EL1_NTWE (1 << 18) |
---|
483 | | -#define SCTLR_EL1_NTWI (1 << 16) |
---|
484 | | -#define SCTLR_EL1_UCT (1 << 15) |
---|
485 | | -#define SCTLR_EL1_DZE (1 << 14) |
---|
486 | | -#define SCTLR_EL1_UMA (1 << 9) |
---|
487 | | -#define SCTLR_EL1_SED (1 << 8) |
---|
488 | | -#define SCTLR_EL1_ITD (1 << 7) |
---|
489 | | -#define SCTLR_EL1_CP15BEN (1 << 5) |
---|
490 | | -#define SCTLR_EL1_SA0 (1 << 4) |
---|
| 656 | +#define SCTLR_EL1_ATA0 (BIT(42)) |
---|
491 | 657 | |
---|
492 | | -#define SCTLR_EL1_RES1 ((1 << 11) | (1 << 20) | (1 << 22) | (1 << 28) | \ |
---|
493 | | - (1 << 29)) |
---|
494 | | -#define SCTLR_EL1_RES0 ((1 << 6) | (1 << 10) | (1 << 13) | (1 << 17) | \ |
---|
495 | | - (1 << 27) | (1 << 30) | (1 << 31) | \ |
---|
496 | | - (0xffffefffUL << 32)) |
---|
| 658 | +#define SCTLR_EL1_TCF0_SHIFT 38 |
---|
| 659 | +#define SCTLR_EL1_TCF0_NONE (UL(0x0) << SCTLR_EL1_TCF0_SHIFT) |
---|
| 660 | +#define SCTLR_EL1_TCF0_SYNC (UL(0x1) << SCTLR_EL1_TCF0_SHIFT) |
---|
| 661 | +#define SCTLR_EL1_TCF0_ASYNC (UL(0x2) << SCTLR_EL1_TCF0_SHIFT) |
---|
| 662 | +#define SCTLR_EL1_TCF0_MASK (UL(0x3) << SCTLR_EL1_TCF0_SHIFT) |
---|
| 663 | + |
---|
| 664 | +#define SCTLR_EL1_BT1 (BIT(36)) |
---|
| 665 | +#define SCTLR_EL1_BT0 (BIT(35)) |
---|
| 666 | +#define SCTLR_EL1_UCI (BIT(26)) |
---|
| 667 | +#define SCTLR_EL1_E0E (BIT(24)) |
---|
| 668 | +#define SCTLR_EL1_SPAN (BIT(23)) |
---|
| 669 | +#define SCTLR_EL1_NTWE (BIT(18)) |
---|
| 670 | +#define SCTLR_EL1_NTWI (BIT(16)) |
---|
| 671 | +#define SCTLR_EL1_UCT (BIT(15)) |
---|
| 672 | +#define SCTLR_EL1_DZE (BIT(14)) |
---|
| 673 | +#define SCTLR_EL1_UMA (BIT(9)) |
---|
| 674 | +#define SCTLR_EL1_SED (BIT(8)) |
---|
| 675 | +#define SCTLR_EL1_ITD (BIT(7)) |
---|
| 676 | +#define SCTLR_EL1_CP15BEN (BIT(5)) |
---|
| 677 | +#define SCTLR_EL1_SA0 (BIT(4)) |
---|
| 678 | + |
---|
| 679 | +#define SCTLR_EL1_RES1 ((BIT(11)) | (BIT(20)) | (BIT(22)) | (BIT(28)) | \ |
---|
| 680 | + (BIT(29))) |
---|
497 | 681 | |
---|
498 | 682 | #ifdef CONFIG_CPU_BIG_ENDIAN |
---|
499 | 683 | #define ENDIAN_SET_EL1 (SCTLR_EL1_E0E | SCTLR_ELx_EE) |
---|
500 | | -#define ENDIAN_CLEAR_EL1 0 |
---|
501 | 684 | #else |
---|
502 | 685 | #define ENDIAN_SET_EL1 0 |
---|
503 | | -#define ENDIAN_CLEAR_EL1 (SCTLR_EL1_E0E | SCTLR_ELx_EE) |
---|
504 | 686 | #endif |
---|
505 | 687 | |
---|
506 | | -#define SCTLR_EL1_SET (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA |\ |
---|
507 | | - SCTLR_EL1_SA0 | SCTLR_EL1_SED | SCTLR_ELx_I |\ |
---|
508 | | - SCTLR_EL1_DZE | SCTLR_EL1_UCT | SCTLR_EL1_NTWI |\ |
---|
509 | | - SCTLR_EL1_NTWE | SCTLR_ELx_IESB | SCTLR_EL1_SPAN |\ |
---|
510 | | - ENDIAN_SET_EL1 | SCTLR_EL1_UCI | SCTLR_EL1_RES1) |
---|
511 | | -#define SCTLR_EL1_CLEAR (SCTLR_ELx_A | SCTLR_EL1_CP15BEN | SCTLR_EL1_ITD |\ |
---|
512 | | - SCTLR_EL1_UMA | SCTLR_ELx_WXN | ENDIAN_CLEAR_EL1 |\ |
---|
513 | | - SCTLR_ELx_DSSBS | SCTLR_EL1_RES0) |
---|
| 688 | +#define INIT_SCTLR_EL1_MMU_OFF \ |
---|
| 689 | + (ENDIAN_SET_EL1 | SCTLR_EL1_RES1) |
---|
514 | 690 | |
---|
515 | | -#if (SCTLR_EL1_SET ^ SCTLR_EL1_CLEAR) != 0xffffffffffffffff |
---|
516 | | -#error "Inconsistent SCTLR_EL1 set/clear bits" |
---|
517 | | -#endif |
---|
| 691 | +#define INIT_SCTLR_EL1_MMU_ON \ |
---|
| 692 | + (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | SCTLR_EL1_SA0 | \ |
---|
| 693 | + SCTLR_EL1_SED | SCTLR_ELx_I | SCTLR_EL1_DZE | SCTLR_EL1_UCT | \ |
---|
| 694 | + SCTLR_EL1_NTWE | SCTLR_ELx_IESB | SCTLR_EL1_SPAN | SCTLR_ELx_ITFSB | \ |
---|
| 695 | + ENDIAN_SET_EL1 | SCTLR_EL1_UCI | SCTLR_EL1_RES1) |
---|
| 696 | + |
---|
| 697 | +/* MAIR_ELx memory attributes (used by Linux) */ |
---|
| 698 | +#define MAIR_ATTR_DEVICE_nGnRnE UL(0x00) |
---|
| 699 | +#define MAIR_ATTR_DEVICE_nGnRE UL(0x04) |
---|
| 700 | +#define MAIR_ATTR_DEVICE_GRE UL(0x0c) |
---|
| 701 | +#define MAIR_ATTR_NORMAL_NC UL(0x44) |
---|
| 702 | +#define MAIR_ATTR_NORMAL_WT UL(0xbb) |
---|
| 703 | +#define MAIR_ATTR_NORMAL_TAGGED UL(0xf0) |
---|
| 704 | +#define MAIR_ATTR_NORMAL UL(0xff) |
---|
| 705 | +#define MAIR_ATTR_MASK UL(0xff) |
---|
| 706 | +#define MAIR_ATTR_NORMAL_iNC_oWB UL(0xf4) |
---|
| 707 | + |
---|
| 708 | +/* Position the attr at the correct index */ |
---|
| 709 | +#define MAIR_ATTRIDX(attr, idx) ((attr) << ((idx) * 8)) |
---|
518 | 710 | |
---|
519 | 711 | /* id_aa64isar0 */ |
---|
| 712 | +#define ID_AA64ISAR0_RNDR_SHIFT 60 |
---|
| 713 | +#define ID_AA64ISAR0_TLB_SHIFT 56 |
---|
520 | 714 | #define ID_AA64ISAR0_TS_SHIFT 52 |
---|
521 | 715 | #define ID_AA64ISAR0_FHM_SHIFT 48 |
---|
522 | 716 | #define ID_AA64ISAR0_DP_SHIFT 44 |
---|
.. | .. |
---|
530 | 724 | #define ID_AA64ISAR0_SHA1_SHIFT 8 |
---|
531 | 725 | #define ID_AA64ISAR0_AES_SHIFT 4 |
---|
532 | 726 | |
---|
| 727 | +#define ID_AA64ISAR0_TLB_RANGE_NI 0x0 |
---|
| 728 | +#define ID_AA64ISAR0_TLB_RANGE 0x2 |
---|
| 729 | + |
---|
533 | 730 | /* id_aa64isar1 */ |
---|
| 731 | +#define ID_AA64ISAR1_I8MM_SHIFT 52 |
---|
| 732 | +#define ID_AA64ISAR1_DGH_SHIFT 48 |
---|
| 733 | +#define ID_AA64ISAR1_BF16_SHIFT 44 |
---|
| 734 | +#define ID_AA64ISAR1_SPECRES_SHIFT 40 |
---|
| 735 | +#define ID_AA64ISAR1_SB_SHIFT 36 |
---|
| 736 | +#define ID_AA64ISAR1_FRINTTS_SHIFT 32 |
---|
| 737 | +#define ID_AA64ISAR1_GPI_SHIFT 28 |
---|
| 738 | +#define ID_AA64ISAR1_GPA_SHIFT 24 |
---|
534 | 739 | #define ID_AA64ISAR1_LRCPC_SHIFT 20 |
---|
535 | 740 | #define ID_AA64ISAR1_FCMA_SHIFT 16 |
---|
536 | 741 | #define ID_AA64ISAR1_JSCVT_SHIFT 12 |
---|
| 742 | +#define ID_AA64ISAR1_API_SHIFT 8 |
---|
| 743 | +#define ID_AA64ISAR1_APA_SHIFT 4 |
---|
537 | 744 | #define ID_AA64ISAR1_DPB_SHIFT 0 |
---|
| 745 | + |
---|
| 746 | +#define ID_AA64ISAR1_APA_NI 0x0 |
---|
| 747 | +#define ID_AA64ISAR1_APA_ARCHITECTED 0x1 |
---|
| 748 | +#define ID_AA64ISAR1_APA_ARCH_EPAC 0x2 |
---|
| 749 | +#define ID_AA64ISAR1_APA_ARCH_EPAC2 0x3 |
---|
| 750 | +#define ID_AA64ISAR1_APA_ARCH_EPAC2_FPAC 0x4 |
---|
| 751 | +#define ID_AA64ISAR1_APA_ARCH_EPAC2_FPAC_CMB 0x5 |
---|
| 752 | +#define ID_AA64ISAR1_API_NI 0x0 |
---|
| 753 | +#define ID_AA64ISAR1_API_IMP_DEF 0x1 |
---|
| 754 | +#define ID_AA64ISAR1_API_IMP_DEF_EPAC 0x2 |
---|
| 755 | +#define ID_AA64ISAR1_API_IMP_DEF_EPAC2 0x3 |
---|
| 756 | +#define ID_AA64ISAR1_API_IMP_DEF_EPAC2_FPAC 0x4 |
---|
| 757 | +#define ID_AA64ISAR1_API_IMP_DEF_EPAC2_FPAC_CMB 0x5 |
---|
| 758 | +#define ID_AA64ISAR1_GPA_NI 0x0 |
---|
| 759 | +#define ID_AA64ISAR1_GPA_ARCHITECTED 0x1 |
---|
| 760 | +#define ID_AA64ISAR1_GPI_NI 0x0 |
---|
| 761 | +#define ID_AA64ISAR1_GPI_IMP_DEF 0x1 |
---|
| 762 | + |
---|
| 763 | +/* id_aa64isar2 */ |
---|
| 764 | +#define ID_AA64ISAR2_CLEARBHB_SHIFT 28 |
---|
| 765 | +#define ID_AA64ISAR2_RPRES_SHIFT 4 |
---|
| 766 | +#define ID_AA64ISAR2_WFXT_SHIFT 0 |
---|
| 767 | + |
---|
| 768 | +#define ID_AA64ISAR2_RPRES_8BIT 0x0 |
---|
| 769 | +#define ID_AA64ISAR2_RPRES_12BIT 0x1 |
---|
| 770 | +/* |
---|
| 771 | + * Value 0x1 has been removed from the architecture, and is |
---|
| 772 | + * reserved, but has not yet been removed from the ARM ARM |
---|
| 773 | + * as of ARM DDI 0487G.b. |
---|
| 774 | + */ |
---|
| 775 | +#define ID_AA64ISAR2_WFXT_NI 0x0 |
---|
| 776 | +#define ID_AA64ISAR2_WFXT_SUPPORTED 0x2 |
---|
538 | 777 | |
---|
539 | 778 | /* id_aa64pfr0 */ |
---|
540 | 779 | #define ID_AA64PFR0_CSV3_SHIFT 60 |
---|
541 | 780 | #define ID_AA64PFR0_CSV2_SHIFT 56 |
---|
542 | 781 | #define ID_AA64PFR0_DIT_SHIFT 48 |
---|
| 782 | +#define ID_AA64PFR0_AMU_SHIFT 44 |
---|
| 783 | +#define ID_AA64PFR0_MPAM_SHIFT 40 |
---|
| 784 | +#define ID_AA64PFR0_SEL2_SHIFT 36 |
---|
543 | 785 | #define ID_AA64PFR0_SVE_SHIFT 32 |
---|
544 | 786 | #define ID_AA64PFR0_RAS_SHIFT 28 |
---|
545 | 787 | #define ID_AA64PFR0_GIC_SHIFT 24 |
---|
.. | .. |
---|
550 | 792 | #define ID_AA64PFR0_EL1_SHIFT 4 |
---|
551 | 793 | #define ID_AA64PFR0_EL0_SHIFT 0 |
---|
552 | 794 | |
---|
| 795 | +#define ID_AA64PFR0_AMU 0x1 |
---|
553 | 796 | #define ID_AA64PFR0_SVE 0x1 |
---|
554 | 797 | #define ID_AA64PFR0_RAS_V1 0x1 |
---|
555 | 798 | #define ID_AA64PFR0_FP_NI 0xf |
---|
.. | .. |
---|
557 | 800 | #define ID_AA64PFR0_ASIMD_NI 0xf |
---|
558 | 801 | #define ID_AA64PFR0_ASIMD_SUPPORTED 0x0 |
---|
559 | 802 | #define ID_AA64PFR0_EL1_64BIT_ONLY 0x1 |
---|
| 803 | +#define ID_AA64PFR0_EL1_32BIT_64BIT 0x2 |
---|
560 | 804 | #define ID_AA64PFR0_EL0_64BIT_ONLY 0x1 |
---|
561 | 805 | #define ID_AA64PFR0_EL0_32BIT_64BIT 0x2 |
---|
562 | 806 | |
---|
563 | 807 | /* id_aa64pfr1 */ |
---|
| 808 | +#define ID_AA64PFR1_MPAMFRAC_SHIFT 16 |
---|
| 809 | +#define ID_AA64PFR1_RASFRAC_SHIFT 12 |
---|
| 810 | +#define ID_AA64PFR1_MTE_SHIFT 8 |
---|
564 | 811 | #define ID_AA64PFR1_SSBS_SHIFT 4 |
---|
| 812 | +#define ID_AA64PFR1_BT_SHIFT 0 |
---|
565 | 813 | |
---|
566 | 814 | #define ID_AA64PFR1_SSBS_PSTATE_NI 0 |
---|
567 | 815 | #define ID_AA64PFR1_SSBS_PSTATE_ONLY 1 |
---|
568 | 816 | #define ID_AA64PFR1_SSBS_PSTATE_INSNS 2 |
---|
| 817 | +#define ID_AA64PFR1_BT_BTI 0x1 |
---|
| 818 | + |
---|
| 819 | +#define ID_AA64PFR1_MTE_NI 0x0 |
---|
| 820 | +#define ID_AA64PFR1_MTE_EL0 0x1 |
---|
| 821 | +#define ID_AA64PFR1_MTE 0x2 |
---|
| 822 | + |
---|
| 823 | +/* id_aa64zfr0 */ |
---|
| 824 | +#define ID_AA64ZFR0_F64MM_SHIFT 56 |
---|
| 825 | +#define ID_AA64ZFR0_F32MM_SHIFT 52 |
---|
| 826 | +#define ID_AA64ZFR0_I8MM_SHIFT 44 |
---|
| 827 | +#define ID_AA64ZFR0_SM4_SHIFT 40 |
---|
| 828 | +#define ID_AA64ZFR0_SHA3_SHIFT 32 |
---|
| 829 | +#define ID_AA64ZFR0_BF16_SHIFT 20 |
---|
| 830 | +#define ID_AA64ZFR0_BITPERM_SHIFT 16 |
---|
| 831 | +#define ID_AA64ZFR0_AES_SHIFT 4 |
---|
| 832 | +#define ID_AA64ZFR0_SVEVER_SHIFT 0 |
---|
| 833 | + |
---|
| 834 | +#define ID_AA64ZFR0_F64MM 0x1 |
---|
| 835 | +#define ID_AA64ZFR0_F32MM 0x1 |
---|
| 836 | +#define ID_AA64ZFR0_I8MM 0x1 |
---|
| 837 | +#define ID_AA64ZFR0_BF16 0x1 |
---|
| 838 | +#define ID_AA64ZFR0_SM4 0x1 |
---|
| 839 | +#define ID_AA64ZFR0_SHA3 0x1 |
---|
| 840 | +#define ID_AA64ZFR0_BITPERM 0x1 |
---|
| 841 | +#define ID_AA64ZFR0_AES 0x1 |
---|
| 842 | +#define ID_AA64ZFR0_AES_PMULL 0x2 |
---|
| 843 | +#define ID_AA64ZFR0_SVEVER_SVE2 0x1 |
---|
569 | 844 | |
---|
570 | 845 | /* id_aa64mmfr0 */ |
---|
| 846 | +#define ID_AA64MMFR0_ECV_SHIFT 60 |
---|
| 847 | +#define ID_AA64MMFR0_FGT_SHIFT 56 |
---|
| 848 | +#define ID_AA64MMFR0_EXS_SHIFT 44 |
---|
| 849 | +#define ID_AA64MMFR0_TGRAN4_2_SHIFT 40 |
---|
| 850 | +#define ID_AA64MMFR0_TGRAN64_2_SHIFT 36 |
---|
| 851 | +#define ID_AA64MMFR0_TGRAN16_2_SHIFT 32 |
---|
571 | 852 | #define ID_AA64MMFR0_TGRAN4_SHIFT 28 |
---|
572 | 853 | #define ID_AA64MMFR0_TGRAN64_SHIFT 24 |
---|
573 | 854 | #define ID_AA64MMFR0_TGRAN16_SHIFT 20 |
---|
.. | .. |
---|
577 | 858 | #define ID_AA64MMFR0_ASID_SHIFT 4 |
---|
578 | 859 | #define ID_AA64MMFR0_PARANGE_SHIFT 0 |
---|
579 | 860 | |
---|
580 | | -#define ID_AA64MMFR0_TGRAN4_NI 0xf |
---|
581 | | -#define ID_AA64MMFR0_TGRAN4_SUPPORTED 0x0 |
---|
582 | | -#define ID_AA64MMFR0_TGRAN64_NI 0xf |
---|
583 | | -#define ID_AA64MMFR0_TGRAN64_SUPPORTED 0x0 |
---|
584 | | -#define ID_AA64MMFR0_TGRAN16_NI 0x0 |
---|
585 | | -#define ID_AA64MMFR0_TGRAN16_SUPPORTED 0x1 |
---|
| 861 | +#define ID_AA64MMFR0_TGRAN4_NI 0xf |
---|
| 862 | +#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN 0x0 |
---|
| 863 | +#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX 0x7 |
---|
| 864 | +#define ID_AA64MMFR0_TGRAN64_NI 0xf |
---|
| 865 | +#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN 0x0 |
---|
| 866 | +#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX 0x7 |
---|
| 867 | +#define ID_AA64MMFR0_TGRAN16_NI 0x0 |
---|
| 868 | +#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN 0x1 |
---|
| 869 | +#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX 0xf |
---|
| 870 | + |
---|
586 | 871 | #define ID_AA64MMFR0_PARANGE_48 0x5 |
---|
587 | 872 | #define ID_AA64MMFR0_PARANGE_52 0x6 |
---|
| 873 | + |
---|
| 874 | +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_DEFAULT 0x0 |
---|
| 875 | +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_NONE 0x1 |
---|
| 876 | +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_MIN 0x2 |
---|
| 877 | +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_MAX 0x7 |
---|
588 | 878 | |
---|
589 | 879 | #ifdef CONFIG_ARM64_PA_BITS_52 |
---|
590 | 880 | #define ID_AA64MMFR0_PARANGE_MAX ID_AA64MMFR0_PARANGE_52 |
---|
.. | .. |
---|
593 | 883 | #endif |
---|
594 | 884 | |
---|
595 | 885 | /* id_aa64mmfr1 */ |
---|
| 886 | +#define ID_AA64MMFR1_ECBHB_SHIFT 60 |
---|
| 887 | +#define ID_AA64MMFR1_AFP_SHIFT 44 |
---|
| 888 | +#define ID_AA64MMFR1_ETS_SHIFT 36 |
---|
| 889 | +#define ID_AA64MMFR1_TWED_SHIFT 32 |
---|
| 890 | +#define ID_AA64MMFR1_XNX_SHIFT 28 |
---|
| 891 | +#define ID_AA64MMFR1_SPECSEI_SHIFT 24 |
---|
596 | 892 | #define ID_AA64MMFR1_PAN_SHIFT 20 |
---|
597 | 893 | #define ID_AA64MMFR1_LOR_SHIFT 16 |
---|
598 | 894 | #define ID_AA64MMFR1_HPD_SHIFT 12 |
---|
.. | .. |
---|
604 | 900 | #define ID_AA64MMFR1_VMIDBITS_16 2 |
---|
605 | 901 | |
---|
606 | 902 | /* id_aa64mmfr2 */ |
---|
| 903 | +#define ID_AA64MMFR2_E0PD_SHIFT 60 |
---|
| 904 | +#define ID_AA64MMFR2_EVT_SHIFT 56 |
---|
| 905 | +#define ID_AA64MMFR2_BBM_SHIFT 52 |
---|
| 906 | +#define ID_AA64MMFR2_TTL_SHIFT 48 |
---|
607 | 907 | #define ID_AA64MMFR2_FWB_SHIFT 40 |
---|
| 908 | +#define ID_AA64MMFR2_IDS_SHIFT 36 |
---|
608 | 909 | #define ID_AA64MMFR2_AT_SHIFT 32 |
---|
| 910 | +#define ID_AA64MMFR2_ST_SHIFT 28 |
---|
| 911 | +#define ID_AA64MMFR2_NV_SHIFT 24 |
---|
| 912 | +#define ID_AA64MMFR2_CCIDX_SHIFT 20 |
---|
609 | 913 | #define ID_AA64MMFR2_LVA_SHIFT 16 |
---|
610 | 914 | #define ID_AA64MMFR2_IESB_SHIFT 12 |
---|
611 | 915 | #define ID_AA64MMFR2_LSM_SHIFT 8 |
---|
.. | .. |
---|
613 | 917 | #define ID_AA64MMFR2_CNP_SHIFT 0 |
---|
614 | 918 | |
---|
615 | 919 | /* id_aa64dfr0 */ |
---|
| 920 | +#define ID_AA64DFR0_TRBE_SHIFT 44 |
---|
| 921 | +#define ID_AA64DFR0_TRACE_FILT_SHIFT 40 |
---|
| 922 | +#define ID_AA64DFR0_DOUBLELOCK_SHIFT 36 |
---|
616 | 923 | #define ID_AA64DFR0_PMSVER_SHIFT 32 |
---|
617 | 924 | #define ID_AA64DFR0_CTX_CMPS_SHIFT 28 |
---|
618 | 925 | #define ID_AA64DFR0_WRPS_SHIFT 20 |
---|
.. | .. |
---|
621 | 928 | #define ID_AA64DFR0_TRACEVER_SHIFT 4 |
---|
622 | 929 | #define ID_AA64DFR0_DEBUGVER_SHIFT 0 |
---|
623 | 930 | |
---|
| 931 | +#define ID_AA64DFR0_PMUVER_8_0 0x1 |
---|
| 932 | +#define ID_AA64DFR0_PMUVER_8_1 0x4 |
---|
| 933 | +#define ID_AA64DFR0_PMUVER_8_4 0x5 |
---|
| 934 | +#define ID_AA64DFR0_PMUVER_8_5 0x6 |
---|
| 935 | +#define ID_AA64DFR0_PMUVER_IMP_DEF 0xf |
---|
| 936 | + |
---|
| 937 | +#define ID_DFR0_PERFMON_SHIFT 24 |
---|
| 938 | + |
---|
| 939 | +#define ID_DFR0_PERFMON_8_0 0x3 |
---|
| 940 | +#define ID_DFR0_PERFMON_8_1 0x4 |
---|
| 941 | +#define ID_DFR0_PERFMON_8_4 0x5 |
---|
| 942 | +#define ID_DFR0_PERFMON_8_5 0x6 |
---|
| 943 | + |
---|
| 944 | +#define ID_ISAR4_SWP_FRAC_SHIFT 28 |
---|
| 945 | +#define ID_ISAR4_PSR_M_SHIFT 24 |
---|
| 946 | +#define ID_ISAR4_SYNCH_PRIM_FRAC_SHIFT 20 |
---|
| 947 | +#define ID_ISAR4_BARRIER_SHIFT 16 |
---|
| 948 | +#define ID_ISAR4_SMC_SHIFT 12 |
---|
| 949 | +#define ID_ISAR4_WRITEBACK_SHIFT 8 |
---|
| 950 | +#define ID_ISAR4_WITHSHIFTS_SHIFT 4 |
---|
| 951 | +#define ID_ISAR4_UNPRIV_SHIFT 0 |
---|
| 952 | + |
---|
| 953 | +#define ID_DFR1_MTPMU_SHIFT 0 |
---|
| 954 | + |
---|
| 955 | +#define ID_ISAR0_DIVIDE_SHIFT 24 |
---|
| 956 | +#define ID_ISAR0_DEBUG_SHIFT 20 |
---|
| 957 | +#define ID_ISAR0_COPROC_SHIFT 16 |
---|
| 958 | +#define ID_ISAR0_CMPBRANCH_SHIFT 12 |
---|
| 959 | +#define ID_ISAR0_BITFIELD_SHIFT 8 |
---|
| 960 | +#define ID_ISAR0_BITCOUNT_SHIFT 4 |
---|
| 961 | +#define ID_ISAR0_SWAP_SHIFT 0 |
---|
| 962 | + |
---|
624 | 963 | #define ID_ISAR5_RDM_SHIFT 24 |
---|
625 | 964 | #define ID_ISAR5_CRC32_SHIFT 16 |
---|
626 | 965 | #define ID_ISAR5_SHA2_SHIFT 12 |
---|
627 | 966 | #define ID_ISAR5_SHA1_SHIFT 8 |
---|
628 | 967 | #define ID_ISAR5_AES_SHIFT 4 |
---|
629 | 968 | #define ID_ISAR5_SEVL_SHIFT 0 |
---|
| 969 | + |
---|
| 970 | +#define ID_ISAR6_I8MM_SHIFT 24 |
---|
| 971 | +#define ID_ISAR6_BF16_SHIFT 20 |
---|
| 972 | +#define ID_ISAR6_SPECRES_SHIFT 16 |
---|
| 973 | +#define ID_ISAR6_SB_SHIFT 12 |
---|
| 974 | +#define ID_ISAR6_FHM_SHIFT 8 |
---|
| 975 | +#define ID_ISAR6_DP_SHIFT 4 |
---|
| 976 | +#define ID_ISAR6_JSCVT_SHIFT 0 |
---|
| 977 | + |
---|
| 978 | +#define ID_MMFR0_INNERSHR_SHIFT 28 |
---|
| 979 | +#define ID_MMFR0_FCSE_SHIFT 24 |
---|
| 980 | +#define ID_MMFR0_AUXREG_SHIFT 20 |
---|
| 981 | +#define ID_MMFR0_TCM_SHIFT 16 |
---|
| 982 | +#define ID_MMFR0_SHARELVL_SHIFT 12 |
---|
| 983 | +#define ID_MMFR0_OUTERSHR_SHIFT 8 |
---|
| 984 | +#define ID_MMFR0_PMSA_SHIFT 4 |
---|
| 985 | +#define ID_MMFR0_VMSA_SHIFT 0 |
---|
| 986 | + |
---|
| 987 | +#define ID_MMFR4_EVT_SHIFT 28 |
---|
| 988 | +#define ID_MMFR4_CCIDX_SHIFT 24 |
---|
| 989 | +#define ID_MMFR4_LSM_SHIFT 20 |
---|
| 990 | +#define ID_MMFR4_HPDS_SHIFT 16 |
---|
| 991 | +#define ID_MMFR4_CNP_SHIFT 12 |
---|
| 992 | +#define ID_MMFR4_XNX_SHIFT 8 |
---|
| 993 | +#define ID_MMFR4_AC2_SHIFT 4 |
---|
| 994 | +#define ID_MMFR4_SPECSEI_SHIFT 0 |
---|
| 995 | + |
---|
| 996 | +#define ID_MMFR5_ETS_SHIFT 0 |
---|
| 997 | + |
---|
| 998 | +#define ID_PFR0_DIT_SHIFT 24 |
---|
| 999 | +#define ID_PFR0_CSV2_SHIFT 16 |
---|
| 1000 | +#define ID_PFR0_STATE3_SHIFT 12 |
---|
| 1001 | +#define ID_PFR0_STATE2_SHIFT 8 |
---|
| 1002 | +#define ID_PFR0_STATE1_SHIFT 4 |
---|
| 1003 | +#define ID_PFR0_STATE0_SHIFT 0 |
---|
| 1004 | + |
---|
| 1005 | +#define ID_DFR0_PERFMON_SHIFT 24 |
---|
| 1006 | +#define ID_DFR0_MPROFDBG_SHIFT 20 |
---|
| 1007 | +#define ID_DFR0_MMAPTRC_SHIFT 16 |
---|
| 1008 | +#define ID_DFR0_COPTRC_SHIFT 12 |
---|
| 1009 | +#define ID_DFR0_MMAPDBG_SHIFT 8 |
---|
| 1010 | +#define ID_DFR0_COPSDBG_SHIFT 4 |
---|
| 1011 | +#define ID_DFR0_COPDBG_SHIFT 0 |
---|
| 1012 | + |
---|
| 1013 | +#define ID_PFR2_SSBS_SHIFT 4 |
---|
| 1014 | +#define ID_PFR2_CSV3_SHIFT 0 |
---|
630 | 1015 | |
---|
631 | 1016 | #define MVFR0_FPROUND_SHIFT 28 |
---|
632 | 1017 | #define MVFR0_FPSHVEC_SHIFT 24 |
---|
.. | .. |
---|
646 | 1031 | #define MVFR1_FPDNAN_SHIFT 4 |
---|
647 | 1032 | #define MVFR1_FPFTZ_SHIFT 0 |
---|
648 | 1033 | |
---|
649 | | - |
---|
650 | | -#define ID_AA64MMFR0_TGRAN4_SHIFT 28 |
---|
651 | | -#define ID_AA64MMFR0_TGRAN64_SHIFT 24 |
---|
652 | | -#define ID_AA64MMFR0_TGRAN16_SHIFT 20 |
---|
653 | | - |
---|
654 | | -#define ID_AA64MMFR0_TGRAN4_NI 0xf |
---|
655 | | -#define ID_AA64MMFR0_TGRAN4_SUPPORTED 0x0 |
---|
656 | | -#define ID_AA64MMFR0_TGRAN64_NI 0xf |
---|
657 | | -#define ID_AA64MMFR0_TGRAN64_SUPPORTED 0x0 |
---|
658 | | -#define ID_AA64MMFR0_TGRAN16_NI 0x0 |
---|
659 | | -#define ID_AA64MMFR0_TGRAN16_SUPPORTED 0x1 |
---|
| 1034 | +#define ID_PFR1_GIC_SHIFT 28 |
---|
| 1035 | +#define ID_PFR1_VIRT_FRAC_SHIFT 24 |
---|
| 1036 | +#define ID_PFR1_SEC_FRAC_SHIFT 20 |
---|
| 1037 | +#define ID_PFR1_GENTIMER_SHIFT 16 |
---|
| 1038 | +#define ID_PFR1_VIRTUALIZATION_SHIFT 12 |
---|
| 1039 | +#define ID_PFR1_MPROGMOD_SHIFT 8 |
---|
| 1040 | +#define ID_PFR1_SECURITY_SHIFT 4 |
---|
| 1041 | +#define ID_PFR1_PROGMOD_SHIFT 0 |
---|
660 | 1042 | |
---|
661 | 1043 | #if defined(CONFIG_ARM64_4K_PAGES) |
---|
662 | | -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN4_SHIFT |
---|
663 | | -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN4_SUPPORTED |
---|
| 1044 | +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN4_SHIFT |
---|
| 1045 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN |
---|
| 1046 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX |
---|
664 | 1047 | #elif defined(CONFIG_ARM64_16K_PAGES) |
---|
665 | | -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN16_SHIFT |
---|
666 | | -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN16_SUPPORTED |
---|
| 1048 | +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN16_SHIFT |
---|
| 1049 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN |
---|
| 1050 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX |
---|
667 | 1051 | #elif defined(CONFIG_ARM64_64K_PAGES) |
---|
668 | | -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN64_SHIFT |
---|
669 | | -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN64_SUPPORTED |
---|
| 1052 | +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN64_SHIFT |
---|
| 1053 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN |
---|
| 1054 | +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX |
---|
670 | 1055 | #endif |
---|
671 | 1056 | |
---|
| 1057 | +#define MVFR2_FPMISC_SHIFT 4 |
---|
| 1058 | +#define MVFR2_SIMDMISC_SHIFT 0 |
---|
| 1059 | + |
---|
| 1060 | +#define DCZID_DZP_SHIFT 4 |
---|
| 1061 | +#define DCZID_BS_SHIFT 0 |
---|
672 | 1062 | |
---|
673 | 1063 | /* |
---|
674 | 1064 | * The ZCR_ELx_LEN_* definitions intentionally include bits [8:4] which |
---|
.. | .. |
---|
679 | 1069 | #define ZCR_ELx_LEN_SIZE 9 |
---|
680 | 1070 | #define ZCR_ELx_LEN_MASK 0x1ff |
---|
681 | 1071 | |
---|
682 | | -#define CPACR_EL1_ZEN_EL1EN (1 << 16) /* enable EL1 access */ |
---|
683 | | -#define CPACR_EL1_ZEN_EL0EN (1 << 17) /* enable EL0 access, if EL1EN set */ |
---|
| 1072 | +#define CPACR_EL1_ZEN_EL1EN (BIT(16)) /* enable EL1 access */ |
---|
| 1073 | +#define CPACR_EL1_ZEN_EL0EN (BIT(17)) /* enable EL0 access, if EL1EN set */ |
---|
684 | 1074 | #define CPACR_EL1_ZEN (CPACR_EL1_ZEN_EL1EN | CPACR_EL1_ZEN_EL0EN) |
---|
685 | 1075 | |
---|
| 1076 | +/* TCR EL1 Bit Definitions */ |
---|
| 1077 | +#define SYS_TCR_EL1_TCMA1 (BIT(58)) |
---|
| 1078 | +#define SYS_TCR_EL1_TCMA0 (BIT(57)) |
---|
| 1079 | + |
---|
| 1080 | +/* GCR_EL1 Definitions */ |
---|
| 1081 | +#define SYS_GCR_EL1_RRND (BIT(16)) |
---|
| 1082 | +#define SYS_GCR_EL1_EXCL_MASK 0xffffUL |
---|
| 1083 | + |
---|
| 1084 | +#ifdef CONFIG_KASAN_HW_TAGS |
---|
| 1085 | +/* |
---|
| 1086 | + * KASAN always uses a whole byte for its tags. With CONFIG_KASAN_HW_TAGS it |
---|
| 1087 | + * only uses tags in the range 0xF0-0xFF, which we map to MTE tags 0x0-0xF. |
---|
| 1088 | + */ |
---|
| 1089 | +#define __MTE_TAG_MIN (KASAN_TAG_MIN & 0xf) |
---|
| 1090 | +#define __MTE_TAG_MAX (KASAN_TAG_MAX & 0xf) |
---|
| 1091 | +#define __MTE_TAG_INCL GENMASK(__MTE_TAG_MAX, __MTE_TAG_MIN) |
---|
| 1092 | +#define KERNEL_GCR_EL1_EXCL (SYS_GCR_EL1_EXCL_MASK & ~__MTE_TAG_INCL) |
---|
| 1093 | +#else |
---|
| 1094 | +#define KERNEL_GCR_EL1_EXCL SYS_GCR_EL1_EXCL_MASK |
---|
| 1095 | +#endif |
---|
| 1096 | + |
---|
| 1097 | +#define KERNEL_GCR_EL1 (SYS_GCR_EL1_RRND | KERNEL_GCR_EL1_EXCL) |
---|
| 1098 | + |
---|
| 1099 | +/* RGSR_EL1 Definitions */ |
---|
| 1100 | +#define SYS_RGSR_EL1_TAG_MASK 0xfUL |
---|
| 1101 | +#define SYS_RGSR_EL1_SEED_SHIFT 8 |
---|
| 1102 | +#define SYS_RGSR_EL1_SEED_MASK 0xffffUL |
---|
| 1103 | + |
---|
| 1104 | +/* GMID_EL1 field definitions */ |
---|
| 1105 | +#define SYS_GMID_EL1_BS_SHIFT 0 |
---|
| 1106 | +#define SYS_GMID_EL1_BS_SIZE 4 |
---|
| 1107 | + |
---|
| 1108 | +/* TFSR{,E0}_EL1 bit definitions */ |
---|
| 1109 | +#define SYS_TFSR_EL1_TF0_SHIFT 0 |
---|
| 1110 | +#define SYS_TFSR_EL1_TF1_SHIFT 1 |
---|
| 1111 | +#define SYS_TFSR_EL1_TF0 (UL(1) << SYS_TFSR_EL1_TF0_SHIFT) |
---|
| 1112 | +#define SYS_TFSR_EL1_TF1 (UL(1) << SYS_TFSR_EL1_TF1_SHIFT) |
---|
686 | 1113 | |
---|
687 | 1114 | /* Safe value for MPIDR_EL1: Bit31:RES1, Bit30:U:0, Bit24:MT:0 */ |
---|
688 | | -#define SYS_MPIDR_SAFE_VAL (1UL << 31) |
---|
| 1115 | +#define SYS_MPIDR_SAFE_VAL (BIT(31)) |
---|
| 1116 | + |
---|
| 1117 | +#define TRFCR_ELx_TS_SHIFT 5 |
---|
| 1118 | +#define TRFCR_ELx_TS_VIRTUAL ((0x1UL) << TRFCR_ELx_TS_SHIFT) |
---|
| 1119 | +#define TRFCR_ELx_TS_GUEST_PHYSICAL ((0x2UL) << TRFCR_ELx_TS_SHIFT) |
---|
| 1120 | +#define TRFCR_ELx_TS_PHYSICAL ((0x3UL) << TRFCR_ELx_TS_SHIFT) |
---|
| 1121 | +#define TRFCR_EL2_CX BIT(3) |
---|
| 1122 | +#define TRFCR_ELx_ExTRE BIT(1) |
---|
| 1123 | +#define TRFCR_ELx_E0TRE BIT(0) |
---|
689 | 1124 | |
---|
690 | 1125 | #ifdef __ASSEMBLY__ |
---|
691 | 1126 | |
---|
.. | .. |
---|
706 | 1141 | |
---|
707 | 1142 | #include <linux/build_bug.h> |
---|
708 | 1143 | #include <linux/types.h> |
---|
| 1144 | +#include <asm/alternative.h> |
---|
709 | 1145 | |
---|
710 | 1146 | #define __DEFINE_MRS_MSR_S_REGNUM \ |
---|
711 | 1147 | " .irp num,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30\n" \ |
---|
.. | .. |
---|
787 | 1223 | write_sysreg(__scs_new, sysreg); \ |
---|
788 | 1224 | } while (0) |
---|
789 | 1225 | |
---|
| 1226 | +#define sysreg_clear_set_s(sysreg, clear, set) do { \ |
---|
| 1227 | + u64 __scs_val = read_sysreg_s(sysreg); \ |
---|
| 1228 | + u64 __scs_new = (__scs_val & ~(u64)(clear)) | (set); \ |
---|
| 1229 | + if (__scs_new != __scs_val) \ |
---|
| 1230 | + write_sysreg_s(__scs_new, sysreg); \ |
---|
| 1231 | +} while (0) |
---|
| 1232 | + |
---|
| 1233 | +#define read_sysreg_par() ({ \ |
---|
| 1234 | + u64 par; \ |
---|
| 1235 | + asm(ALTERNATIVE("nop", "dmb sy", ARM64_WORKAROUND_1508412)); \ |
---|
| 1236 | + par = read_sysreg(par_el1); \ |
---|
| 1237 | + asm(ALTERNATIVE("nop", "dmb sy", ARM64_WORKAROUND_1508412)); \ |
---|
| 1238 | + par; \ |
---|
| 1239 | +}) |
---|
| 1240 | + |
---|
790 | 1241 | #endif |
---|
791 | 1242 | |
---|
792 | 1243 | #endif /* __ASM_SYSREG_H */ |
---|