2 * Copyright (c) 2010-2013, 2015-2020 ARM Limited
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 #include "arch/arm/miscregs.hh"
42 #include "arch/arm/isa.hh"
43 #include "base/logging.hh"
44 #include "cpu/thread_context.hh"
45 #include "sim/full_system.hh"
51 decodeCP14Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
61 return MISCREG_DBGDIDR
;
63 return MISCREG_DBGDSCRint
;
87 return MISCREG_TEEHBR
;
119 // If we get here then it must be a register that we haven't implemented
120 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
121 crn
, opc1
, crm
, opc2
);
122 return MISCREG_CP14_UNIMPL
;
128 decodeCP15Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
140 return MISCREG_TCMTR
;
142 return MISCREG_TLBTR
;
144 return MISCREG_MPIDR
;
146 return MISCREG_REVIDR
;
154 return MISCREG_ID_PFR0
;
156 return MISCREG_ID_PFR1
;
158 return MISCREG_ID_DFR0
;
160 return MISCREG_ID_AFR0
;
162 return MISCREG_ID_MMFR0
;
164 return MISCREG_ID_MMFR1
;
166 return MISCREG_ID_MMFR2
;
168 return MISCREG_ID_MMFR3
;
174 return MISCREG_ID_ISAR0
;
176 return MISCREG_ID_ISAR1
;
178 return MISCREG_ID_ISAR2
;
180 return MISCREG_ID_ISAR3
;
182 return MISCREG_ID_ISAR4
;
184 return MISCREG_ID_ISAR5
;
187 return MISCREG_RAZ
; // read as zero
191 return MISCREG_RAZ
; // read as zero
198 return MISCREG_CCSIDR
;
200 return MISCREG_CLIDR
;
207 if (crm
== 0 && opc2
== 0) {
208 return MISCREG_CSSELR
;
214 return MISCREG_VPIDR
;
216 return MISCREG_VMPIDR
;
226 return MISCREG_SCTLR
;
228 return MISCREG_ACTLR
;
230 return MISCREG_CPACR
;
232 } else if (crm
== 1) {
239 return MISCREG_NSACR
;
242 } else if (opc1
== 4) {
245 return MISCREG_HSCTLR
;
247 return MISCREG_HACTLR
;
248 } else if (crm
== 1) {
255 return MISCREG_HCPTR
;
267 if (opc1
== 0 && crm
== 0) {
270 return MISCREG_TTBR0
;
272 return MISCREG_TTBR1
;
274 return MISCREG_TTBCR
;
276 } else if (opc1
== 4) {
277 if (crm
== 0 && opc2
== 2)
279 else if (crm
== 1 && opc2
== 2)
284 if (opc1
== 0 && crm
== 0 && opc2
== 0) {
289 if (opc1
== 0 && crm
== 6 && opc2
== 0) {
290 return MISCREG_ICC_PMR
;
298 } else if (opc2
== 1) {
301 } else if (crm
== 1) {
303 return MISCREG_ADFSR
;
304 } else if (opc2
== 1) {
305 return MISCREG_AIFSR
;
308 } else if (opc1
== 4) {
311 return MISCREG_HADFSR
;
313 return MISCREG_HAIFSR
;
314 } else if (crm
== 2 && opc2
== 0) {
320 if (opc1
== 0 && crm
== 0) {
327 } else if (opc1
== 4 && crm
== 0) {
330 return MISCREG_HDFAR
;
332 return MISCREG_HIFAR
;
334 return MISCREG_HPFAR
;
349 return MISCREG_ICIALLUIS
;
351 return MISCREG_BPIALLIS
;
362 return MISCREG_ICIALLU
;
364 return MISCREG_ICIMVAU
;
366 return MISCREG_CP15ISB
;
368 return MISCREG_BPIALL
;
370 return MISCREG_BPIMVA
;
375 return MISCREG_DCIMVAC
;
376 } else if (opc2
== 2) {
377 return MISCREG_DCISW
;
383 return MISCREG_ATS1CPR
;
385 return MISCREG_ATS1CPW
;
387 return MISCREG_ATS1CUR
;
389 return MISCREG_ATS1CUW
;
391 return MISCREG_ATS12NSOPR
;
393 return MISCREG_ATS12NSOPW
;
395 return MISCREG_ATS12NSOUR
;
397 return MISCREG_ATS12NSOUW
;
403 return MISCREG_DCCMVAC
;
405 return MISCREG_DCCSW
;
407 return MISCREG_CP15DSB
;
409 return MISCREG_CP15DMB
;
414 return MISCREG_DCCMVAU
;
424 return MISCREG_DCCIMVAC
;
425 } else if (opc2
== 2) {
426 return MISCREG_DCCISW
;
430 } else if (opc1
== 4 && crm
== 8) {
432 return MISCREG_ATS1HR
;
434 return MISCREG_ATS1HW
;
443 return MISCREG_TLBIALLIS
;
445 return MISCREG_TLBIMVAIS
;
447 return MISCREG_TLBIASIDIS
;
449 return MISCREG_TLBIMVAAIS
;
451 return MISCREG_TLBIMVALIS
;
453 return MISCREG_TLBIMVAALIS
;
459 return MISCREG_ITLBIALL
;
461 return MISCREG_ITLBIMVA
;
463 return MISCREG_ITLBIASID
;
469 return MISCREG_DTLBIALL
;
471 return MISCREG_DTLBIMVA
;
473 return MISCREG_DTLBIASID
;
479 return MISCREG_TLBIALL
;
481 return MISCREG_TLBIMVA
;
483 return MISCREG_TLBIASID
;
485 return MISCREG_TLBIMVAA
;
487 return MISCREG_TLBIMVAL
;
489 return MISCREG_TLBIMVAAL
;
493 } else if (opc1
== 4) {
497 return MISCREG_TLBIIPAS2IS
;
499 return MISCREG_TLBIIPAS2LIS
;
501 } else if (crm
== 3) {
504 return MISCREG_TLBIALLHIS
;
506 return MISCREG_TLBIMVAHIS
;
508 return MISCREG_TLBIALLNSNHIS
;
510 return MISCREG_TLBIMVALHIS
;
512 } else if (crm
== 4) {
515 return MISCREG_TLBIIPAS2
;
517 return MISCREG_TLBIIPAS2L
;
519 } else if (crm
== 7) {
522 return MISCREG_TLBIALLH
;
524 return MISCREG_TLBIMVAH
;
526 return MISCREG_TLBIALLNSNH
;
528 return MISCREG_TLBIMVALH
;
534 // Every cop register with CRn = 9 and CRm in
535 // {0-2}, {5-8} is implementation defined regardless
545 return MISCREG_IMPDEF_UNIMPL
;
554 return MISCREG_PMCNTENSET
;
556 return MISCREG_PMCNTENCLR
;
558 return MISCREG_PMOVSR
;
560 return MISCREG_PMSWINC
;
562 return MISCREG_PMSELR
;
564 return MISCREG_PMCEID0
;
566 return MISCREG_PMCEID1
;
572 return MISCREG_PMCCNTR
;
574 // Selector is PMSELR.SEL
575 return MISCREG_PMXEVTYPER_PMCCFILTR
;
577 return MISCREG_PMXEVCNTR
;
583 return MISCREG_PMUSERENR
;
585 return MISCREG_PMINTENSET
;
587 return MISCREG_PMINTENCLR
;
589 return MISCREG_PMOVSSET
;
593 } else if (opc1
== 1) {
597 case 2: // L2CTLR, L2 Control Register
598 return MISCREG_L2CTLR
;
600 return MISCREG_L2ECTLR
;
609 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
611 return MISCREG_IMPDEF_UNIMPL
;
612 } else if (crm
== 2) { // TEX Remap Registers
614 // Selector is TTBCR.EAE
615 return MISCREG_PRRR_MAIR0
;
616 } else if (opc2
== 1) {
617 // Selector is TTBCR.EAE
618 return MISCREG_NMRR_MAIR1
;
620 } else if (crm
== 3) {
622 return MISCREG_AMAIR0
;
623 } else if (opc2
== 1) {
624 return MISCREG_AMAIR1
;
627 } else if (opc1
== 4) {
628 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
631 return MISCREG_HMAIR0
;
633 return MISCREG_HMAIR1
;
634 } else if (crm
== 3) {
636 return MISCREG_HAMAIR0
;
638 return MISCREG_HAMAIR1
;
655 // Reserved for DMA operations for TCM access
656 return MISCREG_IMPDEF_UNIMPL
;
667 } else if (opc2
== 1) {
668 return MISCREG_MVBAR
;
670 } else if (crm
== 1) {
674 } else if (crm
== 8) {
677 return MISCREG_ICC_IAR0
;
679 return MISCREG_ICC_EOIR0
;
681 return MISCREG_ICC_HPPIR0
;
683 return MISCREG_ICC_BPR0
;
685 return MISCREG_ICC_AP0R0
;
687 return MISCREG_ICC_AP0R1
;
689 return MISCREG_ICC_AP0R2
;
691 return MISCREG_ICC_AP0R3
;
693 } else if (crm
== 9) {
696 return MISCREG_ICC_AP1R0
;
698 return MISCREG_ICC_AP1R1
;
700 return MISCREG_ICC_AP1R2
;
702 return MISCREG_ICC_AP1R3
;
704 } else if (crm
== 11) {
707 return MISCREG_ICC_DIR
;
709 return MISCREG_ICC_RPR
;
711 } else if (crm
== 12) {
714 return MISCREG_ICC_IAR1
;
716 return MISCREG_ICC_EOIR1
;
718 return MISCREG_ICC_HPPIR1
;
720 return MISCREG_ICC_BPR1
;
722 return MISCREG_ICC_CTLR
;
724 return MISCREG_ICC_SRE
;
726 return MISCREG_ICC_IGRPEN0
;
728 return MISCREG_ICC_IGRPEN1
;
731 } else if (opc1
== 4) {
732 if (crm
== 0 && opc2
== 0) {
733 return MISCREG_HVBAR
;
734 } else if (crm
== 8) {
737 return MISCREG_ICH_AP0R0
;
739 return MISCREG_ICH_AP0R1
;
741 return MISCREG_ICH_AP0R2
;
743 return MISCREG_ICH_AP0R3
;
745 } else if (crm
== 9) {
748 return MISCREG_ICH_AP1R0
;
750 return MISCREG_ICH_AP1R1
;
752 return MISCREG_ICH_AP1R2
;
754 return MISCREG_ICH_AP1R3
;
756 return MISCREG_ICC_HSRE
;
758 } else if (crm
== 11) {
761 return MISCREG_ICH_HCR
;
763 return MISCREG_ICH_VTR
;
765 return MISCREG_ICH_MISR
;
767 return MISCREG_ICH_EISR
;
769 return MISCREG_ICH_ELRSR
;
771 return MISCREG_ICH_VMCR
;
773 } else if (crm
== 12) {
776 return MISCREG_ICH_LR0
;
778 return MISCREG_ICH_LR1
;
780 return MISCREG_ICH_LR2
;
782 return MISCREG_ICH_LR3
;
784 return MISCREG_ICH_LR4
;
786 return MISCREG_ICH_LR5
;
788 return MISCREG_ICH_LR6
;
790 return MISCREG_ICH_LR7
;
792 } else if (crm
== 13) {
795 return MISCREG_ICH_LR8
;
797 return MISCREG_ICH_LR9
;
799 return MISCREG_ICH_LR10
;
801 return MISCREG_ICH_LR11
;
803 return MISCREG_ICH_LR12
;
805 return MISCREG_ICH_LR13
;
807 return MISCREG_ICH_LR14
;
809 return MISCREG_ICH_LR15
;
811 } else if (crm
== 14) {
814 return MISCREG_ICH_LRC0
;
816 return MISCREG_ICH_LRC1
;
818 return MISCREG_ICH_LRC2
;
820 return MISCREG_ICH_LRC3
;
822 return MISCREG_ICH_LRC4
;
824 return MISCREG_ICH_LRC5
;
826 return MISCREG_ICH_LRC6
;
828 return MISCREG_ICH_LRC7
;
830 } else if (crm
== 15) {
833 return MISCREG_ICH_LRC8
;
835 return MISCREG_ICH_LRC9
;
837 return MISCREG_ICH_LRC10
;
839 return MISCREG_ICH_LRC11
;
841 return MISCREG_ICH_LRC12
;
843 return MISCREG_ICH_LRC13
;
845 return MISCREG_ICH_LRC14
;
847 return MISCREG_ICH_LRC15
;
850 } else if (opc1
== 6) {
854 return MISCREG_ICC_MCTLR
;
856 return MISCREG_ICC_MSRE
;
858 return MISCREG_ICC_MGRPEN1
;
868 return MISCREG_FCSEIDR
;
870 return MISCREG_CONTEXTIDR
;
872 return MISCREG_TPIDRURW
;
874 return MISCREG_TPIDRURO
;
876 return MISCREG_TPIDRPRW
;
879 } else if (opc1
== 4) {
880 if (crm
== 0 && opc2
== 2)
881 return MISCREG_HTPIDR
;
889 return MISCREG_CNTFRQ
;
893 return MISCREG_CNTKCTL
;
897 return MISCREG_CNTP_TVAL
;
899 return MISCREG_CNTP_CTL
;
903 return MISCREG_CNTV_TVAL
;
905 return MISCREG_CNTV_CTL
;
908 } else if (opc1
== 4) {
909 if (crm
== 1 && opc2
== 0) {
910 return MISCREG_CNTHCTL
;
911 } else if (crm
== 2) {
913 return MISCREG_CNTHP_TVAL
;
915 return MISCREG_CNTHP_CTL
;
920 // Implementation defined
921 return MISCREG_IMPDEF_UNIMPL
;
923 // Unrecognized register
924 return MISCREG_CP15_UNIMPL
;
928 decodeCP15Reg64(unsigned crm
, unsigned opc1
)
934 return MISCREG_TTBR0
;
936 return MISCREG_TTBR1
;
938 return MISCREG_HTTBR
;
940 return MISCREG_VTTBR
;
950 return MISCREG_CNTPCT
;
952 return MISCREG_CNTVCT
;
954 return MISCREG_CNTP_CVAL
;
956 return MISCREG_CNTV_CVAL
;
958 return MISCREG_CNTVOFF
;
960 return MISCREG_CNTHP_CVAL
;
966 return MISCREG_ICC_SGI1R
;
968 return MISCREG_ICC_ASGI1R
;
970 return MISCREG_ICC_SGI0R
;
977 return MISCREG_CPUMERRSR
;
979 return MISCREG_L2MERRSR
;
982 // Unrecognized register
983 return MISCREG_CP15_UNIMPL
;
986 std::tuple
<bool, bool>
987 canReadCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
989 bool secure
= !scr
.ns
;
990 bool canRead
= false;
991 bool undefined
= false;
995 canRead
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
996 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1002 case MODE_UNDEFINED
:
1004 canRead
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1005 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1008 canRead
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1009 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1012 canRead
= miscRegInfo
[reg
][MISCREG_HYP_RD
];
1017 // can't do permissions checkes on the root of a banked pair of regs
1018 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1019 return std::make_tuple(canRead
, undefined
);
1022 std::tuple
<bool, bool>
1023 canWriteCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
1025 bool secure
= !scr
.ns
;
1026 bool canWrite
= false;
1027 bool undefined
= false;
1029 switch (cpsr
.mode
) {
1031 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1032 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1038 case MODE_UNDEFINED
:
1040 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1041 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1044 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1045 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1048 canWrite
= miscRegInfo
[reg
][MISCREG_HYP_WR
];
1053 // can't do permissions checkes on the root of a banked pair of regs
1054 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1055 return std::make_tuple(canWrite
, undefined
);
1059 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
)
1061 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1062 return snsBankedIndex(reg
, tc
, scr
.ns
);
1066 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
, bool ns
)
1068 int reg_as_int
= static_cast<int>(reg
);
1069 if (miscRegInfo
[reg
][MISCREG_BANKED
]) {
1070 reg_as_int
+= (ArmSystem::haveSecurity(tc
) &&
1071 !ArmSystem::highestELIs64(tc
) && !ns
) ? 2 : 1;
1077 snsBankedIndex64(MiscRegIndex reg
, ThreadContext
*tc
)
1079 auto *isa
= static_cast<ArmISA::ISA
*>(tc
->getIsaPtr());
1080 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1081 return isa
->snsBankedIndex64(reg
, scr
.ns
);
1085 * If the reg is a child reg of a banked set, then the parent is the last
1086 * banked one in the list. This is messy, and the wish is to eventually have
1087 * the bitmap replaced with a better data structure. the preUnflatten function
1088 * initializes a lookup table to speed up the search for these banked
1092 int unflattenResultMiscReg
[NUM_MISCREGS
];
1095 preUnflattenMiscReg()
1098 for (int i
= 0 ; i
< NUM_MISCREGS
; i
++){
1099 if (miscRegInfo
[i
][MISCREG_BANKED
])
1101 if (miscRegInfo
[i
][MISCREG_BANKED_CHILD
])
1102 unflattenResultMiscReg
[i
] = reg
;
1104 unflattenResultMiscReg
[i
] = i
;
1105 // if this assert fails, no parent was found, and something is broken
1106 assert(unflattenResultMiscReg
[i
] > -1);
1111 unflattenMiscReg(int reg
)
1113 return unflattenResultMiscReg
[reg
];
1117 canReadAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1120 // Check for SP_EL0 access while SPSEL == 0
1121 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1124 // Check for RVBAR access
1125 if (reg
== MISCREG_RVBAR_EL1
) {
1126 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1127 if (highest_el
== EL2
|| highest_el
== EL3
)
1130 if (reg
== MISCREG_RVBAR_EL2
) {
1131 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1132 if (highest_el
== EL3
)
1136 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1137 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1139 switch (currEL(cpsr
)) {
1141 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
1142 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1144 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1145 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1147 return el2_host
? miscRegInfo
[reg
][MISCREG_HYP_E2H_RD
] :
1148 miscRegInfo
[reg
][MISCREG_HYP_RD
];
1150 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_RD
] :
1151 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1152 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1154 panic("Invalid exception level");
1159 canWriteAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1162 // Check for SP_EL0 access while SPSEL == 0
1163 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1165 ExceptionLevel el
= currEL(cpsr
);
1166 if (reg
== MISCREG_DAIF
) {
1167 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1168 if (el
== EL0
&& !sctlr
.uma
)
1171 if (FullSystem
&& reg
== MISCREG_DC_ZVA_Xt
) {
1172 // In syscall-emulation mode, this test is skipped and DCZVA is always
1174 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1175 if (el
== EL0
&& !sctlr
.dze
)
1178 if (reg
== MISCREG_DC_CVAC_Xt
|| reg
== MISCREG_DC_CIVAC_Xt
) {
1179 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1180 if (el
== EL0
&& !sctlr
.uci
)
1184 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1185 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1189 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1190 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1192 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1193 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1195 return el2_host
? miscRegInfo
[reg
][MISCREG_HYP_E2H_WR
] :
1196 miscRegInfo
[reg
][MISCREG_HYP_WR
];
1198 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_WR
] :
1199 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1200 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1202 panic("Invalid exception level");
1207 decodeAArch64SysReg(unsigned op0
, unsigned op1
,
1208 unsigned crn
, unsigned crm
,
1221 return MISCREG_IC_IALLUIS
;
1227 return MISCREG_IC_IALLU
;
1233 return MISCREG_DC_IVAC_Xt
;
1235 return MISCREG_DC_ISW_Xt
;
1241 return MISCREG_AT_S1E1R_Xt
;
1243 return MISCREG_AT_S1E1W_Xt
;
1245 return MISCREG_AT_S1E0R_Xt
;
1247 return MISCREG_AT_S1E0W_Xt
;
1253 return MISCREG_DC_CSW_Xt
;
1259 return MISCREG_DC_CISW_Xt
;
1269 return MISCREG_DC_ZVA_Xt
;
1275 return MISCREG_IC_IVAU_Xt
;
1281 return MISCREG_DC_CVAC_Xt
;
1287 return MISCREG_DC_CVAU_Xt
;
1293 return MISCREG_DC_CIVAC_Xt
;
1303 return MISCREG_AT_S1E2R_Xt
;
1305 return MISCREG_AT_S1E2W_Xt
;
1307 return MISCREG_AT_S12E1R_Xt
;
1309 return MISCREG_AT_S12E1W_Xt
;
1311 return MISCREG_AT_S12E0R_Xt
;
1313 return MISCREG_AT_S12E0W_Xt
;
1323 return MISCREG_AT_S1E3R_Xt
;
1325 return MISCREG_AT_S1E3W_Xt
;
1339 return MISCREG_TLBI_VMALLE1IS
;
1341 return MISCREG_TLBI_VAE1IS_Xt
;
1343 return MISCREG_TLBI_ASIDE1IS_Xt
;
1345 return MISCREG_TLBI_VAAE1IS_Xt
;
1347 return MISCREG_TLBI_VALE1IS_Xt
;
1349 return MISCREG_TLBI_VAALE1IS_Xt
;
1355 return MISCREG_TLBI_VMALLE1
;
1357 return MISCREG_TLBI_VAE1_Xt
;
1359 return MISCREG_TLBI_ASIDE1_Xt
;
1361 return MISCREG_TLBI_VAAE1_Xt
;
1363 return MISCREG_TLBI_VALE1_Xt
;
1365 return MISCREG_TLBI_VAALE1_Xt
;
1375 return MISCREG_TLBI_IPAS2E1IS_Xt
;
1377 return MISCREG_TLBI_IPAS2LE1IS_Xt
;
1383 return MISCREG_TLBI_ALLE2IS
;
1385 return MISCREG_TLBI_VAE2IS_Xt
;
1387 return MISCREG_TLBI_ALLE1IS
;
1389 return MISCREG_TLBI_VALE2IS_Xt
;
1391 return MISCREG_TLBI_VMALLS12E1IS
;
1397 return MISCREG_TLBI_IPAS2E1_Xt
;
1399 return MISCREG_TLBI_IPAS2LE1_Xt
;
1405 return MISCREG_TLBI_ALLE2
;
1407 return MISCREG_TLBI_VAE2_Xt
;
1409 return MISCREG_TLBI_ALLE1
;
1411 return MISCREG_TLBI_VALE2_Xt
;
1413 return MISCREG_TLBI_VMALLS12E1
;
1423 return MISCREG_TLBI_ALLE3IS
;
1425 return MISCREG_TLBI_VAE3IS_Xt
;
1427 return MISCREG_TLBI_VALE3IS_Xt
;
1433 return MISCREG_TLBI_ALLE3
;
1435 return MISCREG_TLBI_VAE3_Xt
;
1437 return MISCREG_TLBI_VALE3_Xt
;
1446 // SYS Instruction with CRn = { 11, 15 }
1447 // (Trappable by HCR_EL2.TIDCP)
1448 return MISCREG_IMPDEF_UNIMPL
;
1460 return MISCREG_OSDTRRX_EL1
;
1462 return MISCREG_DBGBVR0_EL1
;
1464 return MISCREG_DBGBCR0_EL1
;
1466 return MISCREG_DBGWVR0_EL1
;
1468 return MISCREG_DBGWCR0_EL1
;
1474 return MISCREG_DBGBVR1_EL1
;
1476 return MISCREG_DBGBCR1_EL1
;
1478 return MISCREG_DBGWVR1_EL1
;
1480 return MISCREG_DBGWCR1_EL1
;
1486 return MISCREG_MDCCINT_EL1
;
1488 return MISCREG_MDSCR_EL1
;
1490 return MISCREG_DBGBVR2_EL1
;
1492 return MISCREG_DBGBCR2_EL1
;
1494 return MISCREG_DBGWVR2_EL1
;
1496 return MISCREG_DBGWCR2_EL1
;
1502 return MISCREG_OSDTRTX_EL1
;
1504 return MISCREG_DBGBVR3_EL1
;
1506 return MISCREG_DBGBCR3_EL1
;
1508 return MISCREG_DBGWVR3_EL1
;
1510 return MISCREG_DBGWCR3_EL1
;
1516 return MISCREG_DBGBVR4_EL1
;
1518 return MISCREG_DBGBCR4_EL1
;
1524 return MISCREG_DBGBVR5_EL1
;
1526 return MISCREG_DBGBCR5_EL1
;
1532 return MISCREG_OSECCR_EL1
;
1542 return MISCREG_TEECR32_EL1
;
1552 return MISCREG_MDCCSR_EL0
;
1558 return MISCREG_MDDTR_EL0
;
1564 return MISCREG_MDDTRRX_EL0
;
1574 return MISCREG_DBGVCR32_EL2
;
1588 return MISCREG_MDRAR_EL1
;
1590 return MISCREG_OSLAR_EL1
;
1596 return MISCREG_OSLSR_EL1
;
1602 return MISCREG_OSDLR_EL1
;
1608 return MISCREG_DBGPRCR_EL1
;
1618 return MISCREG_TEEHBR32_EL1
;
1632 return MISCREG_DBGCLAIMSET_EL1
;
1638 return MISCREG_DBGCLAIMCLR_EL1
;
1644 return MISCREG_DBGAUTHSTATUS_EL1
;
1662 return MISCREG_MIDR_EL1
;
1664 return MISCREG_MPIDR_EL1
;
1666 return MISCREG_REVIDR_EL1
;
1672 return MISCREG_ID_PFR0_EL1
;
1674 return MISCREG_ID_PFR1_EL1
;
1676 return MISCREG_ID_DFR0_EL1
;
1678 return MISCREG_ID_AFR0_EL1
;
1680 return MISCREG_ID_MMFR0_EL1
;
1682 return MISCREG_ID_MMFR1_EL1
;
1684 return MISCREG_ID_MMFR2_EL1
;
1686 return MISCREG_ID_MMFR3_EL1
;
1692 return MISCREG_ID_ISAR0_EL1
;
1694 return MISCREG_ID_ISAR1_EL1
;
1696 return MISCREG_ID_ISAR2_EL1
;
1698 return MISCREG_ID_ISAR3_EL1
;
1700 return MISCREG_ID_ISAR4_EL1
;
1702 return MISCREG_ID_ISAR5_EL1
;
1708 return MISCREG_MVFR0_EL1
;
1710 return MISCREG_MVFR1_EL1
;
1712 return MISCREG_MVFR2_EL1
;
1720 return MISCREG_ID_AA64PFR0_EL1
;
1722 return MISCREG_ID_AA64PFR1_EL1
;
1726 return MISCREG_ID_AA64ZFR0_EL1
;
1734 return MISCREG_ID_AA64DFR0_EL1
;
1736 return MISCREG_ID_AA64DFR1_EL1
;
1738 return MISCREG_ID_AA64AFR0_EL1
;
1740 return MISCREG_ID_AA64AFR1_EL1
;
1751 return MISCREG_ID_AA64ISAR0_EL1
;
1753 return MISCREG_ID_AA64ISAR1_EL1
;
1761 return MISCREG_ID_AA64MMFR0_EL1
;
1763 return MISCREG_ID_AA64MMFR1_EL1
;
1765 return MISCREG_ID_AA64MMFR2_EL1
;
1777 return MISCREG_CCSIDR_EL1
;
1779 return MISCREG_CLIDR_EL1
;
1781 return MISCREG_AIDR_EL1
;
1791 return MISCREG_CSSELR_EL1
;
1801 return MISCREG_CTR_EL0
;
1803 return MISCREG_DCZID_EL0
;
1813 return MISCREG_VPIDR_EL2
;
1815 return MISCREG_VMPIDR_EL2
;
1829 return MISCREG_SCTLR_EL1
;
1831 return MISCREG_ACTLR_EL1
;
1833 return MISCREG_CPACR_EL1
;
1839 return MISCREG_ZCR_EL1
;
1849 return MISCREG_SCTLR_EL2
;
1851 return MISCREG_ACTLR_EL2
;
1857 return MISCREG_HCR_EL2
;
1859 return MISCREG_MDCR_EL2
;
1861 return MISCREG_CPTR_EL2
;
1863 return MISCREG_HSTR_EL2
;
1865 return MISCREG_HACR_EL2
;
1871 return MISCREG_ZCR_EL2
;
1881 return MISCREG_ZCR_EL12
;
1891 return MISCREG_SCTLR_EL3
;
1893 return MISCREG_ACTLR_EL3
;
1899 return MISCREG_SCR_EL3
;
1901 return MISCREG_SDER32_EL3
;
1903 return MISCREG_CPTR_EL3
;
1909 return MISCREG_ZCR_EL3
;
1915 return MISCREG_MDCR_EL3
;
1929 return MISCREG_TTBR0_EL1
;
1931 return MISCREG_TTBR1_EL1
;
1933 return MISCREG_TCR_EL1
;
1939 return MISCREG_APIAKeyLo_EL1
;
1941 return MISCREG_APIAKeyHi_EL1
;
1943 return MISCREG_APIBKeyLo_EL1
;
1945 return MISCREG_APIBKeyHi_EL1
;
1951 return MISCREG_APDAKeyLo_EL1
;
1953 return MISCREG_APDAKeyHi_EL1
;
1955 return MISCREG_APDBKeyLo_EL1
;
1957 return MISCREG_APDBKeyHi_EL1
;
1964 return MISCREG_APGAKeyLo_EL1
;
1966 return MISCREG_APGAKeyHi_EL1
;
1976 return MISCREG_TTBR0_EL2
;
1978 return MISCREG_TTBR1_EL2
;
1980 return MISCREG_TCR_EL2
;
1986 return MISCREG_VTTBR_EL2
;
1988 return MISCREG_VTCR_EL2
;
1998 return MISCREG_TTBR0_EL3
;
2000 return MISCREG_TCR_EL3
;
2014 return MISCREG_DACR32_EL2
;
2028 return MISCREG_SPSR_EL1
;
2030 return MISCREG_ELR_EL1
;
2036 return MISCREG_SP_EL0
;
2042 return MISCREG_SPSEL
;
2044 return MISCREG_CURRENTEL
;
2052 return MISCREG_ICC_PMR_EL1
;
2062 return MISCREG_NZCV
;
2064 return MISCREG_DAIF
;
2070 return MISCREG_FPCR
;
2072 return MISCREG_FPSR
;
2078 return MISCREG_DSPSR_EL0
;
2080 return MISCREG_DLR_EL0
;
2090 return MISCREG_SPSR_EL2
;
2092 return MISCREG_ELR_EL2
;
2098 return MISCREG_SP_EL1
;
2104 return MISCREG_SPSR_IRQ_AA64
;
2106 return MISCREG_SPSR_ABT_AA64
;
2108 return MISCREG_SPSR_UND_AA64
;
2110 return MISCREG_SPSR_FIQ_AA64
;
2120 return MISCREG_SPSR_EL3
;
2122 return MISCREG_ELR_EL3
;
2128 return MISCREG_SP_EL2
;
2142 return MISCREG_AFSR0_EL1
;
2144 return MISCREG_AFSR1_EL1
;
2150 return MISCREG_ESR_EL1
;
2156 return MISCREG_ERRIDR_EL1
;
2158 return MISCREG_ERRSELR_EL1
;
2164 return MISCREG_ERXFR_EL1
;
2166 return MISCREG_ERXCTLR_EL1
;
2168 return MISCREG_ERXSTATUS_EL1
;
2170 return MISCREG_ERXADDR_EL1
;
2176 return MISCREG_ERXMISC0_EL1
;
2178 return MISCREG_ERXMISC1_EL1
;
2188 return MISCREG_IFSR32_EL2
;
2194 return MISCREG_AFSR0_EL2
;
2196 return MISCREG_AFSR1_EL2
;
2202 return MISCREG_ESR_EL2
;
2204 return MISCREG_VSESR_EL2
;
2210 return MISCREG_FPEXC32_EL2
;
2220 return MISCREG_AFSR0_EL3
;
2222 return MISCREG_AFSR1_EL3
;
2228 return MISCREG_ESR_EL3
;
2242 return MISCREG_FAR_EL1
;
2252 return MISCREG_FAR_EL2
;
2254 return MISCREG_HPFAR_EL2
;
2264 return MISCREG_FAR_EL3
;
2278 return MISCREG_PAR_EL1
;
2292 return MISCREG_PMINTENSET_EL1
;
2294 return MISCREG_PMINTENCLR_EL1
;
2304 return MISCREG_PMCR_EL0
;
2306 return MISCREG_PMCNTENSET_EL0
;
2308 return MISCREG_PMCNTENCLR_EL0
;
2310 return MISCREG_PMOVSCLR_EL0
;
2312 return MISCREG_PMSWINC_EL0
;
2314 return MISCREG_PMSELR_EL0
;
2316 return MISCREG_PMCEID0_EL0
;
2318 return MISCREG_PMCEID1_EL0
;
2324 return MISCREG_PMCCNTR_EL0
;
2326 return MISCREG_PMXEVTYPER_EL0
;
2328 return MISCREG_PMXEVCNTR_EL0
;
2334 return MISCREG_PMUSERENR_EL0
;
2336 return MISCREG_PMOVSSET_EL0
;
2350 return MISCREG_MAIR_EL1
;
2356 return MISCREG_AMAIR_EL1
;
2366 return MISCREG_MAIR_EL2
;
2372 return MISCREG_AMAIR_EL2
;
2382 return MISCREG_MAIR_EL3
;
2388 return MISCREG_AMAIR_EL3
;
2402 return MISCREG_L2CTLR_EL1
;
2404 return MISCREG_L2ECTLR_EL1
;
2410 // S3_<op1>_11_<Cm>_<op2>
2411 return MISCREG_IMPDEF_UNIMPL
;
2421 return MISCREG_VBAR_EL1
;
2423 return MISCREG_RVBAR_EL1
;
2429 return MISCREG_ISR_EL1
;
2431 return MISCREG_DISR_EL1
;
2437 return MISCREG_ICC_IAR0_EL1
;
2439 return MISCREG_ICC_EOIR0_EL1
;
2441 return MISCREG_ICC_HPPIR0_EL1
;
2443 return MISCREG_ICC_BPR0_EL1
;
2445 return MISCREG_ICC_AP0R0_EL1
;
2447 return MISCREG_ICC_AP0R1_EL1
;
2449 return MISCREG_ICC_AP0R2_EL1
;
2451 return MISCREG_ICC_AP0R3_EL1
;
2457 return MISCREG_ICC_AP1R0_EL1
;
2459 return MISCREG_ICC_AP1R1_EL1
;
2461 return MISCREG_ICC_AP1R2_EL1
;
2463 return MISCREG_ICC_AP1R3_EL1
;
2469 return MISCREG_ICC_DIR_EL1
;
2471 return MISCREG_ICC_RPR_EL1
;
2473 return MISCREG_ICC_SGI1R_EL1
;
2475 return MISCREG_ICC_ASGI1R_EL1
;
2477 return MISCREG_ICC_SGI0R_EL1
;
2483 return MISCREG_ICC_IAR1_EL1
;
2485 return MISCREG_ICC_EOIR1_EL1
;
2487 return MISCREG_ICC_HPPIR1_EL1
;
2489 return MISCREG_ICC_BPR1_EL1
;
2491 return MISCREG_ICC_CTLR_EL1
;
2493 return MISCREG_ICC_SRE_EL1
;
2495 return MISCREG_ICC_IGRPEN0_EL1
;
2497 return MISCREG_ICC_IGRPEN1_EL1
;
2507 return MISCREG_VBAR_EL2
;
2509 return MISCREG_RVBAR_EL2
;
2515 return MISCREG_VDISR_EL2
;
2521 return MISCREG_ICH_AP0R0_EL2
;
2523 return MISCREG_ICH_AP0R1_EL2
;
2525 return MISCREG_ICH_AP0R2_EL2
;
2527 return MISCREG_ICH_AP0R3_EL2
;
2533 return MISCREG_ICH_AP1R0_EL2
;
2535 return MISCREG_ICH_AP1R1_EL2
;
2537 return MISCREG_ICH_AP1R2_EL2
;
2539 return MISCREG_ICH_AP1R3_EL2
;
2541 return MISCREG_ICC_SRE_EL2
;
2547 return MISCREG_ICH_HCR_EL2
;
2549 return MISCREG_ICH_VTR_EL2
;
2551 return MISCREG_ICH_MISR_EL2
;
2553 return MISCREG_ICH_EISR_EL2
;
2555 return MISCREG_ICH_ELRSR_EL2
;
2557 return MISCREG_ICH_VMCR_EL2
;
2563 return MISCREG_ICH_LR0_EL2
;
2565 return MISCREG_ICH_LR1_EL2
;
2567 return MISCREG_ICH_LR2_EL2
;
2569 return MISCREG_ICH_LR3_EL2
;
2571 return MISCREG_ICH_LR4_EL2
;
2573 return MISCREG_ICH_LR5_EL2
;
2575 return MISCREG_ICH_LR6_EL2
;
2577 return MISCREG_ICH_LR7_EL2
;
2583 return MISCREG_ICH_LR8_EL2
;
2585 return MISCREG_ICH_LR9_EL2
;
2587 return MISCREG_ICH_LR10_EL2
;
2589 return MISCREG_ICH_LR11_EL2
;
2591 return MISCREG_ICH_LR12_EL2
;
2593 return MISCREG_ICH_LR13_EL2
;
2595 return MISCREG_ICH_LR14_EL2
;
2597 return MISCREG_ICH_LR15_EL2
;
2607 return MISCREG_VBAR_EL3
;
2609 return MISCREG_RVBAR_EL3
;
2611 return MISCREG_RMR_EL3
;
2617 return MISCREG_ICC_CTLR_EL3
;
2619 return MISCREG_ICC_SRE_EL3
;
2621 return MISCREG_ICC_IGRPEN1_EL3
;
2635 return MISCREG_CONTEXTIDR_EL1
;
2637 return MISCREG_TPIDR_EL1
;
2647 return MISCREG_TPIDR_EL0
;
2649 return MISCREG_TPIDRRO_EL0
;
2659 return MISCREG_CONTEXTIDR_EL2
;
2661 return MISCREG_TPIDR_EL2
;
2671 return MISCREG_TPIDR_EL3
;
2685 return MISCREG_CNTKCTL_EL1
;
2695 return MISCREG_CNTFRQ_EL0
;
2697 return MISCREG_CNTPCT_EL0
;
2699 return MISCREG_CNTVCT_EL0
;
2705 return MISCREG_CNTP_TVAL_EL0
;
2707 return MISCREG_CNTP_CTL_EL0
;
2709 return MISCREG_CNTP_CVAL_EL0
;
2715 return MISCREG_CNTV_TVAL_EL0
;
2717 return MISCREG_CNTV_CTL_EL0
;
2719 return MISCREG_CNTV_CVAL_EL0
;
2725 return MISCREG_PMEVCNTR0_EL0
;
2727 return MISCREG_PMEVCNTR1_EL0
;
2729 return MISCREG_PMEVCNTR2_EL0
;
2731 return MISCREG_PMEVCNTR3_EL0
;
2733 return MISCREG_PMEVCNTR4_EL0
;
2735 return MISCREG_PMEVCNTR5_EL0
;
2741 return MISCREG_PMEVTYPER0_EL0
;
2743 return MISCREG_PMEVTYPER1_EL0
;
2745 return MISCREG_PMEVTYPER2_EL0
;
2747 return MISCREG_PMEVTYPER3_EL0
;
2749 return MISCREG_PMEVTYPER4_EL0
;
2751 return MISCREG_PMEVTYPER5_EL0
;
2757 return MISCREG_PMCCFILTR_EL0
;
2766 return MISCREG_CNTVOFF_EL2
;
2772 return MISCREG_CNTHCTL_EL2
;
2778 return MISCREG_CNTHP_TVAL_EL2
;
2780 return MISCREG_CNTHP_CTL_EL2
;
2782 return MISCREG_CNTHP_CVAL_EL2
;
2788 return MISCREG_CNTHV_TVAL_EL2
;
2790 return MISCREG_CNTHV_CTL_EL2
;
2792 return MISCREG_CNTHV_CVAL_EL2
;
2802 return MISCREG_CNTPS_TVAL_EL1
;
2804 return MISCREG_CNTPS_CTL_EL1
;
2806 return MISCREG_CNTPS_CVAL_EL1
;
2820 return MISCREG_IL1DATA0_EL1
;
2822 return MISCREG_IL1DATA1_EL1
;
2824 return MISCREG_IL1DATA2_EL1
;
2826 return MISCREG_IL1DATA3_EL1
;
2832 return MISCREG_DL1DATA0_EL1
;
2834 return MISCREG_DL1DATA1_EL1
;
2836 return MISCREG_DL1DATA2_EL1
;
2838 return MISCREG_DL1DATA3_EL1
;
2840 return MISCREG_DL1DATA4_EL1
;
2850 return MISCREG_L2ACTLR_EL1
;
2856 return MISCREG_CPUACTLR_EL1
;
2858 return MISCREG_CPUECTLR_EL1
;
2860 return MISCREG_CPUMERRSR_EL1
;
2862 return MISCREG_L2MERRSR_EL1
;
2868 return MISCREG_CBAR_EL1
;
2875 // S3_<op1>_15_<Cm>_<op2>
2876 return MISCREG_IMPDEF_UNIMPL
;
2881 return MISCREG_UNKNOWN
;
2884 bitset
<NUM_MISCREG_INFOS
> miscRegInfo
[NUM_MISCREGS
]; // initialized below
2887 ISA::initializeMiscRegMetadata()
2889 // the MiscReg metadata tables are shared across all instances of the
2890 // ISA object, so there's no need to initialize them multiple times.
2891 static bool completed
= false;
2895 // This boolean variable specifies if the system is running in aarch32 at
2896 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
2897 // is running in aarch64 (aarch32EL3 = false)
2898 bool aarch32EL3
= haveSecurity
&& !highestELIs64
;
2900 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
2904 // Implicit error synchronization event enable (Arm 8.2+), unsupported
2907 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
2909 bool LSMAOE
= false;
2911 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
2912 bool nTLSMD
= false;
2914 // Pointer authentication (Arm 8.3+), unsupported
2915 bool EnDA
= true; // using APDAKey_EL1 key of instr addrs in ELs 0,1
2916 bool EnDB
= true; // using APDBKey_EL1 key of instr addrs in ELs 0,1
2917 bool EnIA
= true; // using APIAKey_EL1 key of instr addrs in ELs 0,1
2918 bool EnIB
= true; // using APIBKey_EL1 key of instr addrs in ELs 0,1
2921 * Some registers alias with others, and therefore need to be translated.
2922 * When two mapping registers are given, they are the 32b lower and
2923 * upper halves, respectively, of the 64b register being mapped.
2924 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
2926 * NAM = "not architecturally mandated",
2927 * from ARM DDI 0487A.i, template text
2928 * "AArch64 System register ___ can be mapped to
2929 * AArch32 System register ___, but this is not
2930 * architecturally mandated."
2933 InitReg(MISCREG_CPSR
)
2935 InitReg(MISCREG_SPSR
)
2937 InitReg(MISCREG_SPSR_FIQ
)
2939 InitReg(MISCREG_SPSR_IRQ
)
2941 InitReg(MISCREG_SPSR_SVC
)
2943 InitReg(MISCREG_SPSR_MON
)
2945 InitReg(MISCREG_SPSR_ABT
)
2947 InitReg(MISCREG_SPSR_HYP
)
2949 InitReg(MISCREG_SPSR_UND
)
2951 InitReg(MISCREG_ELR_HYP
)
2953 InitReg(MISCREG_FPSID
)
2955 InitReg(MISCREG_FPSCR
)
2957 InitReg(MISCREG_MVFR1
)
2959 InitReg(MISCREG_MVFR0
)
2961 InitReg(MISCREG_FPEXC
)
2965 InitReg(MISCREG_CPSR_MODE
)
2967 InitReg(MISCREG_CPSR_Q
)
2969 InitReg(MISCREG_FPSCR_EXC
)
2971 InitReg(MISCREG_FPSCR_QC
)
2973 InitReg(MISCREG_LOCKADDR
)
2975 InitReg(MISCREG_LOCKFLAG
)
2977 InitReg(MISCREG_PRRR_MAIR0
)
2980 InitReg(MISCREG_PRRR_MAIR0_NS
)
2982 .privSecure(!aarch32EL3
)
2984 InitReg(MISCREG_PRRR_MAIR0_S
)
2987 InitReg(MISCREG_NMRR_MAIR1
)
2990 InitReg(MISCREG_NMRR_MAIR1_NS
)
2992 .privSecure(!aarch32EL3
)
2994 InitReg(MISCREG_NMRR_MAIR1_S
)
2997 InitReg(MISCREG_PMXEVTYPER_PMCCFILTR
)
2999 InitReg(MISCREG_SCTLR_RST
)
3001 InitReg(MISCREG_SEV_MAILBOX
)
3004 // AArch32 CP14 registers
3005 InitReg(MISCREG_DBGDIDR
)
3006 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3007 InitReg(MISCREG_DBGDSCRint
)
3008 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3009 InitReg(MISCREG_DBGDCCINT
)
3012 InitReg(MISCREG_DBGDTRTXint
)
3015 InitReg(MISCREG_DBGDTRRXint
)
3018 InitReg(MISCREG_DBGWFAR
)
3021 InitReg(MISCREG_DBGVCR
)
3024 InitReg(MISCREG_DBGDTRRXext
)
3027 InitReg(MISCREG_DBGDSCRext
)
3031 InitReg(MISCREG_DBGDTRTXext
)
3034 InitReg(MISCREG_DBGOSECCR
)
3037 InitReg(MISCREG_DBGBVR0
)
3040 InitReg(MISCREG_DBGBVR1
)
3043 InitReg(MISCREG_DBGBVR2
)
3046 InitReg(MISCREG_DBGBVR3
)
3049 InitReg(MISCREG_DBGBVR4
)
3052 InitReg(MISCREG_DBGBVR5
)
3055 InitReg(MISCREG_DBGBCR0
)
3058 InitReg(MISCREG_DBGBCR1
)
3061 InitReg(MISCREG_DBGBCR2
)
3064 InitReg(MISCREG_DBGBCR3
)
3067 InitReg(MISCREG_DBGBCR4
)
3070 InitReg(MISCREG_DBGBCR5
)
3073 InitReg(MISCREG_DBGWVR0
)
3076 InitReg(MISCREG_DBGWVR1
)
3079 InitReg(MISCREG_DBGWVR2
)
3082 InitReg(MISCREG_DBGWVR3
)
3085 InitReg(MISCREG_DBGWCR0
)
3088 InitReg(MISCREG_DBGWCR1
)
3091 InitReg(MISCREG_DBGWCR2
)
3094 InitReg(MISCREG_DBGWCR3
)
3097 InitReg(MISCREG_DBGDRAR
)
3099 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3100 InitReg(MISCREG_DBGBXVR4
)
3103 InitReg(MISCREG_DBGBXVR5
)
3106 InitReg(MISCREG_DBGOSLAR
)
3108 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3109 InitReg(MISCREG_DBGOSLSR
)
3111 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3112 InitReg(MISCREG_DBGOSDLR
)
3115 InitReg(MISCREG_DBGPRCR
)
3118 InitReg(MISCREG_DBGDSAR
)
3120 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3121 InitReg(MISCREG_DBGCLAIMSET
)
3124 InitReg(MISCREG_DBGCLAIMCLR
)
3127 InitReg(MISCREG_DBGAUTHSTATUS
)
3129 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3130 InitReg(MISCREG_DBGDEVID2
)
3132 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3133 InitReg(MISCREG_DBGDEVID1
)
3135 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3136 InitReg(MISCREG_DBGDEVID0
)
3138 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3139 InitReg(MISCREG_TEECR
)
3142 InitReg(MISCREG_JIDR
)
3144 InitReg(MISCREG_TEEHBR
)
3146 InitReg(MISCREG_JOSCR
)
3148 InitReg(MISCREG_JMCR
)
3151 // AArch32 CP15 registers
3152 InitReg(MISCREG_MIDR
)
3153 .allPrivileges().exceptUserMode().writes(0);
3154 InitReg(MISCREG_CTR
)
3155 .allPrivileges().exceptUserMode().writes(0);
3156 InitReg(MISCREG_TCMTR
)
3157 .allPrivileges().exceptUserMode().writes(0);
3158 InitReg(MISCREG_TLBTR
)
3159 .allPrivileges().exceptUserMode().writes(0);
3160 InitReg(MISCREG_MPIDR
)
3161 .allPrivileges().exceptUserMode().writes(0);
3162 InitReg(MISCREG_REVIDR
)
3165 .allPrivileges().exceptUserMode().writes(0);
3166 InitReg(MISCREG_ID_PFR0
)
3167 .allPrivileges().exceptUserMode().writes(0);
3168 InitReg(MISCREG_ID_PFR1
)
3169 .allPrivileges().exceptUserMode().writes(0);
3170 InitReg(MISCREG_ID_DFR0
)
3171 .allPrivileges().exceptUserMode().writes(0);
3172 InitReg(MISCREG_ID_AFR0
)
3173 .allPrivileges().exceptUserMode().writes(0);
3174 InitReg(MISCREG_ID_MMFR0
)
3175 .allPrivileges().exceptUserMode().writes(0);
3176 InitReg(MISCREG_ID_MMFR1
)
3177 .allPrivileges().exceptUserMode().writes(0);
3178 InitReg(MISCREG_ID_MMFR2
)
3179 .allPrivileges().exceptUserMode().writes(0);
3180 InitReg(MISCREG_ID_MMFR3
)
3181 .allPrivileges().exceptUserMode().writes(0);
3182 InitReg(MISCREG_ID_ISAR0
)
3183 .allPrivileges().exceptUserMode().writes(0);
3184 InitReg(MISCREG_ID_ISAR1
)
3185 .allPrivileges().exceptUserMode().writes(0);
3186 InitReg(MISCREG_ID_ISAR2
)
3187 .allPrivileges().exceptUserMode().writes(0);
3188 InitReg(MISCREG_ID_ISAR3
)
3189 .allPrivileges().exceptUserMode().writes(0);
3190 InitReg(MISCREG_ID_ISAR4
)
3191 .allPrivileges().exceptUserMode().writes(0);
3192 InitReg(MISCREG_ID_ISAR5
)
3193 .allPrivileges().exceptUserMode().writes(0);
3194 InitReg(MISCREG_CCSIDR
)
3195 .allPrivileges().exceptUserMode().writes(0);
3196 InitReg(MISCREG_CLIDR
)
3197 .allPrivileges().exceptUserMode().writes(0);
3198 InitReg(MISCREG_AIDR
)
3199 .allPrivileges().exceptUserMode().writes(0);
3200 InitReg(MISCREG_CSSELR
)
3202 InitReg(MISCREG_CSSELR_NS
)
3204 .privSecure(!aarch32EL3
)
3205 .nonSecure().exceptUserMode();
3206 InitReg(MISCREG_CSSELR_S
)
3208 .secure().exceptUserMode();
3209 InitReg(MISCREG_VPIDR
)
3210 .hyp().monNonSecure();
3211 InitReg(MISCREG_VMPIDR
)
3212 .hyp().monNonSecure();
3213 InitReg(MISCREG_SCTLR
)
3215 // readMiscRegNoEffect() uses this metadata
3216 // despite using children (below) as backing store
3218 .res1(0x00400800 | (SPAN
? 0 : 0x800000)
3219 | (LSMAOE
? 0 : 0x10)
3220 | (nTLSMD
? 0 : 0x8));
3221 InitReg(MISCREG_SCTLR_NS
)
3223 .privSecure(!aarch32EL3
)
3224 .nonSecure().exceptUserMode();
3225 InitReg(MISCREG_SCTLR_S
)
3227 .secure().exceptUserMode();
3228 InitReg(MISCREG_ACTLR
)
3230 InitReg(MISCREG_ACTLR_NS
)
3232 .privSecure(!aarch32EL3
)
3233 .nonSecure().exceptUserMode();
3234 InitReg(MISCREG_ACTLR_S
)
3236 .secure().exceptUserMode();
3237 InitReg(MISCREG_CPACR
)
3238 .allPrivileges().exceptUserMode();
3239 InitReg(MISCREG_SCR
)
3240 .mon().secure().exceptUserMode()
3241 .res0(0xff40) // [31:16], [6]
3242 .res1(0x0030); // [5:4]
3243 InitReg(MISCREG_SDER
)
3245 InitReg(MISCREG_NSACR
)
3246 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3247 InitReg(MISCREG_HSCTLR
)
3248 .hyp().monNonSecure()
3249 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
3250 | (IESB
? 0 : 0x200000)
3251 | (EnDA
? 0 : 0x8000000)
3252 | (EnIB
? 0 : 0x40000000)
3253 | (EnIA
? 0 : 0x80000000))
3255 InitReg(MISCREG_HACTLR
)
3256 .hyp().monNonSecure();
3257 InitReg(MISCREG_HCR
)
3258 .hyp().monNonSecure()
3260 InitReg(MISCREG_HCR2
)
3261 .hyp().monNonSecure()
3263 InitReg(MISCREG_HDCR
)
3264 .hyp().monNonSecure();
3265 InitReg(MISCREG_HCPTR
)
3266 .hyp().monNonSecure();
3267 InitReg(MISCREG_HSTR
)
3268 .hyp().monNonSecure();
3269 InitReg(MISCREG_HACR
)
3272 .hyp().monNonSecure();
3273 InitReg(MISCREG_TTBR0
)
3275 InitReg(MISCREG_TTBR0_NS
)
3277 .privSecure(!aarch32EL3
)
3278 .nonSecure().exceptUserMode();
3279 InitReg(MISCREG_TTBR0_S
)
3281 .secure().exceptUserMode();
3282 InitReg(MISCREG_TTBR1
)
3284 InitReg(MISCREG_TTBR1_NS
)
3286 .privSecure(!aarch32EL3
)
3287 .nonSecure().exceptUserMode();
3288 InitReg(MISCREG_TTBR1_S
)
3290 .secure().exceptUserMode();
3291 InitReg(MISCREG_TTBCR
)
3293 InitReg(MISCREG_TTBCR_NS
)
3295 .privSecure(!aarch32EL3
)
3296 .nonSecure().exceptUserMode();
3297 InitReg(MISCREG_TTBCR_S
)
3299 .secure().exceptUserMode();
3300 InitReg(MISCREG_HTCR
)
3301 .hyp().monNonSecure();
3302 InitReg(MISCREG_VTCR
)
3303 .hyp().monNonSecure();
3304 InitReg(MISCREG_DACR
)
3306 InitReg(MISCREG_DACR_NS
)
3308 .privSecure(!aarch32EL3
)
3309 .nonSecure().exceptUserMode();
3310 InitReg(MISCREG_DACR_S
)
3312 .secure().exceptUserMode();
3313 InitReg(MISCREG_DFSR
)
3315 InitReg(MISCREG_DFSR_NS
)
3317 .privSecure(!aarch32EL3
)
3318 .nonSecure().exceptUserMode();
3319 InitReg(MISCREG_DFSR_S
)
3321 .secure().exceptUserMode();
3322 InitReg(MISCREG_IFSR
)
3324 InitReg(MISCREG_IFSR_NS
)
3326 .privSecure(!aarch32EL3
)
3327 .nonSecure().exceptUserMode();
3328 InitReg(MISCREG_IFSR_S
)
3330 .secure().exceptUserMode();
3331 InitReg(MISCREG_ADFSR
)
3335 InitReg(MISCREG_ADFSR_NS
)
3339 .privSecure(!aarch32EL3
)
3340 .nonSecure().exceptUserMode();
3341 InitReg(MISCREG_ADFSR_S
)
3345 .secure().exceptUserMode();
3346 InitReg(MISCREG_AIFSR
)
3350 InitReg(MISCREG_AIFSR_NS
)
3354 .privSecure(!aarch32EL3
)
3355 .nonSecure().exceptUserMode();
3356 InitReg(MISCREG_AIFSR_S
)
3360 .secure().exceptUserMode();
3361 InitReg(MISCREG_HADFSR
)
3362 .hyp().monNonSecure();
3363 InitReg(MISCREG_HAIFSR
)
3364 .hyp().monNonSecure();
3365 InitReg(MISCREG_HSR
)
3366 .hyp().monNonSecure();
3367 InitReg(MISCREG_DFAR
)
3369 InitReg(MISCREG_DFAR_NS
)
3371 .privSecure(!aarch32EL3
)
3372 .nonSecure().exceptUserMode();
3373 InitReg(MISCREG_DFAR_S
)
3375 .secure().exceptUserMode();
3376 InitReg(MISCREG_IFAR
)
3378 InitReg(MISCREG_IFAR_NS
)
3380 .privSecure(!aarch32EL3
)
3381 .nonSecure().exceptUserMode();
3382 InitReg(MISCREG_IFAR_S
)
3384 .secure().exceptUserMode();
3385 InitReg(MISCREG_HDFAR
)
3386 .hyp().monNonSecure();
3387 InitReg(MISCREG_HIFAR
)
3388 .hyp().monNonSecure();
3389 InitReg(MISCREG_HPFAR
)
3390 .hyp().monNonSecure();
3391 InitReg(MISCREG_ICIALLUIS
)
3394 .writes(1).exceptUserMode();
3395 InitReg(MISCREG_BPIALLIS
)
3398 .writes(1).exceptUserMode();
3399 InitReg(MISCREG_PAR
)
3401 InitReg(MISCREG_PAR_NS
)
3403 .privSecure(!aarch32EL3
)
3404 .nonSecure().exceptUserMode();
3405 InitReg(MISCREG_PAR_S
)
3407 .secure().exceptUserMode();
3408 InitReg(MISCREG_ICIALLU
)
3409 .writes(1).exceptUserMode();
3410 InitReg(MISCREG_ICIMVAU
)
3413 .writes(1).exceptUserMode();
3414 InitReg(MISCREG_CP15ISB
)
3416 InitReg(MISCREG_BPIALL
)
3419 .writes(1).exceptUserMode();
3420 InitReg(MISCREG_BPIMVA
)
3423 .writes(1).exceptUserMode();
3424 InitReg(MISCREG_DCIMVAC
)
3427 .writes(1).exceptUserMode();
3428 InitReg(MISCREG_DCISW
)
3431 .writes(1).exceptUserMode();
3432 InitReg(MISCREG_ATS1CPR
)
3433 .writes(1).exceptUserMode();
3434 InitReg(MISCREG_ATS1CPW
)
3435 .writes(1).exceptUserMode();
3436 InitReg(MISCREG_ATS1CUR
)
3437 .writes(1).exceptUserMode();
3438 InitReg(MISCREG_ATS1CUW
)
3439 .writes(1).exceptUserMode();
3440 InitReg(MISCREG_ATS12NSOPR
)
3441 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3442 InitReg(MISCREG_ATS12NSOPW
)
3443 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3444 InitReg(MISCREG_ATS12NSOUR
)
3445 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3446 InitReg(MISCREG_ATS12NSOUW
)
3447 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3448 InitReg(MISCREG_DCCMVAC
)
3449 .writes(1).exceptUserMode();
3450 InitReg(MISCREG_DCCSW
)
3453 .writes(1).exceptUserMode();
3454 InitReg(MISCREG_CP15DSB
)
3456 InitReg(MISCREG_CP15DMB
)
3458 InitReg(MISCREG_DCCMVAU
)
3461 .writes(1).exceptUserMode();
3462 InitReg(MISCREG_DCCIMVAC
)
3465 .writes(1).exceptUserMode();
3466 InitReg(MISCREG_DCCISW
)
3469 .writes(1).exceptUserMode();
3470 InitReg(MISCREG_ATS1HR
)
3471 .monNonSecureWrite().hypWrite();
3472 InitReg(MISCREG_ATS1HW
)
3473 .monNonSecureWrite().hypWrite();
3474 InitReg(MISCREG_TLBIALLIS
)
3475 .writes(1).exceptUserMode();
3476 InitReg(MISCREG_TLBIMVAIS
)
3477 .writes(1).exceptUserMode();
3478 InitReg(MISCREG_TLBIASIDIS
)
3479 .writes(1).exceptUserMode();
3480 InitReg(MISCREG_TLBIMVAAIS
)
3481 .writes(1).exceptUserMode();
3482 InitReg(MISCREG_TLBIMVALIS
)
3483 .writes(1).exceptUserMode();
3484 InitReg(MISCREG_TLBIMVAALIS
)
3485 .writes(1).exceptUserMode();
3486 InitReg(MISCREG_ITLBIALL
)
3487 .writes(1).exceptUserMode();
3488 InitReg(MISCREG_ITLBIMVA
)
3489 .writes(1).exceptUserMode();
3490 InitReg(MISCREG_ITLBIASID
)
3491 .writes(1).exceptUserMode();
3492 InitReg(MISCREG_DTLBIALL
)
3493 .writes(1).exceptUserMode();
3494 InitReg(MISCREG_DTLBIMVA
)
3495 .writes(1).exceptUserMode();
3496 InitReg(MISCREG_DTLBIASID
)
3497 .writes(1).exceptUserMode();
3498 InitReg(MISCREG_TLBIALL
)
3499 .writes(1).exceptUserMode();
3500 InitReg(MISCREG_TLBIMVA
)
3501 .writes(1).exceptUserMode();
3502 InitReg(MISCREG_TLBIASID
)
3503 .writes(1).exceptUserMode();
3504 InitReg(MISCREG_TLBIMVAA
)
3505 .writes(1).exceptUserMode();
3506 InitReg(MISCREG_TLBIMVAL
)
3507 .writes(1).exceptUserMode();
3508 InitReg(MISCREG_TLBIMVAAL
)
3509 .writes(1).exceptUserMode();
3510 InitReg(MISCREG_TLBIIPAS2IS
)
3511 .monNonSecureWrite().hypWrite();
3512 InitReg(MISCREG_TLBIIPAS2LIS
)
3513 .monNonSecureWrite().hypWrite();
3514 InitReg(MISCREG_TLBIALLHIS
)
3515 .monNonSecureWrite().hypWrite();
3516 InitReg(MISCREG_TLBIMVAHIS
)
3517 .monNonSecureWrite().hypWrite();
3518 InitReg(MISCREG_TLBIALLNSNHIS
)
3519 .monNonSecureWrite().hypWrite();
3520 InitReg(MISCREG_TLBIMVALHIS
)
3521 .monNonSecureWrite().hypWrite();
3522 InitReg(MISCREG_TLBIIPAS2
)
3523 .monNonSecureWrite().hypWrite();
3524 InitReg(MISCREG_TLBIIPAS2L
)
3525 .monNonSecureWrite().hypWrite();
3526 InitReg(MISCREG_TLBIALLH
)
3527 .monNonSecureWrite().hypWrite();
3528 InitReg(MISCREG_TLBIMVAH
)
3529 .monNonSecureWrite().hypWrite();
3530 InitReg(MISCREG_TLBIALLNSNH
)
3531 .monNonSecureWrite().hypWrite();
3532 InitReg(MISCREG_TLBIMVALH
)
3533 .monNonSecureWrite().hypWrite();
3534 InitReg(MISCREG_PMCR
)
3536 InitReg(MISCREG_PMCNTENSET
)
3538 InitReg(MISCREG_PMCNTENCLR
)
3540 InitReg(MISCREG_PMOVSR
)
3542 InitReg(MISCREG_PMSWINC
)
3544 InitReg(MISCREG_PMSELR
)
3546 InitReg(MISCREG_PMCEID0
)
3548 InitReg(MISCREG_PMCEID1
)
3550 InitReg(MISCREG_PMCCNTR
)
3552 InitReg(MISCREG_PMXEVTYPER
)
3554 InitReg(MISCREG_PMCCFILTR
)
3556 InitReg(MISCREG_PMXEVCNTR
)
3558 InitReg(MISCREG_PMUSERENR
)
3559 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3560 InitReg(MISCREG_PMINTENSET
)
3561 .allPrivileges().exceptUserMode();
3562 InitReg(MISCREG_PMINTENCLR
)
3563 .allPrivileges().exceptUserMode();
3564 InitReg(MISCREG_PMOVSSET
)
3567 InitReg(MISCREG_L2CTLR
)
3568 .allPrivileges().exceptUserMode();
3569 InitReg(MISCREG_L2ECTLR
)
3571 .allPrivileges().exceptUserMode();
3572 InitReg(MISCREG_PRRR
)
3574 InitReg(MISCREG_PRRR_NS
)
3576 .privSecure(!aarch32EL3
)
3577 .nonSecure().exceptUserMode();
3578 InitReg(MISCREG_PRRR_S
)
3580 .secure().exceptUserMode();
3581 InitReg(MISCREG_MAIR0
)
3583 InitReg(MISCREG_MAIR0_NS
)
3585 .privSecure(!aarch32EL3
)
3586 .nonSecure().exceptUserMode();
3587 InitReg(MISCREG_MAIR0_S
)
3589 .secure().exceptUserMode();
3590 InitReg(MISCREG_NMRR
)
3592 InitReg(MISCREG_NMRR_NS
)
3594 .privSecure(!aarch32EL3
)
3595 .nonSecure().exceptUserMode();
3596 InitReg(MISCREG_NMRR_S
)
3598 .secure().exceptUserMode();
3599 InitReg(MISCREG_MAIR1
)
3601 InitReg(MISCREG_MAIR1_NS
)
3603 .privSecure(!aarch32EL3
)
3604 .nonSecure().exceptUserMode();
3605 InitReg(MISCREG_MAIR1_S
)
3607 .secure().exceptUserMode();
3608 InitReg(MISCREG_AMAIR0
)
3610 InitReg(MISCREG_AMAIR0_NS
)
3612 .privSecure(!aarch32EL3
)
3613 .nonSecure().exceptUserMode();
3614 InitReg(MISCREG_AMAIR0_S
)
3616 .secure().exceptUserMode();
3617 InitReg(MISCREG_AMAIR1
)
3619 InitReg(MISCREG_AMAIR1_NS
)
3621 .privSecure(!aarch32EL3
)
3622 .nonSecure().exceptUserMode();
3623 InitReg(MISCREG_AMAIR1_S
)
3625 .secure().exceptUserMode();
3626 InitReg(MISCREG_HMAIR0
)
3627 .hyp().monNonSecure();
3628 InitReg(MISCREG_HMAIR1
)
3629 .hyp().monNonSecure();
3630 InitReg(MISCREG_HAMAIR0
)
3633 .hyp().monNonSecure();
3634 InitReg(MISCREG_HAMAIR1
)
3637 .hyp().monNonSecure();
3638 InitReg(MISCREG_VBAR
)
3640 InitReg(MISCREG_VBAR_NS
)
3642 .privSecure(!aarch32EL3
)
3643 .nonSecure().exceptUserMode();
3644 InitReg(MISCREG_VBAR_S
)
3646 .secure().exceptUserMode();
3647 InitReg(MISCREG_MVBAR
)
3649 .hypRead(FullSystem
&& system
->highestEL() == EL2
)
3650 .privRead(FullSystem
&& system
->highestEL() == EL1
)
3652 InitReg(MISCREG_RMR
)
3654 .mon().secure().exceptUserMode();
3655 InitReg(MISCREG_ISR
)
3656 .allPrivileges().exceptUserMode().writes(0);
3657 InitReg(MISCREG_HVBAR
)
3658 .hyp().monNonSecure()
3660 InitReg(MISCREG_FCSEIDR
)
3663 .allPrivileges().exceptUserMode();
3664 InitReg(MISCREG_CONTEXTIDR
)
3666 InitReg(MISCREG_CONTEXTIDR_NS
)
3668 .privSecure(!aarch32EL3
)
3669 .nonSecure().exceptUserMode();
3670 InitReg(MISCREG_CONTEXTIDR_S
)
3672 .secure().exceptUserMode();
3673 InitReg(MISCREG_TPIDRURW
)
3675 InitReg(MISCREG_TPIDRURW_NS
)
3678 .privSecure(!aarch32EL3
)
3680 InitReg(MISCREG_TPIDRURW_S
)
3683 InitReg(MISCREG_TPIDRURO
)
3685 InitReg(MISCREG_TPIDRURO_NS
)
3688 .userNonSecureWrite(0).userSecureRead(1)
3689 .privSecure(!aarch32EL3
)
3691 InitReg(MISCREG_TPIDRURO_S
)
3693 .secure().userSecureWrite(0);
3694 InitReg(MISCREG_TPIDRPRW
)
3696 InitReg(MISCREG_TPIDRPRW_NS
)
3698 .nonSecure().exceptUserMode()
3699 .privSecure(!aarch32EL3
);
3700 InitReg(MISCREG_TPIDRPRW_S
)
3702 .secure().exceptUserMode();
3703 InitReg(MISCREG_HTPIDR
)
3704 .hyp().monNonSecure();
3705 InitReg(MISCREG_CNTFRQ
)
3708 .privSecureWrite(aarch32EL3
);
3709 InitReg(MISCREG_CNTKCTL
)
3710 .allPrivileges().exceptUserMode();
3711 InitReg(MISCREG_CNTP_TVAL
)
3713 InitReg(MISCREG_CNTP_TVAL_NS
)
3716 .privSecure(!aarch32EL3
)
3718 InitReg(MISCREG_CNTP_TVAL_S
)
3721 InitReg(MISCREG_CNTP_CTL
)
3723 InitReg(MISCREG_CNTP_CTL_NS
)
3726 .privSecure(!aarch32EL3
)
3728 InitReg(MISCREG_CNTP_CTL_S
)
3731 InitReg(MISCREG_CNTV_TVAL
)
3733 InitReg(MISCREG_CNTV_CTL
)
3735 InitReg(MISCREG_CNTHCTL
)
3736 .hypWrite().monNonSecureRead();
3737 InitReg(MISCREG_CNTHP_TVAL
)
3738 .hypWrite().monNonSecureRead();
3739 InitReg(MISCREG_CNTHP_CTL
)
3740 .hypWrite().monNonSecureRead();
3741 InitReg(MISCREG_IL1DATA0
)
3743 .allPrivileges().exceptUserMode();
3744 InitReg(MISCREG_IL1DATA1
)
3746 .allPrivileges().exceptUserMode();
3747 InitReg(MISCREG_IL1DATA2
)
3749 .allPrivileges().exceptUserMode();
3750 InitReg(MISCREG_IL1DATA3
)
3752 .allPrivileges().exceptUserMode();
3753 InitReg(MISCREG_DL1DATA0
)
3755 .allPrivileges().exceptUserMode();
3756 InitReg(MISCREG_DL1DATA1
)
3758 .allPrivileges().exceptUserMode();
3759 InitReg(MISCREG_DL1DATA2
)
3761 .allPrivileges().exceptUserMode();
3762 InitReg(MISCREG_DL1DATA3
)
3764 .allPrivileges().exceptUserMode();
3765 InitReg(MISCREG_DL1DATA4
)
3767 .allPrivileges().exceptUserMode();
3768 InitReg(MISCREG_RAMINDEX
)
3770 .writes(1).exceptUserMode();
3771 InitReg(MISCREG_L2ACTLR
)
3773 .allPrivileges().exceptUserMode();
3774 InitReg(MISCREG_CBAR
)
3776 .allPrivileges().exceptUserMode().writes(0);
3777 InitReg(MISCREG_HTTBR
)
3778 .hyp().monNonSecure();
3779 InitReg(MISCREG_VTTBR
)
3780 .hyp().monNonSecure();
3781 InitReg(MISCREG_CNTPCT
)
3783 InitReg(MISCREG_CNTVCT
)
3786 InitReg(MISCREG_CNTP_CVAL
)
3788 InitReg(MISCREG_CNTP_CVAL_NS
)
3791 .privSecure(!aarch32EL3
)
3793 InitReg(MISCREG_CNTP_CVAL_S
)
3796 InitReg(MISCREG_CNTV_CVAL
)
3798 InitReg(MISCREG_CNTVOFF
)
3799 .hyp().monNonSecure();
3800 InitReg(MISCREG_CNTHP_CVAL
)
3801 .hypWrite().monNonSecureRead();
3802 InitReg(MISCREG_CPUMERRSR
)
3804 .allPrivileges().exceptUserMode();
3805 InitReg(MISCREG_L2MERRSR
)
3808 .allPrivileges().exceptUserMode();
3810 // AArch64 registers (Op0=2);
3811 InitReg(MISCREG_MDCCINT_EL1
)
3813 InitReg(MISCREG_OSDTRRX_EL1
)
3815 .mapsTo(MISCREG_DBGDTRRXext
);
3816 InitReg(MISCREG_MDSCR_EL1
)
3818 .mapsTo(MISCREG_DBGDSCRext
);
3819 InitReg(MISCREG_OSDTRTX_EL1
)
3821 .mapsTo(MISCREG_DBGDTRTXext
);
3822 InitReg(MISCREG_OSECCR_EL1
)
3824 .mapsTo(MISCREG_DBGOSECCR
);
3825 InitReg(MISCREG_DBGBVR0_EL1
)
3827 .mapsTo(MISCREG_DBGBVR0
/*, MISCREG_DBGBXVR0 */);
3828 InitReg(MISCREG_DBGBVR1_EL1
)
3830 .mapsTo(MISCREG_DBGBVR1
/*, MISCREG_DBGBXVR1 */);
3831 InitReg(MISCREG_DBGBVR2_EL1
)
3833 .mapsTo(MISCREG_DBGBVR2
/*, MISCREG_DBGBXVR2 */);
3834 InitReg(MISCREG_DBGBVR3_EL1
)
3836 .mapsTo(MISCREG_DBGBVR3
/*, MISCREG_DBGBXVR3 */);
3837 InitReg(MISCREG_DBGBVR4_EL1
)
3839 .mapsTo(MISCREG_DBGBVR4
/*, MISCREG_DBGBXVR4 */);
3840 InitReg(MISCREG_DBGBVR5_EL1
)
3842 .mapsTo(MISCREG_DBGBVR5
/*, MISCREG_DBGBXVR5 */);
3843 InitReg(MISCREG_DBGBCR0_EL1
)
3845 .mapsTo(MISCREG_DBGBCR0
);
3846 InitReg(MISCREG_DBGBCR1_EL1
)
3848 .mapsTo(MISCREG_DBGBCR1
);
3849 InitReg(MISCREG_DBGBCR2_EL1
)
3851 .mapsTo(MISCREG_DBGBCR2
);
3852 InitReg(MISCREG_DBGBCR3_EL1
)
3854 .mapsTo(MISCREG_DBGBCR3
);
3855 InitReg(MISCREG_DBGBCR4_EL1
)
3857 .mapsTo(MISCREG_DBGBCR4
);
3858 InitReg(MISCREG_DBGBCR5_EL1
)
3860 .mapsTo(MISCREG_DBGBCR5
);
3861 InitReg(MISCREG_DBGWVR0_EL1
)
3863 .mapsTo(MISCREG_DBGWVR0
);
3864 InitReg(MISCREG_DBGWVR1_EL1
)
3866 .mapsTo(MISCREG_DBGWVR1
);
3867 InitReg(MISCREG_DBGWVR2_EL1
)
3869 .mapsTo(MISCREG_DBGWVR2
);
3870 InitReg(MISCREG_DBGWVR3_EL1
)
3872 .mapsTo(MISCREG_DBGWVR3
);
3873 InitReg(MISCREG_DBGWCR0_EL1
)
3875 .mapsTo(MISCREG_DBGWCR0
);
3876 InitReg(MISCREG_DBGWCR1_EL1
)
3878 .mapsTo(MISCREG_DBGWCR1
);
3879 InitReg(MISCREG_DBGWCR2_EL1
)
3881 .mapsTo(MISCREG_DBGWCR2
);
3882 InitReg(MISCREG_DBGWCR3_EL1
)
3884 .mapsTo(MISCREG_DBGWCR3
);
3885 InitReg(MISCREG_MDCCSR_EL0
)
3886 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3887 .mapsTo(MISCREG_DBGDSCRint
);
3888 InitReg(MISCREG_MDDTR_EL0
)
3890 InitReg(MISCREG_MDDTRTX_EL0
)
3892 InitReg(MISCREG_MDDTRRX_EL0
)
3894 InitReg(MISCREG_DBGVCR32_EL2
)
3896 .mapsTo(MISCREG_DBGVCR
);
3897 InitReg(MISCREG_MDRAR_EL1
)
3898 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3899 .mapsTo(MISCREG_DBGDRAR
);
3900 InitReg(MISCREG_OSLAR_EL1
)
3901 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3902 .mapsTo(MISCREG_DBGOSLAR
);
3903 InitReg(MISCREG_OSLSR_EL1
)
3904 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3905 .mapsTo(MISCREG_DBGOSLSR
);
3906 InitReg(MISCREG_OSDLR_EL1
)
3908 .mapsTo(MISCREG_DBGOSDLR
);
3909 InitReg(MISCREG_DBGPRCR_EL1
)
3911 .mapsTo(MISCREG_DBGPRCR
);
3912 InitReg(MISCREG_DBGCLAIMSET_EL1
)
3914 .mapsTo(MISCREG_DBGCLAIMSET
);
3915 InitReg(MISCREG_DBGCLAIMCLR_EL1
)
3917 .mapsTo(MISCREG_DBGCLAIMCLR
);
3918 InitReg(MISCREG_DBGAUTHSTATUS_EL1
)
3919 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3920 .mapsTo(MISCREG_DBGAUTHSTATUS
);
3921 InitReg(MISCREG_TEECR32_EL1
);
3922 InitReg(MISCREG_TEEHBR32_EL1
);
3924 // AArch64 registers (Op0=1,3);
3925 InitReg(MISCREG_MIDR_EL1
)
3926 .allPrivileges().exceptUserMode().writes(0);
3927 InitReg(MISCREG_MPIDR_EL1
)
3928 .allPrivileges().exceptUserMode().writes(0);
3929 InitReg(MISCREG_REVIDR_EL1
)
3930 .allPrivileges().exceptUserMode().writes(0);
3931 InitReg(MISCREG_ID_PFR0_EL1
)
3932 .allPrivileges().exceptUserMode().writes(0)
3933 .mapsTo(MISCREG_ID_PFR0
);
3934 InitReg(MISCREG_ID_PFR1_EL1
)
3935 .allPrivileges().exceptUserMode().writes(0)
3936 .mapsTo(MISCREG_ID_PFR1
);
3937 InitReg(MISCREG_ID_DFR0_EL1
)
3938 .allPrivileges().exceptUserMode().writes(0)
3939 .mapsTo(MISCREG_ID_DFR0
);
3940 InitReg(MISCREG_ID_AFR0_EL1
)
3941 .allPrivileges().exceptUserMode().writes(0)
3942 .mapsTo(MISCREG_ID_AFR0
);
3943 InitReg(MISCREG_ID_MMFR0_EL1
)
3944 .allPrivileges().exceptUserMode().writes(0)
3945 .mapsTo(MISCREG_ID_MMFR0
);
3946 InitReg(MISCREG_ID_MMFR1_EL1
)
3947 .allPrivileges().exceptUserMode().writes(0)
3948 .mapsTo(MISCREG_ID_MMFR1
);
3949 InitReg(MISCREG_ID_MMFR2_EL1
)
3950 .allPrivileges().exceptUserMode().writes(0)
3951 .mapsTo(MISCREG_ID_MMFR2
);
3952 InitReg(MISCREG_ID_MMFR3_EL1
)
3953 .allPrivileges().exceptUserMode().writes(0)
3954 .mapsTo(MISCREG_ID_MMFR3
);
3955 InitReg(MISCREG_ID_ISAR0_EL1
)
3956 .allPrivileges().exceptUserMode().writes(0)
3957 .mapsTo(MISCREG_ID_ISAR0
);
3958 InitReg(MISCREG_ID_ISAR1_EL1
)
3959 .allPrivileges().exceptUserMode().writes(0)
3960 .mapsTo(MISCREG_ID_ISAR1
);
3961 InitReg(MISCREG_ID_ISAR2_EL1
)
3962 .allPrivileges().exceptUserMode().writes(0)
3963 .mapsTo(MISCREG_ID_ISAR2
);
3964 InitReg(MISCREG_ID_ISAR3_EL1
)
3965 .allPrivileges().exceptUserMode().writes(0)
3966 .mapsTo(MISCREG_ID_ISAR3
);
3967 InitReg(MISCREG_ID_ISAR4_EL1
)
3968 .allPrivileges().exceptUserMode().writes(0)
3969 .mapsTo(MISCREG_ID_ISAR4
);
3970 InitReg(MISCREG_ID_ISAR5_EL1
)
3971 .allPrivileges().exceptUserMode().writes(0)
3972 .mapsTo(MISCREG_ID_ISAR5
);
3973 InitReg(MISCREG_MVFR0_EL1
)
3974 .allPrivileges().exceptUserMode().writes(0);
3975 InitReg(MISCREG_MVFR1_EL1
)
3976 .allPrivileges().exceptUserMode().writes(0);
3977 InitReg(MISCREG_MVFR2_EL1
)
3978 .allPrivileges().exceptUserMode().writes(0);
3979 InitReg(MISCREG_ID_AA64PFR0_EL1
)
3980 .allPrivileges().exceptUserMode().writes(0);
3981 InitReg(MISCREG_ID_AA64PFR1_EL1
)
3982 .allPrivileges().exceptUserMode().writes(0);
3983 InitReg(MISCREG_ID_AA64DFR0_EL1
)
3984 .allPrivileges().exceptUserMode().writes(0);
3985 InitReg(MISCREG_ID_AA64DFR1_EL1
)
3986 .allPrivileges().exceptUserMode().writes(0);
3987 InitReg(MISCREG_ID_AA64AFR0_EL1
)
3988 .allPrivileges().exceptUserMode().writes(0);
3989 InitReg(MISCREG_ID_AA64AFR1_EL1
)
3990 .allPrivileges().exceptUserMode().writes(0);
3991 InitReg(MISCREG_ID_AA64ISAR0_EL1
)
3992 .allPrivileges().exceptUserMode().writes(0);
3993 InitReg(MISCREG_ID_AA64ISAR1_EL1
)
3994 .allPrivileges().exceptUserMode().writes(0);
3995 InitReg(MISCREG_ID_AA64MMFR0_EL1
)
3996 .allPrivileges().exceptUserMode().writes(0);
3997 InitReg(MISCREG_ID_AA64MMFR1_EL1
)
3998 .allPrivileges().exceptUserMode().writes(0);
3999 InitReg(MISCREG_ID_AA64MMFR2_EL1
)
4000 .allPrivileges().exceptUserMode().writes(0);
4002 InitReg(MISCREG_APDAKeyHi_EL1
)
4003 .allPrivileges().exceptUserMode();
4004 InitReg(MISCREG_APDAKeyLo_EL1
)
4005 .allPrivileges().exceptUserMode();
4006 InitReg(MISCREG_APDBKeyHi_EL1
)
4007 .allPrivileges().exceptUserMode();
4008 InitReg(MISCREG_APDBKeyLo_EL1
)
4009 .allPrivileges().exceptUserMode();
4010 InitReg(MISCREG_APGAKeyHi_EL1
)
4011 .allPrivileges().exceptUserMode();
4012 InitReg(MISCREG_APGAKeyLo_EL1
)
4013 .allPrivileges().exceptUserMode();
4014 InitReg(MISCREG_APIAKeyHi_EL1
)
4015 .allPrivileges().exceptUserMode();
4016 InitReg(MISCREG_APIAKeyLo_EL1
)
4017 .allPrivileges().exceptUserMode();
4018 InitReg(MISCREG_APIBKeyHi_EL1
)
4019 .allPrivileges().exceptUserMode();
4020 InitReg(MISCREG_APIBKeyLo_EL1
)
4021 .allPrivileges().exceptUserMode();
4023 InitReg(MISCREG_CCSIDR_EL1
)
4024 .allPrivileges().exceptUserMode().writes(0);
4025 InitReg(MISCREG_CLIDR_EL1
)
4026 .allPrivileges().exceptUserMode().writes(0);
4027 InitReg(MISCREG_AIDR_EL1
)
4028 .allPrivileges().exceptUserMode().writes(0);
4029 InitReg(MISCREG_CSSELR_EL1
)
4030 .allPrivileges().exceptUserMode()
4031 .mapsTo(MISCREG_CSSELR_NS
);
4032 InitReg(MISCREG_CTR_EL0
)
4034 InitReg(MISCREG_DCZID_EL0
)
4036 InitReg(MISCREG_VPIDR_EL2
)
4038 .mapsTo(MISCREG_VPIDR
);
4039 InitReg(MISCREG_VMPIDR_EL2
)
4041 .mapsTo(MISCREG_VMPIDR
);
4042 InitReg(MISCREG_SCTLR_EL1
)
4043 .allPrivileges().exceptUserMode()
4044 .res0( 0x20440 | (EnDB
? 0 : 0x2000)
4045 | (IESB
? 0 : 0x200000)
4046 | (EnDA
? 0 : 0x8000000)
4047 | (EnIB
? 0 : 0x40000000)
4048 | (EnIA
? 0 : 0x80000000))
4049 .res1(0x500800 | (SPAN
? 0 : 0x800000)
4050 | (nTLSMD
? 0 : 0x8000000)
4051 | (LSMAOE
? 0 : 0x10000000))
4052 .mapsTo(MISCREG_SCTLR_NS
);
4053 InitReg(MISCREG_ACTLR_EL1
)
4054 .allPrivileges().exceptUserMode()
4055 .mapsTo(MISCREG_ACTLR_NS
);
4056 InitReg(MISCREG_CPACR_EL1
)
4057 .allPrivileges().exceptUserMode()
4058 .mapsTo(MISCREG_CPACR
);
4059 InitReg(MISCREG_SCTLR_EL2
)
4061 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4062 | (IESB
? 0 : 0x200000)
4063 | (EnDA
? 0 : 0x8000000)
4064 | (EnIB
? 0 : 0x40000000)
4065 | (EnIA
? 0 : 0x80000000))
4067 .mapsTo(MISCREG_HSCTLR
);
4068 InitReg(MISCREG_ACTLR_EL2
)
4070 .mapsTo(MISCREG_HACTLR
);
4071 InitReg(MISCREG_HCR_EL2
)
4073 .mapsTo(MISCREG_HCR
, MISCREG_HCR2
);
4074 InitReg(MISCREG_MDCR_EL2
)
4076 .mapsTo(MISCREG_HDCR
);
4077 InitReg(MISCREG_CPTR_EL2
)
4079 .mapsTo(MISCREG_HCPTR
);
4080 InitReg(MISCREG_HSTR_EL2
)
4082 .mapsTo(MISCREG_HSTR
);
4083 InitReg(MISCREG_HACR_EL2
)
4085 .mapsTo(MISCREG_HACR
);
4086 InitReg(MISCREG_SCTLR_EL3
)
4088 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4089 | (IESB
? 0 : 0x200000)
4090 | (EnDA
? 0 : 0x8000000)
4091 | (EnIB
? 0 : 0x40000000)
4092 | (EnIA
? 0 : 0x80000000))
4094 InitReg(MISCREG_ACTLR_EL3
)
4096 InitReg(MISCREG_SCR_EL3
)
4098 .mapsTo(MISCREG_SCR
); // NAM D7-2005
4099 InitReg(MISCREG_SDER32_EL3
)
4101 .mapsTo(MISCREG_SDER
);
4102 InitReg(MISCREG_CPTR_EL3
)
4104 InitReg(MISCREG_MDCR_EL3
)
4106 InitReg(MISCREG_TTBR0_EL1
)
4107 .allPrivileges().exceptUserMode()
4108 .mapsTo(MISCREG_TTBR0_NS
);
4109 InitReg(MISCREG_TTBR1_EL1
)
4110 .allPrivileges().exceptUserMode()
4111 .mapsTo(MISCREG_TTBR1_NS
);
4112 InitReg(MISCREG_TCR_EL1
)
4113 .allPrivileges().exceptUserMode()
4114 .mapsTo(MISCREG_TTBCR_NS
);
4115 InitReg(MISCREG_TTBR0_EL2
)
4117 .mapsTo(MISCREG_HTTBR
);
4118 InitReg(MISCREG_TTBR1_EL2
)
4120 InitReg(MISCREG_TCR_EL2
)
4122 .mapsTo(MISCREG_HTCR
);
4123 InitReg(MISCREG_VTTBR_EL2
)
4125 .mapsTo(MISCREG_VTTBR
);
4126 InitReg(MISCREG_VTCR_EL2
)
4128 .mapsTo(MISCREG_VTCR
);
4129 InitReg(MISCREG_TTBR0_EL3
)
4131 InitReg(MISCREG_TCR_EL3
)
4133 InitReg(MISCREG_DACR32_EL2
)
4135 .mapsTo(MISCREG_DACR_NS
);
4136 InitReg(MISCREG_SPSR_EL1
)
4137 .allPrivileges().exceptUserMode()
4138 .mapsTo(MISCREG_SPSR_SVC
); // NAM C5.2.17 SPSR_EL1
4139 InitReg(MISCREG_ELR_EL1
)
4140 .allPrivileges().exceptUserMode();
4141 InitReg(MISCREG_SP_EL0
)
4142 .allPrivileges().exceptUserMode();
4143 InitReg(MISCREG_SPSEL
)
4144 .allPrivileges().exceptUserMode();
4145 InitReg(MISCREG_CURRENTEL
)
4146 .allPrivileges().exceptUserMode().writes(0);
4147 InitReg(MISCREG_PAN
)
4148 .allPrivileges().exceptUserMode()
4149 .implemented(havePAN
);
4150 InitReg(MISCREG_NZCV
)
4152 InitReg(MISCREG_DAIF
)
4154 InitReg(MISCREG_FPCR
)
4156 InitReg(MISCREG_FPSR
)
4158 InitReg(MISCREG_DSPSR_EL0
)
4160 InitReg(MISCREG_DLR_EL0
)
4162 InitReg(MISCREG_SPSR_EL2
)
4164 .mapsTo(MISCREG_SPSR_HYP
); // NAM C5.2.18 SPSR_EL2
4165 InitReg(MISCREG_ELR_EL2
)
4167 InitReg(MISCREG_SP_EL1
)
4169 InitReg(MISCREG_SPSR_IRQ_AA64
)
4171 InitReg(MISCREG_SPSR_ABT_AA64
)
4173 InitReg(MISCREG_SPSR_UND_AA64
)
4175 InitReg(MISCREG_SPSR_FIQ_AA64
)
4177 InitReg(MISCREG_SPSR_EL3
)
4179 .mapsTo(MISCREG_SPSR_MON
); // NAM C5.2.19 SPSR_EL3
4180 InitReg(MISCREG_ELR_EL3
)
4182 InitReg(MISCREG_SP_EL2
)
4184 InitReg(MISCREG_AFSR0_EL1
)
4185 .allPrivileges().exceptUserMode()
4186 .mapsTo(MISCREG_ADFSR_NS
);
4187 InitReg(MISCREG_AFSR1_EL1
)
4188 .allPrivileges().exceptUserMode()
4189 .mapsTo(MISCREG_AIFSR_NS
);
4190 InitReg(MISCREG_ESR_EL1
)
4191 .allPrivileges().exceptUserMode();
4192 InitReg(MISCREG_IFSR32_EL2
)
4194 .mapsTo(MISCREG_IFSR_NS
);
4195 InitReg(MISCREG_AFSR0_EL2
)
4197 .mapsTo(MISCREG_HADFSR
);
4198 InitReg(MISCREG_AFSR1_EL2
)
4200 .mapsTo(MISCREG_HAIFSR
);
4201 InitReg(MISCREG_ESR_EL2
)
4203 .mapsTo(MISCREG_HSR
);
4204 InitReg(MISCREG_FPEXC32_EL2
)
4205 .hyp().mon().mapsTo(MISCREG_FPEXC
);
4206 InitReg(MISCREG_AFSR0_EL3
)
4208 InitReg(MISCREG_AFSR1_EL3
)
4210 InitReg(MISCREG_ESR_EL3
)
4212 InitReg(MISCREG_FAR_EL1
)
4213 .allPrivileges().exceptUserMode()
4214 .mapsTo(MISCREG_DFAR_NS
, MISCREG_IFAR_NS
);
4215 InitReg(MISCREG_FAR_EL2
)
4217 .mapsTo(MISCREG_HDFAR
, MISCREG_HIFAR
);
4218 InitReg(MISCREG_HPFAR_EL2
)
4220 .mapsTo(MISCREG_HPFAR
);
4221 InitReg(MISCREG_FAR_EL3
)
4223 InitReg(MISCREG_IC_IALLUIS
)
4225 .writes(1).exceptUserMode();
4226 InitReg(MISCREG_PAR_EL1
)
4227 .allPrivileges().exceptUserMode()
4228 .mapsTo(MISCREG_PAR_NS
);
4229 InitReg(MISCREG_IC_IALLU
)
4231 .writes(1).exceptUserMode();
4232 InitReg(MISCREG_DC_IVAC_Xt
)
4234 .writes(1).exceptUserMode();
4235 InitReg(MISCREG_DC_ISW_Xt
)
4237 .writes(1).exceptUserMode();
4238 InitReg(MISCREG_AT_S1E1R_Xt
)
4239 .writes(1).exceptUserMode();
4240 InitReg(MISCREG_AT_S1E1W_Xt
)
4241 .writes(1).exceptUserMode();
4242 InitReg(MISCREG_AT_S1E0R_Xt
)
4243 .writes(1).exceptUserMode();
4244 InitReg(MISCREG_AT_S1E0W_Xt
)
4245 .writes(1).exceptUserMode();
4246 InitReg(MISCREG_DC_CSW_Xt
)
4248 .writes(1).exceptUserMode();
4249 InitReg(MISCREG_DC_CISW_Xt
)
4251 .writes(1).exceptUserMode();
4252 InitReg(MISCREG_DC_ZVA_Xt
)
4254 .writes(1).userSecureWrite(0);
4255 InitReg(MISCREG_IC_IVAU_Xt
)
4257 InitReg(MISCREG_DC_CVAC_Xt
)
4260 InitReg(MISCREG_DC_CVAU_Xt
)
4263 InitReg(MISCREG_DC_CIVAC_Xt
)
4266 InitReg(MISCREG_AT_S1E2R_Xt
)
4267 .monNonSecureWrite().hypWrite();
4268 InitReg(MISCREG_AT_S1E2W_Xt
)
4269 .monNonSecureWrite().hypWrite();
4270 InitReg(MISCREG_AT_S12E1R_Xt
)
4271 .hypWrite().monSecureWrite().monNonSecureWrite();
4272 InitReg(MISCREG_AT_S12E1W_Xt
)
4273 .hypWrite().monSecureWrite().monNonSecureWrite();
4274 InitReg(MISCREG_AT_S12E0R_Xt
)
4275 .hypWrite().monSecureWrite().monNonSecureWrite();
4276 InitReg(MISCREG_AT_S12E0W_Xt
)
4277 .hypWrite().monSecureWrite().monNonSecureWrite();
4278 InitReg(MISCREG_AT_S1E3R_Xt
)
4279 .monSecureWrite().monNonSecureWrite();
4280 InitReg(MISCREG_AT_S1E3W_Xt
)
4281 .monSecureWrite().monNonSecureWrite();
4282 InitReg(MISCREG_TLBI_VMALLE1IS
)
4283 .writes(1).exceptUserMode();
4284 InitReg(MISCREG_TLBI_VAE1IS_Xt
)
4285 .writes(1).exceptUserMode();
4286 InitReg(MISCREG_TLBI_ASIDE1IS_Xt
)
4287 .writes(1).exceptUserMode();
4288 InitReg(MISCREG_TLBI_VAAE1IS_Xt
)
4289 .writes(1).exceptUserMode();
4290 InitReg(MISCREG_TLBI_VALE1IS_Xt
)
4291 .writes(1).exceptUserMode();
4292 InitReg(MISCREG_TLBI_VAALE1IS_Xt
)
4293 .writes(1).exceptUserMode();
4294 InitReg(MISCREG_TLBI_VMALLE1
)
4295 .writes(1).exceptUserMode();
4296 InitReg(MISCREG_TLBI_VAE1_Xt
)
4297 .writes(1).exceptUserMode();
4298 InitReg(MISCREG_TLBI_ASIDE1_Xt
)
4299 .writes(1).exceptUserMode();
4300 InitReg(MISCREG_TLBI_VAAE1_Xt
)
4301 .writes(1).exceptUserMode();
4302 InitReg(MISCREG_TLBI_VALE1_Xt
)
4303 .writes(1).exceptUserMode();
4304 InitReg(MISCREG_TLBI_VAALE1_Xt
)
4305 .writes(1).exceptUserMode();
4306 InitReg(MISCREG_TLBI_IPAS2E1IS_Xt
)
4307 .hypWrite().monSecureWrite().monNonSecureWrite();
4308 InitReg(MISCREG_TLBI_IPAS2LE1IS_Xt
)
4309 .hypWrite().monSecureWrite().monNonSecureWrite();
4310 InitReg(MISCREG_TLBI_ALLE2IS
)
4311 .monNonSecureWrite().hypWrite();
4312 InitReg(MISCREG_TLBI_VAE2IS_Xt
)
4313 .monNonSecureWrite().hypWrite();
4314 InitReg(MISCREG_TLBI_ALLE1IS
)
4315 .hypWrite().monSecureWrite().monNonSecureWrite();
4316 InitReg(MISCREG_TLBI_VALE2IS_Xt
)
4317 .monNonSecureWrite().hypWrite();
4318 InitReg(MISCREG_TLBI_VMALLS12E1IS
)
4319 .hypWrite().monSecureWrite().monNonSecureWrite();
4320 InitReg(MISCREG_TLBI_IPAS2E1_Xt
)
4321 .hypWrite().monSecureWrite().monNonSecureWrite();
4322 InitReg(MISCREG_TLBI_IPAS2LE1_Xt
)
4323 .hypWrite().monSecureWrite().monNonSecureWrite();
4324 InitReg(MISCREG_TLBI_ALLE2
)
4325 .monNonSecureWrite().hypWrite();
4326 InitReg(MISCREG_TLBI_VAE2_Xt
)
4327 .monNonSecureWrite().hypWrite();
4328 InitReg(MISCREG_TLBI_ALLE1
)
4329 .hypWrite().monSecureWrite().monNonSecureWrite();
4330 InitReg(MISCREG_TLBI_VALE2_Xt
)
4331 .monNonSecureWrite().hypWrite();
4332 InitReg(MISCREG_TLBI_VMALLS12E1
)
4333 .hypWrite().monSecureWrite().monNonSecureWrite();
4334 InitReg(MISCREG_TLBI_ALLE3IS
)
4335 .monSecureWrite().monNonSecureWrite();
4336 InitReg(MISCREG_TLBI_VAE3IS_Xt
)
4337 .monSecureWrite().monNonSecureWrite();
4338 InitReg(MISCREG_TLBI_VALE3IS_Xt
)
4339 .monSecureWrite().monNonSecureWrite();
4340 InitReg(MISCREG_TLBI_ALLE3
)
4341 .monSecureWrite().monNonSecureWrite();
4342 InitReg(MISCREG_TLBI_VAE3_Xt
)
4343 .monSecureWrite().monNonSecureWrite();
4344 InitReg(MISCREG_TLBI_VALE3_Xt
)
4345 .monSecureWrite().monNonSecureWrite();
4346 InitReg(MISCREG_PMINTENSET_EL1
)
4347 .allPrivileges().exceptUserMode()
4348 .mapsTo(MISCREG_PMINTENSET
);
4349 InitReg(MISCREG_PMINTENCLR_EL1
)
4350 .allPrivileges().exceptUserMode()
4351 .mapsTo(MISCREG_PMINTENCLR
);
4352 InitReg(MISCREG_PMCR_EL0
)
4354 .mapsTo(MISCREG_PMCR
);
4355 InitReg(MISCREG_PMCNTENSET_EL0
)
4357 .mapsTo(MISCREG_PMCNTENSET
);
4358 InitReg(MISCREG_PMCNTENCLR_EL0
)
4360 .mapsTo(MISCREG_PMCNTENCLR
);
4361 InitReg(MISCREG_PMOVSCLR_EL0
)
4363 // .mapsTo(MISCREG_PMOVSCLR);
4364 InitReg(MISCREG_PMSWINC_EL0
)
4366 .mapsTo(MISCREG_PMSWINC
);
4367 InitReg(MISCREG_PMSELR_EL0
)
4369 .mapsTo(MISCREG_PMSELR
);
4370 InitReg(MISCREG_PMCEID0_EL0
)
4372 .mapsTo(MISCREG_PMCEID0
);
4373 InitReg(MISCREG_PMCEID1_EL0
)
4375 .mapsTo(MISCREG_PMCEID1
);
4376 InitReg(MISCREG_PMCCNTR_EL0
)
4378 .mapsTo(MISCREG_PMCCNTR
);
4379 InitReg(MISCREG_PMXEVTYPER_EL0
)
4381 .mapsTo(MISCREG_PMXEVTYPER
);
4382 InitReg(MISCREG_PMCCFILTR_EL0
)
4384 InitReg(MISCREG_PMXEVCNTR_EL0
)
4386 .mapsTo(MISCREG_PMXEVCNTR
);
4387 InitReg(MISCREG_PMUSERENR_EL0
)
4388 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4389 .mapsTo(MISCREG_PMUSERENR
);
4390 InitReg(MISCREG_PMOVSSET_EL0
)
4392 .mapsTo(MISCREG_PMOVSSET
);
4393 InitReg(MISCREG_MAIR_EL1
)
4394 .allPrivileges().exceptUserMode()
4395 .mapsTo(MISCREG_PRRR_NS
, MISCREG_NMRR_NS
);
4396 InitReg(MISCREG_AMAIR_EL1
)
4397 .allPrivileges().exceptUserMode()
4398 .mapsTo(MISCREG_AMAIR0_NS
, MISCREG_AMAIR1_NS
);
4399 InitReg(MISCREG_MAIR_EL2
)
4401 .mapsTo(MISCREG_HMAIR0
, MISCREG_HMAIR1
);
4402 InitReg(MISCREG_AMAIR_EL2
)
4404 .mapsTo(MISCREG_HAMAIR0
, MISCREG_HAMAIR1
);
4405 InitReg(MISCREG_MAIR_EL3
)
4407 InitReg(MISCREG_AMAIR_EL3
)
4409 InitReg(MISCREG_L2CTLR_EL1
)
4410 .allPrivileges().exceptUserMode();
4411 InitReg(MISCREG_L2ECTLR_EL1
)
4412 .allPrivileges().exceptUserMode();
4413 InitReg(MISCREG_VBAR_EL1
)
4414 .allPrivileges().exceptUserMode()
4415 .mapsTo(MISCREG_VBAR_NS
);
4416 InitReg(MISCREG_RVBAR_EL1
)
4417 .allPrivileges().exceptUserMode().writes(0);
4418 InitReg(MISCREG_ISR_EL1
)
4419 .allPrivileges().exceptUserMode().writes(0);
4420 InitReg(MISCREG_VBAR_EL2
)
4423 .mapsTo(MISCREG_HVBAR
);
4424 InitReg(MISCREG_RVBAR_EL2
)
4425 .mon().hyp().writes(0);
4426 InitReg(MISCREG_VBAR_EL3
)
4428 InitReg(MISCREG_RVBAR_EL3
)
4430 InitReg(MISCREG_RMR_EL3
)
4432 InitReg(MISCREG_CONTEXTIDR_EL1
)
4433 .allPrivileges().exceptUserMode()
4434 .mapsTo(MISCREG_CONTEXTIDR_NS
);
4435 InitReg(MISCREG_TPIDR_EL1
)
4436 .allPrivileges().exceptUserMode()
4437 .mapsTo(MISCREG_TPIDRPRW_NS
);
4438 InitReg(MISCREG_TPIDR_EL0
)
4440 .mapsTo(MISCREG_TPIDRURW_NS
);
4441 InitReg(MISCREG_TPIDRRO_EL0
)
4442 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4443 .mapsTo(MISCREG_TPIDRURO_NS
);
4444 InitReg(MISCREG_TPIDR_EL2
)
4446 .mapsTo(MISCREG_HTPIDR
);
4447 InitReg(MISCREG_TPIDR_EL3
)
4449 InitReg(MISCREG_CNTKCTL_EL1
)
4450 .allPrivileges().exceptUserMode()
4451 .mapsTo(MISCREG_CNTKCTL
);
4452 InitReg(MISCREG_CNTFRQ_EL0
)
4455 .privSecureWrite(aarch32EL3
)
4456 .mapsTo(MISCREG_CNTFRQ
);
4457 InitReg(MISCREG_CNTPCT_EL0
)
4459 .mapsTo(MISCREG_CNTPCT
); /* 64b */
4460 InitReg(MISCREG_CNTVCT_EL0
)
4463 .mapsTo(MISCREG_CNTVCT
); /* 64b */
4464 InitReg(MISCREG_CNTP_TVAL_EL0
)
4466 .mapsTo(MISCREG_CNTP_TVAL_NS
);
4467 InitReg(MISCREG_CNTP_CTL_EL0
)
4469 .mapsTo(MISCREG_CNTP_CTL_NS
);
4470 InitReg(MISCREG_CNTP_CVAL_EL0
)
4472 .mapsTo(MISCREG_CNTP_CVAL_NS
); /* 64b */
4473 InitReg(MISCREG_CNTV_TVAL_EL0
)
4475 .mapsTo(MISCREG_CNTV_TVAL
);
4476 InitReg(MISCREG_CNTV_CTL_EL0
)
4478 .mapsTo(MISCREG_CNTV_CTL
);
4479 InitReg(MISCREG_CNTV_CVAL_EL0
)
4481 .mapsTo(MISCREG_CNTV_CVAL
); /* 64b */
4482 InitReg(MISCREG_PMEVCNTR0_EL0
)
4484 // .mapsTo(MISCREG_PMEVCNTR0);
4485 InitReg(MISCREG_PMEVCNTR1_EL0
)
4487 // .mapsTo(MISCREG_PMEVCNTR1);
4488 InitReg(MISCREG_PMEVCNTR2_EL0
)
4490 // .mapsTo(MISCREG_PMEVCNTR2);
4491 InitReg(MISCREG_PMEVCNTR3_EL0
)
4493 // .mapsTo(MISCREG_PMEVCNTR3);
4494 InitReg(MISCREG_PMEVCNTR4_EL0
)
4496 // .mapsTo(MISCREG_PMEVCNTR4);
4497 InitReg(MISCREG_PMEVCNTR5_EL0
)
4499 // .mapsTo(MISCREG_PMEVCNTR5);
4500 InitReg(MISCREG_PMEVTYPER0_EL0
)
4502 // .mapsTo(MISCREG_PMEVTYPER0);
4503 InitReg(MISCREG_PMEVTYPER1_EL0
)
4505 // .mapsTo(MISCREG_PMEVTYPER1);
4506 InitReg(MISCREG_PMEVTYPER2_EL0
)
4508 // .mapsTo(MISCREG_PMEVTYPER2);
4509 InitReg(MISCREG_PMEVTYPER3_EL0
)
4511 // .mapsTo(MISCREG_PMEVTYPER3);
4512 InitReg(MISCREG_PMEVTYPER4_EL0
)
4514 // .mapsTo(MISCREG_PMEVTYPER4);
4515 InitReg(MISCREG_PMEVTYPER5_EL0
)
4517 // .mapsTo(MISCREG_PMEVTYPER5);
4518 InitReg(MISCREG_CNTVOFF_EL2
)
4520 .mapsTo(MISCREG_CNTVOFF
); /* 64b */
4521 InitReg(MISCREG_CNTHCTL_EL2
)
4523 .mapsTo(MISCREG_CNTHCTL
);
4524 InitReg(MISCREG_CNTHP_TVAL_EL2
)
4526 .mapsTo(MISCREG_CNTHP_TVAL
);
4527 InitReg(MISCREG_CNTHP_CTL_EL2
)
4529 .mapsTo(MISCREG_CNTHP_CTL
);
4530 InitReg(MISCREG_CNTHP_CVAL_EL2
)
4532 .mapsTo(MISCREG_CNTHP_CVAL
); /* 64b */
4533 InitReg(MISCREG_CNTPS_TVAL_EL1
)
4534 .mon().privSecure();
4535 InitReg(MISCREG_CNTPS_CTL_EL1
)
4536 .mon().privSecure();
4537 InitReg(MISCREG_CNTPS_CVAL_EL1
)
4538 .mon().privSecure();
4539 InitReg(MISCREG_IL1DATA0_EL1
)
4540 .allPrivileges().exceptUserMode();
4541 InitReg(MISCREG_IL1DATA1_EL1
)
4542 .allPrivileges().exceptUserMode();
4543 InitReg(MISCREG_IL1DATA2_EL1
)
4544 .allPrivileges().exceptUserMode();
4545 InitReg(MISCREG_IL1DATA3_EL1
)
4546 .allPrivileges().exceptUserMode();
4547 InitReg(MISCREG_DL1DATA0_EL1
)
4548 .allPrivileges().exceptUserMode();
4549 InitReg(MISCREG_DL1DATA1_EL1
)
4550 .allPrivileges().exceptUserMode();
4551 InitReg(MISCREG_DL1DATA2_EL1
)
4552 .allPrivileges().exceptUserMode();
4553 InitReg(MISCREG_DL1DATA3_EL1
)
4554 .allPrivileges().exceptUserMode();
4555 InitReg(MISCREG_DL1DATA4_EL1
)
4556 .allPrivileges().exceptUserMode();
4557 InitReg(MISCREG_L2ACTLR_EL1
)
4558 .allPrivileges().exceptUserMode();
4559 InitReg(MISCREG_CPUACTLR_EL1
)
4560 .allPrivileges().exceptUserMode();
4561 InitReg(MISCREG_CPUECTLR_EL1
)
4562 .allPrivileges().exceptUserMode();
4563 InitReg(MISCREG_CPUMERRSR_EL1
)
4564 .allPrivileges().exceptUserMode();
4565 InitReg(MISCREG_L2MERRSR_EL1
)
4568 .allPrivileges().exceptUserMode();
4569 InitReg(MISCREG_CBAR_EL1
)
4570 .allPrivileges().exceptUserMode().writes(0);
4571 InitReg(MISCREG_CONTEXTIDR_EL2
)
4575 InitReg(MISCREG_ICC_PMR_EL1
)
4576 .res0(0xffffff00) // [31:8]
4577 .allPrivileges().exceptUserMode()
4578 .mapsTo(MISCREG_ICC_PMR
);
4579 InitReg(MISCREG_ICC_IAR0_EL1
)
4580 .allPrivileges().exceptUserMode().writes(0)
4581 .mapsTo(MISCREG_ICC_IAR0
);
4582 InitReg(MISCREG_ICC_EOIR0_EL1
)
4583 .allPrivileges().exceptUserMode().reads(0)
4584 .mapsTo(MISCREG_ICC_EOIR0
);
4585 InitReg(MISCREG_ICC_HPPIR0_EL1
)
4586 .allPrivileges().exceptUserMode().writes(0)
4587 .mapsTo(MISCREG_ICC_HPPIR0
);
4588 InitReg(MISCREG_ICC_BPR0_EL1
)
4589 .res0(0xfffffff8) // [31:3]
4590 .allPrivileges().exceptUserMode()
4591 .mapsTo(MISCREG_ICC_BPR0
);
4592 InitReg(MISCREG_ICC_AP0R0_EL1
)
4593 .allPrivileges().exceptUserMode()
4594 .mapsTo(MISCREG_ICC_AP0R0
);
4595 InitReg(MISCREG_ICC_AP0R1_EL1
)
4596 .allPrivileges().exceptUserMode()
4597 .mapsTo(MISCREG_ICC_AP0R1
);
4598 InitReg(MISCREG_ICC_AP0R2_EL1
)
4599 .allPrivileges().exceptUserMode()
4600 .mapsTo(MISCREG_ICC_AP0R2
);
4601 InitReg(MISCREG_ICC_AP0R3_EL1
)
4602 .allPrivileges().exceptUserMode()
4603 .mapsTo(MISCREG_ICC_AP0R3
);
4604 InitReg(MISCREG_ICC_AP1R0_EL1
)
4606 .mapsTo(MISCREG_ICC_AP1R0
);
4607 InitReg(MISCREG_ICC_AP1R0_EL1_NS
)
4609 .allPrivileges().exceptUserMode()
4610 .mapsTo(MISCREG_ICC_AP1R0_NS
);
4611 InitReg(MISCREG_ICC_AP1R0_EL1_S
)
4613 .allPrivileges().exceptUserMode()
4614 .mapsTo(MISCREG_ICC_AP1R0_S
);
4615 InitReg(MISCREG_ICC_AP1R1_EL1
)
4617 .mapsTo(MISCREG_ICC_AP1R1
);
4618 InitReg(MISCREG_ICC_AP1R1_EL1_NS
)
4620 .allPrivileges().exceptUserMode()
4621 .mapsTo(MISCREG_ICC_AP1R1_NS
);
4622 InitReg(MISCREG_ICC_AP1R1_EL1_S
)
4624 .allPrivileges().exceptUserMode()
4625 .mapsTo(MISCREG_ICC_AP1R1_S
);
4626 InitReg(MISCREG_ICC_AP1R2_EL1
)
4628 .mapsTo(MISCREG_ICC_AP1R2
);
4629 InitReg(MISCREG_ICC_AP1R2_EL1_NS
)
4631 .allPrivileges().exceptUserMode()
4632 .mapsTo(MISCREG_ICC_AP1R2_NS
);
4633 InitReg(MISCREG_ICC_AP1R2_EL1_S
)
4635 .allPrivileges().exceptUserMode()
4636 .mapsTo(MISCREG_ICC_AP1R2_S
);
4637 InitReg(MISCREG_ICC_AP1R3_EL1
)
4639 .mapsTo(MISCREG_ICC_AP1R3
);
4640 InitReg(MISCREG_ICC_AP1R3_EL1_NS
)
4642 .allPrivileges().exceptUserMode()
4643 .mapsTo(MISCREG_ICC_AP1R3_NS
);
4644 InitReg(MISCREG_ICC_AP1R3_EL1_S
)
4646 .allPrivileges().exceptUserMode()
4647 .mapsTo(MISCREG_ICC_AP1R3_S
);
4648 InitReg(MISCREG_ICC_DIR_EL1
)
4649 .res0(0xFF000000) // [31:24]
4650 .allPrivileges().exceptUserMode().reads(0)
4651 .mapsTo(MISCREG_ICC_DIR
);
4652 InitReg(MISCREG_ICC_RPR_EL1
)
4653 .allPrivileges().exceptUserMode().writes(0)
4654 .mapsTo(MISCREG_ICC_RPR
);
4655 InitReg(MISCREG_ICC_SGI1R_EL1
)
4656 .allPrivileges().exceptUserMode().reads(0)
4657 .mapsTo(MISCREG_ICC_SGI1R
);
4658 InitReg(MISCREG_ICC_ASGI1R_EL1
)
4659 .allPrivileges().exceptUserMode().reads(0)
4660 .mapsTo(MISCREG_ICC_ASGI1R
);
4661 InitReg(MISCREG_ICC_SGI0R_EL1
)
4662 .allPrivileges().exceptUserMode().reads(0)
4663 .mapsTo(MISCREG_ICC_SGI0R
);
4664 InitReg(MISCREG_ICC_IAR1_EL1
)
4665 .allPrivileges().exceptUserMode().writes(0)
4666 .mapsTo(MISCREG_ICC_IAR1
);
4667 InitReg(MISCREG_ICC_EOIR1_EL1
)
4668 .res0(0xFF000000) // [31:24]
4669 .allPrivileges().exceptUserMode().reads(0)
4670 .mapsTo(MISCREG_ICC_EOIR1
);
4671 InitReg(MISCREG_ICC_HPPIR1_EL1
)
4672 .allPrivileges().exceptUserMode().writes(0)
4673 .mapsTo(MISCREG_ICC_HPPIR1
);
4674 InitReg(MISCREG_ICC_BPR1_EL1
)
4676 .mapsTo(MISCREG_ICC_BPR1
);
4677 InitReg(MISCREG_ICC_BPR1_EL1_NS
)
4679 .res0(0xfffffff8) // [31:3]
4680 .allPrivileges().exceptUserMode()
4681 .mapsTo(MISCREG_ICC_BPR1_NS
);
4682 InitReg(MISCREG_ICC_BPR1_EL1_S
)
4684 .res0(0xfffffff8) // [31:3]
4685 .secure().exceptUserMode()
4686 .mapsTo(MISCREG_ICC_BPR1_S
);
4687 InitReg(MISCREG_ICC_CTLR_EL1
)
4689 .mapsTo(MISCREG_ICC_CTLR
);
4690 InitReg(MISCREG_ICC_CTLR_EL1_NS
)
4692 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4693 .allPrivileges().exceptUserMode()
4694 .mapsTo(MISCREG_ICC_CTLR_NS
);
4695 InitReg(MISCREG_ICC_CTLR_EL1_S
)
4697 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4698 .secure().exceptUserMode()
4699 .mapsTo(MISCREG_ICC_CTLR_S
);
4700 InitReg(MISCREG_ICC_SRE_EL1
)
4702 .mapsTo(MISCREG_ICC_SRE
);
4703 InitReg(MISCREG_ICC_SRE_EL1_NS
)
4705 .res0(0xFFFFFFF8) // [31:3]
4706 .allPrivileges().exceptUserMode()
4707 .mapsTo(MISCREG_ICC_SRE_NS
);
4708 InitReg(MISCREG_ICC_SRE_EL1_S
)
4710 .res0(0xFFFFFFF8) // [31:3]
4711 .secure().exceptUserMode()
4712 .mapsTo(MISCREG_ICC_SRE_S
);
4713 InitReg(MISCREG_ICC_IGRPEN0_EL1
)
4714 .res0(0xFFFFFFFE) // [31:1]
4715 .allPrivileges().exceptUserMode()
4716 .mapsTo(MISCREG_ICC_IGRPEN0
);
4717 InitReg(MISCREG_ICC_IGRPEN1_EL1
)
4719 .mapsTo(MISCREG_ICC_IGRPEN1
);
4720 InitReg(MISCREG_ICC_IGRPEN1_EL1_NS
)
4722 .res0(0xFFFFFFFE) // [31:1]
4723 .allPrivileges().exceptUserMode()
4724 .mapsTo(MISCREG_ICC_IGRPEN1_NS
);
4725 InitReg(MISCREG_ICC_IGRPEN1_EL1_S
)
4727 .res0(0xFFFFFFFE) // [31:1]
4728 .secure().exceptUserMode()
4729 .mapsTo(MISCREG_ICC_IGRPEN1_S
);
4730 InitReg(MISCREG_ICC_SRE_EL2
)
4732 .mapsTo(MISCREG_ICC_HSRE
);
4733 InitReg(MISCREG_ICC_CTLR_EL3
)
4734 .allPrivileges().exceptUserMode()
4735 .mapsTo(MISCREG_ICC_MCTLR
);
4736 InitReg(MISCREG_ICC_SRE_EL3
)
4737 .allPrivileges().exceptUserMode()
4738 .mapsTo(MISCREG_ICC_MSRE
);
4739 InitReg(MISCREG_ICC_IGRPEN1_EL3
)
4740 .allPrivileges().exceptUserMode()
4741 .mapsTo(MISCREG_ICC_MGRPEN1
);
4743 InitReg(MISCREG_ICH_AP0R0_EL2
)
4745 .mapsTo(MISCREG_ICH_AP0R0
);
4746 InitReg(MISCREG_ICH_AP0R1_EL2
)
4749 .mapsTo(MISCREG_ICH_AP0R1
);
4750 InitReg(MISCREG_ICH_AP0R2_EL2
)
4753 .mapsTo(MISCREG_ICH_AP0R2
);
4754 InitReg(MISCREG_ICH_AP0R3_EL2
)
4757 .mapsTo(MISCREG_ICH_AP0R3
);
4758 InitReg(MISCREG_ICH_AP1R0_EL2
)
4760 .mapsTo(MISCREG_ICH_AP1R0
);
4761 InitReg(MISCREG_ICH_AP1R1_EL2
)
4764 .mapsTo(MISCREG_ICH_AP1R1
);
4765 InitReg(MISCREG_ICH_AP1R2_EL2
)
4768 .mapsTo(MISCREG_ICH_AP1R2
);
4769 InitReg(MISCREG_ICH_AP1R3_EL2
)
4772 .mapsTo(MISCREG_ICH_AP1R3
);
4773 InitReg(MISCREG_ICH_HCR_EL2
)
4775 .mapsTo(MISCREG_ICH_HCR
);
4776 InitReg(MISCREG_ICH_VTR_EL2
)
4777 .hyp().mon().writes(0)
4778 .mapsTo(MISCREG_ICH_VTR
);
4779 InitReg(MISCREG_ICH_MISR_EL2
)
4780 .hyp().mon().writes(0)
4781 .mapsTo(MISCREG_ICH_MISR
);
4782 InitReg(MISCREG_ICH_EISR_EL2
)
4783 .hyp().mon().writes(0)
4784 .mapsTo(MISCREG_ICH_EISR
);
4785 InitReg(MISCREG_ICH_ELRSR_EL2
)
4786 .hyp().mon().writes(0)
4787 .mapsTo(MISCREG_ICH_ELRSR
);
4788 InitReg(MISCREG_ICH_VMCR_EL2
)
4790 .mapsTo(MISCREG_ICH_VMCR
);
4791 InitReg(MISCREG_ICH_LR0_EL2
)
4793 .allPrivileges().exceptUserMode();
4794 InitReg(MISCREG_ICH_LR1_EL2
)
4796 .allPrivileges().exceptUserMode();
4797 InitReg(MISCREG_ICH_LR2_EL2
)
4799 .allPrivileges().exceptUserMode();
4800 InitReg(MISCREG_ICH_LR3_EL2
)
4802 .allPrivileges().exceptUserMode();
4803 InitReg(MISCREG_ICH_LR4_EL2
)
4805 .allPrivileges().exceptUserMode();
4806 InitReg(MISCREG_ICH_LR5_EL2
)
4808 .allPrivileges().exceptUserMode();
4809 InitReg(MISCREG_ICH_LR6_EL2
)
4811 .allPrivileges().exceptUserMode();
4812 InitReg(MISCREG_ICH_LR7_EL2
)
4814 .allPrivileges().exceptUserMode();
4815 InitReg(MISCREG_ICH_LR8_EL2
)
4817 .allPrivileges().exceptUserMode();
4818 InitReg(MISCREG_ICH_LR9_EL2
)
4820 .allPrivileges().exceptUserMode();
4821 InitReg(MISCREG_ICH_LR10_EL2
)
4823 .allPrivileges().exceptUserMode();
4824 InitReg(MISCREG_ICH_LR11_EL2
)
4826 .allPrivileges().exceptUserMode();
4827 InitReg(MISCREG_ICH_LR12_EL2
)
4829 .allPrivileges().exceptUserMode();
4830 InitReg(MISCREG_ICH_LR13_EL2
)
4832 .allPrivileges().exceptUserMode();
4833 InitReg(MISCREG_ICH_LR14_EL2
)
4835 .allPrivileges().exceptUserMode();
4836 InitReg(MISCREG_ICH_LR15_EL2
)
4838 .allPrivileges().exceptUserMode();
4841 InitReg(MISCREG_ICC_AP0R0
)
4842 .allPrivileges().exceptUserMode();
4843 InitReg(MISCREG_ICC_AP0R1
)
4844 .allPrivileges().exceptUserMode();
4845 InitReg(MISCREG_ICC_AP0R2
)
4846 .allPrivileges().exceptUserMode();
4847 InitReg(MISCREG_ICC_AP0R3
)
4848 .allPrivileges().exceptUserMode();
4849 InitReg(MISCREG_ICC_AP1R0
)
4850 .allPrivileges().exceptUserMode();
4851 InitReg(MISCREG_ICC_AP1R0_NS
)
4852 .allPrivileges().exceptUserMode();
4853 InitReg(MISCREG_ICC_AP1R0_S
)
4854 .allPrivileges().exceptUserMode();
4855 InitReg(MISCREG_ICC_AP1R1
)
4856 .allPrivileges().exceptUserMode();
4857 InitReg(MISCREG_ICC_AP1R1_NS
)
4858 .allPrivileges().exceptUserMode();
4859 InitReg(MISCREG_ICC_AP1R1_S
)
4860 .allPrivileges().exceptUserMode();
4861 InitReg(MISCREG_ICC_AP1R2
)
4862 .allPrivileges().exceptUserMode();
4863 InitReg(MISCREG_ICC_AP1R2_NS
)
4864 .allPrivileges().exceptUserMode();
4865 InitReg(MISCREG_ICC_AP1R2_S
)
4866 .allPrivileges().exceptUserMode();
4867 InitReg(MISCREG_ICC_AP1R3
)
4868 .allPrivileges().exceptUserMode();
4869 InitReg(MISCREG_ICC_AP1R3_NS
)
4870 .allPrivileges().exceptUserMode();
4871 InitReg(MISCREG_ICC_AP1R3_S
)
4872 .allPrivileges().exceptUserMode();
4873 InitReg(MISCREG_ICC_ASGI1R
)
4874 .allPrivileges().exceptUserMode().reads(0);
4875 InitReg(MISCREG_ICC_BPR0
)
4876 .allPrivileges().exceptUserMode();
4877 InitReg(MISCREG_ICC_BPR1
)
4878 .allPrivileges().exceptUserMode();
4879 InitReg(MISCREG_ICC_BPR1_NS
)
4880 .allPrivileges().exceptUserMode();
4881 InitReg(MISCREG_ICC_BPR1_S
)
4882 .allPrivileges().exceptUserMode();
4883 InitReg(MISCREG_ICC_CTLR
)
4884 .allPrivileges().exceptUserMode();
4885 InitReg(MISCREG_ICC_CTLR_NS
)
4886 .allPrivileges().exceptUserMode();
4887 InitReg(MISCREG_ICC_CTLR_S
)
4888 .allPrivileges().exceptUserMode();
4889 InitReg(MISCREG_ICC_DIR
)
4890 .allPrivileges().exceptUserMode().reads(0);
4891 InitReg(MISCREG_ICC_EOIR0
)
4892 .allPrivileges().exceptUserMode().reads(0);
4893 InitReg(MISCREG_ICC_EOIR1
)
4894 .allPrivileges().exceptUserMode().reads(0);
4895 InitReg(MISCREG_ICC_HPPIR0
)
4896 .allPrivileges().exceptUserMode().writes(0);
4897 InitReg(MISCREG_ICC_HPPIR1
)
4898 .allPrivileges().exceptUserMode().writes(0);
4899 InitReg(MISCREG_ICC_HSRE
)
4900 .allPrivileges().exceptUserMode();
4901 InitReg(MISCREG_ICC_IAR0
)
4902 .allPrivileges().exceptUserMode().writes(0);
4903 InitReg(MISCREG_ICC_IAR1
)
4904 .allPrivileges().exceptUserMode().writes(0);
4905 InitReg(MISCREG_ICC_IGRPEN0
)
4906 .allPrivileges().exceptUserMode();
4907 InitReg(MISCREG_ICC_IGRPEN1
)
4908 .allPrivileges().exceptUserMode();
4909 InitReg(MISCREG_ICC_IGRPEN1_NS
)
4910 .allPrivileges().exceptUserMode();
4911 InitReg(MISCREG_ICC_IGRPEN1_S
)
4912 .allPrivileges().exceptUserMode();
4913 InitReg(MISCREG_ICC_MCTLR
)
4914 .allPrivileges().exceptUserMode();
4915 InitReg(MISCREG_ICC_MGRPEN1
)
4916 .allPrivileges().exceptUserMode();
4917 InitReg(MISCREG_ICC_MSRE
)
4918 .allPrivileges().exceptUserMode();
4919 InitReg(MISCREG_ICC_PMR
)
4920 .allPrivileges().exceptUserMode();
4921 InitReg(MISCREG_ICC_RPR
)
4922 .allPrivileges().exceptUserMode().writes(0);
4923 InitReg(MISCREG_ICC_SGI0R
)
4924 .allPrivileges().exceptUserMode().reads(0);
4925 InitReg(MISCREG_ICC_SGI1R
)
4926 .allPrivileges().exceptUserMode().reads(0);
4927 InitReg(MISCREG_ICC_SRE
)
4928 .allPrivileges().exceptUserMode();
4929 InitReg(MISCREG_ICC_SRE_NS
)
4930 .allPrivileges().exceptUserMode();
4931 InitReg(MISCREG_ICC_SRE_S
)
4932 .allPrivileges().exceptUserMode();
4934 InitReg(MISCREG_ICH_AP0R0
)
4936 InitReg(MISCREG_ICH_AP0R1
)
4938 InitReg(MISCREG_ICH_AP0R2
)
4940 InitReg(MISCREG_ICH_AP0R3
)
4942 InitReg(MISCREG_ICH_AP1R0
)
4944 InitReg(MISCREG_ICH_AP1R1
)
4946 InitReg(MISCREG_ICH_AP1R2
)
4948 InitReg(MISCREG_ICH_AP1R3
)
4950 InitReg(MISCREG_ICH_HCR
)
4952 InitReg(MISCREG_ICH_VTR
)
4953 .hyp().mon().writes(0);
4954 InitReg(MISCREG_ICH_MISR
)
4955 .hyp().mon().writes(0);
4956 InitReg(MISCREG_ICH_EISR
)
4957 .hyp().mon().writes(0);
4958 InitReg(MISCREG_ICH_ELRSR
)
4959 .hyp().mon().writes(0);
4960 InitReg(MISCREG_ICH_VMCR
)
4962 InitReg(MISCREG_ICH_LR0
)
4964 InitReg(MISCREG_ICH_LR1
)
4966 InitReg(MISCREG_ICH_LR2
)
4968 InitReg(MISCREG_ICH_LR3
)
4970 InitReg(MISCREG_ICH_LR4
)
4972 InitReg(MISCREG_ICH_LR5
)
4974 InitReg(MISCREG_ICH_LR6
)
4976 InitReg(MISCREG_ICH_LR7
)
4978 InitReg(MISCREG_ICH_LR8
)
4980 InitReg(MISCREG_ICH_LR9
)
4982 InitReg(MISCREG_ICH_LR10
)
4984 InitReg(MISCREG_ICH_LR11
)
4986 InitReg(MISCREG_ICH_LR12
)
4988 InitReg(MISCREG_ICH_LR13
)
4990 InitReg(MISCREG_ICH_LR14
)
4992 InitReg(MISCREG_ICH_LR15
)
4994 InitReg(MISCREG_ICH_LRC0
)
4995 .mapsTo(MISCREG_ICH_LR0
)
4997 InitReg(MISCREG_ICH_LRC1
)
4998 .mapsTo(MISCREG_ICH_LR1
)
5000 InitReg(MISCREG_ICH_LRC2
)
5001 .mapsTo(MISCREG_ICH_LR2
)
5003 InitReg(MISCREG_ICH_LRC3
)
5004 .mapsTo(MISCREG_ICH_LR3
)
5006 InitReg(MISCREG_ICH_LRC4
)
5007 .mapsTo(MISCREG_ICH_LR4
)
5009 InitReg(MISCREG_ICH_LRC5
)
5010 .mapsTo(MISCREG_ICH_LR5
)
5012 InitReg(MISCREG_ICH_LRC6
)
5013 .mapsTo(MISCREG_ICH_LR6
)
5015 InitReg(MISCREG_ICH_LRC7
)
5016 .mapsTo(MISCREG_ICH_LR7
)
5018 InitReg(MISCREG_ICH_LRC8
)
5019 .mapsTo(MISCREG_ICH_LR8
)
5021 InitReg(MISCREG_ICH_LRC9
)
5022 .mapsTo(MISCREG_ICH_LR9
)
5024 InitReg(MISCREG_ICH_LRC10
)
5025 .mapsTo(MISCREG_ICH_LR10
)
5027 InitReg(MISCREG_ICH_LRC11
)
5028 .mapsTo(MISCREG_ICH_LR11
)
5030 InitReg(MISCREG_ICH_LRC12
)
5031 .mapsTo(MISCREG_ICH_LR12
)
5033 InitReg(MISCREG_ICH_LRC13
)
5034 .mapsTo(MISCREG_ICH_LR13
)
5036 InitReg(MISCREG_ICH_LRC14
)
5037 .mapsTo(MISCREG_ICH_LR14
)
5039 InitReg(MISCREG_ICH_LRC15
)
5040 .mapsTo(MISCREG_ICH_LR15
)
5043 InitReg(MISCREG_CNTHV_CTL_EL2
)
5045 InitReg(MISCREG_CNTHV_CVAL_EL2
)
5047 InitReg(MISCREG_CNTHV_TVAL_EL2
)
5051 InitReg(MISCREG_ID_AA64ZFR0_EL1
)
5052 .allPrivileges().exceptUserMode().writes(0);
5053 InitReg(MISCREG_ZCR_EL3
)
5055 InitReg(MISCREG_ZCR_EL2
)
5057 InitReg(MISCREG_ZCR_EL12
)
5058 .unimplemented().warnNotFail();
5059 InitReg(MISCREG_ZCR_EL1
)
5060 .allPrivileges().exceptUserMode();
5063 InitReg(MISCREG_NOP
)
5065 InitReg(MISCREG_RAZ
)
5066 .allPrivileges().exceptUserMode().writes(0);
5067 InitReg(MISCREG_CP14_UNIMPL
)
5070 InitReg(MISCREG_CP15_UNIMPL
)
5073 InitReg(MISCREG_UNKNOWN
);
5074 InitReg(MISCREG_IMPDEF_UNIMPL
)
5076 .warnNotFail(impdefAsNop
);
5078 // RAS extension (unimplemented)
5079 InitReg(MISCREG_ERRIDR_EL1
)
5082 InitReg(MISCREG_ERRSELR_EL1
)
5085 InitReg(MISCREG_ERXFR_EL1
)
5088 InitReg(MISCREG_ERXCTLR_EL1
)
5091 InitReg(MISCREG_ERXSTATUS_EL1
)
5094 InitReg(MISCREG_ERXADDR_EL1
)
5097 InitReg(MISCREG_ERXMISC0_EL1
)
5100 InitReg(MISCREG_ERXMISC1_EL1
)
5103 InitReg(MISCREG_DISR_EL1
)
5106 InitReg(MISCREG_VSESR_EL2
)
5109 InitReg(MISCREG_VDISR_EL2
)
5113 // Register mappings for some unimplemented registers:
5117 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
5118 // DBGDTRRX_EL0 -> DBGDTRRXint
5119 // DBGDTRTX_EL0 -> DBGDTRRXint
5120 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
5125 } // namespace ArmISA