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.
42 #include "arch/arm/miscregs.hh"
46 #include "arch/arm/isa.hh"
47 #include "base/logging.hh"
48 #include "cpu/thread_context.hh"
49 #include "sim/full_system.hh"
55 decodeCP14Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
65 return MISCREG_DBGDIDR
;
67 return MISCREG_DBGDSCRint
;
91 return MISCREG_TEEHBR
;
101 return MISCREG_JOSCR
;
123 // If we get here then it must be a register that we haven't implemented
124 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
125 crn
, opc1
, crm
, opc2
);
126 return MISCREG_CP14_UNIMPL
;
132 decodeCP15Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
144 return MISCREG_TCMTR
;
146 return MISCREG_TLBTR
;
148 return MISCREG_MPIDR
;
150 return MISCREG_REVIDR
;
158 return MISCREG_ID_PFR0
;
160 return MISCREG_ID_PFR1
;
162 return MISCREG_ID_DFR0
;
164 return MISCREG_ID_AFR0
;
166 return MISCREG_ID_MMFR0
;
168 return MISCREG_ID_MMFR1
;
170 return MISCREG_ID_MMFR2
;
172 return MISCREG_ID_MMFR3
;
178 return MISCREG_ID_ISAR0
;
180 return MISCREG_ID_ISAR1
;
182 return MISCREG_ID_ISAR2
;
184 return MISCREG_ID_ISAR3
;
186 return MISCREG_ID_ISAR4
;
188 return MISCREG_ID_ISAR5
;
191 return MISCREG_RAZ
; // read as zero
195 return MISCREG_RAZ
; // read as zero
202 return MISCREG_CCSIDR
;
204 return MISCREG_CLIDR
;
211 if (crm
== 0 && opc2
== 0) {
212 return MISCREG_CSSELR
;
218 return MISCREG_VPIDR
;
220 return MISCREG_VMPIDR
;
230 return MISCREG_SCTLR
;
232 return MISCREG_ACTLR
;
234 return MISCREG_CPACR
;
236 } else if (crm
== 1) {
243 return MISCREG_NSACR
;
246 } else if (opc1
== 4) {
249 return MISCREG_HSCTLR
;
251 return MISCREG_HACTLR
;
252 } else if (crm
== 1) {
259 return MISCREG_HCPTR
;
271 if (opc1
== 0 && crm
== 0) {
274 return MISCREG_TTBR0
;
276 return MISCREG_TTBR1
;
278 return MISCREG_TTBCR
;
280 } else if (opc1
== 4) {
281 if (crm
== 0 && opc2
== 2)
283 else if (crm
== 1 && opc2
== 2)
288 if (opc1
== 0 && crm
== 0 && opc2
== 0) {
293 if (opc1
== 0 && crm
== 6 && opc2
== 0) {
294 return MISCREG_ICC_PMR
;
302 } else if (opc2
== 1) {
305 } else if (crm
== 1) {
307 return MISCREG_ADFSR
;
308 } else if (opc2
== 1) {
309 return MISCREG_AIFSR
;
312 } else if (opc1
== 4) {
315 return MISCREG_HADFSR
;
317 return MISCREG_HAIFSR
;
318 } else if (crm
== 2 && opc2
== 0) {
324 if (opc1
== 0 && crm
== 0) {
331 } else if (opc1
== 4 && crm
== 0) {
334 return MISCREG_HDFAR
;
336 return MISCREG_HIFAR
;
338 return MISCREG_HPFAR
;
353 return MISCREG_ICIALLUIS
;
355 return MISCREG_BPIALLIS
;
366 return MISCREG_ICIALLU
;
368 return MISCREG_ICIMVAU
;
370 return MISCREG_CP15ISB
;
372 return MISCREG_BPIALL
;
374 return MISCREG_BPIMVA
;
379 return MISCREG_DCIMVAC
;
380 } else if (opc2
== 2) {
381 return MISCREG_DCISW
;
387 return MISCREG_ATS1CPR
;
389 return MISCREG_ATS1CPW
;
391 return MISCREG_ATS1CUR
;
393 return MISCREG_ATS1CUW
;
395 return MISCREG_ATS12NSOPR
;
397 return MISCREG_ATS12NSOPW
;
399 return MISCREG_ATS12NSOUR
;
401 return MISCREG_ATS12NSOUW
;
407 return MISCREG_DCCMVAC
;
409 return MISCREG_DCCSW
;
411 return MISCREG_CP15DSB
;
413 return MISCREG_CP15DMB
;
418 return MISCREG_DCCMVAU
;
428 return MISCREG_DCCIMVAC
;
429 } else if (opc2
== 2) {
430 return MISCREG_DCCISW
;
434 } else if (opc1
== 4 && crm
== 8) {
436 return MISCREG_ATS1HR
;
438 return MISCREG_ATS1HW
;
447 return MISCREG_TLBIALLIS
;
449 return MISCREG_TLBIMVAIS
;
451 return MISCREG_TLBIASIDIS
;
453 return MISCREG_TLBIMVAAIS
;
455 return MISCREG_TLBIMVALIS
;
457 return MISCREG_TLBIMVAALIS
;
463 return MISCREG_ITLBIALL
;
465 return MISCREG_ITLBIMVA
;
467 return MISCREG_ITLBIASID
;
473 return MISCREG_DTLBIALL
;
475 return MISCREG_DTLBIMVA
;
477 return MISCREG_DTLBIASID
;
483 return MISCREG_TLBIALL
;
485 return MISCREG_TLBIMVA
;
487 return MISCREG_TLBIASID
;
489 return MISCREG_TLBIMVAA
;
491 return MISCREG_TLBIMVAL
;
493 return MISCREG_TLBIMVAAL
;
497 } else if (opc1
== 4) {
501 return MISCREG_TLBIIPAS2IS
;
503 return MISCREG_TLBIIPAS2LIS
;
505 } else if (crm
== 3) {
508 return MISCREG_TLBIALLHIS
;
510 return MISCREG_TLBIMVAHIS
;
512 return MISCREG_TLBIALLNSNHIS
;
514 return MISCREG_TLBIMVALHIS
;
516 } else if (crm
== 4) {
519 return MISCREG_TLBIIPAS2
;
521 return MISCREG_TLBIIPAS2L
;
523 } else if (crm
== 7) {
526 return MISCREG_TLBIALLH
;
528 return MISCREG_TLBIMVAH
;
530 return MISCREG_TLBIALLNSNH
;
532 return MISCREG_TLBIMVALH
;
538 // Every cop register with CRn = 9 and CRm in
539 // {0-2}, {5-8} is implementation defined regardless
549 return MISCREG_IMPDEF_UNIMPL
;
558 return MISCREG_PMCNTENSET
;
560 return MISCREG_PMCNTENCLR
;
562 return MISCREG_PMOVSR
;
564 return MISCREG_PMSWINC
;
566 return MISCREG_PMSELR
;
568 return MISCREG_PMCEID0
;
570 return MISCREG_PMCEID1
;
576 return MISCREG_PMCCNTR
;
578 // Selector is PMSELR.SEL
579 return MISCREG_PMXEVTYPER_PMCCFILTR
;
581 return MISCREG_PMXEVCNTR
;
587 return MISCREG_PMUSERENR
;
589 return MISCREG_PMINTENSET
;
591 return MISCREG_PMINTENCLR
;
593 return MISCREG_PMOVSSET
;
597 } else if (opc1
== 1) {
601 case 2: // L2CTLR, L2 Control Register
602 return MISCREG_L2CTLR
;
604 return MISCREG_L2ECTLR
;
613 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
615 return MISCREG_IMPDEF_UNIMPL
;
616 } else if (crm
== 2) { // TEX Remap Registers
618 // Selector is TTBCR.EAE
619 return MISCREG_PRRR_MAIR0
;
620 } else if (opc2
== 1) {
621 // Selector is TTBCR.EAE
622 return MISCREG_NMRR_MAIR1
;
624 } else if (crm
== 3) {
626 return MISCREG_AMAIR0
;
627 } else if (opc2
== 1) {
628 return MISCREG_AMAIR1
;
631 } else if (opc1
== 4) {
632 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
635 return MISCREG_HMAIR0
;
637 return MISCREG_HMAIR1
;
638 } else if (crm
== 3) {
640 return MISCREG_HAMAIR0
;
642 return MISCREG_HAMAIR1
;
659 // Reserved for DMA operations for TCM access
660 return MISCREG_IMPDEF_UNIMPL
;
671 } else if (opc2
== 1) {
672 return MISCREG_MVBAR
;
674 } else if (crm
== 1) {
678 } else if (crm
== 8) {
681 return MISCREG_ICC_IAR0
;
683 return MISCREG_ICC_EOIR0
;
685 return MISCREG_ICC_HPPIR0
;
687 return MISCREG_ICC_BPR0
;
689 return MISCREG_ICC_AP0R0
;
691 return MISCREG_ICC_AP0R1
;
693 return MISCREG_ICC_AP0R2
;
695 return MISCREG_ICC_AP0R3
;
697 } else if (crm
== 9) {
700 return MISCREG_ICC_AP1R0
;
702 return MISCREG_ICC_AP1R1
;
704 return MISCREG_ICC_AP1R2
;
706 return MISCREG_ICC_AP1R3
;
708 } else if (crm
== 11) {
711 return MISCREG_ICC_DIR
;
713 return MISCREG_ICC_RPR
;
715 } else if (crm
== 12) {
718 return MISCREG_ICC_IAR1
;
720 return MISCREG_ICC_EOIR1
;
722 return MISCREG_ICC_HPPIR1
;
724 return MISCREG_ICC_BPR1
;
726 return MISCREG_ICC_CTLR
;
728 return MISCREG_ICC_SRE
;
730 return MISCREG_ICC_IGRPEN0
;
732 return MISCREG_ICC_IGRPEN1
;
735 } else if (opc1
== 4) {
736 if (crm
== 0 && opc2
== 0) {
737 return MISCREG_HVBAR
;
738 } else if (crm
== 8) {
741 return MISCREG_ICH_AP0R0
;
743 return MISCREG_ICH_AP0R1
;
745 return MISCREG_ICH_AP0R2
;
747 return MISCREG_ICH_AP0R3
;
749 } else if (crm
== 9) {
752 return MISCREG_ICH_AP1R0
;
754 return MISCREG_ICH_AP1R1
;
756 return MISCREG_ICH_AP1R2
;
758 return MISCREG_ICH_AP1R3
;
760 return MISCREG_ICC_HSRE
;
762 } else if (crm
== 11) {
765 return MISCREG_ICH_HCR
;
767 return MISCREG_ICH_VTR
;
769 return MISCREG_ICH_MISR
;
771 return MISCREG_ICH_EISR
;
773 return MISCREG_ICH_ELRSR
;
775 return MISCREG_ICH_VMCR
;
777 } else if (crm
== 12) {
780 return MISCREG_ICH_LR0
;
782 return MISCREG_ICH_LR1
;
784 return MISCREG_ICH_LR2
;
786 return MISCREG_ICH_LR3
;
788 return MISCREG_ICH_LR4
;
790 return MISCREG_ICH_LR5
;
792 return MISCREG_ICH_LR6
;
794 return MISCREG_ICH_LR7
;
796 } else if (crm
== 13) {
799 return MISCREG_ICH_LR8
;
801 return MISCREG_ICH_LR9
;
803 return MISCREG_ICH_LR10
;
805 return MISCREG_ICH_LR11
;
807 return MISCREG_ICH_LR12
;
809 return MISCREG_ICH_LR13
;
811 return MISCREG_ICH_LR14
;
813 return MISCREG_ICH_LR15
;
815 } else if (crm
== 14) {
818 return MISCREG_ICH_LRC0
;
820 return MISCREG_ICH_LRC1
;
822 return MISCREG_ICH_LRC2
;
824 return MISCREG_ICH_LRC3
;
826 return MISCREG_ICH_LRC4
;
828 return MISCREG_ICH_LRC5
;
830 return MISCREG_ICH_LRC6
;
832 return MISCREG_ICH_LRC7
;
834 } else if (crm
== 15) {
837 return MISCREG_ICH_LRC8
;
839 return MISCREG_ICH_LRC9
;
841 return MISCREG_ICH_LRC10
;
843 return MISCREG_ICH_LRC11
;
845 return MISCREG_ICH_LRC12
;
847 return MISCREG_ICH_LRC13
;
849 return MISCREG_ICH_LRC14
;
851 return MISCREG_ICH_LRC15
;
854 } else if (opc1
== 6) {
858 return MISCREG_ICC_MCTLR
;
860 return MISCREG_ICC_MSRE
;
862 return MISCREG_ICC_MGRPEN1
;
872 return MISCREG_FCSEIDR
;
874 return MISCREG_CONTEXTIDR
;
876 return MISCREG_TPIDRURW
;
878 return MISCREG_TPIDRURO
;
880 return MISCREG_TPIDRPRW
;
883 } else if (opc1
== 4) {
884 if (crm
== 0 && opc2
== 2)
885 return MISCREG_HTPIDR
;
893 return MISCREG_CNTFRQ
;
897 return MISCREG_CNTKCTL
;
901 return MISCREG_CNTP_TVAL
;
903 return MISCREG_CNTP_CTL
;
907 return MISCREG_CNTV_TVAL
;
909 return MISCREG_CNTV_CTL
;
912 } else if (opc1
== 4) {
913 if (crm
== 1 && opc2
== 0) {
914 return MISCREG_CNTHCTL
;
915 } else if (crm
== 2) {
917 return MISCREG_CNTHP_TVAL
;
919 return MISCREG_CNTHP_CTL
;
924 // Implementation defined
925 return MISCREG_IMPDEF_UNIMPL
;
927 // Unrecognized register
928 return MISCREG_CP15_UNIMPL
;
932 decodeCP15Reg64(unsigned crm
, unsigned opc1
)
938 return MISCREG_TTBR0
;
940 return MISCREG_TTBR1
;
942 return MISCREG_HTTBR
;
944 return MISCREG_VTTBR
;
954 return MISCREG_CNTPCT
;
956 return MISCREG_CNTVCT
;
958 return MISCREG_CNTP_CVAL
;
960 return MISCREG_CNTV_CVAL
;
962 return MISCREG_CNTVOFF
;
964 return MISCREG_CNTHP_CVAL
;
970 return MISCREG_ICC_SGI1R
;
972 return MISCREG_ICC_ASGI1R
;
974 return MISCREG_ICC_SGI0R
;
981 return MISCREG_CPUMERRSR
;
983 return MISCREG_L2MERRSR
;
986 // Unrecognized register
987 return MISCREG_CP15_UNIMPL
;
990 std::tuple
<bool, bool>
991 canReadCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
993 bool secure
= !scr
.ns
;
994 bool canRead
= false;
995 bool undefined
= false;
999 canRead
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
1000 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1006 case MODE_UNDEFINED
:
1008 canRead
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1009 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1012 canRead
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1013 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1016 canRead
= miscRegInfo
[reg
][MISCREG_HYP_RD
];
1021 // can't do permissions checkes on the root of a banked pair of regs
1022 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1023 return std::make_tuple(canRead
, undefined
);
1026 std::tuple
<bool, bool>
1027 canWriteCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
)
1029 bool secure
= !scr
.ns
;
1030 bool canWrite
= false;
1031 bool undefined
= false;
1033 switch (cpsr
.mode
) {
1035 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1036 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1042 case MODE_UNDEFINED
:
1044 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1045 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1048 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1049 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1052 canWrite
= miscRegInfo
[reg
][MISCREG_HYP_WR
];
1057 // can't do permissions checkes on the root of a banked pair of regs
1058 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1059 return std::make_tuple(canWrite
, undefined
);
1063 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
)
1065 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1066 return snsBankedIndex(reg
, tc
, scr
.ns
);
1070 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
, bool ns
)
1072 int reg_as_int
= static_cast<int>(reg
);
1073 if (miscRegInfo
[reg
][MISCREG_BANKED
]) {
1074 reg_as_int
+= (ArmSystem::haveSecurity(tc
) &&
1075 !ArmSystem::highestELIs64(tc
) && !ns
) ? 2 : 1;
1081 snsBankedIndex64(MiscRegIndex reg
, ThreadContext
*tc
)
1083 auto *isa
= static_cast<ArmISA::ISA
*>(tc
->getIsaPtr());
1084 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1085 return isa
->snsBankedIndex64(reg
, scr
.ns
);
1089 * If the reg is a child reg of a banked set, then the parent is the last
1090 * banked one in the list. This is messy, and the wish is to eventually have
1091 * the bitmap replaced with a better data structure. the preUnflatten function
1092 * initializes a lookup table to speed up the search for these banked
1096 int unflattenResultMiscReg
[NUM_MISCREGS
];
1099 preUnflattenMiscReg()
1102 for (int i
= 0 ; i
< NUM_MISCREGS
; i
++){
1103 if (miscRegInfo
[i
][MISCREG_BANKED
])
1105 if (miscRegInfo
[i
][MISCREG_BANKED_CHILD
])
1106 unflattenResultMiscReg
[i
] = reg
;
1108 unflattenResultMiscReg
[i
] = i
;
1109 // if this assert fails, no parent was found, and something is broken
1110 assert(unflattenResultMiscReg
[i
] > -1);
1115 unflattenMiscReg(int reg
)
1117 return unflattenResultMiscReg
[reg
];
1121 canReadAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1124 // Check for SP_EL0 access while SPSEL == 0
1125 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1128 // Check for RVBAR access
1129 if (reg
== MISCREG_RVBAR_EL1
) {
1130 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1131 if (highest_el
== EL2
|| highest_el
== EL3
)
1134 if (reg
== MISCREG_RVBAR_EL2
) {
1135 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1136 if (highest_el
== EL3
)
1140 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1141 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1143 switch (currEL(cpsr
)) {
1145 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
1146 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1148 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1149 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1151 return el2_host
? miscRegInfo
[reg
][MISCREG_HYP_E2H_RD
] :
1152 miscRegInfo
[reg
][MISCREG_HYP_RD
];
1154 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_RD
] :
1155 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1156 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1158 panic("Invalid exception level");
1163 canWriteAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1166 // Check for SP_EL0 access while SPSEL == 0
1167 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1169 ExceptionLevel el
= currEL(cpsr
);
1170 if (reg
== MISCREG_DAIF
) {
1171 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1172 if (el
== EL0
&& !sctlr
.uma
)
1175 if (FullSystem
&& reg
== MISCREG_DC_ZVA_Xt
) {
1176 // In syscall-emulation mode, this test is skipped and DCZVA is always
1178 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1179 if (el
== EL0
&& !sctlr
.dze
)
1182 if (reg
== MISCREG_DC_CVAC_Xt
|| reg
== MISCREG_DC_CIVAC_Xt
) {
1183 SCTLR sctlr
= tc
->readMiscReg(MISCREG_SCTLR_EL1
);
1184 if (el
== EL0
&& !sctlr
.uci
)
1188 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1189 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1193 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1194 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1196 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1197 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1199 return el2_host
? miscRegInfo
[reg
][MISCREG_HYP_E2H_WR
] :
1200 miscRegInfo
[reg
][MISCREG_HYP_WR
];
1202 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_WR
] :
1203 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1204 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1206 panic("Invalid exception level");
1211 decodeAArch64SysReg(unsigned op0
, unsigned op1
,
1212 unsigned crn
, unsigned crm
,
1225 return MISCREG_IC_IALLUIS
;
1231 return MISCREG_IC_IALLU
;
1237 return MISCREG_DC_IVAC_Xt
;
1239 return MISCREG_DC_ISW_Xt
;
1245 return MISCREG_AT_S1E1R_Xt
;
1247 return MISCREG_AT_S1E1W_Xt
;
1249 return MISCREG_AT_S1E0R_Xt
;
1251 return MISCREG_AT_S1E0W_Xt
;
1257 return MISCREG_DC_CSW_Xt
;
1263 return MISCREG_DC_CISW_Xt
;
1273 return MISCREG_DC_ZVA_Xt
;
1279 return MISCREG_IC_IVAU_Xt
;
1285 return MISCREG_DC_CVAC_Xt
;
1291 return MISCREG_DC_CVAU_Xt
;
1297 return MISCREG_DC_CIVAC_Xt
;
1307 return MISCREG_AT_S1E2R_Xt
;
1309 return MISCREG_AT_S1E2W_Xt
;
1311 return MISCREG_AT_S12E1R_Xt
;
1313 return MISCREG_AT_S12E1W_Xt
;
1315 return MISCREG_AT_S12E0R_Xt
;
1317 return MISCREG_AT_S12E0W_Xt
;
1327 return MISCREG_AT_S1E3R_Xt
;
1329 return MISCREG_AT_S1E3W_Xt
;
1343 return MISCREG_TLBI_VMALLE1IS
;
1345 return MISCREG_TLBI_VAE1IS_Xt
;
1347 return MISCREG_TLBI_ASIDE1IS_Xt
;
1349 return MISCREG_TLBI_VAAE1IS_Xt
;
1351 return MISCREG_TLBI_VALE1IS_Xt
;
1353 return MISCREG_TLBI_VAALE1IS_Xt
;
1359 return MISCREG_TLBI_VMALLE1
;
1361 return MISCREG_TLBI_VAE1_Xt
;
1363 return MISCREG_TLBI_ASIDE1_Xt
;
1365 return MISCREG_TLBI_VAAE1_Xt
;
1367 return MISCREG_TLBI_VALE1_Xt
;
1369 return MISCREG_TLBI_VAALE1_Xt
;
1379 return MISCREG_TLBI_IPAS2E1IS_Xt
;
1381 return MISCREG_TLBI_IPAS2LE1IS_Xt
;
1387 return MISCREG_TLBI_ALLE2IS
;
1389 return MISCREG_TLBI_VAE2IS_Xt
;
1391 return MISCREG_TLBI_ALLE1IS
;
1393 return MISCREG_TLBI_VALE2IS_Xt
;
1395 return MISCREG_TLBI_VMALLS12E1IS
;
1401 return MISCREG_TLBI_IPAS2E1_Xt
;
1403 return MISCREG_TLBI_IPAS2LE1_Xt
;
1409 return MISCREG_TLBI_ALLE2
;
1411 return MISCREG_TLBI_VAE2_Xt
;
1413 return MISCREG_TLBI_ALLE1
;
1415 return MISCREG_TLBI_VALE2_Xt
;
1417 return MISCREG_TLBI_VMALLS12E1
;
1427 return MISCREG_TLBI_ALLE3IS
;
1429 return MISCREG_TLBI_VAE3IS_Xt
;
1431 return MISCREG_TLBI_VALE3IS_Xt
;
1437 return MISCREG_TLBI_ALLE3
;
1439 return MISCREG_TLBI_VAE3_Xt
;
1441 return MISCREG_TLBI_VALE3_Xt
;
1450 // SYS Instruction with CRn = { 11, 15 }
1451 // (Trappable by HCR_EL2.TIDCP)
1452 return MISCREG_IMPDEF_UNIMPL
;
1464 return MISCREG_OSDTRRX_EL1
;
1466 return MISCREG_DBGBVR0_EL1
;
1468 return MISCREG_DBGBCR0_EL1
;
1470 return MISCREG_DBGWVR0_EL1
;
1472 return MISCREG_DBGWCR0_EL1
;
1478 return MISCREG_DBGBVR1_EL1
;
1480 return MISCREG_DBGBCR1_EL1
;
1482 return MISCREG_DBGWVR1_EL1
;
1484 return MISCREG_DBGWCR1_EL1
;
1490 return MISCREG_MDCCINT_EL1
;
1492 return MISCREG_MDSCR_EL1
;
1494 return MISCREG_DBGBVR2_EL1
;
1496 return MISCREG_DBGBCR2_EL1
;
1498 return MISCREG_DBGWVR2_EL1
;
1500 return MISCREG_DBGWCR2_EL1
;
1506 return MISCREG_OSDTRTX_EL1
;
1508 return MISCREG_DBGBVR3_EL1
;
1510 return MISCREG_DBGBCR3_EL1
;
1512 return MISCREG_DBGWVR3_EL1
;
1514 return MISCREG_DBGWCR3_EL1
;
1520 return MISCREG_DBGBVR4_EL1
;
1522 return MISCREG_DBGBCR4_EL1
;
1528 return MISCREG_DBGBVR5_EL1
;
1530 return MISCREG_DBGBCR5_EL1
;
1536 return MISCREG_OSECCR_EL1
;
1546 return MISCREG_TEECR32_EL1
;
1556 return MISCREG_MDCCSR_EL0
;
1562 return MISCREG_MDDTR_EL0
;
1568 return MISCREG_MDDTRRX_EL0
;
1578 return MISCREG_DBGVCR32_EL2
;
1592 return MISCREG_MDRAR_EL1
;
1594 return MISCREG_OSLAR_EL1
;
1600 return MISCREG_OSLSR_EL1
;
1606 return MISCREG_OSDLR_EL1
;
1612 return MISCREG_DBGPRCR_EL1
;
1622 return MISCREG_TEEHBR32_EL1
;
1636 return MISCREG_DBGCLAIMSET_EL1
;
1642 return MISCREG_DBGCLAIMCLR_EL1
;
1648 return MISCREG_DBGAUTHSTATUS_EL1
;
1666 return MISCREG_MIDR_EL1
;
1668 return MISCREG_MPIDR_EL1
;
1670 return MISCREG_REVIDR_EL1
;
1676 return MISCREG_ID_PFR0_EL1
;
1678 return MISCREG_ID_PFR1_EL1
;
1680 return MISCREG_ID_DFR0_EL1
;
1682 return MISCREG_ID_AFR0_EL1
;
1684 return MISCREG_ID_MMFR0_EL1
;
1686 return MISCREG_ID_MMFR1_EL1
;
1688 return MISCREG_ID_MMFR2_EL1
;
1690 return MISCREG_ID_MMFR3_EL1
;
1696 return MISCREG_ID_ISAR0_EL1
;
1698 return MISCREG_ID_ISAR1_EL1
;
1700 return MISCREG_ID_ISAR2_EL1
;
1702 return MISCREG_ID_ISAR3_EL1
;
1704 return MISCREG_ID_ISAR4_EL1
;
1706 return MISCREG_ID_ISAR5_EL1
;
1712 return MISCREG_MVFR0_EL1
;
1714 return MISCREG_MVFR1_EL1
;
1716 return MISCREG_MVFR2_EL1
;
1724 return MISCREG_ID_AA64PFR0_EL1
;
1726 return MISCREG_ID_AA64PFR1_EL1
;
1730 return MISCREG_ID_AA64ZFR0_EL1
;
1738 return MISCREG_ID_AA64DFR0_EL1
;
1740 return MISCREG_ID_AA64DFR1_EL1
;
1742 return MISCREG_ID_AA64AFR0_EL1
;
1744 return MISCREG_ID_AA64AFR1_EL1
;
1755 return MISCREG_ID_AA64ISAR0_EL1
;
1757 return MISCREG_ID_AA64ISAR1_EL1
;
1765 return MISCREG_ID_AA64MMFR0_EL1
;
1767 return MISCREG_ID_AA64MMFR1_EL1
;
1769 return MISCREG_ID_AA64MMFR2_EL1
;
1781 return MISCREG_CCSIDR_EL1
;
1783 return MISCREG_CLIDR_EL1
;
1785 return MISCREG_AIDR_EL1
;
1795 return MISCREG_CSSELR_EL1
;
1805 return MISCREG_CTR_EL0
;
1807 return MISCREG_DCZID_EL0
;
1817 return MISCREG_VPIDR_EL2
;
1819 return MISCREG_VMPIDR_EL2
;
1833 return MISCREG_SCTLR_EL1
;
1835 return MISCREG_ACTLR_EL1
;
1837 return MISCREG_CPACR_EL1
;
1843 return MISCREG_ZCR_EL1
;
1853 return MISCREG_SCTLR_EL2
;
1855 return MISCREG_ACTLR_EL2
;
1861 return MISCREG_HCR_EL2
;
1863 return MISCREG_MDCR_EL2
;
1865 return MISCREG_CPTR_EL2
;
1867 return MISCREG_HSTR_EL2
;
1869 return MISCREG_HACR_EL2
;
1875 return MISCREG_ZCR_EL2
;
1885 return MISCREG_ZCR_EL12
;
1895 return MISCREG_SCTLR_EL3
;
1897 return MISCREG_ACTLR_EL3
;
1903 return MISCREG_SCR_EL3
;
1905 return MISCREG_SDER32_EL3
;
1907 return MISCREG_CPTR_EL3
;
1913 return MISCREG_ZCR_EL3
;
1919 return MISCREG_MDCR_EL3
;
1933 return MISCREG_TTBR0_EL1
;
1935 return MISCREG_TTBR1_EL1
;
1937 return MISCREG_TCR_EL1
;
1947 return MISCREG_TTBR0_EL2
;
1949 return MISCREG_TTBR1_EL2
;
1951 return MISCREG_TCR_EL2
;
1957 return MISCREG_VTTBR_EL2
;
1959 return MISCREG_VTCR_EL2
;
1969 return MISCREG_TTBR0_EL3
;
1971 return MISCREG_TCR_EL3
;
1985 return MISCREG_DACR32_EL2
;
1999 return MISCREG_SPSR_EL1
;
2001 return MISCREG_ELR_EL1
;
2007 return MISCREG_SP_EL0
;
2013 return MISCREG_SPSEL
;
2015 return MISCREG_CURRENTEL
;
2023 return MISCREG_ICC_PMR_EL1
;
2033 return MISCREG_NZCV
;
2035 return MISCREG_DAIF
;
2041 return MISCREG_FPCR
;
2043 return MISCREG_FPSR
;
2049 return MISCREG_DSPSR_EL0
;
2051 return MISCREG_DLR_EL0
;
2061 return MISCREG_SPSR_EL2
;
2063 return MISCREG_ELR_EL2
;
2069 return MISCREG_SP_EL1
;
2075 return MISCREG_SPSR_IRQ_AA64
;
2077 return MISCREG_SPSR_ABT_AA64
;
2079 return MISCREG_SPSR_UND_AA64
;
2081 return MISCREG_SPSR_FIQ_AA64
;
2091 return MISCREG_SPSR_EL3
;
2093 return MISCREG_ELR_EL3
;
2099 return MISCREG_SP_EL2
;
2113 return MISCREG_AFSR0_EL1
;
2115 return MISCREG_AFSR1_EL1
;
2121 return MISCREG_ESR_EL1
;
2127 return MISCREG_ERRIDR_EL1
;
2129 return MISCREG_ERRSELR_EL1
;
2135 return MISCREG_ERXFR_EL1
;
2137 return MISCREG_ERXCTLR_EL1
;
2139 return MISCREG_ERXSTATUS_EL1
;
2141 return MISCREG_ERXADDR_EL1
;
2147 return MISCREG_ERXMISC0_EL1
;
2149 return MISCREG_ERXMISC1_EL1
;
2159 return MISCREG_IFSR32_EL2
;
2165 return MISCREG_AFSR0_EL2
;
2167 return MISCREG_AFSR1_EL2
;
2173 return MISCREG_ESR_EL2
;
2175 return MISCREG_VSESR_EL2
;
2181 return MISCREG_FPEXC32_EL2
;
2191 return MISCREG_AFSR0_EL3
;
2193 return MISCREG_AFSR1_EL3
;
2199 return MISCREG_ESR_EL3
;
2213 return MISCREG_FAR_EL1
;
2223 return MISCREG_FAR_EL2
;
2225 return MISCREG_HPFAR_EL2
;
2235 return MISCREG_FAR_EL3
;
2249 return MISCREG_PAR_EL1
;
2263 return MISCREG_PMINTENSET_EL1
;
2265 return MISCREG_PMINTENCLR_EL1
;
2275 return MISCREG_PMCR_EL0
;
2277 return MISCREG_PMCNTENSET_EL0
;
2279 return MISCREG_PMCNTENCLR_EL0
;
2281 return MISCREG_PMOVSCLR_EL0
;
2283 return MISCREG_PMSWINC_EL0
;
2285 return MISCREG_PMSELR_EL0
;
2287 return MISCREG_PMCEID0_EL0
;
2289 return MISCREG_PMCEID1_EL0
;
2295 return MISCREG_PMCCNTR_EL0
;
2297 return MISCREG_PMXEVTYPER_EL0
;
2299 return MISCREG_PMXEVCNTR_EL0
;
2305 return MISCREG_PMUSERENR_EL0
;
2307 return MISCREG_PMOVSSET_EL0
;
2321 return MISCREG_MAIR_EL1
;
2327 return MISCREG_AMAIR_EL1
;
2337 return MISCREG_MAIR_EL2
;
2343 return MISCREG_AMAIR_EL2
;
2353 return MISCREG_MAIR_EL3
;
2359 return MISCREG_AMAIR_EL3
;
2373 return MISCREG_L2CTLR_EL1
;
2375 return MISCREG_L2ECTLR_EL1
;
2381 // S3_<op1>_11_<Cm>_<op2>
2382 return MISCREG_IMPDEF_UNIMPL
;
2392 return MISCREG_VBAR_EL1
;
2394 return MISCREG_RVBAR_EL1
;
2400 return MISCREG_ISR_EL1
;
2402 return MISCREG_DISR_EL1
;
2408 return MISCREG_ICC_IAR0_EL1
;
2410 return MISCREG_ICC_EOIR0_EL1
;
2412 return MISCREG_ICC_HPPIR0_EL1
;
2414 return MISCREG_ICC_BPR0_EL1
;
2416 return MISCREG_ICC_AP0R0_EL1
;
2418 return MISCREG_ICC_AP0R1_EL1
;
2420 return MISCREG_ICC_AP0R2_EL1
;
2422 return MISCREG_ICC_AP0R3_EL1
;
2428 return MISCREG_ICC_AP1R0_EL1
;
2430 return MISCREG_ICC_AP1R1_EL1
;
2432 return MISCREG_ICC_AP1R2_EL1
;
2434 return MISCREG_ICC_AP1R3_EL1
;
2440 return MISCREG_ICC_DIR_EL1
;
2442 return MISCREG_ICC_RPR_EL1
;
2444 return MISCREG_ICC_SGI1R_EL1
;
2446 return MISCREG_ICC_ASGI1R_EL1
;
2448 return MISCREG_ICC_SGI0R_EL1
;
2454 return MISCREG_ICC_IAR1_EL1
;
2456 return MISCREG_ICC_EOIR1_EL1
;
2458 return MISCREG_ICC_HPPIR1_EL1
;
2460 return MISCREG_ICC_BPR1_EL1
;
2462 return MISCREG_ICC_CTLR_EL1
;
2464 return MISCREG_ICC_SRE_EL1
;
2466 return MISCREG_ICC_IGRPEN0_EL1
;
2468 return MISCREG_ICC_IGRPEN1_EL1
;
2478 return MISCREG_VBAR_EL2
;
2480 return MISCREG_RVBAR_EL2
;
2486 return MISCREG_VDISR_EL2
;
2492 return MISCREG_ICH_AP0R0_EL2
;
2494 return MISCREG_ICH_AP0R1_EL2
;
2496 return MISCREG_ICH_AP0R2_EL2
;
2498 return MISCREG_ICH_AP0R3_EL2
;
2504 return MISCREG_ICH_AP1R0_EL2
;
2506 return MISCREG_ICH_AP1R1_EL2
;
2508 return MISCREG_ICH_AP1R2_EL2
;
2510 return MISCREG_ICH_AP1R3_EL2
;
2512 return MISCREG_ICC_SRE_EL2
;
2518 return MISCREG_ICH_HCR_EL2
;
2520 return MISCREG_ICH_VTR_EL2
;
2522 return MISCREG_ICH_MISR_EL2
;
2524 return MISCREG_ICH_EISR_EL2
;
2526 return MISCREG_ICH_ELRSR_EL2
;
2528 return MISCREG_ICH_VMCR_EL2
;
2534 return MISCREG_ICH_LR0_EL2
;
2536 return MISCREG_ICH_LR1_EL2
;
2538 return MISCREG_ICH_LR2_EL2
;
2540 return MISCREG_ICH_LR3_EL2
;
2542 return MISCREG_ICH_LR4_EL2
;
2544 return MISCREG_ICH_LR5_EL2
;
2546 return MISCREG_ICH_LR6_EL2
;
2548 return MISCREG_ICH_LR7_EL2
;
2554 return MISCREG_ICH_LR8_EL2
;
2556 return MISCREG_ICH_LR9_EL2
;
2558 return MISCREG_ICH_LR10_EL2
;
2560 return MISCREG_ICH_LR11_EL2
;
2562 return MISCREG_ICH_LR12_EL2
;
2564 return MISCREG_ICH_LR13_EL2
;
2566 return MISCREG_ICH_LR14_EL2
;
2568 return MISCREG_ICH_LR15_EL2
;
2578 return MISCREG_VBAR_EL3
;
2580 return MISCREG_RVBAR_EL3
;
2582 return MISCREG_RMR_EL3
;
2588 return MISCREG_ICC_CTLR_EL3
;
2590 return MISCREG_ICC_SRE_EL3
;
2592 return MISCREG_ICC_IGRPEN1_EL3
;
2606 return MISCREG_CONTEXTIDR_EL1
;
2608 return MISCREG_TPIDR_EL1
;
2618 return MISCREG_TPIDR_EL0
;
2620 return MISCREG_TPIDRRO_EL0
;
2630 return MISCREG_CONTEXTIDR_EL2
;
2632 return MISCREG_TPIDR_EL2
;
2642 return MISCREG_TPIDR_EL3
;
2656 return MISCREG_CNTKCTL_EL1
;
2666 return MISCREG_CNTFRQ_EL0
;
2668 return MISCREG_CNTPCT_EL0
;
2670 return MISCREG_CNTVCT_EL0
;
2676 return MISCREG_CNTP_TVAL_EL0
;
2678 return MISCREG_CNTP_CTL_EL0
;
2680 return MISCREG_CNTP_CVAL_EL0
;
2686 return MISCREG_CNTV_TVAL_EL0
;
2688 return MISCREG_CNTV_CTL_EL0
;
2690 return MISCREG_CNTV_CVAL_EL0
;
2696 return MISCREG_PMEVCNTR0_EL0
;
2698 return MISCREG_PMEVCNTR1_EL0
;
2700 return MISCREG_PMEVCNTR2_EL0
;
2702 return MISCREG_PMEVCNTR3_EL0
;
2704 return MISCREG_PMEVCNTR4_EL0
;
2706 return MISCREG_PMEVCNTR5_EL0
;
2712 return MISCREG_PMEVTYPER0_EL0
;
2714 return MISCREG_PMEVTYPER1_EL0
;
2716 return MISCREG_PMEVTYPER2_EL0
;
2718 return MISCREG_PMEVTYPER3_EL0
;
2720 return MISCREG_PMEVTYPER4_EL0
;
2722 return MISCREG_PMEVTYPER5_EL0
;
2728 return MISCREG_PMCCFILTR_EL0
;
2737 return MISCREG_CNTVOFF_EL2
;
2743 return MISCREG_CNTHCTL_EL2
;
2749 return MISCREG_CNTHP_TVAL_EL2
;
2751 return MISCREG_CNTHP_CTL_EL2
;
2753 return MISCREG_CNTHP_CVAL_EL2
;
2759 return MISCREG_CNTHV_TVAL_EL2
;
2761 return MISCREG_CNTHV_CTL_EL2
;
2763 return MISCREG_CNTHV_CVAL_EL2
;
2773 return MISCREG_CNTPS_TVAL_EL1
;
2775 return MISCREG_CNTPS_CTL_EL1
;
2777 return MISCREG_CNTPS_CVAL_EL1
;
2791 return MISCREG_IL1DATA0_EL1
;
2793 return MISCREG_IL1DATA1_EL1
;
2795 return MISCREG_IL1DATA2_EL1
;
2797 return MISCREG_IL1DATA3_EL1
;
2803 return MISCREG_DL1DATA0_EL1
;
2805 return MISCREG_DL1DATA1_EL1
;
2807 return MISCREG_DL1DATA2_EL1
;
2809 return MISCREG_DL1DATA3_EL1
;
2811 return MISCREG_DL1DATA4_EL1
;
2821 return MISCREG_L2ACTLR_EL1
;
2827 return MISCREG_CPUACTLR_EL1
;
2829 return MISCREG_CPUECTLR_EL1
;
2831 return MISCREG_CPUMERRSR_EL1
;
2833 return MISCREG_L2MERRSR_EL1
;
2839 return MISCREG_CBAR_EL1
;
2846 // S3_<op1>_15_<Cm>_<op2>
2847 return MISCREG_IMPDEF_UNIMPL
;
2852 return MISCREG_UNKNOWN
;
2855 bitset
<NUM_MISCREG_INFOS
> miscRegInfo
[NUM_MISCREGS
]; // initialized below
2858 ISA::initializeMiscRegMetadata()
2860 // the MiscReg metadata tables are shared across all instances of the
2861 // ISA object, so there's no need to initialize them multiple times.
2862 static bool completed
= false;
2866 // This boolean variable specifies if the system is running in aarch32 at
2867 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
2868 // is running in aarch64 (aarch32EL3 = false)
2869 bool aarch32EL3
= haveSecurity
&& !highestELIs64
;
2871 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
2875 // Implicit error synchronization event enable (Arm 8.2+), unsupported
2878 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
2880 bool LSMAOE
= false;
2882 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
2883 bool nTLSMD
= false;
2885 // Pointer authentication (Arm 8.3+), unsupported
2886 bool EnDA
= false; // using APDAKey_EL1 key of instr addrs in ELs 0,1
2887 bool EnDB
= false; // using APDBKey_EL1 key of instr addrs in ELs 0,1
2888 bool EnIA
= false; // using APIAKey_EL1 key of instr addrs in ELs 0,1
2889 bool EnIB
= false; // using APIBKey_EL1 key of instr addrs in ELs 0,1
2892 * Some registers alias with others, and therefore need to be translated.
2893 * When two mapping registers are given, they are the 32b lower and
2894 * upper halves, respectively, of the 64b register being mapped.
2895 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
2897 * NAM = "not architecturally mandated",
2898 * from ARM DDI 0487A.i, template text
2899 * "AArch64 System register ___ can be mapped to
2900 * AArch32 System register ___, but this is not
2901 * architecturally mandated."
2904 InitReg(MISCREG_CPSR
)
2906 InitReg(MISCREG_SPSR
)
2908 InitReg(MISCREG_SPSR_FIQ
)
2910 InitReg(MISCREG_SPSR_IRQ
)
2912 InitReg(MISCREG_SPSR_SVC
)
2914 InitReg(MISCREG_SPSR_MON
)
2916 InitReg(MISCREG_SPSR_ABT
)
2918 InitReg(MISCREG_SPSR_HYP
)
2920 InitReg(MISCREG_SPSR_UND
)
2922 InitReg(MISCREG_ELR_HYP
)
2924 InitReg(MISCREG_FPSID
)
2926 InitReg(MISCREG_FPSCR
)
2928 InitReg(MISCREG_MVFR1
)
2930 InitReg(MISCREG_MVFR0
)
2932 InitReg(MISCREG_FPEXC
)
2936 InitReg(MISCREG_CPSR_MODE
)
2938 InitReg(MISCREG_CPSR_Q
)
2940 InitReg(MISCREG_FPSCR_EXC
)
2942 InitReg(MISCREG_FPSCR_QC
)
2944 InitReg(MISCREG_LOCKADDR
)
2946 InitReg(MISCREG_LOCKFLAG
)
2948 InitReg(MISCREG_PRRR_MAIR0
)
2951 InitReg(MISCREG_PRRR_MAIR0_NS
)
2953 .privSecure(!aarch32EL3
)
2955 InitReg(MISCREG_PRRR_MAIR0_S
)
2958 InitReg(MISCREG_NMRR_MAIR1
)
2961 InitReg(MISCREG_NMRR_MAIR1_NS
)
2963 .privSecure(!aarch32EL3
)
2965 InitReg(MISCREG_NMRR_MAIR1_S
)
2968 InitReg(MISCREG_PMXEVTYPER_PMCCFILTR
)
2970 InitReg(MISCREG_SCTLR_RST
)
2972 InitReg(MISCREG_SEV_MAILBOX
)
2975 // AArch32 CP14 registers
2976 InitReg(MISCREG_DBGDIDR
)
2977 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2978 InitReg(MISCREG_DBGDSCRint
)
2979 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
2980 InitReg(MISCREG_DBGDCCINT
)
2983 InitReg(MISCREG_DBGDTRTXint
)
2986 InitReg(MISCREG_DBGDTRRXint
)
2989 InitReg(MISCREG_DBGWFAR
)
2992 InitReg(MISCREG_DBGVCR
)
2995 InitReg(MISCREG_DBGDTRRXext
)
2998 InitReg(MISCREG_DBGDSCRext
)
3002 InitReg(MISCREG_DBGDTRTXext
)
3005 InitReg(MISCREG_DBGOSECCR
)
3008 InitReg(MISCREG_DBGBVR0
)
3011 InitReg(MISCREG_DBGBVR1
)
3014 InitReg(MISCREG_DBGBVR2
)
3017 InitReg(MISCREG_DBGBVR3
)
3020 InitReg(MISCREG_DBGBVR4
)
3023 InitReg(MISCREG_DBGBVR5
)
3026 InitReg(MISCREG_DBGBCR0
)
3029 InitReg(MISCREG_DBGBCR1
)
3032 InitReg(MISCREG_DBGBCR2
)
3035 InitReg(MISCREG_DBGBCR3
)
3038 InitReg(MISCREG_DBGBCR4
)
3041 InitReg(MISCREG_DBGBCR5
)
3044 InitReg(MISCREG_DBGWVR0
)
3047 InitReg(MISCREG_DBGWVR1
)
3050 InitReg(MISCREG_DBGWVR2
)
3053 InitReg(MISCREG_DBGWVR3
)
3056 InitReg(MISCREG_DBGWCR0
)
3059 InitReg(MISCREG_DBGWCR1
)
3062 InitReg(MISCREG_DBGWCR2
)
3065 InitReg(MISCREG_DBGWCR3
)
3068 InitReg(MISCREG_DBGDRAR
)
3070 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3071 InitReg(MISCREG_DBGBXVR4
)
3074 InitReg(MISCREG_DBGBXVR5
)
3077 InitReg(MISCREG_DBGOSLAR
)
3079 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3080 InitReg(MISCREG_DBGOSLSR
)
3082 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3083 InitReg(MISCREG_DBGOSDLR
)
3086 InitReg(MISCREG_DBGPRCR
)
3089 InitReg(MISCREG_DBGDSAR
)
3091 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3092 InitReg(MISCREG_DBGCLAIMSET
)
3095 InitReg(MISCREG_DBGCLAIMCLR
)
3098 InitReg(MISCREG_DBGAUTHSTATUS
)
3100 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3101 InitReg(MISCREG_DBGDEVID2
)
3103 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3104 InitReg(MISCREG_DBGDEVID1
)
3106 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3107 InitReg(MISCREG_DBGDEVID0
)
3109 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3110 InitReg(MISCREG_TEECR
)
3113 InitReg(MISCREG_JIDR
)
3115 InitReg(MISCREG_TEEHBR
)
3117 InitReg(MISCREG_JOSCR
)
3119 InitReg(MISCREG_JMCR
)
3122 // AArch32 CP15 registers
3123 InitReg(MISCREG_MIDR
)
3124 .allPrivileges().exceptUserMode().writes(0);
3125 InitReg(MISCREG_CTR
)
3126 .allPrivileges().exceptUserMode().writes(0);
3127 InitReg(MISCREG_TCMTR
)
3128 .allPrivileges().exceptUserMode().writes(0);
3129 InitReg(MISCREG_TLBTR
)
3130 .allPrivileges().exceptUserMode().writes(0);
3131 InitReg(MISCREG_MPIDR
)
3132 .allPrivileges().exceptUserMode().writes(0);
3133 InitReg(MISCREG_REVIDR
)
3136 .allPrivileges().exceptUserMode().writes(0);
3137 InitReg(MISCREG_ID_PFR0
)
3138 .allPrivileges().exceptUserMode().writes(0);
3139 InitReg(MISCREG_ID_PFR1
)
3140 .allPrivileges().exceptUserMode().writes(0);
3141 InitReg(MISCREG_ID_DFR0
)
3142 .allPrivileges().exceptUserMode().writes(0);
3143 InitReg(MISCREG_ID_AFR0
)
3144 .allPrivileges().exceptUserMode().writes(0);
3145 InitReg(MISCREG_ID_MMFR0
)
3146 .allPrivileges().exceptUserMode().writes(0);
3147 InitReg(MISCREG_ID_MMFR1
)
3148 .allPrivileges().exceptUserMode().writes(0);
3149 InitReg(MISCREG_ID_MMFR2
)
3150 .allPrivileges().exceptUserMode().writes(0);
3151 InitReg(MISCREG_ID_MMFR3
)
3152 .allPrivileges().exceptUserMode().writes(0);
3153 InitReg(MISCREG_ID_ISAR0
)
3154 .allPrivileges().exceptUserMode().writes(0);
3155 InitReg(MISCREG_ID_ISAR1
)
3156 .allPrivileges().exceptUserMode().writes(0);
3157 InitReg(MISCREG_ID_ISAR2
)
3158 .allPrivileges().exceptUserMode().writes(0);
3159 InitReg(MISCREG_ID_ISAR3
)
3160 .allPrivileges().exceptUserMode().writes(0);
3161 InitReg(MISCREG_ID_ISAR4
)
3162 .allPrivileges().exceptUserMode().writes(0);
3163 InitReg(MISCREG_ID_ISAR5
)
3164 .allPrivileges().exceptUserMode().writes(0);
3165 InitReg(MISCREG_CCSIDR
)
3166 .allPrivileges().exceptUserMode().writes(0);
3167 InitReg(MISCREG_CLIDR
)
3168 .allPrivileges().exceptUserMode().writes(0);
3169 InitReg(MISCREG_AIDR
)
3170 .allPrivileges().exceptUserMode().writes(0);
3171 InitReg(MISCREG_CSSELR
)
3173 InitReg(MISCREG_CSSELR_NS
)
3175 .privSecure(!aarch32EL3
)
3176 .nonSecure().exceptUserMode();
3177 InitReg(MISCREG_CSSELR_S
)
3179 .secure().exceptUserMode();
3180 InitReg(MISCREG_VPIDR
)
3181 .hyp().monNonSecure();
3182 InitReg(MISCREG_VMPIDR
)
3183 .hyp().monNonSecure();
3184 InitReg(MISCREG_SCTLR
)
3186 // readMiscRegNoEffect() uses this metadata
3187 // despite using children (below) as backing store
3189 .res1(0x00400800 | (SPAN
? 0 : 0x800000)
3190 | (LSMAOE
? 0 : 0x10)
3191 | (nTLSMD
? 0 : 0x8));
3192 InitReg(MISCREG_SCTLR_NS
)
3194 .privSecure(!aarch32EL3
)
3195 .nonSecure().exceptUserMode();
3196 InitReg(MISCREG_SCTLR_S
)
3198 .secure().exceptUserMode();
3199 InitReg(MISCREG_ACTLR
)
3201 InitReg(MISCREG_ACTLR_NS
)
3203 .privSecure(!aarch32EL3
)
3204 .nonSecure().exceptUserMode();
3205 InitReg(MISCREG_ACTLR_S
)
3207 .secure().exceptUserMode();
3208 InitReg(MISCREG_CPACR
)
3209 .allPrivileges().exceptUserMode();
3210 InitReg(MISCREG_SCR
)
3211 .mon().secure().exceptUserMode()
3212 .res0(0xff40) // [31:16], [6]
3213 .res1(0x0030); // [5:4]
3214 InitReg(MISCREG_SDER
)
3216 InitReg(MISCREG_NSACR
)
3217 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3218 InitReg(MISCREG_HSCTLR
)
3219 .hyp().monNonSecure()
3220 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
3221 | (IESB
? 0 : 0x200000)
3222 | (EnDA
? 0 : 0x8000000)
3223 | (EnIB
? 0 : 0x40000000)
3224 | (EnIA
? 0 : 0x80000000))
3226 InitReg(MISCREG_HACTLR
)
3227 .hyp().monNonSecure();
3228 InitReg(MISCREG_HCR
)
3229 .hyp().monNonSecure()
3231 InitReg(MISCREG_HCR2
)
3232 .hyp().monNonSecure()
3234 InitReg(MISCREG_HDCR
)
3235 .hyp().monNonSecure();
3236 InitReg(MISCREG_HCPTR
)
3237 .hyp().monNonSecure();
3238 InitReg(MISCREG_HSTR
)
3239 .hyp().monNonSecure();
3240 InitReg(MISCREG_HACR
)
3243 .hyp().monNonSecure();
3244 InitReg(MISCREG_TTBR0
)
3246 InitReg(MISCREG_TTBR0_NS
)
3248 .privSecure(!aarch32EL3
)
3249 .nonSecure().exceptUserMode();
3250 InitReg(MISCREG_TTBR0_S
)
3252 .secure().exceptUserMode();
3253 InitReg(MISCREG_TTBR1
)
3255 InitReg(MISCREG_TTBR1_NS
)
3257 .privSecure(!aarch32EL3
)
3258 .nonSecure().exceptUserMode();
3259 InitReg(MISCREG_TTBR1_S
)
3261 .secure().exceptUserMode();
3262 InitReg(MISCREG_TTBCR
)
3264 InitReg(MISCREG_TTBCR_NS
)
3266 .privSecure(!aarch32EL3
)
3267 .nonSecure().exceptUserMode();
3268 InitReg(MISCREG_TTBCR_S
)
3270 .secure().exceptUserMode();
3271 InitReg(MISCREG_HTCR
)
3272 .hyp().monNonSecure();
3273 InitReg(MISCREG_VTCR
)
3274 .hyp().monNonSecure();
3275 InitReg(MISCREG_DACR
)
3277 InitReg(MISCREG_DACR_NS
)
3279 .privSecure(!aarch32EL3
)
3280 .nonSecure().exceptUserMode();
3281 InitReg(MISCREG_DACR_S
)
3283 .secure().exceptUserMode();
3284 InitReg(MISCREG_DFSR
)
3286 InitReg(MISCREG_DFSR_NS
)
3288 .privSecure(!aarch32EL3
)
3289 .nonSecure().exceptUserMode();
3290 InitReg(MISCREG_DFSR_S
)
3292 .secure().exceptUserMode();
3293 InitReg(MISCREG_IFSR
)
3295 InitReg(MISCREG_IFSR_NS
)
3297 .privSecure(!aarch32EL3
)
3298 .nonSecure().exceptUserMode();
3299 InitReg(MISCREG_IFSR_S
)
3301 .secure().exceptUserMode();
3302 InitReg(MISCREG_ADFSR
)
3306 InitReg(MISCREG_ADFSR_NS
)
3310 .privSecure(!aarch32EL3
)
3311 .nonSecure().exceptUserMode();
3312 InitReg(MISCREG_ADFSR_S
)
3316 .secure().exceptUserMode();
3317 InitReg(MISCREG_AIFSR
)
3321 InitReg(MISCREG_AIFSR_NS
)
3325 .privSecure(!aarch32EL3
)
3326 .nonSecure().exceptUserMode();
3327 InitReg(MISCREG_AIFSR_S
)
3331 .secure().exceptUserMode();
3332 InitReg(MISCREG_HADFSR
)
3333 .hyp().monNonSecure();
3334 InitReg(MISCREG_HAIFSR
)
3335 .hyp().monNonSecure();
3336 InitReg(MISCREG_HSR
)
3337 .hyp().monNonSecure();
3338 InitReg(MISCREG_DFAR
)
3340 InitReg(MISCREG_DFAR_NS
)
3342 .privSecure(!aarch32EL3
)
3343 .nonSecure().exceptUserMode();
3344 InitReg(MISCREG_DFAR_S
)
3346 .secure().exceptUserMode();
3347 InitReg(MISCREG_IFAR
)
3349 InitReg(MISCREG_IFAR_NS
)
3351 .privSecure(!aarch32EL3
)
3352 .nonSecure().exceptUserMode();
3353 InitReg(MISCREG_IFAR_S
)
3355 .secure().exceptUserMode();
3356 InitReg(MISCREG_HDFAR
)
3357 .hyp().monNonSecure();
3358 InitReg(MISCREG_HIFAR
)
3359 .hyp().monNonSecure();
3360 InitReg(MISCREG_HPFAR
)
3361 .hyp().monNonSecure();
3362 InitReg(MISCREG_ICIALLUIS
)
3365 .writes(1).exceptUserMode();
3366 InitReg(MISCREG_BPIALLIS
)
3369 .writes(1).exceptUserMode();
3370 InitReg(MISCREG_PAR
)
3372 InitReg(MISCREG_PAR_NS
)
3374 .privSecure(!aarch32EL3
)
3375 .nonSecure().exceptUserMode();
3376 InitReg(MISCREG_PAR_S
)
3378 .secure().exceptUserMode();
3379 InitReg(MISCREG_ICIALLU
)
3380 .writes(1).exceptUserMode();
3381 InitReg(MISCREG_ICIMVAU
)
3384 .writes(1).exceptUserMode();
3385 InitReg(MISCREG_CP15ISB
)
3387 InitReg(MISCREG_BPIALL
)
3390 .writes(1).exceptUserMode();
3391 InitReg(MISCREG_BPIMVA
)
3394 .writes(1).exceptUserMode();
3395 InitReg(MISCREG_DCIMVAC
)
3398 .writes(1).exceptUserMode();
3399 InitReg(MISCREG_DCISW
)
3402 .writes(1).exceptUserMode();
3403 InitReg(MISCREG_ATS1CPR
)
3404 .writes(1).exceptUserMode();
3405 InitReg(MISCREG_ATS1CPW
)
3406 .writes(1).exceptUserMode();
3407 InitReg(MISCREG_ATS1CUR
)
3408 .writes(1).exceptUserMode();
3409 InitReg(MISCREG_ATS1CUW
)
3410 .writes(1).exceptUserMode();
3411 InitReg(MISCREG_ATS12NSOPR
)
3412 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3413 InitReg(MISCREG_ATS12NSOPW
)
3414 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3415 InitReg(MISCREG_ATS12NSOUR
)
3416 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3417 InitReg(MISCREG_ATS12NSOUW
)
3418 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
3419 InitReg(MISCREG_DCCMVAC
)
3420 .writes(1).exceptUserMode();
3421 InitReg(MISCREG_DCCSW
)
3424 .writes(1).exceptUserMode();
3425 InitReg(MISCREG_CP15DSB
)
3427 InitReg(MISCREG_CP15DMB
)
3429 InitReg(MISCREG_DCCMVAU
)
3432 .writes(1).exceptUserMode();
3433 InitReg(MISCREG_DCCIMVAC
)
3436 .writes(1).exceptUserMode();
3437 InitReg(MISCREG_DCCISW
)
3440 .writes(1).exceptUserMode();
3441 InitReg(MISCREG_ATS1HR
)
3442 .monNonSecureWrite().hypWrite();
3443 InitReg(MISCREG_ATS1HW
)
3444 .monNonSecureWrite().hypWrite();
3445 InitReg(MISCREG_TLBIALLIS
)
3446 .writes(1).exceptUserMode();
3447 InitReg(MISCREG_TLBIMVAIS
)
3448 .writes(1).exceptUserMode();
3449 InitReg(MISCREG_TLBIASIDIS
)
3450 .writes(1).exceptUserMode();
3451 InitReg(MISCREG_TLBIMVAAIS
)
3452 .writes(1).exceptUserMode();
3453 InitReg(MISCREG_TLBIMVALIS
)
3454 .writes(1).exceptUserMode();
3455 InitReg(MISCREG_TLBIMVAALIS
)
3456 .writes(1).exceptUserMode();
3457 InitReg(MISCREG_ITLBIALL
)
3458 .writes(1).exceptUserMode();
3459 InitReg(MISCREG_ITLBIMVA
)
3460 .writes(1).exceptUserMode();
3461 InitReg(MISCREG_ITLBIASID
)
3462 .writes(1).exceptUserMode();
3463 InitReg(MISCREG_DTLBIALL
)
3464 .writes(1).exceptUserMode();
3465 InitReg(MISCREG_DTLBIMVA
)
3466 .writes(1).exceptUserMode();
3467 InitReg(MISCREG_DTLBIASID
)
3468 .writes(1).exceptUserMode();
3469 InitReg(MISCREG_TLBIALL
)
3470 .writes(1).exceptUserMode();
3471 InitReg(MISCREG_TLBIMVA
)
3472 .writes(1).exceptUserMode();
3473 InitReg(MISCREG_TLBIASID
)
3474 .writes(1).exceptUserMode();
3475 InitReg(MISCREG_TLBIMVAA
)
3476 .writes(1).exceptUserMode();
3477 InitReg(MISCREG_TLBIMVAL
)
3478 .writes(1).exceptUserMode();
3479 InitReg(MISCREG_TLBIMVAAL
)
3480 .writes(1).exceptUserMode();
3481 InitReg(MISCREG_TLBIIPAS2IS
)
3482 .monNonSecureWrite().hypWrite();
3483 InitReg(MISCREG_TLBIIPAS2LIS
)
3484 .monNonSecureWrite().hypWrite();
3485 InitReg(MISCREG_TLBIALLHIS
)
3486 .monNonSecureWrite().hypWrite();
3487 InitReg(MISCREG_TLBIMVAHIS
)
3488 .monNonSecureWrite().hypWrite();
3489 InitReg(MISCREG_TLBIALLNSNHIS
)
3490 .monNonSecureWrite().hypWrite();
3491 InitReg(MISCREG_TLBIMVALHIS
)
3492 .monNonSecureWrite().hypWrite();
3493 InitReg(MISCREG_TLBIIPAS2
)
3494 .monNonSecureWrite().hypWrite();
3495 InitReg(MISCREG_TLBIIPAS2L
)
3496 .monNonSecureWrite().hypWrite();
3497 InitReg(MISCREG_TLBIALLH
)
3498 .monNonSecureWrite().hypWrite();
3499 InitReg(MISCREG_TLBIMVAH
)
3500 .monNonSecureWrite().hypWrite();
3501 InitReg(MISCREG_TLBIALLNSNH
)
3502 .monNonSecureWrite().hypWrite();
3503 InitReg(MISCREG_TLBIMVALH
)
3504 .monNonSecureWrite().hypWrite();
3505 InitReg(MISCREG_PMCR
)
3507 InitReg(MISCREG_PMCNTENSET
)
3509 InitReg(MISCREG_PMCNTENCLR
)
3511 InitReg(MISCREG_PMOVSR
)
3513 InitReg(MISCREG_PMSWINC
)
3515 InitReg(MISCREG_PMSELR
)
3517 InitReg(MISCREG_PMCEID0
)
3519 InitReg(MISCREG_PMCEID1
)
3521 InitReg(MISCREG_PMCCNTR
)
3523 InitReg(MISCREG_PMXEVTYPER
)
3525 InitReg(MISCREG_PMCCFILTR
)
3527 InitReg(MISCREG_PMXEVCNTR
)
3529 InitReg(MISCREG_PMUSERENR
)
3530 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
3531 InitReg(MISCREG_PMINTENSET
)
3532 .allPrivileges().exceptUserMode();
3533 InitReg(MISCREG_PMINTENCLR
)
3534 .allPrivileges().exceptUserMode();
3535 InitReg(MISCREG_PMOVSSET
)
3538 InitReg(MISCREG_L2CTLR
)
3539 .allPrivileges().exceptUserMode();
3540 InitReg(MISCREG_L2ECTLR
)
3542 .allPrivileges().exceptUserMode();
3543 InitReg(MISCREG_PRRR
)
3545 InitReg(MISCREG_PRRR_NS
)
3547 .privSecure(!aarch32EL3
)
3548 .nonSecure().exceptUserMode();
3549 InitReg(MISCREG_PRRR_S
)
3551 .secure().exceptUserMode();
3552 InitReg(MISCREG_MAIR0
)
3554 InitReg(MISCREG_MAIR0_NS
)
3556 .privSecure(!aarch32EL3
)
3557 .nonSecure().exceptUserMode();
3558 InitReg(MISCREG_MAIR0_S
)
3560 .secure().exceptUserMode();
3561 InitReg(MISCREG_NMRR
)
3563 InitReg(MISCREG_NMRR_NS
)
3565 .privSecure(!aarch32EL3
)
3566 .nonSecure().exceptUserMode();
3567 InitReg(MISCREG_NMRR_S
)
3569 .secure().exceptUserMode();
3570 InitReg(MISCREG_MAIR1
)
3572 InitReg(MISCREG_MAIR1_NS
)
3574 .privSecure(!aarch32EL3
)
3575 .nonSecure().exceptUserMode();
3576 InitReg(MISCREG_MAIR1_S
)
3578 .secure().exceptUserMode();
3579 InitReg(MISCREG_AMAIR0
)
3581 InitReg(MISCREG_AMAIR0_NS
)
3583 .privSecure(!aarch32EL3
)
3584 .nonSecure().exceptUserMode();
3585 InitReg(MISCREG_AMAIR0_S
)
3587 .secure().exceptUserMode();
3588 InitReg(MISCREG_AMAIR1
)
3590 InitReg(MISCREG_AMAIR1_NS
)
3592 .privSecure(!aarch32EL3
)
3593 .nonSecure().exceptUserMode();
3594 InitReg(MISCREG_AMAIR1_S
)
3596 .secure().exceptUserMode();
3597 InitReg(MISCREG_HMAIR0
)
3598 .hyp().monNonSecure();
3599 InitReg(MISCREG_HMAIR1
)
3600 .hyp().monNonSecure();
3601 InitReg(MISCREG_HAMAIR0
)
3604 .hyp().monNonSecure();
3605 InitReg(MISCREG_HAMAIR1
)
3608 .hyp().monNonSecure();
3609 InitReg(MISCREG_VBAR
)
3611 InitReg(MISCREG_VBAR_NS
)
3613 .privSecure(!aarch32EL3
)
3614 .nonSecure().exceptUserMode();
3615 InitReg(MISCREG_VBAR_S
)
3617 .secure().exceptUserMode();
3618 InitReg(MISCREG_MVBAR
)
3620 .hypRead(FullSystem
&& system
->highestEL() == EL2
)
3621 .privRead(FullSystem
&& system
->highestEL() == EL1
)
3623 InitReg(MISCREG_RMR
)
3625 .mon().secure().exceptUserMode();
3626 InitReg(MISCREG_ISR
)
3627 .allPrivileges().exceptUserMode().writes(0);
3628 InitReg(MISCREG_HVBAR
)
3629 .hyp().monNonSecure()
3631 InitReg(MISCREG_FCSEIDR
)
3634 .allPrivileges().exceptUserMode();
3635 InitReg(MISCREG_CONTEXTIDR
)
3637 InitReg(MISCREG_CONTEXTIDR_NS
)
3639 .privSecure(!aarch32EL3
)
3640 .nonSecure().exceptUserMode();
3641 InitReg(MISCREG_CONTEXTIDR_S
)
3643 .secure().exceptUserMode();
3644 InitReg(MISCREG_TPIDRURW
)
3646 InitReg(MISCREG_TPIDRURW_NS
)
3649 .privSecure(!aarch32EL3
)
3651 InitReg(MISCREG_TPIDRURW_S
)
3654 InitReg(MISCREG_TPIDRURO
)
3656 InitReg(MISCREG_TPIDRURO_NS
)
3659 .userNonSecureWrite(0).userSecureRead(1)
3660 .privSecure(!aarch32EL3
)
3662 InitReg(MISCREG_TPIDRURO_S
)
3664 .secure().userSecureWrite(0);
3665 InitReg(MISCREG_TPIDRPRW
)
3667 InitReg(MISCREG_TPIDRPRW_NS
)
3669 .nonSecure().exceptUserMode()
3670 .privSecure(!aarch32EL3
);
3671 InitReg(MISCREG_TPIDRPRW_S
)
3673 .secure().exceptUserMode();
3674 InitReg(MISCREG_HTPIDR
)
3675 .hyp().monNonSecure();
3676 InitReg(MISCREG_CNTFRQ
)
3679 InitReg(MISCREG_CNTKCTL
)
3680 .allPrivileges().exceptUserMode();
3681 InitReg(MISCREG_CNTP_TVAL
)
3683 InitReg(MISCREG_CNTP_TVAL_NS
)
3686 .privSecure(!aarch32EL3
)
3688 InitReg(MISCREG_CNTP_TVAL_S
)
3691 InitReg(MISCREG_CNTP_CTL
)
3693 InitReg(MISCREG_CNTP_CTL_NS
)
3696 .privSecure(!aarch32EL3
)
3698 InitReg(MISCREG_CNTP_CTL_S
)
3701 InitReg(MISCREG_CNTV_TVAL
)
3703 InitReg(MISCREG_CNTV_CTL
)
3705 InitReg(MISCREG_CNTHCTL
)
3706 .hypWrite().monNonSecureRead();
3707 InitReg(MISCREG_CNTHP_TVAL
)
3708 .hypWrite().monNonSecureRead();
3709 InitReg(MISCREG_CNTHP_CTL
)
3710 .hypWrite().monNonSecureRead();
3711 InitReg(MISCREG_IL1DATA0
)
3713 .allPrivileges().exceptUserMode();
3714 InitReg(MISCREG_IL1DATA1
)
3716 .allPrivileges().exceptUserMode();
3717 InitReg(MISCREG_IL1DATA2
)
3719 .allPrivileges().exceptUserMode();
3720 InitReg(MISCREG_IL1DATA3
)
3722 .allPrivileges().exceptUserMode();
3723 InitReg(MISCREG_DL1DATA0
)
3725 .allPrivileges().exceptUserMode();
3726 InitReg(MISCREG_DL1DATA1
)
3728 .allPrivileges().exceptUserMode();
3729 InitReg(MISCREG_DL1DATA2
)
3731 .allPrivileges().exceptUserMode();
3732 InitReg(MISCREG_DL1DATA3
)
3734 .allPrivileges().exceptUserMode();
3735 InitReg(MISCREG_DL1DATA4
)
3737 .allPrivileges().exceptUserMode();
3738 InitReg(MISCREG_RAMINDEX
)
3740 .writes(1).exceptUserMode();
3741 InitReg(MISCREG_L2ACTLR
)
3743 .allPrivileges().exceptUserMode();
3744 InitReg(MISCREG_CBAR
)
3746 .allPrivileges().exceptUserMode().writes(0);
3747 InitReg(MISCREG_HTTBR
)
3748 .hyp().monNonSecure();
3749 InitReg(MISCREG_VTTBR
)
3750 .hyp().monNonSecure();
3751 InitReg(MISCREG_CNTPCT
)
3753 InitReg(MISCREG_CNTVCT
)
3756 InitReg(MISCREG_CNTP_CVAL
)
3758 InitReg(MISCREG_CNTP_CVAL_NS
)
3761 .privSecure(!aarch32EL3
)
3763 InitReg(MISCREG_CNTP_CVAL_S
)
3766 InitReg(MISCREG_CNTV_CVAL
)
3768 InitReg(MISCREG_CNTVOFF
)
3769 .hyp().monNonSecure();
3770 InitReg(MISCREG_CNTHP_CVAL
)
3771 .hypWrite().monNonSecureRead();
3772 InitReg(MISCREG_CPUMERRSR
)
3774 .allPrivileges().exceptUserMode();
3775 InitReg(MISCREG_L2MERRSR
)
3778 .allPrivileges().exceptUserMode();
3780 // AArch64 registers (Op0=2);
3781 InitReg(MISCREG_MDCCINT_EL1
)
3783 InitReg(MISCREG_OSDTRRX_EL1
)
3785 .mapsTo(MISCREG_DBGDTRRXext
);
3786 InitReg(MISCREG_MDSCR_EL1
)
3788 .mapsTo(MISCREG_DBGDSCRext
);
3789 InitReg(MISCREG_OSDTRTX_EL1
)
3791 .mapsTo(MISCREG_DBGDTRTXext
);
3792 InitReg(MISCREG_OSECCR_EL1
)
3794 .mapsTo(MISCREG_DBGOSECCR
);
3795 InitReg(MISCREG_DBGBVR0_EL1
)
3797 .mapsTo(MISCREG_DBGBVR0
/*, MISCREG_DBGBXVR0 */);
3798 InitReg(MISCREG_DBGBVR1_EL1
)
3800 .mapsTo(MISCREG_DBGBVR1
/*, MISCREG_DBGBXVR1 */);
3801 InitReg(MISCREG_DBGBVR2_EL1
)
3803 .mapsTo(MISCREG_DBGBVR2
/*, MISCREG_DBGBXVR2 */);
3804 InitReg(MISCREG_DBGBVR3_EL1
)
3806 .mapsTo(MISCREG_DBGBVR3
/*, MISCREG_DBGBXVR3 */);
3807 InitReg(MISCREG_DBGBVR4_EL1
)
3809 .mapsTo(MISCREG_DBGBVR4
/*, MISCREG_DBGBXVR4 */);
3810 InitReg(MISCREG_DBGBVR5_EL1
)
3812 .mapsTo(MISCREG_DBGBVR5
/*, MISCREG_DBGBXVR5 */);
3813 InitReg(MISCREG_DBGBCR0_EL1
)
3815 .mapsTo(MISCREG_DBGBCR0
);
3816 InitReg(MISCREG_DBGBCR1_EL1
)
3818 .mapsTo(MISCREG_DBGBCR1
);
3819 InitReg(MISCREG_DBGBCR2_EL1
)
3821 .mapsTo(MISCREG_DBGBCR2
);
3822 InitReg(MISCREG_DBGBCR3_EL1
)
3824 .mapsTo(MISCREG_DBGBCR3
);
3825 InitReg(MISCREG_DBGBCR4_EL1
)
3827 .mapsTo(MISCREG_DBGBCR4
);
3828 InitReg(MISCREG_DBGBCR5_EL1
)
3830 .mapsTo(MISCREG_DBGBCR5
);
3831 InitReg(MISCREG_DBGWVR0_EL1
)
3833 .mapsTo(MISCREG_DBGWVR0
);
3834 InitReg(MISCREG_DBGWVR1_EL1
)
3836 .mapsTo(MISCREG_DBGWVR1
);
3837 InitReg(MISCREG_DBGWVR2_EL1
)
3839 .mapsTo(MISCREG_DBGWVR2
);
3840 InitReg(MISCREG_DBGWVR3_EL1
)
3842 .mapsTo(MISCREG_DBGWVR3
);
3843 InitReg(MISCREG_DBGWCR0_EL1
)
3845 .mapsTo(MISCREG_DBGWCR0
);
3846 InitReg(MISCREG_DBGWCR1_EL1
)
3848 .mapsTo(MISCREG_DBGWCR1
);
3849 InitReg(MISCREG_DBGWCR2_EL1
)
3851 .mapsTo(MISCREG_DBGWCR2
);
3852 InitReg(MISCREG_DBGWCR3_EL1
)
3854 .mapsTo(MISCREG_DBGWCR3
);
3855 InitReg(MISCREG_MDCCSR_EL0
)
3856 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3857 .mapsTo(MISCREG_DBGDSCRint
);
3858 InitReg(MISCREG_MDDTR_EL0
)
3860 InitReg(MISCREG_MDDTRTX_EL0
)
3862 InitReg(MISCREG_MDDTRRX_EL0
)
3864 InitReg(MISCREG_DBGVCR32_EL2
)
3866 .mapsTo(MISCREG_DBGVCR
);
3867 InitReg(MISCREG_MDRAR_EL1
)
3868 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3869 .mapsTo(MISCREG_DBGDRAR
);
3870 InitReg(MISCREG_OSLAR_EL1
)
3871 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
3872 .mapsTo(MISCREG_DBGOSLAR
);
3873 InitReg(MISCREG_OSLSR_EL1
)
3874 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3875 .mapsTo(MISCREG_DBGOSLSR
);
3876 InitReg(MISCREG_OSDLR_EL1
)
3878 .mapsTo(MISCREG_DBGOSDLR
);
3879 InitReg(MISCREG_DBGPRCR_EL1
)
3881 .mapsTo(MISCREG_DBGPRCR
);
3882 InitReg(MISCREG_DBGCLAIMSET_EL1
)
3884 .mapsTo(MISCREG_DBGCLAIMSET
);
3885 InitReg(MISCREG_DBGCLAIMCLR_EL1
)
3887 .mapsTo(MISCREG_DBGCLAIMCLR
);
3888 InitReg(MISCREG_DBGAUTHSTATUS_EL1
)
3889 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
3890 .mapsTo(MISCREG_DBGAUTHSTATUS
);
3891 InitReg(MISCREG_TEECR32_EL1
);
3892 InitReg(MISCREG_TEEHBR32_EL1
);
3894 // AArch64 registers (Op0=1,3);
3895 InitReg(MISCREG_MIDR_EL1
)
3896 .allPrivileges().exceptUserMode().writes(0);
3897 InitReg(MISCREG_MPIDR_EL1
)
3898 .allPrivileges().exceptUserMode().writes(0);
3899 InitReg(MISCREG_REVIDR_EL1
)
3900 .allPrivileges().exceptUserMode().writes(0);
3901 InitReg(MISCREG_ID_PFR0_EL1
)
3902 .allPrivileges().exceptUserMode().writes(0)
3903 .mapsTo(MISCREG_ID_PFR0
);
3904 InitReg(MISCREG_ID_PFR1_EL1
)
3905 .allPrivileges().exceptUserMode().writes(0)
3906 .mapsTo(MISCREG_ID_PFR1
);
3907 InitReg(MISCREG_ID_DFR0_EL1
)
3908 .allPrivileges().exceptUserMode().writes(0)
3909 .mapsTo(MISCREG_ID_DFR0
);
3910 InitReg(MISCREG_ID_AFR0_EL1
)
3911 .allPrivileges().exceptUserMode().writes(0)
3912 .mapsTo(MISCREG_ID_AFR0
);
3913 InitReg(MISCREG_ID_MMFR0_EL1
)
3914 .allPrivileges().exceptUserMode().writes(0)
3915 .mapsTo(MISCREG_ID_MMFR0
);
3916 InitReg(MISCREG_ID_MMFR1_EL1
)
3917 .allPrivileges().exceptUserMode().writes(0)
3918 .mapsTo(MISCREG_ID_MMFR1
);
3919 InitReg(MISCREG_ID_MMFR2_EL1
)
3920 .allPrivileges().exceptUserMode().writes(0)
3921 .mapsTo(MISCREG_ID_MMFR2
);
3922 InitReg(MISCREG_ID_MMFR3_EL1
)
3923 .allPrivileges().exceptUserMode().writes(0)
3924 .mapsTo(MISCREG_ID_MMFR3
);
3925 InitReg(MISCREG_ID_ISAR0_EL1
)
3926 .allPrivileges().exceptUserMode().writes(0)
3927 .mapsTo(MISCREG_ID_ISAR0
);
3928 InitReg(MISCREG_ID_ISAR1_EL1
)
3929 .allPrivileges().exceptUserMode().writes(0)
3930 .mapsTo(MISCREG_ID_ISAR1
);
3931 InitReg(MISCREG_ID_ISAR2_EL1
)
3932 .allPrivileges().exceptUserMode().writes(0)
3933 .mapsTo(MISCREG_ID_ISAR2
);
3934 InitReg(MISCREG_ID_ISAR3_EL1
)
3935 .allPrivileges().exceptUserMode().writes(0)
3936 .mapsTo(MISCREG_ID_ISAR3
);
3937 InitReg(MISCREG_ID_ISAR4_EL1
)
3938 .allPrivileges().exceptUserMode().writes(0)
3939 .mapsTo(MISCREG_ID_ISAR4
);
3940 InitReg(MISCREG_ID_ISAR5_EL1
)
3941 .allPrivileges().exceptUserMode().writes(0)
3942 .mapsTo(MISCREG_ID_ISAR5
);
3943 InitReg(MISCREG_MVFR0_EL1
)
3944 .allPrivileges().exceptUserMode().writes(0);
3945 InitReg(MISCREG_MVFR1_EL1
)
3946 .allPrivileges().exceptUserMode().writes(0);
3947 InitReg(MISCREG_MVFR2_EL1
)
3948 .allPrivileges().exceptUserMode().writes(0);
3949 InitReg(MISCREG_ID_AA64PFR0_EL1
)
3950 .allPrivileges().exceptUserMode().writes(0);
3951 InitReg(MISCREG_ID_AA64PFR1_EL1
)
3952 .allPrivileges().exceptUserMode().writes(0);
3953 InitReg(MISCREG_ID_AA64DFR0_EL1
)
3954 .allPrivileges().exceptUserMode().writes(0);
3955 InitReg(MISCREG_ID_AA64DFR1_EL1
)
3956 .allPrivileges().exceptUserMode().writes(0);
3957 InitReg(MISCREG_ID_AA64AFR0_EL1
)
3958 .allPrivileges().exceptUserMode().writes(0);
3959 InitReg(MISCREG_ID_AA64AFR1_EL1
)
3960 .allPrivileges().exceptUserMode().writes(0);
3961 InitReg(MISCREG_ID_AA64ISAR0_EL1
)
3962 .allPrivileges().exceptUserMode().writes(0);
3963 InitReg(MISCREG_ID_AA64ISAR1_EL1
)
3964 .allPrivileges().exceptUserMode().writes(0);
3965 InitReg(MISCREG_ID_AA64MMFR0_EL1
)
3966 .allPrivileges().exceptUserMode().writes(0);
3967 InitReg(MISCREG_ID_AA64MMFR1_EL1
)
3968 .allPrivileges().exceptUserMode().writes(0);
3969 InitReg(MISCREG_ID_AA64MMFR2_EL1
)
3970 .allPrivileges().exceptUserMode().writes(0);
3971 InitReg(MISCREG_CCSIDR_EL1
)
3972 .allPrivileges().exceptUserMode().writes(0);
3973 InitReg(MISCREG_CLIDR_EL1
)
3974 .allPrivileges().exceptUserMode().writes(0);
3975 InitReg(MISCREG_AIDR_EL1
)
3976 .allPrivileges().exceptUserMode().writes(0);
3977 InitReg(MISCREG_CSSELR_EL1
)
3978 .allPrivileges().exceptUserMode()
3979 .mapsTo(MISCREG_CSSELR_NS
);
3980 InitReg(MISCREG_CTR_EL0
)
3982 InitReg(MISCREG_DCZID_EL0
)
3984 InitReg(MISCREG_VPIDR_EL2
)
3986 .mapsTo(MISCREG_VPIDR
);
3987 InitReg(MISCREG_VMPIDR_EL2
)
3989 .mapsTo(MISCREG_VMPIDR
);
3990 InitReg(MISCREG_SCTLR_EL1
)
3991 .allPrivileges().exceptUserMode()
3992 .res0( 0x20440 | (EnDB
? 0 : 0x2000)
3993 | (IESB
? 0 : 0x200000)
3994 | (EnDA
? 0 : 0x8000000)
3995 | (EnIB
? 0 : 0x40000000)
3996 | (EnIA
? 0 : 0x80000000))
3997 .res1(0x500800 | (SPAN
? 0 : 0x800000)
3998 | (nTLSMD
? 0 : 0x8000000)
3999 | (LSMAOE
? 0 : 0x10000000))
4000 .mapsTo(MISCREG_SCTLR_NS
);
4001 InitReg(MISCREG_ACTLR_EL1
)
4002 .allPrivileges().exceptUserMode()
4003 .mapsTo(MISCREG_ACTLR_NS
);
4004 InitReg(MISCREG_CPACR_EL1
)
4005 .allPrivileges().exceptUserMode()
4006 .mapsTo(MISCREG_CPACR
);
4007 InitReg(MISCREG_SCTLR_EL2
)
4009 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4010 | (IESB
? 0 : 0x200000)
4011 | (EnDA
? 0 : 0x8000000)
4012 | (EnIB
? 0 : 0x40000000)
4013 | (EnIA
? 0 : 0x80000000))
4015 .mapsTo(MISCREG_HSCTLR
);
4016 InitReg(MISCREG_ACTLR_EL2
)
4018 .mapsTo(MISCREG_HACTLR
);
4019 InitReg(MISCREG_HCR_EL2
)
4021 .mapsTo(MISCREG_HCR
, MISCREG_HCR2
);
4022 InitReg(MISCREG_MDCR_EL2
)
4024 .mapsTo(MISCREG_HDCR
);
4025 InitReg(MISCREG_CPTR_EL2
)
4027 .mapsTo(MISCREG_HCPTR
);
4028 InitReg(MISCREG_HSTR_EL2
)
4030 .mapsTo(MISCREG_HSTR
);
4031 InitReg(MISCREG_HACR_EL2
)
4033 .mapsTo(MISCREG_HACR
);
4034 InitReg(MISCREG_SCTLR_EL3
)
4036 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4037 | (IESB
? 0 : 0x200000)
4038 | (EnDA
? 0 : 0x8000000)
4039 | (EnIB
? 0 : 0x40000000)
4040 | (EnIA
? 0 : 0x80000000))
4042 InitReg(MISCREG_ACTLR_EL3
)
4044 InitReg(MISCREG_SCR_EL3
)
4046 .mapsTo(MISCREG_SCR
); // NAM D7-2005
4047 InitReg(MISCREG_SDER32_EL3
)
4049 .mapsTo(MISCREG_SDER
);
4050 InitReg(MISCREG_CPTR_EL3
)
4052 InitReg(MISCREG_MDCR_EL3
)
4054 InitReg(MISCREG_TTBR0_EL1
)
4055 .allPrivileges().exceptUserMode()
4056 .mapsTo(MISCREG_TTBR0_NS
);
4057 InitReg(MISCREG_TTBR1_EL1
)
4058 .allPrivileges().exceptUserMode()
4059 .mapsTo(MISCREG_TTBR1_NS
);
4060 InitReg(MISCREG_TCR_EL1
)
4061 .allPrivileges().exceptUserMode()
4062 .mapsTo(MISCREG_TTBCR_NS
);
4063 InitReg(MISCREG_TTBR0_EL2
)
4065 .mapsTo(MISCREG_HTTBR
);
4066 InitReg(MISCREG_TTBR1_EL2
)
4068 InitReg(MISCREG_TCR_EL2
)
4070 .mapsTo(MISCREG_HTCR
);
4071 InitReg(MISCREG_VTTBR_EL2
)
4073 .mapsTo(MISCREG_VTTBR
);
4074 InitReg(MISCREG_VTCR_EL2
)
4076 .mapsTo(MISCREG_VTCR
);
4077 InitReg(MISCREG_TTBR0_EL3
)
4079 InitReg(MISCREG_TCR_EL3
)
4081 InitReg(MISCREG_DACR32_EL2
)
4083 .mapsTo(MISCREG_DACR_NS
);
4084 InitReg(MISCREG_SPSR_EL1
)
4085 .allPrivileges().exceptUserMode()
4086 .mapsTo(MISCREG_SPSR_SVC
); // NAM C5.2.17 SPSR_EL1
4087 InitReg(MISCREG_ELR_EL1
)
4088 .allPrivileges().exceptUserMode();
4089 InitReg(MISCREG_SP_EL0
)
4090 .allPrivileges().exceptUserMode();
4091 InitReg(MISCREG_SPSEL
)
4092 .allPrivileges().exceptUserMode();
4093 InitReg(MISCREG_CURRENTEL
)
4094 .allPrivileges().exceptUserMode().writes(0);
4095 InitReg(MISCREG_PAN
)
4096 .allPrivileges().exceptUserMode()
4097 .implemented(havePAN
);
4098 InitReg(MISCREG_NZCV
)
4100 InitReg(MISCREG_DAIF
)
4102 InitReg(MISCREG_FPCR
)
4104 InitReg(MISCREG_FPSR
)
4106 InitReg(MISCREG_DSPSR_EL0
)
4108 InitReg(MISCREG_DLR_EL0
)
4110 InitReg(MISCREG_SPSR_EL2
)
4112 .mapsTo(MISCREG_SPSR_HYP
); // NAM C5.2.18 SPSR_EL2
4113 InitReg(MISCREG_ELR_EL2
)
4115 InitReg(MISCREG_SP_EL1
)
4117 InitReg(MISCREG_SPSR_IRQ_AA64
)
4119 InitReg(MISCREG_SPSR_ABT_AA64
)
4121 InitReg(MISCREG_SPSR_UND_AA64
)
4123 InitReg(MISCREG_SPSR_FIQ_AA64
)
4125 InitReg(MISCREG_SPSR_EL3
)
4127 .mapsTo(MISCREG_SPSR_MON
); // NAM C5.2.19 SPSR_EL3
4128 InitReg(MISCREG_ELR_EL3
)
4130 InitReg(MISCREG_SP_EL2
)
4132 InitReg(MISCREG_AFSR0_EL1
)
4133 .allPrivileges().exceptUserMode()
4134 .mapsTo(MISCREG_ADFSR_NS
);
4135 InitReg(MISCREG_AFSR1_EL1
)
4136 .allPrivileges().exceptUserMode()
4137 .mapsTo(MISCREG_AIFSR_NS
);
4138 InitReg(MISCREG_ESR_EL1
)
4139 .allPrivileges().exceptUserMode();
4140 InitReg(MISCREG_IFSR32_EL2
)
4142 .mapsTo(MISCREG_IFSR_NS
);
4143 InitReg(MISCREG_AFSR0_EL2
)
4145 .mapsTo(MISCREG_HADFSR
);
4146 InitReg(MISCREG_AFSR1_EL2
)
4148 .mapsTo(MISCREG_HAIFSR
);
4149 InitReg(MISCREG_ESR_EL2
)
4151 .mapsTo(MISCREG_HSR
);
4152 InitReg(MISCREG_FPEXC32_EL2
)
4153 .hyp().mon().mapsTo(MISCREG_FPEXC
);
4154 InitReg(MISCREG_AFSR0_EL3
)
4156 InitReg(MISCREG_AFSR1_EL3
)
4158 InitReg(MISCREG_ESR_EL3
)
4160 InitReg(MISCREG_FAR_EL1
)
4161 .allPrivileges().exceptUserMode()
4162 .mapsTo(MISCREG_DFAR_NS
, MISCREG_IFAR_NS
);
4163 InitReg(MISCREG_FAR_EL2
)
4165 .mapsTo(MISCREG_HDFAR
, MISCREG_HIFAR
);
4166 InitReg(MISCREG_HPFAR_EL2
)
4168 .mapsTo(MISCREG_HPFAR
);
4169 InitReg(MISCREG_FAR_EL3
)
4171 InitReg(MISCREG_IC_IALLUIS
)
4173 .writes(1).exceptUserMode();
4174 InitReg(MISCREG_PAR_EL1
)
4175 .allPrivileges().exceptUserMode()
4176 .mapsTo(MISCREG_PAR_NS
);
4177 InitReg(MISCREG_IC_IALLU
)
4179 .writes(1).exceptUserMode();
4180 InitReg(MISCREG_DC_IVAC_Xt
)
4182 .writes(1).exceptUserMode();
4183 InitReg(MISCREG_DC_ISW_Xt
)
4185 .writes(1).exceptUserMode();
4186 InitReg(MISCREG_AT_S1E1R_Xt
)
4187 .writes(1).exceptUserMode();
4188 InitReg(MISCREG_AT_S1E1W_Xt
)
4189 .writes(1).exceptUserMode();
4190 InitReg(MISCREG_AT_S1E0R_Xt
)
4191 .writes(1).exceptUserMode();
4192 InitReg(MISCREG_AT_S1E0W_Xt
)
4193 .writes(1).exceptUserMode();
4194 InitReg(MISCREG_DC_CSW_Xt
)
4196 .writes(1).exceptUserMode();
4197 InitReg(MISCREG_DC_CISW_Xt
)
4199 .writes(1).exceptUserMode();
4200 InitReg(MISCREG_DC_ZVA_Xt
)
4202 .writes(1).userSecureWrite(0);
4203 InitReg(MISCREG_IC_IVAU_Xt
)
4205 InitReg(MISCREG_DC_CVAC_Xt
)
4208 InitReg(MISCREG_DC_CVAU_Xt
)
4211 InitReg(MISCREG_DC_CIVAC_Xt
)
4214 InitReg(MISCREG_AT_S1E2R_Xt
)
4215 .monNonSecureWrite().hypWrite();
4216 InitReg(MISCREG_AT_S1E2W_Xt
)
4217 .monNonSecureWrite().hypWrite();
4218 InitReg(MISCREG_AT_S12E1R_Xt
)
4219 .hypWrite().monSecureWrite().monNonSecureWrite();
4220 InitReg(MISCREG_AT_S12E1W_Xt
)
4221 .hypWrite().monSecureWrite().monNonSecureWrite();
4222 InitReg(MISCREG_AT_S12E0R_Xt
)
4223 .hypWrite().monSecureWrite().monNonSecureWrite();
4224 InitReg(MISCREG_AT_S12E0W_Xt
)
4225 .hypWrite().monSecureWrite().monNonSecureWrite();
4226 InitReg(MISCREG_AT_S1E3R_Xt
)
4227 .monSecureWrite().monNonSecureWrite();
4228 InitReg(MISCREG_AT_S1E3W_Xt
)
4229 .monSecureWrite().monNonSecureWrite();
4230 InitReg(MISCREG_TLBI_VMALLE1IS
)
4231 .writes(1).exceptUserMode();
4232 InitReg(MISCREG_TLBI_VAE1IS_Xt
)
4233 .writes(1).exceptUserMode();
4234 InitReg(MISCREG_TLBI_ASIDE1IS_Xt
)
4235 .writes(1).exceptUserMode();
4236 InitReg(MISCREG_TLBI_VAAE1IS_Xt
)
4237 .writes(1).exceptUserMode();
4238 InitReg(MISCREG_TLBI_VALE1IS_Xt
)
4239 .writes(1).exceptUserMode();
4240 InitReg(MISCREG_TLBI_VAALE1IS_Xt
)
4241 .writes(1).exceptUserMode();
4242 InitReg(MISCREG_TLBI_VMALLE1
)
4243 .writes(1).exceptUserMode();
4244 InitReg(MISCREG_TLBI_VAE1_Xt
)
4245 .writes(1).exceptUserMode();
4246 InitReg(MISCREG_TLBI_ASIDE1_Xt
)
4247 .writes(1).exceptUserMode();
4248 InitReg(MISCREG_TLBI_VAAE1_Xt
)
4249 .writes(1).exceptUserMode();
4250 InitReg(MISCREG_TLBI_VALE1_Xt
)
4251 .writes(1).exceptUserMode();
4252 InitReg(MISCREG_TLBI_VAALE1_Xt
)
4253 .writes(1).exceptUserMode();
4254 InitReg(MISCREG_TLBI_IPAS2E1IS_Xt
)
4255 .hypWrite().monSecureWrite().monNonSecureWrite();
4256 InitReg(MISCREG_TLBI_IPAS2LE1IS_Xt
)
4257 .hypWrite().monSecureWrite().monNonSecureWrite();
4258 InitReg(MISCREG_TLBI_ALLE2IS
)
4259 .monNonSecureWrite().hypWrite();
4260 InitReg(MISCREG_TLBI_VAE2IS_Xt
)
4261 .monNonSecureWrite().hypWrite();
4262 InitReg(MISCREG_TLBI_ALLE1IS
)
4263 .hypWrite().monSecureWrite().monNonSecureWrite();
4264 InitReg(MISCREG_TLBI_VALE2IS_Xt
)
4265 .monNonSecureWrite().hypWrite();
4266 InitReg(MISCREG_TLBI_VMALLS12E1IS
)
4267 .hypWrite().monSecureWrite().monNonSecureWrite();
4268 InitReg(MISCREG_TLBI_IPAS2E1_Xt
)
4269 .hypWrite().monSecureWrite().monNonSecureWrite();
4270 InitReg(MISCREG_TLBI_IPAS2LE1_Xt
)
4271 .hypWrite().monSecureWrite().monNonSecureWrite();
4272 InitReg(MISCREG_TLBI_ALLE2
)
4273 .monNonSecureWrite().hypWrite();
4274 InitReg(MISCREG_TLBI_VAE2_Xt
)
4275 .monNonSecureWrite().hypWrite();
4276 InitReg(MISCREG_TLBI_ALLE1
)
4277 .hypWrite().monSecureWrite().monNonSecureWrite();
4278 InitReg(MISCREG_TLBI_VALE2_Xt
)
4279 .monNonSecureWrite().hypWrite();
4280 InitReg(MISCREG_TLBI_VMALLS12E1
)
4281 .hypWrite().monSecureWrite().monNonSecureWrite();
4282 InitReg(MISCREG_TLBI_ALLE3IS
)
4283 .monSecureWrite().monNonSecureWrite();
4284 InitReg(MISCREG_TLBI_VAE3IS_Xt
)
4285 .monSecureWrite().monNonSecureWrite();
4286 InitReg(MISCREG_TLBI_VALE3IS_Xt
)
4287 .monSecureWrite().monNonSecureWrite();
4288 InitReg(MISCREG_TLBI_ALLE3
)
4289 .monSecureWrite().monNonSecureWrite();
4290 InitReg(MISCREG_TLBI_VAE3_Xt
)
4291 .monSecureWrite().monNonSecureWrite();
4292 InitReg(MISCREG_TLBI_VALE3_Xt
)
4293 .monSecureWrite().monNonSecureWrite();
4294 InitReg(MISCREG_PMINTENSET_EL1
)
4295 .allPrivileges().exceptUserMode()
4296 .mapsTo(MISCREG_PMINTENSET
);
4297 InitReg(MISCREG_PMINTENCLR_EL1
)
4298 .allPrivileges().exceptUserMode()
4299 .mapsTo(MISCREG_PMINTENCLR
);
4300 InitReg(MISCREG_PMCR_EL0
)
4302 .mapsTo(MISCREG_PMCR
);
4303 InitReg(MISCREG_PMCNTENSET_EL0
)
4305 .mapsTo(MISCREG_PMCNTENSET
);
4306 InitReg(MISCREG_PMCNTENCLR_EL0
)
4308 .mapsTo(MISCREG_PMCNTENCLR
);
4309 InitReg(MISCREG_PMOVSCLR_EL0
)
4311 // .mapsTo(MISCREG_PMOVSCLR);
4312 InitReg(MISCREG_PMSWINC_EL0
)
4314 .mapsTo(MISCREG_PMSWINC
);
4315 InitReg(MISCREG_PMSELR_EL0
)
4317 .mapsTo(MISCREG_PMSELR
);
4318 InitReg(MISCREG_PMCEID0_EL0
)
4320 .mapsTo(MISCREG_PMCEID0
);
4321 InitReg(MISCREG_PMCEID1_EL0
)
4323 .mapsTo(MISCREG_PMCEID1
);
4324 InitReg(MISCREG_PMCCNTR_EL0
)
4326 .mapsTo(MISCREG_PMCCNTR
);
4327 InitReg(MISCREG_PMXEVTYPER_EL0
)
4329 .mapsTo(MISCREG_PMXEVTYPER
);
4330 InitReg(MISCREG_PMCCFILTR_EL0
)
4332 InitReg(MISCREG_PMXEVCNTR_EL0
)
4334 .mapsTo(MISCREG_PMXEVCNTR
);
4335 InitReg(MISCREG_PMUSERENR_EL0
)
4336 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4337 .mapsTo(MISCREG_PMUSERENR
);
4338 InitReg(MISCREG_PMOVSSET_EL0
)
4340 .mapsTo(MISCREG_PMOVSSET
);
4341 InitReg(MISCREG_MAIR_EL1
)
4342 .allPrivileges().exceptUserMode()
4343 .mapsTo(MISCREG_PRRR_NS
, MISCREG_NMRR_NS
);
4344 InitReg(MISCREG_AMAIR_EL1
)
4345 .allPrivileges().exceptUserMode()
4346 .mapsTo(MISCREG_AMAIR0_NS
, MISCREG_AMAIR1_NS
);
4347 InitReg(MISCREG_MAIR_EL2
)
4349 .mapsTo(MISCREG_HMAIR0
, MISCREG_HMAIR1
);
4350 InitReg(MISCREG_AMAIR_EL2
)
4352 .mapsTo(MISCREG_HAMAIR0
, MISCREG_HAMAIR1
);
4353 InitReg(MISCREG_MAIR_EL3
)
4355 InitReg(MISCREG_AMAIR_EL3
)
4357 InitReg(MISCREG_L2CTLR_EL1
)
4358 .allPrivileges().exceptUserMode();
4359 InitReg(MISCREG_L2ECTLR_EL1
)
4360 .allPrivileges().exceptUserMode();
4361 InitReg(MISCREG_VBAR_EL1
)
4362 .allPrivileges().exceptUserMode()
4363 .mapsTo(MISCREG_VBAR_NS
);
4364 InitReg(MISCREG_RVBAR_EL1
)
4365 .allPrivileges().exceptUserMode().writes(0);
4366 InitReg(MISCREG_ISR_EL1
)
4367 .allPrivileges().exceptUserMode().writes(0);
4368 InitReg(MISCREG_VBAR_EL2
)
4371 .mapsTo(MISCREG_HVBAR
);
4372 InitReg(MISCREG_RVBAR_EL2
)
4373 .mon().hyp().writes(0);
4374 InitReg(MISCREG_VBAR_EL3
)
4376 InitReg(MISCREG_RVBAR_EL3
)
4378 InitReg(MISCREG_RMR_EL3
)
4380 InitReg(MISCREG_CONTEXTIDR_EL1
)
4381 .allPrivileges().exceptUserMode()
4382 .mapsTo(MISCREG_CONTEXTIDR_NS
);
4383 InitReg(MISCREG_TPIDR_EL1
)
4384 .allPrivileges().exceptUserMode()
4385 .mapsTo(MISCREG_TPIDRPRW_NS
);
4386 InitReg(MISCREG_TPIDR_EL0
)
4388 .mapsTo(MISCREG_TPIDRURW_NS
);
4389 InitReg(MISCREG_TPIDRRO_EL0
)
4390 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
4391 .mapsTo(MISCREG_TPIDRURO_NS
);
4392 InitReg(MISCREG_TPIDR_EL2
)
4394 .mapsTo(MISCREG_HTPIDR
);
4395 InitReg(MISCREG_TPIDR_EL3
)
4397 InitReg(MISCREG_CNTKCTL_EL1
)
4398 .allPrivileges().exceptUserMode()
4399 .mapsTo(MISCREG_CNTKCTL
);
4400 InitReg(MISCREG_CNTFRQ_EL0
)
4402 .mapsTo(MISCREG_CNTFRQ
);
4403 InitReg(MISCREG_CNTPCT_EL0
)
4405 .mapsTo(MISCREG_CNTPCT
); /* 64b */
4406 InitReg(MISCREG_CNTVCT_EL0
)
4409 .mapsTo(MISCREG_CNTVCT
); /* 64b */
4410 InitReg(MISCREG_CNTP_TVAL_EL0
)
4412 .mapsTo(MISCREG_CNTP_TVAL_NS
);
4413 InitReg(MISCREG_CNTP_CTL_EL0
)
4415 .mapsTo(MISCREG_CNTP_CTL_NS
);
4416 InitReg(MISCREG_CNTP_CVAL_EL0
)
4418 .mapsTo(MISCREG_CNTP_CVAL_NS
); /* 64b */
4419 InitReg(MISCREG_CNTV_TVAL_EL0
)
4421 .mapsTo(MISCREG_CNTV_TVAL
);
4422 InitReg(MISCREG_CNTV_CTL_EL0
)
4424 .mapsTo(MISCREG_CNTV_CTL
);
4425 InitReg(MISCREG_CNTV_CVAL_EL0
)
4427 .mapsTo(MISCREG_CNTV_CVAL
); /* 64b */
4428 InitReg(MISCREG_PMEVCNTR0_EL0
)
4430 // .mapsTo(MISCREG_PMEVCNTR0);
4431 InitReg(MISCREG_PMEVCNTR1_EL0
)
4433 // .mapsTo(MISCREG_PMEVCNTR1);
4434 InitReg(MISCREG_PMEVCNTR2_EL0
)
4436 // .mapsTo(MISCREG_PMEVCNTR2);
4437 InitReg(MISCREG_PMEVCNTR3_EL0
)
4439 // .mapsTo(MISCREG_PMEVCNTR3);
4440 InitReg(MISCREG_PMEVCNTR4_EL0
)
4442 // .mapsTo(MISCREG_PMEVCNTR4);
4443 InitReg(MISCREG_PMEVCNTR5_EL0
)
4445 // .mapsTo(MISCREG_PMEVCNTR5);
4446 InitReg(MISCREG_PMEVTYPER0_EL0
)
4448 // .mapsTo(MISCREG_PMEVTYPER0);
4449 InitReg(MISCREG_PMEVTYPER1_EL0
)
4451 // .mapsTo(MISCREG_PMEVTYPER1);
4452 InitReg(MISCREG_PMEVTYPER2_EL0
)
4454 // .mapsTo(MISCREG_PMEVTYPER2);
4455 InitReg(MISCREG_PMEVTYPER3_EL0
)
4457 // .mapsTo(MISCREG_PMEVTYPER3);
4458 InitReg(MISCREG_PMEVTYPER4_EL0
)
4460 // .mapsTo(MISCREG_PMEVTYPER4);
4461 InitReg(MISCREG_PMEVTYPER5_EL0
)
4463 // .mapsTo(MISCREG_PMEVTYPER5);
4464 InitReg(MISCREG_CNTVOFF_EL2
)
4466 .mapsTo(MISCREG_CNTVOFF
); /* 64b */
4467 InitReg(MISCREG_CNTHCTL_EL2
)
4469 .mapsTo(MISCREG_CNTHCTL
);
4470 InitReg(MISCREG_CNTHP_TVAL_EL2
)
4472 .mapsTo(MISCREG_CNTHP_TVAL
);
4473 InitReg(MISCREG_CNTHP_CTL_EL2
)
4475 .mapsTo(MISCREG_CNTHP_CTL
);
4476 InitReg(MISCREG_CNTHP_CVAL_EL2
)
4478 .mapsTo(MISCREG_CNTHP_CVAL
); /* 64b */
4479 InitReg(MISCREG_CNTPS_TVAL_EL1
)
4480 .mon().privSecure();
4481 InitReg(MISCREG_CNTPS_CTL_EL1
)
4482 .mon().privSecure();
4483 InitReg(MISCREG_CNTPS_CVAL_EL1
)
4484 .mon().privSecure();
4485 InitReg(MISCREG_IL1DATA0_EL1
)
4486 .allPrivileges().exceptUserMode();
4487 InitReg(MISCREG_IL1DATA1_EL1
)
4488 .allPrivileges().exceptUserMode();
4489 InitReg(MISCREG_IL1DATA2_EL1
)
4490 .allPrivileges().exceptUserMode();
4491 InitReg(MISCREG_IL1DATA3_EL1
)
4492 .allPrivileges().exceptUserMode();
4493 InitReg(MISCREG_DL1DATA0_EL1
)
4494 .allPrivileges().exceptUserMode();
4495 InitReg(MISCREG_DL1DATA1_EL1
)
4496 .allPrivileges().exceptUserMode();
4497 InitReg(MISCREG_DL1DATA2_EL1
)
4498 .allPrivileges().exceptUserMode();
4499 InitReg(MISCREG_DL1DATA3_EL1
)
4500 .allPrivileges().exceptUserMode();
4501 InitReg(MISCREG_DL1DATA4_EL1
)
4502 .allPrivileges().exceptUserMode();
4503 InitReg(MISCREG_L2ACTLR_EL1
)
4504 .allPrivileges().exceptUserMode();
4505 InitReg(MISCREG_CPUACTLR_EL1
)
4506 .allPrivileges().exceptUserMode();
4507 InitReg(MISCREG_CPUECTLR_EL1
)
4508 .allPrivileges().exceptUserMode();
4509 InitReg(MISCREG_CPUMERRSR_EL1
)
4510 .allPrivileges().exceptUserMode();
4511 InitReg(MISCREG_L2MERRSR_EL1
)
4514 .allPrivileges().exceptUserMode();
4515 InitReg(MISCREG_CBAR_EL1
)
4516 .allPrivileges().exceptUserMode().writes(0);
4517 InitReg(MISCREG_CONTEXTIDR_EL2
)
4521 InitReg(MISCREG_ICC_PMR_EL1
)
4522 .res0(0xffffff00) // [31:8]
4523 .allPrivileges().exceptUserMode()
4524 .mapsTo(MISCREG_ICC_PMR
);
4525 InitReg(MISCREG_ICC_IAR0_EL1
)
4526 .allPrivileges().exceptUserMode().writes(0)
4527 .mapsTo(MISCREG_ICC_IAR0
);
4528 InitReg(MISCREG_ICC_EOIR0_EL1
)
4529 .allPrivileges().exceptUserMode().reads(0)
4530 .mapsTo(MISCREG_ICC_EOIR0
);
4531 InitReg(MISCREG_ICC_HPPIR0_EL1
)
4532 .allPrivileges().exceptUserMode().writes(0)
4533 .mapsTo(MISCREG_ICC_HPPIR0
);
4534 InitReg(MISCREG_ICC_BPR0_EL1
)
4535 .res0(0xfffffff8) // [31:3]
4536 .allPrivileges().exceptUserMode()
4537 .mapsTo(MISCREG_ICC_BPR0
);
4538 InitReg(MISCREG_ICC_AP0R0_EL1
)
4539 .allPrivileges().exceptUserMode()
4540 .mapsTo(MISCREG_ICC_AP0R0
);
4541 InitReg(MISCREG_ICC_AP0R1_EL1
)
4542 .allPrivileges().exceptUserMode()
4543 .mapsTo(MISCREG_ICC_AP0R1
);
4544 InitReg(MISCREG_ICC_AP0R2_EL1
)
4545 .allPrivileges().exceptUserMode()
4546 .mapsTo(MISCREG_ICC_AP0R2
);
4547 InitReg(MISCREG_ICC_AP0R3_EL1
)
4548 .allPrivileges().exceptUserMode()
4549 .mapsTo(MISCREG_ICC_AP0R3
);
4550 InitReg(MISCREG_ICC_AP1R0_EL1
)
4552 .mapsTo(MISCREG_ICC_AP1R0
);
4553 InitReg(MISCREG_ICC_AP1R0_EL1_NS
)
4555 .allPrivileges().exceptUserMode()
4556 .mapsTo(MISCREG_ICC_AP1R0_NS
);
4557 InitReg(MISCREG_ICC_AP1R0_EL1_S
)
4559 .allPrivileges().exceptUserMode()
4560 .mapsTo(MISCREG_ICC_AP1R0_S
);
4561 InitReg(MISCREG_ICC_AP1R1_EL1
)
4563 .mapsTo(MISCREG_ICC_AP1R1
);
4564 InitReg(MISCREG_ICC_AP1R1_EL1_NS
)
4566 .allPrivileges().exceptUserMode()
4567 .mapsTo(MISCREG_ICC_AP1R1_NS
);
4568 InitReg(MISCREG_ICC_AP1R1_EL1_S
)
4570 .allPrivileges().exceptUserMode()
4571 .mapsTo(MISCREG_ICC_AP1R1_S
);
4572 InitReg(MISCREG_ICC_AP1R2_EL1
)
4574 .mapsTo(MISCREG_ICC_AP1R2
);
4575 InitReg(MISCREG_ICC_AP1R2_EL1_NS
)
4577 .allPrivileges().exceptUserMode()
4578 .mapsTo(MISCREG_ICC_AP1R2_NS
);
4579 InitReg(MISCREG_ICC_AP1R2_EL1_S
)
4581 .allPrivileges().exceptUserMode()
4582 .mapsTo(MISCREG_ICC_AP1R2_S
);
4583 InitReg(MISCREG_ICC_AP1R3_EL1
)
4585 .mapsTo(MISCREG_ICC_AP1R3
);
4586 InitReg(MISCREG_ICC_AP1R3_EL1_NS
)
4588 .allPrivileges().exceptUserMode()
4589 .mapsTo(MISCREG_ICC_AP1R3_NS
);
4590 InitReg(MISCREG_ICC_AP1R3_EL1_S
)
4592 .allPrivileges().exceptUserMode()
4593 .mapsTo(MISCREG_ICC_AP1R3_S
);
4594 InitReg(MISCREG_ICC_DIR_EL1
)
4595 .res0(0xFF000000) // [31:24]
4596 .allPrivileges().exceptUserMode().reads(0)
4597 .mapsTo(MISCREG_ICC_DIR
);
4598 InitReg(MISCREG_ICC_RPR_EL1
)
4599 .allPrivileges().exceptUserMode().writes(0)
4600 .mapsTo(MISCREG_ICC_RPR
);
4601 InitReg(MISCREG_ICC_SGI1R_EL1
)
4602 .allPrivileges().exceptUserMode().reads(0)
4603 .mapsTo(MISCREG_ICC_SGI1R
);
4604 InitReg(MISCREG_ICC_ASGI1R_EL1
)
4605 .allPrivileges().exceptUserMode().reads(0)
4606 .mapsTo(MISCREG_ICC_ASGI1R
);
4607 InitReg(MISCREG_ICC_SGI0R_EL1
)
4608 .allPrivileges().exceptUserMode().reads(0)
4609 .mapsTo(MISCREG_ICC_SGI0R
);
4610 InitReg(MISCREG_ICC_IAR1_EL1
)
4611 .allPrivileges().exceptUserMode().writes(0)
4612 .mapsTo(MISCREG_ICC_IAR1
);
4613 InitReg(MISCREG_ICC_EOIR1_EL1
)
4614 .res0(0xFF000000) // [31:24]
4615 .allPrivileges().exceptUserMode().reads(0)
4616 .mapsTo(MISCREG_ICC_EOIR1
);
4617 InitReg(MISCREG_ICC_HPPIR1_EL1
)
4618 .allPrivileges().exceptUserMode().writes(0)
4619 .mapsTo(MISCREG_ICC_HPPIR1
);
4620 InitReg(MISCREG_ICC_BPR1_EL1
)
4622 .mapsTo(MISCREG_ICC_BPR1
);
4623 InitReg(MISCREG_ICC_BPR1_EL1_NS
)
4625 .res0(0xfffffff8) // [31:3]
4626 .allPrivileges().exceptUserMode()
4627 .mapsTo(MISCREG_ICC_BPR1_NS
);
4628 InitReg(MISCREG_ICC_BPR1_EL1_S
)
4630 .res0(0xfffffff8) // [31:3]
4631 .secure().exceptUserMode()
4632 .mapsTo(MISCREG_ICC_BPR1_S
);
4633 InitReg(MISCREG_ICC_CTLR_EL1
)
4635 .mapsTo(MISCREG_ICC_CTLR
);
4636 InitReg(MISCREG_ICC_CTLR_EL1_NS
)
4638 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4639 .allPrivileges().exceptUserMode()
4640 .mapsTo(MISCREG_ICC_CTLR_NS
);
4641 InitReg(MISCREG_ICC_CTLR_EL1_S
)
4643 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
4644 .secure().exceptUserMode()
4645 .mapsTo(MISCREG_ICC_CTLR_S
);
4646 InitReg(MISCREG_ICC_SRE_EL1
)
4648 .mapsTo(MISCREG_ICC_SRE
);
4649 InitReg(MISCREG_ICC_SRE_EL1_NS
)
4651 .res0(0xFFFFFFF8) // [31:3]
4652 .allPrivileges().exceptUserMode()
4653 .mapsTo(MISCREG_ICC_SRE_NS
);
4654 InitReg(MISCREG_ICC_SRE_EL1_S
)
4656 .res0(0xFFFFFFF8) // [31:3]
4657 .secure().exceptUserMode()
4658 .mapsTo(MISCREG_ICC_SRE_S
);
4659 InitReg(MISCREG_ICC_IGRPEN0_EL1
)
4660 .res0(0xFFFFFFFE) // [31:1]
4661 .allPrivileges().exceptUserMode()
4662 .mapsTo(MISCREG_ICC_IGRPEN0
);
4663 InitReg(MISCREG_ICC_IGRPEN1_EL1
)
4665 .mapsTo(MISCREG_ICC_IGRPEN1
);
4666 InitReg(MISCREG_ICC_IGRPEN1_EL1_NS
)
4668 .res0(0xFFFFFFFE) // [31:1]
4669 .allPrivileges().exceptUserMode()
4670 .mapsTo(MISCREG_ICC_IGRPEN1_NS
);
4671 InitReg(MISCREG_ICC_IGRPEN1_EL1_S
)
4673 .res0(0xFFFFFFFE) // [31:1]
4674 .secure().exceptUserMode()
4675 .mapsTo(MISCREG_ICC_IGRPEN1_S
);
4676 InitReg(MISCREG_ICC_SRE_EL2
)
4678 .mapsTo(MISCREG_ICC_HSRE
);
4679 InitReg(MISCREG_ICC_CTLR_EL3
)
4680 .allPrivileges().exceptUserMode()
4681 .mapsTo(MISCREG_ICC_MCTLR
);
4682 InitReg(MISCREG_ICC_SRE_EL3
)
4683 .allPrivileges().exceptUserMode()
4684 .mapsTo(MISCREG_ICC_MSRE
);
4685 InitReg(MISCREG_ICC_IGRPEN1_EL3
)
4686 .allPrivileges().exceptUserMode()
4687 .mapsTo(MISCREG_ICC_MGRPEN1
);
4689 InitReg(MISCREG_ICH_AP0R0_EL2
)
4691 .mapsTo(MISCREG_ICH_AP0R0
);
4692 InitReg(MISCREG_ICH_AP0R1_EL2
)
4695 .mapsTo(MISCREG_ICH_AP0R1
);
4696 InitReg(MISCREG_ICH_AP0R2_EL2
)
4699 .mapsTo(MISCREG_ICH_AP0R2
);
4700 InitReg(MISCREG_ICH_AP0R3_EL2
)
4703 .mapsTo(MISCREG_ICH_AP0R3
);
4704 InitReg(MISCREG_ICH_AP1R0_EL2
)
4706 .mapsTo(MISCREG_ICH_AP1R0
);
4707 InitReg(MISCREG_ICH_AP1R1_EL2
)
4710 .mapsTo(MISCREG_ICH_AP1R1
);
4711 InitReg(MISCREG_ICH_AP1R2_EL2
)
4714 .mapsTo(MISCREG_ICH_AP1R2
);
4715 InitReg(MISCREG_ICH_AP1R3_EL2
)
4718 .mapsTo(MISCREG_ICH_AP1R3
);
4719 InitReg(MISCREG_ICH_HCR_EL2
)
4721 .mapsTo(MISCREG_ICH_HCR
);
4722 InitReg(MISCREG_ICH_VTR_EL2
)
4723 .hyp().mon().writes(0)
4724 .mapsTo(MISCREG_ICH_VTR
);
4725 InitReg(MISCREG_ICH_MISR_EL2
)
4726 .hyp().mon().writes(0)
4727 .mapsTo(MISCREG_ICH_MISR
);
4728 InitReg(MISCREG_ICH_EISR_EL2
)
4729 .hyp().mon().writes(0)
4730 .mapsTo(MISCREG_ICH_EISR
);
4731 InitReg(MISCREG_ICH_ELRSR_EL2
)
4732 .hyp().mon().writes(0)
4733 .mapsTo(MISCREG_ICH_ELRSR
);
4734 InitReg(MISCREG_ICH_VMCR_EL2
)
4736 .mapsTo(MISCREG_ICH_VMCR
);
4737 InitReg(MISCREG_ICH_LR0_EL2
)
4739 .allPrivileges().exceptUserMode();
4740 InitReg(MISCREG_ICH_LR1_EL2
)
4742 .allPrivileges().exceptUserMode();
4743 InitReg(MISCREG_ICH_LR2_EL2
)
4745 .allPrivileges().exceptUserMode();
4746 InitReg(MISCREG_ICH_LR3_EL2
)
4748 .allPrivileges().exceptUserMode();
4749 InitReg(MISCREG_ICH_LR4_EL2
)
4751 .allPrivileges().exceptUserMode();
4752 InitReg(MISCREG_ICH_LR5_EL2
)
4754 .allPrivileges().exceptUserMode();
4755 InitReg(MISCREG_ICH_LR6_EL2
)
4757 .allPrivileges().exceptUserMode();
4758 InitReg(MISCREG_ICH_LR7_EL2
)
4760 .allPrivileges().exceptUserMode();
4761 InitReg(MISCREG_ICH_LR8_EL2
)
4763 .allPrivileges().exceptUserMode();
4764 InitReg(MISCREG_ICH_LR9_EL2
)
4766 .allPrivileges().exceptUserMode();
4767 InitReg(MISCREG_ICH_LR10_EL2
)
4769 .allPrivileges().exceptUserMode();
4770 InitReg(MISCREG_ICH_LR11_EL2
)
4772 .allPrivileges().exceptUserMode();
4773 InitReg(MISCREG_ICH_LR12_EL2
)
4775 .allPrivileges().exceptUserMode();
4776 InitReg(MISCREG_ICH_LR13_EL2
)
4778 .allPrivileges().exceptUserMode();
4779 InitReg(MISCREG_ICH_LR14_EL2
)
4781 .allPrivileges().exceptUserMode();
4782 InitReg(MISCREG_ICH_LR15_EL2
)
4784 .allPrivileges().exceptUserMode();
4787 InitReg(MISCREG_ICC_AP0R0
)
4788 .allPrivileges().exceptUserMode();
4789 InitReg(MISCREG_ICC_AP0R1
)
4790 .allPrivileges().exceptUserMode();
4791 InitReg(MISCREG_ICC_AP0R2
)
4792 .allPrivileges().exceptUserMode();
4793 InitReg(MISCREG_ICC_AP0R3
)
4794 .allPrivileges().exceptUserMode();
4795 InitReg(MISCREG_ICC_AP1R0
)
4796 .allPrivileges().exceptUserMode();
4797 InitReg(MISCREG_ICC_AP1R0_NS
)
4798 .allPrivileges().exceptUserMode();
4799 InitReg(MISCREG_ICC_AP1R0_S
)
4800 .allPrivileges().exceptUserMode();
4801 InitReg(MISCREG_ICC_AP1R1
)
4802 .allPrivileges().exceptUserMode();
4803 InitReg(MISCREG_ICC_AP1R1_NS
)
4804 .allPrivileges().exceptUserMode();
4805 InitReg(MISCREG_ICC_AP1R1_S
)
4806 .allPrivileges().exceptUserMode();
4807 InitReg(MISCREG_ICC_AP1R2
)
4808 .allPrivileges().exceptUserMode();
4809 InitReg(MISCREG_ICC_AP1R2_NS
)
4810 .allPrivileges().exceptUserMode();
4811 InitReg(MISCREG_ICC_AP1R2_S
)
4812 .allPrivileges().exceptUserMode();
4813 InitReg(MISCREG_ICC_AP1R3
)
4814 .allPrivileges().exceptUserMode();
4815 InitReg(MISCREG_ICC_AP1R3_NS
)
4816 .allPrivileges().exceptUserMode();
4817 InitReg(MISCREG_ICC_AP1R3_S
)
4818 .allPrivileges().exceptUserMode();
4819 InitReg(MISCREG_ICC_ASGI1R
)
4820 .allPrivileges().exceptUserMode().reads(0);
4821 InitReg(MISCREG_ICC_BPR0
)
4822 .allPrivileges().exceptUserMode();
4823 InitReg(MISCREG_ICC_BPR1
)
4824 .allPrivileges().exceptUserMode();
4825 InitReg(MISCREG_ICC_BPR1_NS
)
4826 .allPrivileges().exceptUserMode();
4827 InitReg(MISCREG_ICC_BPR1_S
)
4828 .allPrivileges().exceptUserMode();
4829 InitReg(MISCREG_ICC_CTLR
)
4830 .allPrivileges().exceptUserMode();
4831 InitReg(MISCREG_ICC_CTLR_NS
)
4832 .allPrivileges().exceptUserMode();
4833 InitReg(MISCREG_ICC_CTLR_S
)
4834 .allPrivileges().exceptUserMode();
4835 InitReg(MISCREG_ICC_DIR
)
4836 .allPrivileges().exceptUserMode().reads(0);
4837 InitReg(MISCREG_ICC_EOIR0
)
4838 .allPrivileges().exceptUserMode().reads(0);
4839 InitReg(MISCREG_ICC_EOIR1
)
4840 .allPrivileges().exceptUserMode().reads(0);
4841 InitReg(MISCREG_ICC_HPPIR0
)
4842 .allPrivileges().exceptUserMode().writes(0);
4843 InitReg(MISCREG_ICC_HPPIR1
)
4844 .allPrivileges().exceptUserMode().writes(0);
4845 InitReg(MISCREG_ICC_HSRE
)
4846 .allPrivileges().exceptUserMode();
4847 InitReg(MISCREG_ICC_IAR0
)
4848 .allPrivileges().exceptUserMode().writes(0);
4849 InitReg(MISCREG_ICC_IAR1
)
4850 .allPrivileges().exceptUserMode().writes(0);
4851 InitReg(MISCREG_ICC_IGRPEN0
)
4852 .allPrivileges().exceptUserMode();
4853 InitReg(MISCREG_ICC_IGRPEN1
)
4854 .allPrivileges().exceptUserMode();
4855 InitReg(MISCREG_ICC_IGRPEN1_NS
)
4856 .allPrivileges().exceptUserMode();
4857 InitReg(MISCREG_ICC_IGRPEN1_S
)
4858 .allPrivileges().exceptUserMode();
4859 InitReg(MISCREG_ICC_MCTLR
)
4860 .allPrivileges().exceptUserMode();
4861 InitReg(MISCREG_ICC_MGRPEN1
)
4862 .allPrivileges().exceptUserMode();
4863 InitReg(MISCREG_ICC_MSRE
)
4864 .allPrivileges().exceptUserMode();
4865 InitReg(MISCREG_ICC_PMR
)
4866 .allPrivileges().exceptUserMode();
4867 InitReg(MISCREG_ICC_RPR
)
4868 .allPrivileges().exceptUserMode().writes(0);
4869 InitReg(MISCREG_ICC_SGI0R
)
4870 .allPrivileges().exceptUserMode().reads(0);
4871 InitReg(MISCREG_ICC_SGI1R
)
4872 .allPrivileges().exceptUserMode().reads(0);
4873 InitReg(MISCREG_ICC_SRE
)
4874 .allPrivileges().exceptUserMode();
4875 InitReg(MISCREG_ICC_SRE_NS
)
4876 .allPrivileges().exceptUserMode();
4877 InitReg(MISCREG_ICC_SRE_S
)
4878 .allPrivileges().exceptUserMode();
4880 InitReg(MISCREG_ICH_AP0R0
)
4882 InitReg(MISCREG_ICH_AP0R1
)
4884 InitReg(MISCREG_ICH_AP0R2
)
4886 InitReg(MISCREG_ICH_AP0R3
)
4888 InitReg(MISCREG_ICH_AP1R0
)
4890 InitReg(MISCREG_ICH_AP1R1
)
4892 InitReg(MISCREG_ICH_AP1R2
)
4894 InitReg(MISCREG_ICH_AP1R3
)
4896 InitReg(MISCREG_ICH_HCR
)
4898 InitReg(MISCREG_ICH_VTR
)
4899 .hyp().mon().writes(0);
4900 InitReg(MISCREG_ICH_MISR
)
4901 .hyp().mon().writes(0);
4902 InitReg(MISCREG_ICH_EISR
)
4903 .hyp().mon().writes(0);
4904 InitReg(MISCREG_ICH_ELRSR
)
4905 .hyp().mon().writes(0);
4906 InitReg(MISCREG_ICH_VMCR
)
4908 InitReg(MISCREG_ICH_LR0
)
4910 InitReg(MISCREG_ICH_LR1
)
4912 InitReg(MISCREG_ICH_LR2
)
4914 InitReg(MISCREG_ICH_LR3
)
4916 InitReg(MISCREG_ICH_LR4
)
4918 InitReg(MISCREG_ICH_LR5
)
4920 InitReg(MISCREG_ICH_LR6
)
4922 InitReg(MISCREG_ICH_LR7
)
4924 InitReg(MISCREG_ICH_LR8
)
4926 InitReg(MISCREG_ICH_LR9
)
4928 InitReg(MISCREG_ICH_LR10
)
4930 InitReg(MISCREG_ICH_LR11
)
4932 InitReg(MISCREG_ICH_LR12
)
4934 InitReg(MISCREG_ICH_LR13
)
4936 InitReg(MISCREG_ICH_LR14
)
4938 InitReg(MISCREG_ICH_LR15
)
4940 InitReg(MISCREG_ICH_LRC0
)
4941 .mapsTo(MISCREG_ICH_LR0
)
4943 InitReg(MISCREG_ICH_LRC1
)
4944 .mapsTo(MISCREG_ICH_LR1
)
4946 InitReg(MISCREG_ICH_LRC2
)
4947 .mapsTo(MISCREG_ICH_LR2
)
4949 InitReg(MISCREG_ICH_LRC3
)
4950 .mapsTo(MISCREG_ICH_LR3
)
4952 InitReg(MISCREG_ICH_LRC4
)
4953 .mapsTo(MISCREG_ICH_LR4
)
4955 InitReg(MISCREG_ICH_LRC5
)
4956 .mapsTo(MISCREG_ICH_LR5
)
4958 InitReg(MISCREG_ICH_LRC6
)
4959 .mapsTo(MISCREG_ICH_LR6
)
4961 InitReg(MISCREG_ICH_LRC7
)
4962 .mapsTo(MISCREG_ICH_LR7
)
4964 InitReg(MISCREG_ICH_LRC8
)
4965 .mapsTo(MISCREG_ICH_LR8
)
4967 InitReg(MISCREG_ICH_LRC9
)
4968 .mapsTo(MISCREG_ICH_LR9
)
4970 InitReg(MISCREG_ICH_LRC10
)
4971 .mapsTo(MISCREG_ICH_LR10
)
4973 InitReg(MISCREG_ICH_LRC11
)
4974 .mapsTo(MISCREG_ICH_LR11
)
4976 InitReg(MISCREG_ICH_LRC12
)
4977 .mapsTo(MISCREG_ICH_LR12
)
4979 InitReg(MISCREG_ICH_LRC13
)
4980 .mapsTo(MISCREG_ICH_LR13
)
4982 InitReg(MISCREG_ICH_LRC14
)
4983 .mapsTo(MISCREG_ICH_LR14
)
4985 InitReg(MISCREG_ICH_LRC15
)
4986 .mapsTo(MISCREG_ICH_LR15
)
4989 InitReg(MISCREG_CNTHV_CTL_EL2
)
4991 InitReg(MISCREG_CNTHV_CVAL_EL2
)
4993 InitReg(MISCREG_CNTHV_TVAL_EL2
)
4997 InitReg(MISCREG_ID_AA64ZFR0_EL1
)
4998 .allPrivileges().exceptUserMode().writes(0);
4999 InitReg(MISCREG_ZCR_EL3
)
5001 InitReg(MISCREG_ZCR_EL2
)
5003 InitReg(MISCREG_ZCR_EL12
)
5004 .unimplemented().warnNotFail();
5005 InitReg(MISCREG_ZCR_EL1
)
5006 .allPrivileges().exceptUserMode();
5009 InitReg(MISCREG_NOP
)
5011 InitReg(MISCREG_RAZ
)
5012 .allPrivileges().exceptUserMode().writes(0);
5013 InitReg(MISCREG_CP14_UNIMPL
)
5016 InitReg(MISCREG_CP15_UNIMPL
)
5019 InitReg(MISCREG_UNKNOWN
);
5020 InitReg(MISCREG_IMPDEF_UNIMPL
)
5022 .warnNotFail(impdefAsNop
);
5024 // RAS extension (unimplemented)
5025 InitReg(MISCREG_ERRIDR_EL1
)
5028 InitReg(MISCREG_ERRSELR_EL1
)
5031 InitReg(MISCREG_ERXFR_EL1
)
5034 InitReg(MISCREG_ERXCTLR_EL1
)
5037 InitReg(MISCREG_ERXSTATUS_EL1
)
5040 InitReg(MISCREG_ERXADDR_EL1
)
5043 InitReg(MISCREG_ERXMISC0_EL1
)
5046 InitReg(MISCREG_ERXMISC1_EL1
)
5049 InitReg(MISCREG_DISR_EL1
)
5052 InitReg(MISCREG_VSESR_EL2
)
5055 InitReg(MISCREG_VDISR_EL2
)
5059 // Register mappings for some unimplemented registers:
5063 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
5064 // DBGDTRRX_EL0 -> DBGDTRRXint
5065 // DBGDTRTX_EL0 -> DBGDTRRXint
5066 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
5071 } // namespace ArmISA