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
;
65 return MISCREG_DBGVCR
;
71 return MISCREG_DBGDTRRXext
;
73 return MISCREG_DBGDSCRext
;
75 return MISCREG_DBGDTRTXext
;
77 return MISCREG_DBGOSECCR
;
83 return MISCREG_DBGBVR0
;
85 return MISCREG_DBGBVR1
;
87 return MISCREG_DBGBVR2
;
89 return MISCREG_DBGBVR3
;
91 return MISCREG_DBGBVR4
;
93 return MISCREG_DBGBVR5
;
95 return MISCREG_DBGBVR6
;
97 return MISCREG_DBGBVR7
;
99 return MISCREG_DBGBVR8
;
101 return MISCREG_DBGBVR9
;
103 return MISCREG_DBGBVR10
;
105 return MISCREG_DBGBVR11
;
107 return MISCREG_DBGBVR12
;
109 return MISCREG_DBGBVR13
;
111 return MISCREG_DBGBVR14
;
113 return MISCREG_DBGBVR15
;
119 return MISCREG_DBGBCR0
;
121 return MISCREG_DBGBCR1
;
123 return MISCREG_DBGBCR2
;
125 return MISCREG_DBGBCR3
;
127 return MISCREG_DBGBCR4
;
129 return MISCREG_DBGBCR5
;
131 return MISCREG_DBGBCR6
;
133 return MISCREG_DBGBCR7
;
135 return MISCREG_DBGBCR8
;
137 return MISCREG_DBGBCR9
;
139 return MISCREG_DBGBCR10
;
141 return MISCREG_DBGBCR11
;
143 return MISCREG_DBGBCR12
;
145 return MISCREG_DBGBCR13
;
147 return MISCREG_DBGBCR14
;
149 return MISCREG_DBGBCR15
;
155 return MISCREG_DBGWVR0
;
157 return MISCREG_DBGWVR1
;
159 return MISCREG_DBGWVR2
;
161 return MISCREG_DBGWVR3
;
163 return MISCREG_DBGWVR4
;
165 return MISCREG_DBGWVR5
;
167 return MISCREG_DBGWVR6
;
169 return MISCREG_DBGWVR7
;
171 return MISCREG_DBGWVR8
;
173 return MISCREG_DBGWVR9
;
175 return MISCREG_DBGWVR10
;
177 return MISCREG_DBGWVR11
;
179 return MISCREG_DBGWVR12
;
181 return MISCREG_DBGWVR13
;
183 return MISCREG_DBGWVR14
;
185 return MISCREG_DBGWVR15
;
192 return MISCREG_DBGWCR0
;
194 return MISCREG_DBGWCR1
;
196 return MISCREG_DBGWCR2
;
198 return MISCREG_DBGWCR3
;
200 return MISCREG_DBGWCR4
;
202 return MISCREG_DBGWCR5
;
204 return MISCREG_DBGWCR6
;
206 return MISCREG_DBGWCR7
;
208 return MISCREG_DBGWCR8
;
210 return MISCREG_DBGWCR9
;
212 return MISCREG_DBGWCR10
;
214 return MISCREG_DBGWCR11
;
216 return MISCREG_DBGWCR12
;
218 return MISCREG_DBGWCR13
;
220 return MISCREG_DBGWCR14
;
222 return MISCREG_DBGWCR15
;
246 return MISCREG_DBGBXVR0
;
248 return MISCREG_DBGBXVR1
;
250 return MISCREG_DBGBXVR2
;
252 return MISCREG_DBGBXVR3
;
254 return MISCREG_DBGBXVR4
;
256 return MISCREG_DBGBXVR5
;
258 return MISCREG_DBGBXVR6
;
260 return MISCREG_DBGBXVR7
;
262 return MISCREG_DBGBXVR8
;
264 return MISCREG_DBGBXVR9
;
266 return MISCREG_DBGBXVR10
;
268 return MISCREG_DBGBXVR11
;
270 return MISCREG_DBGBXVR12
;
272 return MISCREG_DBGBXVR13
;
274 return MISCREG_DBGBXVR14
;
276 return MISCREG_DBGBXVR15
;
282 return MISCREG_DBGOSLAR
;
284 return MISCREG_DBGOSLSR
;
286 return MISCREG_DBGOSDLR
;
288 return MISCREG_DBGPRCR
;
298 return MISCREG_TEEHBR
;
308 return MISCREG_JOSCR
;
330 // If we get here then it must be a register that we haven't implemented
331 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
332 crn
, opc1
, crm
, opc2
);
333 return MISCREG_CP14_UNIMPL
;
337 decodeCP15Reg(unsigned crn
, unsigned opc1
, unsigned crm
, unsigned opc2
)
349 return MISCREG_TCMTR
;
351 return MISCREG_TLBTR
;
353 return MISCREG_MPIDR
;
355 return MISCREG_REVIDR
;
363 return MISCREG_ID_PFR0
;
365 return MISCREG_ID_PFR1
;
367 return MISCREG_ID_DFR0
;
369 return MISCREG_ID_AFR0
;
371 return MISCREG_ID_MMFR0
;
373 return MISCREG_ID_MMFR1
;
375 return MISCREG_ID_MMFR2
;
377 return MISCREG_ID_MMFR3
;
383 return MISCREG_ID_ISAR0
;
385 return MISCREG_ID_ISAR1
;
387 return MISCREG_ID_ISAR2
;
389 return MISCREG_ID_ISAR3
;
391 return MISCREG_ID_ISAR4
;
393 return MISCREG_ID_ISAR5
;
395 return MISCREG_ID_MMFR4
;
397 return MISCREG_ID_ISAR6
;
401 return MISCREG_RAZ
; // read as zero
408 return MISCREG_CCSIDR
;
410 return MISCREG_CLIDR
;
417 if (crm
== 0 && opc2
== 0) {
418 return MISCREG_CSSELR
;
424 return MISCREG_VPIDR
;
426 return MISCREG_VMPIDR
;
436 return MISCREG_SCTLR
;
438 return MISCREG_ACTLR
;
440 return MISCREG_CPACR
;
442 } else if (crm
== 1) {
449 return MISCREG_NSACR
;
451 } else if (crm
== 3) {
455 } else if (opc1
== 4) {
458 return MISCREG_HSCTLR
;
460 return MISCREG_HACTLR
;
461 } else if (crm
== 1) {
468 return MISCREG_HCPTR
;
480 if (opc1
== 0 && crm
== 0) {
483 return MISCREG_TTBR0
;
485 return MISCREG_TTBR1
;
487 return MISCREG_TTBCR
;
489 } else if (opc1
== 4) {
490 if (crm
== 0 && opc2
== 2)
492 else if (crm
== 1 && opc2
== 2)
497 if (opc1
== 0 && crm
== 0 && opc2
== 0) {
502 if (opc1
== 0 && crm
== 6 && opc2
== 0) {
503 return MISCREG_ICC_PMR
;
511 } else if (opc2
== 1) {
514 } else if (crm
== 1) {
516 return MISCREG_ADFSR
;
517 } else if (opc2
== 1) {
518 return MISCREG_AIFSR
;
521 } else if (opc1
== 4) {
524 return MISCREG_HADFSR
;
526 return MISCREG_HAIFSR
;
527 } else if (crm
== 2 && opc2
== 0) {
533 if (opc1
== 0 && crm
== 0) {
540 } else if (opc1
== 4 && crm
== 0) {
543 return MISCREG_HDFAR
;
545 return MISCREG_HIFAR
;
547 return MISCREG_HPFAR
;
562 return MISCREG_ICIALLUIS
;
564 return MISCREG_BPIALLIS
;
570 return MISCREG_DBGDEVID0
;
581 return MISCREG_ICIALLU
;
583 return MISCREG_ICIMVAU
;
585 return MISCREG_CP15ISB
;
587 return MISCREG_BPIALL
;
589 return MISCREG_BPIMVA
;
594 return MISCREG_DCIMVAC
;
595 } else if (opc2
== 2) {
596 return MISCREG_DCISW
;
602 return MISCREG_ATS1CPR
;
604 return MISCREG_ATS1CPW
;
606 return MISCREG_ATS1CUR
;
608 return MISCREG_ATS1CUW
;
610 return MISCREG_ATS12NSOPR
;
612 return MISCREG_ATS12NSOPW
;
614 return MISCREG_ATS12NSOUR
;
616 return MISCREG_ATS12NSOUW
;
622 return MISCREG_DCCMVAC
;
624 return MISCREG_DCCSW
;
626 return MISCREG_CP15DSB
;
628 return MISCREG_CP15DMB
;
633 return MISCREG_DCCMVAU
;
643 return MISCREG_DCCIMVAC
;
644 } else if (opc2
== 2) {
645 return MISCREG_DCCISW
;
649 } else if (opc1
== 4 && crm
== 8) {
651 return MISCREG_ATS1HR
;
653 return MISCREG_ATS1HW
;
662 return MISCREG_TLBIALLIS
;
664 return MISCREG_TLBIMVAIS
;
666 return MISCREG_TLBIASIDIS
;
668 return MISCREG_TLBIMVAAIS
;
670 return MISCREG_TLBIMVALIS
;
672 return MISCREG_TLBIMVAALIS
;
678 return MISCREG_ITLBIALL
;
680 return MISCREG_ITLBIMVA
;
682 return MISCREG_ITLBIASID
;
688 return MISCREG_DTLBIALL
;
690 return MISCREG_DTLBIMVA
;
692 return MISCREG_DTLBIASID
;
698 return MISCREG_TLBIALL
;
700 return MISCREG_TLBIMVA
;
702 return MISCREG_TLBIASID
;
704 return MISCREG_TLBIMVAA
;
706 return MISCREG_TLBIMVAL
;
708 return MISCREG_TLBIMVAAL
;
712 } else if (opc1
== 4) {
716 return MISCREG_TLBIIPAS2IS
;
718 return MISCREG_TLBIIPAS2LIS
;
720 } else if (crm
== 3) {
723 return MISCREG_TLBIALLHIS
;
725 return MISCREG_TLBIMVAHIS
;
727 return MISCREG_TLBIALLNSNHIS
;
729 return MISCREG_TLBIMVALHIS
;
731 } else if (crm
== 4) {
734 return MISCREG_TLBIIPAS2
;
736 return MISCREG_TLBIIPAS2L
;
738 } else if (crm
== 7) {
741 return MISCREG_TLBIALLH
;
743 return MISCREG_TLBIMVAH
;
745 return MISCREG_TLBIALLNSNH
;
747 return MISCREG_TLBIMVALH
;
753 // Every cop register with CRn = 9 and CRm in
754 // {0-2}, {5-8} is implementation defined regardless
764 return MISCREG_IMPDEF_UNIMPL
;
773 return MISCREG_PMCNTENSET
;
775 return MISCREG_PMCNTENCLR
;
777 return MISCREG_PMOVSR
;
779 return MISCREG_PMSWINC
;
781 return MISCREG_PMSELR
;
783 return MISCREG_PMCEID0
;
785 return MISCREG_PMCEID1
;
791 return MISCREG_PMCCNTR
;
793 // Selector is PMSELR.SEL
794 return MISCREG_PMXEVTYPER_PMCCFILTR
;
796 return MISCREG_PMXEVCNTR
;
802 return MISCREG_PMUSERENR
;
804 return MISCREG_PMINTENSET
;
806 return MISCREG_PMINTENCLR
;
808 return MISCREG_PMOVSSET
;
812 } else if (opc1
== 1) {
816 case 2: // L2CTLR, L2 Control Register
817 return MISCREG_L2CTLR
;
819 return MISCREG_L2ECTLR
;
828 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
830 return MISCREG_IMPDEF_UNIMPL
;
831 } else if (crm
== 2) { // TEX Remap Registers
833 // Selector is TTBCR.EAE
834 return MISCREG_PRRR_MAIR0
;
835 } else if (opc2
== 1) {
836 // Selector is TTBCR.EAE
837 return MISCREG_NMRR_MAIR1
;
839 } else if (crm
== 3) {
841 return MISCREG_AMAIR0
;
842 } else if (opc2
== 1) {
843 return MISCREG_AMAIR1
;
846 } else if (opc1
== 4) {
847 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
850 return MISCREG_HMAIR0
;
852 return MISCREG_HMAIR1
;
853 } else if (crm
== 3) {
855 return MISCREG_HAMAIR0
;
857 return MISCREG_HAMAIR1
;
874 // Reserved for DMA operations for TCM access
875 return MISCREG_IMPDEF_UNIMPL
;
886 } else if (opc2
== 1) {
887 return MISCREG_MVBAR
;
889 } else if (crm
== 1) {
893 } else if (crm
== 8) {
896 return MISCREG_ICC_IAR0
;
898 return MISCREG_ICC_EOIR0
;
900 return MISCREG_ICC_HPPIR0
;
902 return MISCREG_ICC_BPR0
;
904 return MISCREG_ICC_AP0R0
;
906 return MISCREG_ICC_AP0R1
;
908 return MISCREG_ICC_AP0R2
;
910 return MISCREG_ICC_AP0R3
;
912 } else if (crm
== 9) {
915 return MISCREG_ICC_AP1R0
;
917 return MISCREG_ICC_AP1R1
;
919 return MISCREG_ICC_AP1R2
;
921 return MISCREG_ICC_AP1R3
;
923 } else if (crm
== 11) {
926 return MISCREG_ICC_DIR
;
928 return MISCREG_ICC_RPR
;
930 } else if (crm
== 12) {
933 return MISCREG_ICC_IAR1
;
935 return MISCREG_ICC_EOIR1
;
937 return MISCREG_ICC_HPPIR1
;
939 return MISCREG_ICC_BPR1
;
941 return MISCREG_ICC_CTLR
;
943 return MISCREG_ICC_SRE
;
945 return MISCREG_ICC_IGRPEN0
;
947 return MISCREG_ICC_IGRPEN1
;
950 } else if (opc1
== 4) {
951 if (crm
== 0 && opc2
== 0) {
952 return MISCREG_HVBAR
;
953 } else if (crm
== 8) {
956 return MISCREG_ICH_AP0R0
;
958 return MISCREG_ICH_AP0R1
;
960 return MISCREG_ICH_AP0R2
;
962 return MISCREG_ICH_AP0R3
;
964 } else if (crm
== 9) {
967 return MISCREG_ICH_AP1R0
;
969 return MISCREG_ICH_AP1R1
;
971 return MISCREG_ICH_AP1R2
;
973 return MISCREG_ICH_AP1R3
;
975 return MISCREG_ICC_HSRE
;
977 } else if (crm
== 11) {
980 return MISCREG_ICH_HCR
;
982 return MISCREG_ICH_VTR
;
984 return MISCREG_ICH_MISR
;
986 return MISCREG_ICH_EISR
;
988 return MISCREG_ICH_ELRSR
;
990 return MISCREG_ICH_VMCR
;
992 } else if (crm
== 12) {
995 return MISCREG_ICH_LR0
;
997 return MISCREG_ICH_LR1
;
999 return MISCREG_ICH_LR2
;
1001 return MISCREG_ICH_LR3
;
1003 return MISCREG_ICH_LR4
;
1005 return MISCREG_ICH_LR5
;
1007 return MISCREG_ICH_LR6
;
1009 return MISCREG_ICH_LR7
;
1011 } else if (crm
== 13) {
1014 return MISCREG_ICH_LR8
;
1016 return MISCREG_ICH_LR9
;
1018 return MISCREG_ICH_LR10
;
1020 return MISCREG_ICH_LR11
;
1022 return MISCREG_ICH_LR12
;
1024 return MISCREG_ICH_LR13
;
1026 return MISCREG_ICH_LR14
;
1028 return MISCREG_ICH_LR15
;
1030 } else if (crm
== 14) {
1033 return MISCREG_ICH_LRC0
;
1035 return MISCREG_ICH_LRC1
;
1037 return MISCREG_ICH_LRC2
;
1039 return MISCREG_ICH_LRC3
;
1041 return MISCREG_ICH_LRC4
;
1043 return MISCREG_ICH_LRC5
;
1045 return MISCREG_ICH_LRC6
;
1047 return MISCREG_ICH_LRC7
;
1049 } else if (crm
== 15) {
1052 return MISCREG_ICH_LRC8
;
1054 return MISCREG_ICH_LRC9
;
1056 return MISCREG_ICH_LRC10
;
1058 return MISCREG_ICH_LRC11
;
1060 return MISCREG_ICH_LRC12
;
1062 return MISCREG_ICH_LRC13
;
1064 return MISCREG_ICH_LRC14
;
1066 return MISCREG_ICH_LRC15
;
1069 } else if (opc1
== 6) {
1073 return MISCREG_ICC_MCTLR
;
1075 return MISCREG_ICC_MSRE
;
1077 return MISCREG_ICC_MGRPEN1
;
1087 return MISCREG_FCSEIDR
;
1089 return MISCREG_CONTEXTIDR
;
1091 return MISCREG_TPIDRURW
;
1093 return MISCREG_TPIDRURO
;
1095 return MISCREG_TPIDRPRW
;
1098 } else if (opc1
== 4) {
1099 if (crm
== 0 && opc2
== 2)
1100 return MISCREG_HTPIDR
;
1108 return MISCREG_CNTFRQ
;
1112 return MISCREG_CNTKCTL
;
1116 return MISCREG_CNTP_TVAL
;
1118 return MISCREG_CNTP_CTL
;
1122 return MISCREG_CNTV_TVAL
;
1124 return MISCREG_CNTV_CTL
;
1127 } else if (opc1
== 4) {
1128 if (crm
== 1 && opc2
== 0) {
1129 return MISCREG_CNTHCTL
;
1130 } else if (crm
== 2) {
1132 return MISCREG_CNTHP_TVAL
;
1134 return MISCREG_CNTHP_CTL
;
1139 // Implementation defined
1140 return MISCREG_IMPDEF_UNIMPL
;
1142 // Unrecognized register
1143 return MISCREG_CP15_UNIMPL
;
1147 decodeCP15Reg64(unsigned crm
, unsigned opc1
)
1153 return MISCREG_TTBR0
;
1155 return MISCREG_TTBR1
;
1157 return MISCREG_HTTBR
;
1159 return MISCREG_VTTBR
;
1169 return MISCREG_CNTPCT
;
1171 return MISCREG_CNTVCT
;
1173 return MISCREG_CNTP_CVAL
;
1175 return MISCREG_CNTV_CVAL
;
1177 return MISCREG_CNTVOFF
;
1179 return MISCREG_CNTHP_CVAL
;
1185 return MISCREG_ICC_SGI1R
;
1187 return MISCREG_ICC_ASGI1R
;
1189 return MISCREG_ICC_SGI0R
;
1196 return MISCREG_CPUMERRSR
;
1198 return MISCREG_L2MERRSR
;
1201 // Unrecognized register
1202 return MISCREG_CP15_UNIMPL
;
1205 std::tuple
<bool, bool>
1206 canReadCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
, ThreadContext
*tc
)
1208 bool secure
= !scr
.ns
;
1209 bool canRead
= false;
1210 bool undefined
= false;
1212 switch (cpsr
.mode
) {
1214 canRead
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
1215 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1221 case MODE_UNDEFINED
:
1223 canRead
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1224 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1227 canRead
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1228 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1231 canRead
= miscRegInfo
[reg
][MISCREG_HYP_NS_RD
];
1238 case MISCREG_CNTFRQ
... MISCREG_CNTVOFF
:
1240 undefined
= AArch32isUndefinedGenericTimer(reg
, tc
);
1246 // can't do permissions checkes on the root of a banked pair of regs
1247 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1248 return std::make_tuple(canRead
, undefined
);
1251 std::tuple
<bool, bool>
1252 canWriteCoprocReg(MiscRegIndex reg
, SCR scr
, CPSR cpsr
, ThreadContext
*tc
)
1254 bool secure
= !scr
.ns
;
1255 bool canWrite
= false;
1256 bool undefined
= false;
1258 switch (cpsr
.mode
) {
1260 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1261 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1267 case MODE_UNDEFINED
:
1269 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1270 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1273 canWrite
= secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1274 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1277 canWrite
= miscRegInfo
[reg
][MISCREG_HYP_NS_WR
];
1284 case MISCREG_CNTFRQ
... MISCREG_CNTVOFF
:
1286 undefined
= AArch32isUndefinedGenericTimer(reg
, tc
);
1292 // can't do permissions checkes on the root of a banked pair of regs
1293 assert(!miscRegInfo
[reg
][MISCREG_BANKED
]);
1294 return std::make_tuple(canWrite
, undefined
);
1298 AArch32isUndefinedGenericTimer(MiscRegIndex reg
, ThreadContext
*tc
)
1300 if (currEL(tc
) == EL0
&& ELIs32(tc
, EL1
)) {
1301 const HCR hcr
= tc
->readMiscReg(MISCREG_HCR_EL2
);
1302 bool trap_cond
= condGenericTimerSystemAccessTrapEL1(reg
, tc
);
1303 if (trap_cond
&& (!EL2Enabled(tc
) || !hcr
.tge
))
1310 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
)
1312 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1313 return snsBankedIndex(reg
, tc
, scr
.ns
);
1317 snsBankedIndex(MiscRegIndex reg
, ThreadContext
*tc
, bool ns
)
1319 int reg_as_int
= static_cast<int>(reg
);
1320 if (miscRegInfo
[reg
][MISCREG_BANKED
]) {
1321 reg_as_int
+= (ArmSystem::haveSecurity(tc
) &&
1322 !ArmSystem::highestELIs64(tc
) && !ns
) ? 2 : 1;
1328 snsBankedIndex64(MiscRegIndex reg
, ThreadContext
*tc
)
1330 auto *isa
= static_cast<ArmISA::ISA
*>(tc
->getIsaPtr());
1331 SCR scr
= tc
->readMiscReg(MISCREG_SCR
);
1332 return isa
->snsBankedIndex64(reg
, scr
.ns
);
1336 * If the reg is a child reg of a banked set, then the parent is the last
1337 * banked one in the list. This is messy, and the wish is to eventually have
1338 * the bitmap replaced with a better data structure. the preUnflatten function
1339 * initializes a lookup table to speed up the search for these banked
1343 int unflattenResultMiscReg
[NUM_MISCREGS
];
1346 preUnflattenMiscReg()
1349 for (int i
= 0 ; i
< NUM_MISCREGS
; i
++){
1350 if (miscRegInfo
[i
][MISCREG_BANKED
])
1352 if (miscRegInfo
[i
][MISCREG_BANKED_CHILD
])
1353 unflattenResultMiscReg
[i
] = reg
;
1355 unflattenResultMiscReg
[i
] = i
;
1356 // if this assert fails, no parent was found, and something is broken
1357 assert(unflattenResultMiscReg
[i
] > -1);
1362 unflattenMiscReg(int reg
)
1364 return unflattenResultMiscReg
[reg
];
1368 canReadAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1371 // Check for SP_EL0 access while SPSEL == 0
1372 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1375 // Check for RVBAR access
1376 if (reg
== MISCREG_RVBAR_EL1
) {
1377 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1378 if (highest_el
== EL2
|| highest_el
== EL3
)
1381 if (reg
== MISCREG_RVBAR_EL2
) {
1382 ExceptionLevel highest_el
= ArmSystem::highestEL(tc
);
1383 if (highest_el
== EL3
)
1387 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1388 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1390 switch (currEL(cpsr
)) {
1392 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_RD
] :
1393 miscRegInfo
[reg
][MISCREG_USR_NS_RD
];
1395 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_RD
] :
1396 miscRegInfo
[reg
][MISCREG_PRI_NS_RD
];
1399 return secure
? miscRegInfo
[reg
][MISCREG_HYP_E2H_S_RD
] :
1400 miscRegInfo
[reg
][MISCREG_HYP_E2H_NS_RD
];
1402 return secure
? miscRegInfo
[reg
][MISCREG_HYP_S_RD
] :
1403 miscRegInfo
[reg
][MISCREG_HYP_NS_RD
];
1406 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_RD
] :
1407 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_RD
] :
1408 miscRegInfo
[reg
][MISCREG_MON_NS1_RD
];
1410 panic("Invalid exception level");
1415 canWriteAArch64SysReg(MiscRegIndex reg
, HCR hcr
, SCR scr
, CPSR cpsr
,
1418 // Check for SP_EL0 access while SPSEL == 0
1419 if ((reg
== MISCREG_SP_EL0
) && (tc
->readMiscReg(MISCREG_SPSEL
) == 0))
1421 ExceptionLevel el
= currEL(cpsr
);
1423 bool secure
= ArmSystem::haveSecurity(tc
) && !scr
.ns
;
1424 bool el2_host
= EL2Enabled(tc
) && hcr
.e2h
;
1428 return secure
? miscRegInfo
[reg
][MISCREG_USR_S_WR
] :
1429 miscRegInfo
[reg
][MISCREG_USR_NS_WR
];
1431 return secure
? miscRegInfo
[reg
][MISCREG_PRI_S_WR
] :
1432 miscRegInfo
[reg
][MISCREG_PRI_NS_WR
];
1435 return secure
? miscRegInfo
[reg
][MISCREG_HYP_E2H_S_WR
] :
1436 miscRegInfo
[reg
][MISCREG_HYP_E2H_NS_WR
];
1438 return secure
? miscRegInfo
[reg
][MISCREG_HYP_S_WR
] :
1439 miscRegInfo
[reg
][MISCREG_HYP_NS_WR
];
1442 return el2_host
? miscRegInfo
[reg
][MISCREG_MON_E2H_WR
] :
1443 secure
? miscRegInfo
[reg
][MISCREG_MON_NS0_WR
] :
1444 miscRegInfo
[reg
][MISCREG_MON_NS1_WR
];
1446 panic("Invalid exception level");
1451 decodeAArch64SysReg(unsigned op0
, unsigned op1
,
1452 unsigned crn
, unsigned crm
,
1465 return MISCREG_IC_IALLUIS
;
1471 return MISCREG_IC_IALLU
;
1477 return MISCREG_DC_IVAC_Xt
;
1479 return MISCREG_DC_ISW_Xt
;
1485 return MISCREG_AT_S1E1R_Xt
;
1487 return MISCREG_AT_S1E1W_Xt
;
1489 return MISCREG_AT_S1E0R_Xt
;
1491 return MISCREG_AT_S1E0W_Xt
;
1497 return MISCREG_DC_CSW_Xt
;
1503 return MISCREG_DC_CISW_Xt
;
1513 return MISCREG_DC_ZVA_Xt
;
1519 return MISCREG_IC_IVAU_Xt
;
1525 return MISCREG_DC_CVAC_Xt
;
1531 return MISCREG_DC_CVAU_Xt
;
1537 return MISCREG_DC_CIVAC_Xt
;
1547 return MISCREG_AT_S1E2R_Xt
;
1549 return MISCREG_AT_S1E2W_Xt
;
1551 return MISCREG_AT_S12E1R_Xt
;
1553 return MISCREG_AT_S12E1W_Xt
;
1555 return MISCREG_AT_S12E0R_Xt
;
1557 return MISCREG_AT_S12E0W_Xt
;
1567 return MISCREG_AT_S1E3R_Xt
;
1569 return MISCREG_AT_S1E3W_Xt
;
1583 return MISCREG_TLBI_VMALLE1IS
;
1585 return MISCREG_TLBI_VAE1IS_Xt
;
1587 return MISCREG_TLBI_ASIDE1IS_Xt
;
1589 return MISCREG_TLBI_VAAE1IS_Xt
;
1591 return MISCREG_TLBI_VALE1IS_Xt
;
1593 return MISCREG_TLBI_VAALE1IS_Xt
;
1599 return MISCREG_TLBI_VMALLE1
;
1601 return MISCREG_TLBI_VAE1_Xt
;
1603 return MISCREG_TLBI_ASIDE1_Xt
;
1605 return MISCREG_TLBI_VAAE1_Xt
;
1607 return MISCREG_TLBI_VALE1_Xt
;
1609 return MISCREG_TLBI_VAALE1_Xt
;
1619 return MISCREG_TLBI_IPAS2E1IS_Xt
;
1621 return MISCREG_TLBI_IPAS2LE1IS_Xt
;
1627 return MISCREG_TLBI_ALLE2IS
;
1629 return MISCREG_TLBI_VAE2IS_Xt
;
1631 return MISCREG_TLBI_ALLE1IS
;
1633 return MISCREG_TLBI_VALE2IS_Xt
;
1635 return MISCREG_TLBI_VMALLS12E1IS
;
1641 return MISCREG_TLBI_IPAS2E1_Xt
;
1643 return MISCREG_TLBI_IPAS2LE1_Xt
;
1649 return MISCREG_TLBI_ALLE2
;
1651 return MISCREG_TLBI_VAE2_Xt
;
1653 return MISCREG_TLBI_ALLE1
;
1655 return MISCREG_TLBI_VALE2_Xt
;
1657 return MISCREG_TLBI_VMALLS12E1
;
1667 return MISCREG_TLBI_ALLE3IS
;
1669 return MISCREG_TLBI_VAE3IS_Xt
;
1671 return MISCREG_TLBI_VALE3IS_Xt
;
1677 return MISCREG_TLBI_ALLE3
;
1679 return MISCREG_TLBI_VAE3_Xt
;
1681 return MISCREG_TLBI_VALE3_Xt
;
1690 // SYS Instruction with CRn = { 11, 15 }
1691 // (Trappable by HCR_EL2.TIDCP)
1692 return MISCREG_IMPDEF_UNIMPL
;
1704 return MISCREG_OSDTRRX_EL1
;
1706 return MISCREG_DBGBVR0_EL1
;
1708 return MISCREG_DBGBCR0_EL1
;
1710 return MISCREG_DBGWVR0_EL1
;
1712 return MISCREG_DBGWCR0_EL1
;
1718 return MISCREG_DBGBVR1_EL1
;
1720 return MISCREG_DBGBCR1_EL1
;
1722 return MISCREG_DBGWVR1_EL1
;
1724 return MISCREG_DBGWCR1_EL1
;
1730 return MISCREG_MDCCINT_EL1
;
1732 return MISCREG_MDSCR_EL1
;
1734 return MISCREG_DBGBVR2_EL1
;
1736 return MISCREG_DBGBCR2_EL1
;
1738 return MISCREG_DBGWVR2_EL1
;
1740 return MISCREG_DBGWCR2_EL1
;
1746 return MISCREG_OSDTRTX_EL1
;
1748 return MISCREG_DBGBVR3_EL1
;
1750 return MISCREG_DBGBCR3_EL1
;
1752 return MISCREG_DBGWVR3_EL1
;
1754 return MISCREG_DBGWCR3_EL1
;
1760 return MISCREG_DBGBVR4_EL1
;
1762 return MISCREG_DBGBCR4_EL1
;
1764 return MISCREG_DBGWVR4_EL1
;
1766 return MISCREG_DBGWCR4_EL1
;
1772 return MISCREG_DBGBVR5_EL1
;
1774 return MISCREG_DBGBCR5_EL1
;
1776 return MISCREG_DBGWVR5_EL1
;
1778 return MISCREG_DBGWCR5_EL1
;
1784 return MISCREG_OSECCR_EL1
;
1786 return MISCREG_DBGBVR6_EL1
;
1788 return MISCREG_DBGBCR6_EL1
;
1790 return MISCREG_DBGWVR6_EL1
;
1792 return MISCREG_DBGWCR6_EL1
;
1798 return MISCREG_DBGBVR7_EL1
;
1800 return MISCREG_DBGBCR7_EL1
;
1802 return MISCREG_DBGWVR7_EL1
;
1804 return MISCREG_DBGWCR7_EL1
;
1810 return MISCREG_DBGBVR8_EL1
;
1812 return MISCREG_DBGBCR8_EL1
;
1814 return MISCREG_DBGWVR8_EL1
;
1816 return MISCREG_DBGWCR8_EL1
;
1822 return MISCREG_DBGBVR9_EL1
;
1824 return MISCREG_DBGBCR9_EL1
;
1826 return MISCREG_DBGWVR9_EL1
;
1828 return MISCREG_DBGWCR9_EL1
;
1834 return MISCREG_DBGBVR10_EL1
;
1836 return MISCREG_DBGBCR10_EL1
;
1838 return MISCREG_DBGWVR10_EL1
;
1840 return MISCREG_DBGWCR10_EL1
;
1846 return MISCREG_DBGBVR11_EL1
;
1848 return MISCREG_DBGBCR11_EL1
;
1850 return MISCREG_DBGWVR11_EL1
;
1852 return MISCREG_DBGWCR11_EL1
;
1858 return MISCREG_DBGBVR12_EL1
;
1860 return MISCREG_DBGBCR12_EL1
;
1862 return MISCREG_DBGWVR12_EL1
;
1864 return MISCREG_DBGWCR12_EL1
;
1870 return MISCREG_DBGBVR13_EL1
;
1872 return MISCREG_DBGBCR13_EL1
;
1874 return MISCREG_DBGWVR13_EL1
;
1876 return MISCREG_DBGWCR13_EL1
;
1882 return MISCREG_DBGBVR14_EL1
;
1884 return MISCREG_DBGBCR14_EL1
;
1886 return MISCREG_DBGWVR14_EL1
;
1888 return MISCREG_DBGWCR14_EL1
;
1894 return MISCREG_DBGBVR15_EL1
;
1896 return MISCREG_DBGBCR15_EL1
;
1898 return MISCREG_DBGWVR15_EL1
;
1900 return MISCREG_DBGWCR15_EL1
;
1910 return MISCREG_TEECR32_EL1
;
1920 return MISCREG_MDCCSR_EL0
;
1926 return MISCREG_MDDTR_EL0
;
1932 return MISCREG_MDDTRRX_EL0
;
1942 return MISCREG_DBGVCR32_EL2
;
1956 return MISCREG_MDRAR_EL1
;
1958 return MISCREG_OSLAR_EL1
;
1964 return MISCREG_OSLSR_EL1
;
1970 return MISCREG_OSDLR_EL1
;
1976 return MISCREG_DBGPRCR_EL1
;
1986 return MISCREG_TEEHBR32_EL1
;
2000 return MISCREG_DBGCLAIMSET_EL1
;
2006 return MISCREG_DBGCLAIMCLR_EL1
;
2012 return MISCREG_DBGAUTHSTATUS_EL1
;
2030 return MISCREG_MIDR_EL1
;
2032 return MISCREG_MPIDR_EL1
;
2034 return MISCREG_REVIDR_EL1
;
2040 return MISCREG_ID_PFR0_EL1
;
2042 return MISCREG_ID_PFR1_EL1
;
2044 return MISCREG_ID_DFR0_EL1
;
2046 return MISCREG_ID_AFR0_EL1
;
2048 return MISCREG_ID_MMFR0_EL1
;
2050 return MISCREG_ID_MMFR1_EL1
;
2052 return MISCREG_ID_MMFR2_EL1
;
2054 return MISCREG_ID_MMFR3_EL1
;
2060 return MISCREG_ID_ISAR0_EL1
;
2062 return MISCREG_ID_ISAR1_EL1
;
2064 return MISCREG_ID_ISAR2_EL1
;
2066 return MISCREG_ID_ISAR3_EL1
;
2068 return MISCREG_ID_ISAR4_EL1
;
2070 return MISCREG_ID_ISAR5_EL1
;
2072 return MISCREG_ID_MMFR4_EL1
;
2074 return MISCREG_ID_ISAR6_EL1
;
2080 return MISCREG_MVFR0_EL1
;
2082 return MISCREG_MVFR1_EL1
;
2084 return MISCREG_MVFR2_EL1
;
2092 return MISCREG_ID_AA64PFR0_EL1
;
2094 return MISCREG_ID_AA64PFR1_EL1
;
2098 return MISCREG_ID_AA64ZFR0_EL1
;
2106 return MISCREG_ID_AA64DFR0_EL1
;
2108 return MISCREG_ID_AA64DFR1_EL1
;
2110 return MISCREG_ID_AA64AFR0_EL1
;
2112 return MISCREG_ID_AA64AFR1_EL1
;
2123 return MISCREG_ID_AA64ISAR0_EL1
;
2125 return MISCREG_ID_AA64ISAR1_EL1
;
2133 return MISCREG_ID_AA64MMFR0_EL1
;
2135 return MISCREG_ID_AA64MMFR1_EL1
;
2137 return MISCREG_ID_AA64MMFR2_EL1
;
2149 return MISCREG_CCSIDR_EL1
;
2151 return MISCREG_CLIDR_EL1
;
2153 return MISCREG_AIDR_EL1
;
2163 return MISCREG_CSSELR_EL1
;
2173 return MISCREG_CTR_EL0
;
2175 return MISCREG_DCZID_EL0
;
2185 return MISCREG_VPIDR_EL2
;
2187 return MISCREG_VMPIDR_EL2
;
2201 return MISCREG_SCTLR_EL1
;
2203 return MISCREG_ACTLR_EL1
;
2205 return MISCREG_CPACR_EL1
;
2211 return MISCREG_ZCR_EL1
;
2221 return MISCREG_SCTLR_EL2
;
2223 return MISCREG_ACTLR_EL2
;
2229 return MISCREG_HCR_EL2
;
2231 return MISCREG_MDCR_EL2
;
2233 return MISCREG_CPTR_EL2
;
2235 return MISCREG_HSTR_EL2
;
2237 return MISCREG_HACR_EL2
;
2243 return MISCREG_ZCR_EL2
;
2249 /* op0: 3 Crn:1 op1:5 */
2254 return MISCREG_SCTLR_EL12
;
2256 return MISCREG_CPACR_EL12
;
2262 return MISCREG_ZCR_EL12
;
2272 return MISCREG_SCTLR_EL3
;
2274 return MISCREG_ACTLR_EL3
;
2280 return MISCREG_SCR_EL3
;
2282 return MISCREG_SDER32_EL3
;
2284 return MISCREG_CPTR_EL3
;
2290 return MISCREG_ZCR_EL3
;
2296 return MISCREG_MDCR_EL3
;
2310 return MISCREG_TTBR0_EL1
;
2312 return MISCREG_TTBR1_EL1
;
2314 return MISCREG_TCR_EL1
;
2320 return MISCREG_APIAKeyLo_EL1
;
2322 return MISCREG_APIAKeyHi_EL1
;
2324 return MISCREG_APIBKeyLo_EL1
;
2326 return MISCREG_APIBKeyHi_EL1
;
2332 return MISCREG_APDAKeyLo_EL1
;
2334 return MISCREG_APDAKeyHi_EL1
;
2336 return MISCREG_APDBKeyLo_EL1
;
2338 return MISCREG_APDBKeyHi_EL1
;
2345 return MISCREG_APGAKeyLo_EL1
;
2347 return MISCREG_APGAKeyHi_EL1
;
2357 return MISCREG_TTBR0_EL2
;
2359 return MISCREG_TTBR1_EL2
;
2361 return MISCREG_TCR_EL2
;
2367 return MISCREG_VTTBR_EL2
;
2369 return MISCREG_VTCR_EL2
;
2375 return MISCREG_VSTTBR_EL2
;
2377 return MISCREG_VSTCR_EL2
;
2383 /* op0: 3 Crn:2 op1:5 */
2388 return MISCREG_TTBR0_EL12
;
2390 return MISCREG_TTBR1_EL12
;
2392 return MISCREG_TCR_EL12
;
2402 return MISCREG_TTBR0_EL3
;
2404 return MISCREG_TCR_EL3
;
2418 return MISCREG_DACR32_EL2
;
2432 return MISCREG_SPSR_EL1
;
2434 return MISCREG_ELR_EL1
;
2440 return MISCREG_SP_EL0
;
2446 return MISCREG_SPSEL
;
2448 return MISCREG_CURRENTEL
;
2456 return MISCREG_ICC_PMR_EL1
;
2466 return MISCREG_NZCV
;
2468 return MISCREG_DAIF
;
2474 return MISCREG_FPCR
;
2476 return MISCREG_FPSR
;
2482 return MISCREG_DSPSR_EL0
;
2484 return MISCREG_DLR_EL0
;
2494 return MISCREG_SPSR_EL2
;
2496 return MISCREG_ELR_EL2
;
2502 return MISCREG_SP_EL1
;
2508 return MISCREG_SPSR_IRQ_AA64
;
2510 return MISCREG_SPSR_ABT_AA64
;
2512 return MISCREG_SPSR_UND_AA64
;
2514 return MISCREG_SPSR_FIQ_AA64
;
2524 return MISCREG_SPSR_EL12
;
2526 return MISCREG_ELR_EL12
;
2536 return MISCREG_SPSR_EL3
;
2538 return MISCREG_ELR_EL3
;
2544 return MISCREG_SP_EL2
;
2558 return MISCREG_AFSR0_EL1
;
2560 return MISCREG_AFSR1_EL1
;
2566 return MISCREG_ESR_EL1
;
2572 return MISCREG_ERRIDR_EL1
;
2574 return MISCREG_ERRSELR_EL1
;
2580 return MISCREG_ERXFR_EL1
;
2582 return MISCREG_ERXCTLR_EL1
;
2584 return MISCREG_ERXSTATUS_EL1
;
2586 return MISCREG_ERXADDR_EL1
;
2592 return MISCREG_ERXMISC0_EL1
;
2594 return MISCREG_ERXMISC1_EL1
;
2604 return MISCREG_IFSR32_EL2
;
2610 return MISCREG_AFSR0_EL2
;
2612 return MISCREG_AFSR1_EL2
;
2618 return MISCREG_ESR_EL2
;
2620 return MISCREG_VSESR_EL2
;
2626 return MISCREG_FPEXC32_EL2
;
2636 return MISCREG_AFSR0_EL12
;
2638 return MISCREG_AFSR1_EL12
;
2644 return MISCREG_ESR_EL12
;
2654 return MISCREG_AFSR0_EL3
;
2656 return MISCREG_AFSR1_EL3
;
2662 return MISCREG_ESR_EL3
;
2676 return MISCREG_FAR_EL1
;
2686 return MISCREG_FAR_EL2
;
2688 return MISCREG_HPFAR_EL2
;
2698 return MISCREG_FAR_EL12
;
2708 return MISCREG_FAR_EL3
;
2722 return MISCREG_PAR_EL1
;
2736 return MISCREG_PMINTENSET_EL1
;
2738 return MISCREG_PMINTENCLR_EL1
;
2748 return MISCREG_PMCR_EL0
;
2750 return MISCREG_PMCNTENSET_EL0
;
2752 return MISCREG_PMCNTENCLR_EL0
;
2754 return MISCREG_PMOVSCLR_EL0
;
2756 return MISCREG_PMSWINC_EL0
;
2758 return MISCREG_PMSELR_EL0
;
2760 return MISCREG_PMCEID0_EL0
;
2762 return MISCREG_PMCEID1_EL0
;
2768 return MISCREG_PMCCNTR_EL0
;
2770 return MISCREG_PMXEVTYPER_EL0
;
2772 return MISCREG_PMXEVCNTR_EL0
;
2778 return MISCREG_PMUSERENR_EL0
;
2780 return MISCREG_PMOVSSET_EL0
;
2794 return MISCREG_MAIR_EL1
;
2800 return MISCREG_AMAIR_EL1
;
2810 return MISCREG_MAIR_EL2
;
2816 return MISCREG_AMAIR_EL2
;
2826 return MISCREG_MAIR_EL12
;
2832 return MISCREG_AMAIR_EL12
;
2842 return MISCREG_MAIR_EL3
;
2848 return MISCREG_AMAIR_EL3
;
2862 return MISCREG_L2CTLR_EL1
;
2864 return MISCREG_L2ECTLR_EL1
;
2870 // S3_<op1>_11_<Cm>_<op2>
2871 return MISCREG_IMPDEF_UNIMPL
;
2881 return MISCREG_VBAR_EL1
;
2883 return MISCREG_RVBAR_EL1
;
2889 return MISCREG_ISR_EL1
;
2891 return MISCREG_DISR_EL1
;
2897 return MISCREG_ICC_IAR0_EL1
;
2899 return MISCREG_ICC_EOIR0_EL1
;
2901 return MISCREG_ICC_HPPIR0_EL1
;
2903 return MISCREG_ICC_BPR0_EL1
;
2905 return MISCREG_ICC_AP0R0_EL1
;
2907 return MISCREG_ICC_AP0R1_EL1
;
2909 return MISCREG_ICC_AP0R2_EL1
;
2911 return MISCREG_ICC_AP0R3_EL1
;
2917 return MISCREG_ICC_AP1R0_EL1
;
2919 return MISCREG_ICC_AP1R1_EL1
;
2921 return MISCREG_ICC_AP1R2_EL1
;
2923 return MISCREG_ICC_AP1R3_EL1
;
2929 return MISCREG_ICC_DIR_EL1
;
2931 return MISCREG_ICC_RPR_EL1
;
2933 return MISCREG_ICC_SGI1R_EL1
;
2935 return MISCREG_ICC_ASGI1R_EL1
;
2937 return MISCREG_ICC_SGI0R_EL1
;
2943 return MISCREG_ICC_IAR1_EL1
;
2945 return MISCREG_ICC_EOIR1_EL1
;
2947 return MISCREG_ICC_HPPIR1_EL1
;
2949 return MISCREG_ICC_BPR1_EL1
;
2951 return MISCREG_ICC_CTLR_EL1
;
2953 return MISCREG_ICC_SRE_EL1
;
2955 return MISCREG_ICC_IGRPEN0_EL1
;
2957 return MISCREG_ICC_IGRPEN1_EL1
;
2967 return MISCREG_VBAR_EL2
;
2969 return MISCREG_RVBAR_EL2
;
2975 return MISCREG_VDISR_EL2
;
2981 return MISCREG_ICH_AP0R0_EL2
;
2983 return MISCREG_ICH_AP0R1_EL2
;
2985 return MISCREG_ICH_AP0R2_EL2
;
2987 return MISCREG_ICH_AP0R3_EL2
;
2993 return MISCREG_ICH_AP1R0_EL2
;
2995 return MISCREG_ICH_AP1R1_EL2
;
2997 return MISCREG_ICH_AP1R2_EL2
;
2999 return MISCREG_ICH_AP1R3_EL2
;
3001 return MISCREG_ICC_SRE_EL2
;
3007 return MISCREG_ICH_HCR_EL2
;
3009 return MISCREG_ICH_VTR_EL2
;
3011 return MISCREG_ICH_MISR_EL2
;
3013 return MISCREG_ICH_EISR_EL2
;
3015 return MISCREG_ICH_ELRSR_EL2
;
3017 return MISCREG_ICH_VMCR_EL2
;
3023 return MISCREG_ICH_LR0_EL2
;
3025 return MISCREG_ICH_LR1_EL2
;
3027 return MISCREG_ICH_LR2_EL2
;
3029 return MISCREG_ICH_LR3_EL2
;
3031 return MISCREG_ICH_LR4_EL2
;
3033 return MISCREG_ICH_LR5_EL2
;
3035 return MISCREG_ICH_LR6_EL2
;
3037 return MISCREG_ICH_LR7_EL2
;
3043 return MISCREG_ICH_LR8_EL2
;
3045 return MISCREG_ICH_LR9_EL2
;
3047 return MISCREG_ICH_LR10_EL2
;
3049 return MISCREG_ICH_LR11_EL2
;
3051 return MISCREG_ICH_LR12_EL2
;
3053 return MISCREG_ICH_LR13_EL2
;
3055 return MISCREG_ICH_LR14_EL2
;
3057 return MISCREG_ICH_LR15_EL2
;
3067 return MISCREG_VBAR_EL12
;
3077 return MISCREG_VBAR_EL3
;
3079 return MISCREG_RVBAR_EL3
;
3081 return MISCREG_RMR_EL3
;
3087 return MISCREG_ICC_CTLR_EL3
;
3089 return MISCREG_ICC_SRE_EL3
;
3091 return MISCREG_ICC_IGRPEN1_EL3
;
3105 return MISCREG_CONTEXTIDR_EL1
;
3107 return MISCREG_TPIDR_EL1
;
3117 return MISCREG_TPIDR_EL0
;
3119 return MISCREG_TPIDRRO_EL0
;
3129 return MISCREG_CONTEXTIDR_EL2
;
3131 return MISCREG_TPIDR_EL2
;
3141 return MISCREG_CONTEXTIDR_EL12
;
3151 return MISCREG_TPIDR_EL3
;
3165 return MISCREG_CNTKCTL_EL1
;
3175 return MISCREG_CNTFRQ_EL0
;
3177 return MISCREG_CNTPCT_EL0
;
3179 return MISCREG_CNTVCT_EL0
;
3185 return MISCREG_CNTP_TVAL_EL0
;
3187 return MISCREG_CNTP_CTL_EL0
;
3189 return MISCREG_CNTP_CVAL_EL0
;
3195 return MISCREG_CNTV_TVAL_EL0
;
3197 return MISCREG_CNTV_CTL_EL0
;
3199 return MISCREG_CNTV_CVAL_EL0
;
3205 return MISCREG_PMEVCNTR0_EL0
;
3207 return MISCREG_PMEVCNTR1_EL0
;
3209 return MISCREG_PMEVCNTR2_EL0
;
3211 return MISCREG_PMEVCNTR3_EL0
;
3213 return MISCREG_PMEVCNTR4_EL0
;
3215 return MISCREG_PMEVCNTR5_EL0
;
3221 return MISCREG_PMEVTYPER0_EL0
;
3223 return MISCREG_PMEVTYPER1_EL0
;
3225 return MISCREG_PMEVTYPER2_EL0
;
3227 return MISCREG_PMEVTYPER3_EL0
;
3229 return MISCREG_PMEVTYPER4_EL0
;
3231 return MISCREG_PMEVTYPER5_EL0
;
3237 return MISCREG_PMCCFILTR_EL0
;
3246 return MISCREG_CNTVOFF_EL2
;
3252 return MISCREG_CNTHCTL_EL2
;
3258 return MISCREG_CNTHP_TVAL_EL2
;
3260 return MISCREG_CNTHP_CTL_EL2
;
3262 return MISCREG_CNTHP_CVAL_EL2
;
3268 return MISCREG_CNTHV_TVAL_EL2
;
3270 return MISCREG_CNTHV_CTL_EL2
;
3272 return MISCREG_CNTHV_CVAL_EL2
;
3282 return MISCREG_CNTKCTL_EL12
;
3288 return MISCREG_CNTP_TVAL_EL02
;
3290 return MISCREG_CNTP_CTL_EL02
;
3292 return MISCREG_CNTP_CVAL_EL02
;
3298 return MISCREG_CNTV_TVAL_EL02
;
3300 return MISCREG_CNTV_CTL_EL02
;
3302 return MISCREG_CNTV_CVAL_EL02
;
3312 return MISCREG_CNTPS_TVAL_EL1
;
3314 return MISCREG_CNTPS_CTL_EL1
;
3316 return MISCREG_CNTPS_CVAL_EL1
;
3330 return MISCREG_IL1DATA0_EL1
;
3332 return MISCREG_IL1DATA1_EL1
;
3334 return MISCREG_IL1DATA2_EL1
;
3336 return MISCREG_IL1DATA3_EL1
;
3342 return MISCREG_DL1DATA0_EL1
;
3344 return MISCREG_DL1DATA1_EL1
;
3346 return MISCREG_DL1DATA2_EL1
;
3348 return MISCREG_DL1DATA3_EL1
;
3350 return MISCREG_DL1DATA4_EL1
;
3360 return MISCREG_L2ACTLR_EL1
;
3366 return MISCREG_CPUACTLR_EL1
;
3368 return MISCREG_CPUECTLR_EL1
;
3370 return MISCREG_CPUMERRSR_EL1
;
3372 return MISCREG_L2MERRSR_EL1
;
3378 return MISCREG_CBAR_EL1
;
3385 // S3_<op1>_15_<Cm>_<op2>
3386 return MISCREG_IMPDEF_UNIMPL
;
3391 return MISCREG_UNKNOWN
;
3394 std::bitset
<NUM_MISCREG_INFOS
> miscRegInfo
[NUM_MISCREGS
]; // initialized below
3397 ISA::initializeMiscRegMetadata()
3399 // the MiscReg metadata tables are shared across all instances of the
3400 // ISA object, so there's no need to initialize them multiple times.
3401 static bool completed
= false;
3405 // This boolean variable specifies if the system is running in aarch32 at
3406 // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
3407 // is running in aarch64 (aarch32EL3 = false)
3408 bool aarch32EL3
= haveSecurity
&& !highestELIs64
;
3410 // Set Privileged Access Never on taking an exception to EL1 (Arm 8.1+),
3414 // Implicit error synchronization event enable (Arm 8.2+), unsupported
3417 // Load Multiple and Store Multiple Atomicity and Ordering (Arm 8.2+),
3419 bool LSMAOE
= false;
3421 // No Trap Load Multiple and Store Multiple (Arm 8.2+), unsupported
3422 bool nTLSMD
= false;
3424 // Pointer authentication (Arm 8.3+), unsupported
3425 bool EnDA
= true; // using APDAKey_EL1 key of instr addrs in ELs 0,1
3426 bool EnDB
= true; // using APDBKey_EL1 key of instr addrs in ELs 0,1
3427 bool EnIA
= true; // using APIAKey_EL1 key of instr addrs in ELs 0,1
3428 bool EnIB
= true; // using APIBKey_EL1 key of instr addrs in ELs 0,1
3431 * Some registers alias with others, and therefore need to be translated.
3432 * When two mapping registers are given, they are the 32b lower and
3433 * upper halves, respectively, of the 64b register being mapped.
3434 * aligned with reference documentation ARM DDI 0487A.i pp 1540-1543
3436 * NAM = "not architecturally mandated",
3437 * from ARM DDI 0487A.i, template text
3438 * "AArch64 System register ___ can be mapped to
3439 * AArch32 System register ___, but this is not
3440 * architecturally mandated."
3443 InitReg(MISCREG_CPSR
)
3445 InitReg(MISCREG_SPSR
)
3447 InitReg(MISCREG_SPSR_FIQ
)
3449 InitReg(MISCREG_SPSR_IRQ
)
3451 InitReg(MISCREG_SPSR_SVC
)
3453 InitReg(MISCREG_SPSR_MON
)
3455 InitReg(MISCREG_SPSR_ABT
)
3457 InitReg(MISCREG_SPSR_HYP
)
3459 InitReg(MISCREG_SPSR_UND
)
3461 InitReg(MISCREG_ELR_HYP
)
3463 InitReg(MISCREG_FPSID
)
3465 InitReg(MISCREG_FPSCR
)
3467 InitReg(MISCREG_MVFR1
)
3469 InitReg(MISCREG_MVFR0
)
3471 InitReg(MISCREG_FPEXC
)
3475 InitReg(MISCREG_CPSR_MODE
)
3477 InitReg(MISCREG_CPSR_Q
)
3479 InitReg(MISCREG_FPSCR_EXC
)
3481 InitReg(MISCREG_FPSCR_QC
)
3483 InitReg(MISCREG_LOCKADDR
)
3485 InitReg(MISCREG_LOCKFLAG
)
3487 InitReg(MISCREG_PRRR_MAIR0
)
3490 InitReg(MISCREG_PRRR_MAIR0_NS
)
3492 .privSecure(!aarch32EL3
)
3494 InitReg(MISCREG_PRRR_MAIR0_S
)
3497 InitReg(MISCREG_NMRR_MAIR1
)
3500 InitReg(MISCREG_NMRR_MAIR1_NS
)
3502 .privSecure(!aarch32EL3
)
3504 InitReg(MISCREG_NMRR_MAIR1_S
)
3507 InitReg(MISCREG_PMXEVTYPER_PMCCFILTR
)
3509 InitReg(MISCREG_SCTLR_RST
)
3511 InitReg(MISCREG_SEV_MAILBOX
)
3514 // AArch32 CP14 registers
3515 InitReg(MISCREG_DBGDIDR
)
3516 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3517 InitReg(MISCREG_DBGDSCRint
)
3518 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3519 InitReg(MISCREG_DBGDCCINT
)
3522 InitReg(MISCREG_DBGDTRTXint
)
3525 InitReg(MISCREG_DBGDTRRXint
)
3528 InitReg(MISCREG_DBGWFAR
)
3531 InitReg(MISCREG_DBGVCR
)
3532 .allPrivileges().exceptUserMode();
3533 InitReg(MISCREG_DBGDTRRXext
)
3536 InitReg(MISCREG_DBGDSCRext
)
3538 InitReg(MISCREG_DBGDTRTXext
)
3541 InitReg(MISCREG_DBGOSECCR
)
3544 InitReg(MISCREG_DBGBVR0
)
3545 .allPrivileges().exceptUserMode();
3546 InitReg(MISCREG_DBGBVR1
)
3547 .allPrivileges().exceptUserMode();
3548 InitReg(MISCREG_DBGBVR2
)
3549 .allPrivileges().exceptUserMode();
3550 InitReg(MISCREG_DBGBVR3
)
3551 .allPrivileges().exceptUserMode();
3552 InitReg(MISCREG_DBGBVR4
)
3553 .allPrivileges().exceptUserMode();
3554 InitReg(MISCREG_DBGBVR5
)
3555 .allPrivileges().exceptUserMode();
3556 InitReg(MISCREG_DBGBVR6
)
3557 .allPrivileges().exceptUserMode();
3558 InitReg(MISCREG_DBGBVR7
)
3559 .allPrivileges().exceptUserMode();
3560 InitReg(MISCREG_DBGBVR8
)
3561 .allPrivileges().exceptUserMode();
3562 InitReg(MISCREG_DBGBVR9
)
3563 .allPrivileges().exceptUserMode();
3564 InitReg(MISCREG_DBGBVR10
)
3565 .allPrivileges().exceptUserMode();
3566 InitReg(MISCREG_DBGBVR11
)
3567 .allPrivileges().exceptUserMode();
3568 InitReg(MISCREG_DBGBVR12
)
3569 .allPrivileges().exceptUserMode();
3570 InitReg(MISCREG_DBGBVR13
)
3571 .allPrivileges().exceptUserMode();
3572 InitReg(MISCREG_DBGBVR14
)
3573 .allPrivileges().exceptUserMode();
3574 InitReg(MISCREG_DBGBVR15
)
3575 .allPrivileges().exceptUserMode();
3576 InitReg(MISCREG_DBGBCR0
)
3577 .allPrivileges().exceptUserMode();
3578 InitReg(MISCREG_DBGBCR1
)
3579 .allPrivileges().exceptUserMode();
3580 InitReg(MISCREG_DBGBCR2
)
3581 .allPrivileges().exceptUserMode();
3582 InitReg(MISCREG_DBGBCR3
)
3583 .allPrivileges().exceptUserMode();
3584 InitReg(MISCREG_DBGBCR4
)
3585 .allPrivileges().exceptUserMode();
3586 InitReg(MISCREG_DBGBCR5
)
3587 .allPrivileges().exceptUserMode();
3588 InitReg(MISCREG_DBGBCR6
)
3589 .allPrivileges().exceptUserMode();
3590 InitReg(MISCREG_DBGBCR7
)
3591 .allPrivileges().exceptUserMode();
3592 InitReg(MISCREG_DBGBCR8
)
3593 .allPrivileges().exceptUserMode();
3594 InitReg(MISCREG_DBGBCR9
)
3595 .allPrivileges().exceptUserMode();
3596 InitReg(MISCREG_DBGBCR10
)
3597 .allPrivileges().exceptUserMode();
3598 InitReg(MISCREG_DBGBCR11
)
3599 .allPrivileges().exceptUserMode();
3600 InitReg(MISCREG_DBGBCR12
)
3601 .allPrivileges().exceptUserMode();
3602 InitReg(MISCREG_DBGBCR13
)
3603 .allPrivileges().exceptUserMode();
3604 InitReg(MISCREG_DBGBCR14
)
3605 .allPrivileges().exceptUserMode();
3606 InitReg(MISCREG_DBGBCR15
)
3607 .allPrivileges().exceptUserMode();
3608 InitReg(MISCREG_DBGWVR0
)
3609 .allPrivileges().exceptUserMode();
3610 InitReg(MISCREG_DBGWVR1
)
3611 .allPrivileges().exceptUserMode();
3612 InitReg(MISCREG_DBGWVR2
)
3613 .allPrivileges().exceptUserMode();
3614 InitReg(MISCREG_DBGWVR3
)
3615 .allPrivileges().exceptUserMode();
3616 InitReg(MISCREG_DBGWVR4
)
3617 .allPrivileges().exceptUserMode();
3618 InitReg(MISCREG_DBGWVR5
)
3619 .allPrivileges().exceptUserMode();
3620 InitReg(MISCREG_DBGWVR6
)
3621 .allPrivileges().exceptUserMode();
3622 InitReg(MISCREG_DBGWVR7
)
3623 .allPrivileges().exceptUserMode();
3624 InitReg(MISCREG_DBGWVR8
)
3625 .allPrivileges().exceptUserMode();
3626 InitReg(MISCREG_DBGWVR9
)
3627 .allPrivileges().exceptUserMode();
3628 InitReg(MISCREG_DBGWVR10
)
3629 .allPrivileges().exceptUserMode();
3630 InitReg(MISCREG_DBGWVR11
)
3631 .allPrivileges().exceptUserMode();
3632 InitReg(MISCREG_DBGWVR12
)
3633 .allPrivileges().exceptUserMode();
3634 InitReg(MISCREG_DBGWVR13
)
3635 .allPrivileges().exceptUserMode();
3636 InitReg(MISCREG_DBGWVR14
)
3637 .allPrivileges().exceptUserMode();
3638 InitReg(MISCREG_DBGWVR15
)
3639 .allPrivileges().exceptUserMode();
3640 InitReg(MISCREG_DBGWCR0
)
3641 .allPrivileges().exceptUserMode();
3642 InitReg(MISCREG_DBGWCR1
)
3643 .allPrivileges().exceptUserMode();
3644 InitReg(MISCREG_DBGWCR2
)
3645 .allPrivileges().exceptUserMode();
3646 InitReg(MISCREG_DBGWCR3
)
3647 .allPrivileges().exceptUserMode();
3648 InitReg(MISCREG_DBGWCR4
)
3649 .allPrivileges().exceptUserMode();
3650 InitReg(MISCREG_DBGWCR5
)
3651 .allPrivileges().exceptUserMode();
3652 InitReg(MISCREG_DBGWCR6
)
3653 .allPrivileges().exceptUserMode();
3654 InitReg(MISCREG_DBGWCR7
)
3655 .allPrivileges().exceptUserMode();
3656 InitReg(MISCREG_DBGWCR8
)
3657 .allPrivileges().exceptUserMode();
3658 InitReg(MISCREG_DBGWCR9
)
3659 .allPrivileges().exceptUserMode();
3660 InitReg(MISCREG_DBGWCR10
)
3661 .allPrivileges().exceptUserMode();
3662 InitReg(MISCREG_DBGWCR11
)
3663 .allPrivileges().exceptUserMode();
3664 InitReg(MISCREG_DBGWCR12
)
3665 .allPrivileges().exceptUserMode();
3666 InitReg(MISCREG_DBGWCR13
)
3667 .allPrivileges().exceptUserMode();
3668 InitReg(MISCREG_DBGWCR14
)
3669 .allPrivileges().exceptUserMode();
3670 InitReg(MISCREG_DBGWCR15
)
3671 .allPrivileges().exceptUserMode();
3672 InitReg(MISCREG_DBGDRAR
)
3674 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3675 InitReg(MISCREG_DBGBXVR0
)
3676 .allPrivileges().exceptUserMode();
3677 InitReg(MISCREG_DBGBXVR1
)
3678 .allPrivileges().exceptUserMode();
3679 InitReg(MISCREG_DBGBXVR2
)
3680 .allPrivileges().exceptUserMode();
3681 InitReg(MISCREG_DBGBXVR3
)
3682 .allPrivileges().exceptUserMode();
3683 InitReg(MISCREG_DBGBXVR4
)
3684 .allPrivileges().exceptUserMode();
3685 InitReg(MISCREG_DBGBXVR5
)
3686 .allPrivileges().exceptUserMode();
3687 InitReg(MISCREG_DBGBXVR0
)
3688 .allPrivileges().exceptUserMode();
3689 InitReg(MISCREG_DBGBXVR6
)
3690 .allPrivileges().exceptUserMode();
3691 InitReg(MISCREG_DBGBXVR7
)
3692 .allPrivileges().exceptUserMode();
3693 InitReg(MISCREG_DBGBXVR8
)
3694 .allPrivileges().exceptUserMode();
3695 InitReg(MISCREG_DBGBXVR9
)
3696 .allPrivileges().exceptUserMode();
3697 InitReg(MISCREG_DBGBXVR10
)
3698 .allPrivileges().exceptUserMode();
3699 InitReg(MISCREG_DBGBXVR11
)
3700 .allPrivileges().exceptUserMode();
3701 InitReg(MISCREG_DBGBXVR12
)
3702 .allPrivileges().exceptUserMode();
3703 InitReg(MISCREG_DBGBXVR13
)
3704 .allPrivileges().exceptUserMode();
3705 InitReg(MISCREG_DBGBXVR14
)
3706 .allPrivileges().exceptUserMode();
3707 InitReg(MISCREG_DBGBXVR15
)
3708 .allPrivileges().exceptUserMode();
3709 InitReg(MISCREG_DBGOSLAR
)
3710 .allPrivileges().monSecureRead(0).monNonSecureRead(0);
3711 InitReg(MISCREG_DBGOSLSR
)
3712 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3713 InitReg(MISCREG_DBGOSDLR
)
3717 InitReg(MISCREG_DBGPRCR
)
3720 InitReg(MISCREG_DBGDSAR
)
3722 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3723 InitReg(MISCREG_DBGCLAIMSET
)
3726 InitReg(MISCREG_DBGCLAIMCLR
)
3729 InitReg(MISCREG_DBGAUTHSTATUS
)
3731 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3732 InitReg(MISCREG_DBGDEVID2
)
3734 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3735 InitReg(MISCREG_DBGDEVID1
)
3737 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3738 InitReg(MISCREG_DBGDEVID0
)
3739 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0);
3740 InitReg(MISCREG_TEECR
)
3743 InitReg(MISCREG_JIDR
)
3745 InitReg(MISCREG_TEEHBR
)
3747 InitReg(MISCREG_JOSCR
)
3749 InitReg(MISCREG_JMCR
)
3752 // AArch32 CP15 registers
3753 InitReg(MISCREG_MIDR
)
3754 .allPrivileges().exceptUserMode().writes(0);
3755 InitReg(MISCREG_CTR
)
3756 .allPrivileges().exceptUserMode().writes(0);
3757 InitReg(MISCREG_TCMTR
)
3758 .allPrivileges().exceptUserMode().writes(0);
3759 InitReg(MISCREG_TLBTR
)
3760 .allPrivileges().exceptUserMode().writes(0);
3761 InitReg(MISCREG_MPIDR
)
3762 .allPrivileges().exceptUserMode().writes(0);
3763 InitReg(MISCREG_REVIDR
)
3766 .allPrivileges().exceptUserMode().writes(0);
3767 InitReg(MISCREG_ID_PFR0
)
3768 .allPrivileges().exceptUserMode().writes(0);
3769 InitReg(MISCREG_ID_PFR1
)
3770 .allPrivileges().exceptUserMode().writes(0);
3771 InitReg(MISCREG_ID_DFR0
)
3772 .allPrivileges().exceptUserMode().writes(0);
3773 InitReg(MISCREG_ID_AFR0
)
3774 .allPrivileges().exceptUserMode().writes(0);
3775 InitReg(MISCREG_ID_MMFR0
)
3776 .allPrivileges().exceptUserMode().writes(0);
3777 InitReg(MISCREG_ID_MMFR1
)
3778 .allPrivileges().exceptUserMode().writes(0);
3779 InitReg(MISCREG_ID_MMFR2
)
3780 .allPrivileges().exceptUserMode().writes(0);
3781 InitReg(MISCREG_ID_MMFR3
)
3782 .allPrivileges().exceptUserMode().writes(0);
3783 InitReg(MISCREG_ID_MMFR4
)
3784 .allPrivileges().exceptUserMode().writes(0);
3785 InitReg(MISCREG_ID_ISAR0
)
3786 .allPrivileges().exceptUserMode().writes(0);
3787 InitReg(MISCREG_ID_ISAR1
)
3788 .allPrivileges().exceptUserMode().writes(0);
3789 InitReg(MISCREG_ID_ISAR2
)
3790 .allPrivileges().exceptUserMode().writes(0);
3791 InitReg(MISCREG_ID_ISAR3
)
3792 .allPrivileges().exceptUserMode().writes(0);
3793 InitReg(MISCREG_ID_ISAR4
)
3794 .allPrivileges().exceptUserMode().writes(0);
3795 InitReg(MISCREG_ID_ISAR5
)
3796 .allPrivileges().exceptUserMode().writes(0);
3797 InitReg(MISCREG_ID_ISAR6
)
3798 .allPrivileges().exceptUserMode().writes(0);
3799 InitReg(MISCREG_CCSIDR
)
3800 .allPrivileges().exceptUserMode().writes(0);
3801 InitReg(MISCREG_CLIDR
)
3802 .allPrivileges().exceptUserMode().writes(0);
3803 InitReg(MISCREG_AIDR
)
3804 .allPrivileges().exceptUserMode().writes(0);
3805 InitReg(MISCREG_CSSELR
)
3807 InitReg(MISCREG_CSSELR_NS
)
3809 .privSecure(!aarch32EL3
)
3810 .nonSecure().exceptUserMode();
3811 InitReg(MISCREG_CSSELR_S
)
3813 .secure().exceptUserMode();
3814 InitReg(MISCREG_VPIDR
)
3815 .hyp().monNonSecure();
3816 InitReg(MISCREG_VMPIDR
)
3817 .hyp().monNonSecure();
3818 InitReg(MISCREG_SCTLR
)
3820 // readMiscRegNoEffect() uses this metadata
3821 // despite using children (below) as backing store
3823 .res1(0x00400800 | (SPAN
? 0 : 0x800000)
3824 | (LSMAOE
? 0 : 0x10)
3825 | (nTLSMD
? 0 : 0x8));
3826 InitReg(MISCREG_SCTLR_NS
)
3828 .privSecure(!aarch32EL3
)
3829 .nonSecure().exceptUserMode();
3830 InitReg(MISCREG_SCTLR_S
)
3832 .secure().exceptUserMode();
3833 InitReg(MISCREG_ACTLR
)
3835 InitReg(MISCREG_ACTLR_NS
)
3837 .privSecure(!aarch32EL3
)
3838 .nonSecure().exceptUserMode();
3839 InitReg(MISCREG_ACTLR_S
)
3841 .secure().exceptUserMode();
3842 InitReg(MISCREG_CPACR
)
3843 .allPrivileges().exceptUserMode();
3844 InitReg(MISCREG_SDCR
)
3846 InitReg(MISCREG_SCR
)
3847 .mon().secure().exceptUserMode()
3848 .res0(0xff40) // [31:16], [6]
3849 .res1(0x0030); // [5:4]
3850 InitReg(MISCREG_SDER
)
3852 InitReg(MISCREG_NSACR
)
3853 .allPrivileges().hypWrite(0).privNonSecureWrite(0).exceptUserMode();
3854 InitReg(MISCREG_HSCTLR
)
3855 .hyp().monNonSecure()
3856 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
3857 | (IESB
? 0 : 0x200000)
3858 | (EnDA
? 0 : 0x8000000)
3859 | (EnIB
? 0 : 0x40000000)
3860 | (EnIA
? 0 : 0x80000000))
3862 InitReg(MISCREG_HACTLR
)
3863 .hyp().monNonSecure();
3864 InitReg(MISCREG_HCR
)
3865 .hyp().monNonSecure()
3867 InitReg(MISCREG_HCR2
)
3868 .hyp().monNonSecure()
3870 InitReg(MISCREG_HDCR
)
3871 .hyp().monNonSecure();
3872 InitReg(MISCREG_HCPTR
)
3873 .hyp().monNonSecure();
3874 InitReg(MISCREG_HSTR
)
3875 .hyp().monNonSecure();
3876 InitReg(MISCREG_HACR
)
3879 .hyp().monNonSecure();
3880 InitReg(MISCREG_TTBR0
)
3882 InitReg(MISCREG_TTBR0_NS
)
3884 .privSecure(!aarch32EL3
)
3885 .nonSecure().exceptUserMode();
3886 InitReg(MISCREG_TTBR0_S
)
3888 .secure().exceptUserMode();
3889 InitReg(MISCREG_TTBR1
)
3891 InitReg(MISCREG_TTBR1_NS
)
3893 .privSecure(!aarch32EL3
)
3894 .nonSecure().exceptUserMode();
3895 InitReg(MISCREG_TTBR1_S
)
3897 .secure().exceptUserMode();
3898 InitReg(MISCREG_TTBCR
)
3900 InitReg(MISCREG_TTBCR_NS
)
3902 .privSecure(!aarch32EL3
)
3903 .nonSecure().exceptUserMode();
3904 InitReg(MISCREG_TTBCR_S
)
3906 .secure().exceptUserMode();
3907 InitReg(MISCREG_HTCR
)
3908 .hyp().monNonSecure();
3909 InitReg(MISCREG_VTCR
)
3910 .hyp().monNonSecure();
3911 InitReg(MISCREG_DACR
)
3913 InitReg(MISCREG_DACR_NS
)
3915 .privSecure(!aarch32EL3
)
3916 .nonSecure().exceptUserMode();
3917 InitReg(MISCREG_DACR_S
)
3919 .secure().exceptUserMode();
3920 InitReg(MISCREG_DFSR
)
3922 InitReg(MISCREG_DFSR_NS
)
3924 .privSecure(!aarch32EL3
)
3925 .nonSecure().exceptUserMode();
3926 InitReg(MISCREG_DFSR_S
)
3928 .secure().exceptUserMode();
3929 InitReg(MISCREG_IFSR
)
3931 InitReg(MISCREG_IFSR_NS
)
3933 .privSecure(!aarch32EL3
)
3934 .nonSecure().exceptUserMode();
3935 InitReg(MISCREG_IFSR_S
)
3937 .secure().exceptUserMode();
3938 InitReg(MISCREG_ADFSR
)
3942 InitReg(MISCREG_ADFSR_NS
)
3946 .privSecure(!aarch32EL3
)
3947 .nonSecure().exceptUserMode();
3948 InitReg(MISCREG_ADFSR_S
)
3952 .secure().exceptUserMode();
3953 InitReg(MISCREG_AIFSR
)
3957 InitReg(MISCREG_AIFSR_NS
)
3961 .privSecure(!aarch32EL3
)
3962 .nonSecure().exceptUserMode();
3963 InitReg(MISCREG_AIFSR_S
)
3967 .secure().exceptUserMode();
3968 InitReg(MISCREG_HADFSR
)
3969 .hyp().monNonSecure();
3970 InitReg(MISCREG_HAIFSR
)
3971 .hyp().monNonSecure();
3972 InitReg(MISCREG_HSR
)
3973 .hyp().monNonSecure();
3974 InitReg(MISCREG_DFAR
)
3976 InitReg(MISCREG_DFAR_NS
)
3978 .privSecure(!aarch32EL3
)
3979 .nonSecure().exceptUserMode();
3980 InitReg(MISCREG_DFAR_S
)
3982 .secure().exceptUserMode();
3983 InitReg(MISCREG_IFAR
)
3985 InitReg(MISCREG_IFAR_NS
)
3987 .privSecure(!aarch32EL3
)
3988 .nonSecure().exceptUserMode();
3989 InitReg(MISCREG_IFAR_S
)
3991 .secure().exceptUserMode();
3992 InitReg(MISCREG_HDFAR
)
3993 .hyp().monNonSecure();
3994 InitReg(MISCREG_HIFAR
)
3995 .hyp().monNonSecure();
3996 InitReg(MISCREG_HPFAR
)
3997 .hyp().monNonSecure();
3998 InitReg(MISCREG_ICIALLUIS
)
4001 .writes(1).exceptUserMode();
4002 InitReg(MISCREG_BPIALLIS
)
4005 .writes(1).exceptUserMode();
4006 InitReg(MISCREG_PAR
)
4008 InitReg(MISCREG_PAR_NS
)
4010 .privSecure(!aarch32EL3
)
4011 .nonSecure().exceptUserMode();
4012 InitReg(MISCREG_PAR_S
)
4014 .secure().exceptUserMode();
4015 InitReg(MISCREG_ICIALLU
)
4016 .writes(1).exceptUserMode();
4017 InitReg(MISCREG_ICIMVAU
)
4020 .writes(1).exceptUserMode();
4021 InitReg(MISCREG_CP15ISB
)
4023 InitReg(MISCREG_BPIALL
)
4026 .writes(1).exceptUserMode();
4027 InitReg(MISCREG_BPIMVA
)
4030 .writes(1).exceptUserMode();
4031 InitReg(MISCREG_DCIMVAC
)
4034 .writes(1).exceptUserMode();
4035 InitReg(MISCREG_DCISW
)
4038 .writes(1).exceptUserMode();
4039 InitReg(MISCREG_ATS1CPR
)
4040 .writes(1).exceptUserMode();
4041 InitReg(MISCREG_ATS1CPW
)
4042 .writes(1).exceptUserMode();
4043 InitReg(MISCREG_ATS1CUR
)
4044 .writes(1).exceptUserMode();
4045 InitReg(MISCREG_ATS1CUW
)
4046 .writes(1).exceptUserMode();
4047 InitReg(MISCREG_ATS12NSOPR
)
4048 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
4049 InitReg(MISCREG_ATS12NSOPW
)
4050 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
4051 InitReg(MISCREG_ATS12NSOUR
)
4052 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
4053 InitReg(MISCREG_ATS12NSOUW
)
4054 .privSecureWrite().hypWrite().monSecureWrite().monNonSecureWrite();
4055 InitReg(MISCREG_DCCMVAC
)
4056 .writes(1).exceptUserMode();
4057 InitReg(MISCREG_DCCSW
)
4060 .writes(1).exceptUserMode();
4061 InitReg(MISCREG_CP15DSB
)
4063 InitReg(MISCREG_CP15DMB
)
4065 InitReg(MISCREG_DCCMVAU
)
4068 .writes(1).exceptUserMode();
4069 InitReg(MISCREG_DCCIMVAC
)
4072 .writes(1).exceptUserMode();
4073 InitReg(MISCREG_DCCISW
)
4076 .writes(1).exceptUserMode();
4077 InitReg(MISCREG_ATS1HR
)
4078 .monNonSecureWrite().hypWrite();
4079 InitReg(MISCREG_ATS1HW
)
4080 .monNonSecureWrite().hypWrite();
4081 InitReg(MISCREG_TLBIALLIS
)
4082 .writes(1).exceptUserMode();
4083 InitReg(MISCREG_TLBIMVAIS
)
4084 .writes(1).exceptUserMode();
4085 InitReg(MISCREG_TLBIASIDIS
)
4086 .writes(1).exceptUserMode();
4087 InitReg(MISCREG_TLBIMVAAIS
)
4088 .writes(1).exceptUserMode();
4089 InitReg(MISCREG_TLBIMVALIS
)
4090 .writes(1).exceptUserMode();
4091 InitReg(MISCREG_TLBIMVAALIS
)
4092 .writes(1).exceptUserMode();
4093 InitReg(MISCREG_ITLBIALL
)
4094 .writes(1).exceptUserMode();
4095 InitReg(MISCREG_ITLBIMVA
)
4096 .writes(1).exceptUserMode();
4097 InitReg(MISCREG_ITLBIASID
)
4098 .writes(1).exceptUserMode();
4099 InitReg(MISCREG_DTLBIALL
)
4100 .writes(1).exceptUserMode();
4101 InitReg(MISCREG_DTLBIMVA
)
4102 .writes(1).exceptUserMode();
4103 InitReg(MISCREG_DTLBIASID
)
4104 .writes(1).exceptUserMode();
4105 InitReg(MISCREG_TLBIALL
)
4106 .writes(1).exceptUserMode();
4107 InitReg(MISCREG_TLBIMVA
)
4108 .writes(1).exceptUserMode();
4109 InitReg(MISCREG_TLBIASID
)
4110 .writes(1).exceptUserMode();
4111 InitReg(MISCREG_TLBIMVAA
)
4112 .writes(1).exceptUserMode();
4113 InitReg(MISCREG_TLBIMVAL
)
4114 .writes(1).exceptUserMode();
4115 InitReg(MISCREG_TLBIMVAAL
)
4116 .writes(1).exceptUserMode();
4117 InitReg(MISCREG_TLBIIPAS2IS
)
4118 .monNonSecureWrite().hypWrite();
4119 InitReg(MISCREG_TLBIIPAS2LIS
)
4120 .monNonSecureWrite().hypWrite();
4121 InitReg(MISCREG_TLBIALLHIS
)
4122 .monNonSecureWrite().hypWrite();
4123 InitReg(MISCREG_TLBIMVAHIS
)
4124 .monNonSecureWrite().hypWrite();
4125 InitReg(MISCREG_TLBIALLNSNHIS
)
4126 .monNonSecureWrite().hypWrite();
4127 InitReg(MISCREG_TLBIMVALHIS
)
4128 .monNonSecureWrite().hypWrite();
4129 InitReg(MISCREG_TLBIIPAS2
)
4130 .monNonSecureWrite().hypWrite();
4131 InitReg(MISCREG_TLBIIPAS2L
)
4132 .monNonSecureWrite().hypWrite();
4133 InitReg(MISCREG_TLBIALLH
)
4134 .monNonSecureWrite().hypWrite();
4135 InitReg(MISCREG_TLBIMVAH
)
4136 .monNonSecureWrite().hypWrite();
4137 InitReg(MISCREG_TLBIALLNSNH
)
4138 .monNonSecureWrite().hypWrite();
4139 InitReg(MISCREG_TLBIMVALH
)
4140 .monNonSecureWrite().hypWrite();
4141 InitReg(MISCREG_PMCR
)
4143 InitReg(MISCREG_PMCNTENSET
)
4145 InitReg(MISCREG_PMCNTENCLR
)
4147 InitReg(MISCREG_PMOVSR
)
4149 InitReg(MISCREG_PMSWINC
)
4151 InitReg(MISCREG_PMSELR
)
4153 InitReg(MISCREG_PMCEID0
)
4155 InitReg(MISCREG_PMCEID1
)
4157 InitReg(MISCREG_PMCCNTR
)
4159 InitReg(MISCREG_PMXEVTYPER
)
4161 InitReg(MISCREG_PMCCFILTR
)
4163 InitReg(MISCREG_PMXEVCNTR
)
4165 InitReg(MISCREG_PMUSERENR
)
4166 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0);
4167 InitReg(MISCREG_PMINTENSET
)
4168 .allPrivileges().exceptUserMode();
4169 InitReg(MISCREG_PMINTENCLR
)
4170 .allPrivileges().exceptUserMode();
4171 InitReg(MISCREG_PMOVSSET
)
4174 InitReg(MISCREG_L2CTLR
)
4175 .allPrivileges().exceptUserMode();
4176 InitReg(MISCREG_L2ECTLR
)
4178 .allPrivileges().exceptUserMode();
4179 InitReg(MISCREG_PRRR
)
4181 InitReg(MISCREG_PRRR_NS
)
4183 .privSecure(!aarch32EL3
)
4184 .nonSecure().exceptUserMode();
4185 InitReg(MISCREG_PRRR_S
)
4187 .secure().exceptUserMode();
4188 InitReg(MISCREG_MAIR0
)
4190 InitReg(MISCREG_MAIR0_NS
)
4192 .privSecure(!aarch32EL3
)
4193 .nonSecure().exceptUserMode();
4194 InitReg(MISCREG_MAIR0_S
)
4196 .secure().exceptUserMode();
4197 InitReg(MISCREG_NMRR
)
4199 InitReg(MISCREG_NMRR_NS
)
4201 .privSecure(!aarch32EL3
)
4202 .nonSecure().exceptUserMode();
4203 InitReg(MISCREG_NMRR_S
)
4205 .secure().exceptUserMode();
4206 InitReg(MISCREG_MAIR1
)
4208 InitReg(MISCREG_MAIR1_NS
)
4210 .privSecure(!aarch32EL3
)
4211 .nonSecure().exceptUserMode();
4212 InitReg(MISCREG_MAIR1_S
)
4214 .secure().exceptUserMode();
4215 InitReg(MISCREG_AMAIR0
)
4217 InitReg(MISCREG_AMAIR0_NS
)
4219 .privSecure(!aarch32EL3
)
4220 .nonSecure().exceptUserMode();
4221 InitReg(MISCREG_AMAIR0_S
)
4223 .secure().exceptUserMode();
4224 InitReg(MISCREG_AMAIR1
)
4226 InitReg(MISCREG_AMAIR1_NS
)
4228 .privSecure(!aarch32EL3
)
4229 .nonSecure().exceptUserMode();
4230 InitReg(MISCREG_AMAIR1_S
)
4232 .secure().exceptUserMode();
4233 InitReg(MISCREG_HMAIR0
)
4234 .hyp().monNonSecure();
4235 InitReg(MISCREG_HMAIR1
)
4236 .hyp().monNonSecure();
4237 InitReg(MISCREG_HAMAIR0
)
4240 .hyp().monNonSecure();
4241 InitReg(MISCREG_HAMAIR1
)
4244 .hyp().monNonSecure();
4245 InitReg(MISCREG_VBAR
)
4247 InitReg(MISCREG_VBAR_NS
)
4249 .privSecure(!aarch32EL3
)
4250 .nonSecure().exceptUserMode();
4251 InitReg(MISCREG_VBAR_S
)
4253 .secure().exceptUserMode();
4254 InitReg(MISCREG_MVBAR
)
4256 .hypRead(FullSystem
&& system
->highestEL() == EL2
)
4257 .privRead(FullSystem
&& system
->highestEL() == EL1
)
4259 InitReg(MISCREG_RMR
)
4261 .mon().secure().exceptUserMode();
4262 InitReg(MISCREG_ISR
)
4263 .allPrivileges().exceptUserMode().writes(0);
4264 InitReg(MISCREG_HVBAR
)
4265 .hyp().monNonSecure()
4267 InitReg(MISCREG_FCSEIDR
)
4270 .allPrivileges().exceptUserMode();
4271 InitReg(MISCREG_CONTEXTIDR
)
4273 InitReg(MISCREG_CONTEXTIDR_NS
)
4275 .privSecure(!aarch32EL3
)
4276 .nonSecure().exceptUserMode();
4277 InitReg(MISCREG_CONTEXTIDR_S
)
4279 .secure().exceptUserMode();
4280 InitReg(MISCREG_TPIDRURW
)
4282 InitReg(MISCREG_TPIDRURW_NS
)
4285 .privSecure(!aarch32EL3
)
4287 InitReg(MISCREG_TPIDRURW_S
)
4290 InitReg(MISCREG_TPIDRURO
)
4292 InitReg(MISCREG_TPIDRURO_NS
)
4295 .userNonSecureWrite(0).userSecureRead(1)
4296 .privSecure(!aarch32EL3
)
4298 InitReg(MISCREG_TPIDRURO_S
)
4300 .secure().userSecureWrite(0);
4301 InitReg(MISCREG_TPIDRPRW
)
4303 InitReg(MISCREG_TPIDRPRW_NS
)
4305 .nonSecure().exceptUserMode()
4306 .privSecure(!aarch32EL3
);
4307 InitReg(MISCREG_TPIDRPRW_S
)
4309 .secure().exceptUserMode();
4310 InitReg(MISCREG_HTPIDR
)
4311 .hyp().monNonSecure();
4312 // BEGIN Generic Timer (AArch32)
4313 InitReg(MISCREG_CNTFRQ
)
4316 .privSecureWrite(aarch32EL3
);
4317 InitReg(MISCREG_CNTPCT
)
4320 InitReg(MISCREG_CNTVCT
)
4323 InitReg(MISCREG_CNTP_CTL
)
4325 InitReg(MISCREG_CNTP_CTL_NS
)
4328 .privSecure(!aarch32EL3
)
4330 InitReg(MISCREG_CNTP_CTL_S
)
4333 .privSecure(aarch32EL3
)
4335 InitReg(MISCREG_CNTP_CVAL
)
4337 InitReg(MISCREG_CNTP_CVAL_NS
)
4340 .privSecure(!aarch32EL3
);
4341 InitReg(MISCREG_CNTP_CVAL_S
)
4344 .privSecure(aarch32EL3
);
4345 InitReg(MISCREG_CNTP_TVAL
)
4347 InitReg(MISCREG_CNTP_TVAL_NS
)
4350 .privSecure(!aarch32EL3
);
4351 InitReg(MISCREG_CNTP_TVAL_S
)
4354 .privSecure(aarch32EL3
);
4355 InitReg(MISCREG_CNTV_CTL
)
4358 InitReg(MISCREG_CNTV_CVAL
)
4360 InitReg(MISCREG_CNTV_TVAL
)
4362 InitReg(MISCREG_CNTKCTL
)
4366 InitReg(MISCREG_CNTHCTL
)
4370 InitReg(MISCREG_CNTHP_CTL
)
4374 InitReg(MISCREG_CNTHP_CVAL
)
4377 InitReg(MISCREG_CNTHP_TVAL
)
4380 InitReg(MISCREG_CNTVOFF
)
4383 // END Generic Timer (AArch32)
4384 InitReg(MISCREG_IL1DATA0
)
4386 .allPrivileges().exceptUserMode();
4387 InitReg(MISCREG_IL1DATA1
)
4389 .allPrivileges().exceptUserMode();
4390 InitReg(MISCREG_IL1DATA2
)
4392 .allPrivileges().exceptUserMode();
4393 InitReg(MISCREG_IL1DATA3
)
4395 .allPrivileges().exceptUserMode();
4396 InitReg(MISCREG_DL1DATA0
)
4398 .allPrivileges().exceptUserMode();
4399 InitReg(MISCREG_DL1DATA1
)
4401 .allPrivileges().exceptUserMode();
4402 InitReg(MISCREG_DL1DATA2
)
4404 .allPrivileges().exceptUserMode();
4405 InitReg(MISCREG_DL1DATA3
)
4407 .allPrivileges().exceptUserMode();
4408 InitReg(MISCREG_DL1DATA4
)
4410 .allPrivileges().exceptUserMode();
4411 InitReg(MISCREG_RAMINDEX
)
4413 .writes(1).exceptUserMode();
4414 InitReg(MISCREG_L2ACTLR
)
4416 .allPrivileges().exceptUserMode();
4417 InitReg(MISCREG_CBAR
)
4419 .allPrivileges().exceptUserMode().writes(0);
4420 InitReg(MISCREG_HTTBR
)
4421 .hyp().monNonSecure();
4422 InitReg(MISCREG_VTTBR
)
4423 .hyp().monNonSecure();
4424 InitReg(MISCREG_CPUMERRSR
)
4426 .allPrivileges().exceptUserMode();
4427 InitReg(MISCREG_L2MERRSR
)
4430 .allPrivileges().exceptUserMode();
4432 // AArch64 registers (Op0=2);
4433 InitReg(MISCREG_MDCCINT_EL1
)
4435 InitReg(MISCREG_OSDTRRX_EL1
)
4437 .mapsTo(MISCREG_DBGDTRRXext
);
4438 InitReg(MISCREG_MDSCR_EL1
)
4440 .mapsTo(MISCREG_DBGDSCRext
);
4441 InitReg(MISCREG_OSDTRTX_EL1
)
4443 .mapsTo(MISCREG_DBGDTRTXext
);
4444 InitReg(MISCREG_OSECCR_EL1
)
4446 .mapsTo(MISCREG_DBGOSECCR
);
4447 InitReg(MISCREG_DBGBVR0_EL1
)
4448 .allPrivileges().exceptUserMode()
4449 .mapsTo(MISCREG_DBGBVR0
, MISCREG_DBGBXVR0
);
4450 InitReg(MISCREG_DBGBVR1_EL1
)
4451 .allPrivileges().exceptUserMode()
4452 .mapsTo(MISCREG_DBGBVR1
, MISCREG_DBGBXVR1
);
4453 InitReg(MISCREG_DBGBVR2_EL1
)
4454 .allPrivileges().exceptUserMode()
4455 .mapsTo(MISCREG_DBGBVR2
, MISCREG_DBGBXVR2
);
4456 InitReg(MISCREG_DBGBVR3_EL1
)
4457 .allPrivileges().exceptUserMode()
4458 .mapsTo(MISCREG_DBGBVR3
, MISCREG_DBGBXVR3
);
4459 InitReg(MISCREG_DBGBVR4_EL1
)
4460 .allPrivileges().exceptUserMode()
4461 .mapsTo(MISCREG_DBGBVR4
, MISCREG_DBGBXVR4
);
4462 InitReg(MISCREG_DBGBVR5_EL1
)
4463 .allPrivileges().exceptUserMode()
4464 .mapsTo(MISCREG_DBGBVR5
, MISCREG_DBGBXVR5
);
4465 InitReg(MISCREG_DBGBVR6_EL1
)
4466 .allPrivileges().exceptUserMode()
4467 .mapsTo(MISCREG_DBGBVR6
, MISCREG_DBGBXVR6
);
4468 InitReg(MISCREG_DBGBVR7_EL1
)
4469 .allPrivileges().exceptUserMode()
4470 .mapsTo(MISCREG_DBGBVR7
, MISCREG_DBGBXVR7
);
4471 InitReg(MISCREG_DBGBVR8_EL1
)
4472 .allPrivileges().exceptUserMode()
4473 .mapsTo(MISCREG_DBGBVR8
, MISCREG_DBGBXVR8
);
4474 InitReg(MISCREG_DBGBVR9_EL1
)
4475 .allPrivileges().exceptUserMode()
4476 .mapsTo(MISCREG_DBGBVR9
, MISCREG_DBGBXVR9
);
4477 InitReg(MISCREG_DBGBVR10_EL1
)
4478 .allPrivileges().exceptUserMode()
4479 .mapsTo(MISCREG_DBGBVR10
, MISCREG_DBGBXVR10
);
4480 InitReg(MISCREG_DBGBVR11_EL1
)
4481 .allPrivileges().exceptUserMode()
4482 .mapsTo(MISCREG_DBGBVR11
, MISCREG_DBGBXVR11
);
4483 InitReg(MISCREG_DBGBVR12_EL1
)
4484 .allPrivileges().exceptUserMode()
4485 .mapsTo(MISCREG_DBGBVR12
, MISCREG_DBGBXVR12
);
4486 InitReg(MISCREG_DBGBVR13_EL1
)
4487 .allPrivileges().exceptUserMode()
4488 .mapsTo(MISCREG_DBGBVR13
, MISCREG_DBGBXVR13
);
4489 InitReg(MISCREG_DBGBVR14_EL1
)
4490 .allPrivileges().exceptUserMode()
4491 .mapsTo(MISCREG_DBGBVR14
, MISCREG_DBGBXVR14
);
4492 InitReg(MISCREG_DBGBVR15_EL1
)
4493 .allPrivileges().exceptUserMode()
4494 .mapsTo(MISCREG_DBGBVR15
, MISCREG_DBGBXVR15
);
4495 InitReg(MISCREG_DBGBCR0_EL1
)
4496 .allPrivileges().exceptUserMode()
4497 .mapsTo(MISCREG_DBGBCR0
);
4498 InitReg(MISCREG_DBGBCR1_EL1
)
4499 .allPrivileges().exceptUserMode()
4500 .mapsTo(MISCREG_DBGBCR1
);
4501 InitReg(MISCREG_DBGBCR2_EL1
)
4502 .allPrivileges().exceptUserMode()
4503 .mapsTo(MISCREG_DBGBCR2
);
4504 InitReg(MISCREG_DBGBCR3_EL1
)
4505 .allPrivileges().exceptUserMode()
4506 .mapsTo(MISCREG_DBGBCR3
);
4507 InitReg(MISCREG_DBGBCR4_EL1
)
4508 .allPrivileges().exceptUserMode()
4509 .mapsTo(MISCREG_DBGBCR4
);
4510 InitReg(MISCREG_DBGBCR5_EL1
)
4511 .allPrivileges().exceptUserMode()
4512 .mapsTo(MISCREG_DBGBCR5
);
4513 InitReg(MISCREG_DBGBCR6_EL1
)
4514 .allPrivileges().exceptUserMode()
4515 .mapsTo(MISCREG_DBGBCR6
);
4516 InitReg(MISCREG_DBGBCR7_EL1
)
4517 .allPrivileges().exceptUserMode()
4518 .mapsTo(MISCREG_DBGBCR7
);
4519 InitReg(MISCREG_DBGBCR8_EL1
)
4520 .allPrivileges().exceptUserMode()
4521 .mapsTo(MISCREG_DBGBCR8
);
4522 InitReg(MISCREG_DBGBCR9_EL1
)
4523 .allPrivileges().exceptUserMode()
4524 .mapsTo(MISCREG_DBGBCR9
);
4525 InitReg(MISCREG_DBGBCR10_EL1
)
4526 .allPrivileges().exceptUserMode()
4527 .mapsTo(MISCREG_DBGBCR10
);
4528 InitReg(MISCREG_DBGBCR11_EL1
)
4529 .allPrivileges().exceptUserMode()
4530 .mapsTo(MISCREG_DBGBCR11
);
4531 InitReg(MISCREG_DBGBCR12_EL1
)
4532 .allPrivileges().exceptUserMode()
4533 .mapsTo(MISCREG_DBGBCR12
);
4534 InitReg(MISCREG_DBGBCR13_EL1
)
4535 .allPrivileges().exceptUserMode()
4536 .mapsTo(MISCREG_DBGBCR13
);
4537 InitReg(MISCREG_DBGBCR14_EL1
)
4538 .allPrivileges().exceptUserMode()
4539 .mapsTo(MISCREG_DBGBCR14
);
4540 InitReg(MISCREG_DBGBCR15_EL1
)
4541 .allPrivileges().exceptUserMode()
4542 .mapsTo(MISCREG_DBGBCR15
);
4543 InitReg(MISCREG_DBGWVR0_EL1
)
4544 .allPrivileges().exceptUserMode()
4545 .mapsTo(MISCREG_DBGWVR0
);
4546 InitReg(MISCREG_DBGWVR1_EL1
)
4547 .allPrivileges().exceptUserMode()
4548 .mapsTo(MISCREG_DBGWVR1
);
4549 InitReg(MISCREG_DBGWVR2_EL1
)
4550 .allPrivileges().exceptUserMode()
4551 .mapsTo(MISCREG_DBGWVR2
);
4552 InitReg(MISCREG_DBGWVR3_EL1
)
4553 .allPrivileges().exceptUserMode()
4554 .mapsTo(MISCREG_DBGWVR3
);
4555 InitReg(MISCREG_DBGWVR4_EL1
)
4556 .allPrivileges().exceptUserMode()
4557 .mapsTo(MISCREG_DBGWVR4
);
4558 InitReg(MISCREG_DBGWVR5_EL1
)
4559 .allPrivileges().exceptUserMode()
4560 .mapsTo(MISCREG_DBGWVR5
);
4561 InitReg(MISCREG_DBGWVR6_EL1
)
4562 .allPrivileges().exceptUserMode()
4563 .mapsTo(MISCREG_DBGWVR6
);
4564 InitReg(MISCREG_DBGWVR7_EL1
)
4565 .allPrivileges().exceptUserMode()
4566 .mapsTo(MISCREG_DBGWVR7
);
4567 InitReg(MISCREG_DBGWVR8_EL1
)
4568 .allPrivileges().exceptUserMode()
4569 .mapsTo(MISCREG_DBGWVR8
);
4570 InitReg(MISCREG_DBGWVR9_EL1
)
4571 .allPrivileges().exceptUserMode()
4572 .mapsTo(MISCREG_DBGWVR9
);
4573 InitReg(MISCREG_DBGWVR10_EL1
)
4574 .allPrivileges().exceptUserMode()
4575 .mapsTo(MISCREG_DBGWVR10
);
4576 InitReg(MISCREG_DBGWVR11_EL1
)
4577 .allPrivileges().exceptUserMode()
4578 .mapsTo(MISCREG_DBGWVR11
);
4579 InitReg(MISCREG_DBGWVR12_EL1
)
4580 .allPrivileges().exceptUserMode()
4581 .mapsTo(MISCREG_DBGWVR12
);
4582 InitReg(MISCREG_DBGWVR13_EL1
)
4583 .allPrivileges().exceptUserMode()
4584 .mapsTo(MISCREG_DBGWVR13
);
4585 InitReg(MISCREG_DBGWVR14_EL1
)
4586 .allPrivileges().exceptUserMode()
4587 .mapsTo(MISCREG_DBGWVR14
);
4588 InitReg(MISCREG_DBGWVR15_EL1
)
4589 .allPrivileges().exceptUserMode()
4590 .mapsTo(MISCREG_DBGWVR15
);
4591 InitReg(MISCREG_DBGWCR0_EL1
)
4592 .allPrivileges().exceptUserMode()
4593 .mapsTo(MISCREG_DBGWCR0
);
4594 InitReg(MISCREG_DBGWCR1_EL1
)
4595 .allPrivileges().exceptUserMode()
4596 .mapsTo(MISCREG_DBGWCR1
);
4597 InitReg(MISCREG_DBGWCR2_EL1
)
4598 .allPrivileges().exceptUserMode()
4599 .mapsTo(MISCREG_DBGWCR2
);
4600 InitReg(MISCREG_DBGWCR3_EL1
)
4601 .allPrivileges().exceptUserMode()
4602 .mapsTo(MISCREG_DBGWCR3
);
4603 InitReg(MISCREG_DBGWCR4_EL1
)
4604 .allPrivileges().exceptUserMode()
4605 .mapsTo(MISCREG_DBGWCR4
);
4606 InitReg(MISCREG_DBGWCR5_EL1
)
4607 .allPrivileges().exceptUserMode()
4608 .mapsTo(MISCREG_DBGWCR5
);
4609 InitReg(MISCREG_DBGWCR6_EL1
)
4610 .allPrivileges().exceptUserMode()
4611 .mapsTo(MISCREG_DBGWCR6
);
4612 InitReg(MISCREG_DBGWCR7_EL1
)
4613 .allPrivileges().exceptUserMode()
4614 .mapsTo(MISCREG_DBGWCR7
);
4615 InitReg(MISCREG_DBGWCR8_EL1
)
4616 .allPrivileges().exceptUserMode()
4617 .mapsTo(MISCREG_DBGWCR8
);
4618 InitReg(MISCREG_DBGWCR9_EL1
)
4619 .allPrivileges().exceptUserMode()
4620 .mapsTo(MISCREG_DBGWCR9
);
4621 InitReg(MISCREG_DBGWCR10_EL1
)
4622 .allPrivileges().exceptUserMode()
4623 .mapsTo(MISCREG_DBGWCR10
);
4624 InitReg(MISCREG_DBGWCR11_EL1
)
4625 .allPrivileges().exceptUserMode()
4626 .mapsTo(MISCREG_DBGWCR11
);
4627 InitReg(MISCREG_DBGWCR12_EL1
)
4628 .allPrivileges().exceptUserMode()
4629 .mapsTo(MISCREG_DBGWCR12
);
4630 InitReg(MISCREG_DBGWCR13_EL1
)
4631 .allPrivileges().exceptUserMode()
4632 .mapsTo(MISCREG_DBGWCR13
);
4633 InitReg(MISCREG_DBGWCR14_EL1
)
4634 .allPrivileges().exceptUserMode()
4635 .mapsTo(MISCREG_DBGWCR14
);
4636 InitReg(MISCREG_DBGWCR15_EL1
)
4637 .allPrivileges().exceptUserMode()
4638 .mapsTo(MISCREG_DBGWCR15
);
4639 InitReg(MISCREG_MDCCSR_EL0
)
4640 .allPrivileges().writes(0)
4641 //monSecureWrite(0).monNonSecureWrite(0)
4642 .mapsTo(MISCREG_DBGDSCRint
);
4643 InitReg(MISCREG_MDDTR_EL0
)
4645 InitReg(MISCREG_MDDTRTX_EL0
)
4647 InitReg(MISCREG_MDDTRRX_EL0
)
4649 InitReg(MISCREG_DBGVCR32_EL2
)
4651 .mapsTo(MISCREG_DBGVCR
);
4652 InitReg(MISCREG_MDRAR_EL1
)
4653 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
4654 .mapsTo(MISCREG_DBGDRAR
);
4655 InitReg(MISCREG_OSLAR_EL1
)
4656 .allPrivileges().monSecureRead(0).monNonSecureRead(0)
4657 .mapsTo(MISCREG_DBGOSLAR
);
4658 InitReg(MISCREG_OSLSR_EL1
)
4659 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
4660 .mapsTo(MISCREG_DBGOSLSR
);
4661 InitReg(MISCREG_OSDLR_EL1
)
4663 .mapsTo(MISCREG_DBGOSDLR
);
4664 InitReg(MISCREG_DBGPRCR_EL1
)
4666 .mapsTo(MISCREG_DBGPRCR
);
4667 InitReg(MISCREG_DBGCLAIMSET_EL1
)
4669 .mapsTo(MISCREG_DBGCLAIMSET
);
4670 InitReg(MISCREG_DBGCLAIMCLR_EL1
)
4672 .mapsTo(MISCREG_DBGCLAIMCLR
);
4673 InitReg(MISCREG_DBGAUTHSTATUS_EL1
)
4674 .allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
4675 .mapsTo(MISCREG_DBGAUTHSTATUS
);
4676 InitReg(MISCREG_TEECR32_EL1
);
4677 InitReg(MISCREG_TEEHBR32_EL1
);
4679 // AArch64 registers (Op0=1,3);
4680 InitReg(MISCREG_MIDR_EL1
)
4681 .allPrivileges().exceptUserMode().writes(0);
4682 InitReg(MISCREG_MPIDR_EL1
)
4683 .allPrivileges().exceptUserMode().writes(0);
4684 InitReg(MISCREG_REVIDR_EL1
)
4685 .allPrivileges().exceptUserMode().writes(0);
4686 InitReg(MISCREG_ID_PFR0_EL1
)
4687 .allPrivileges().exceptUserMode().writes(0)
4688 .mapsTo(MISCREG_ID_PFR0
);
4689 InitReg(MISCREG_ID_PFR1_EL1
)
4690 .allPrivileges().exceptUserMode().writes(0)
4691 .mapsTo(MISCREG_ID_PFR1
);
4692 InitReg(MISCREG_ID_DFR0_EL1
)
4693 .allPrivileges().exceptUserMode().writes(0)
4694 .mapsTo(MISCREG_ID_DFR0
);
4695 InitReg(MISCREG_ID_AFR0_EL1
)
4696 .allPrivileges().exceptUserMode().writes(0)
4697 .mapsTo(MISCREG_ID_AFR0
);
4698 InitReg(MISCREG_ID_MMFR0_EL1
)
4699 .allPrivileges().exceptUserMode().writes(0)
4700 .mapsTo(MISCREG_ID_MMFR0
);
4701 InitReg(MISCREG_ID_MMFR1_EL1
)
4702 .allPrivileges().exceptUserMode().writes(0)
4703 .mapsTo(MISCREG_ID_MMFR1
);
4704 InitReg(MISCREG_ID_MMFR2_EL1
)
4705 .allPrivileges().exceptUserMode().writes(0)
4706 .mapsTo(MISCREG_ID_MMFR2
);
4707 InitReg(MISCREG_ID_MMFR3_EL1
)
4708 .allPrivileges().exceptUserMode().writes(0)
4709 .mapsTo(MISCREG_ID_MMFR3
);
4710 InitReg(MISCREG_ID_MMFR4_EL1
)
4711 .allPrivileges().exceptUserMode().writes(0)
4712 .mapsTo(MISCREG_ID_MMFR4
);
4713 InitReg(MISCREG_ID_ISAR0_EL1
)
4714 .allPrivileges().exceptUserMode().writes(0)
4715 .mapsTo(MISCREG_ID_ISAR0
);
4716 InitReg(MISCREG_ID_ISAR1_EL1
)
4717 .allPrivileges().exceptUserMode().writes(0)
4718 .mapsTo(MISCREG_ID_ISAR1
);
4719 InitReg(MISCREG_ID_ISAR2_EL1
)
4720 .allPrivileges().exceptUserMode().writes(0)
4721 .mapsTo(MISCREG_ID_ISAR2
);
4722 InitReg(MISCREG_ID_ISAR3_EL1
)
4723 .allPrivileges().exceptUserMode().writes(0)
4724 .mapsTo(MISCREG_ID_ISAR3
);
4725 InitReg(MISCREG_ID_ISAR4_EL1
)
4726 .allPrivileges().exceptUserMode().writes(0)
4727 .mapsTo(MISCREG_ID_ISAR4
);
4728 InitReg(MISCREG_ID_ISAR5_EL1
)
4729 .allPrivileges().exceptUserMode().writes(0)
4730 .mapsTo(MISCREG_ID_ISAR5
);
4731 InitReg(MISCREG_ID_ISAR6_EL1
)
4732 .allPrivileges().exceptUserMode().writes(0)
4733 .mapsTo(MISCREG_ID_ISAR6
);
4734 InitReg(MISCREG_MVFR0_EL1
)
4735 .allPrivileges().exceptUserMode().writes(0);
4736 InitReg(MISCREG_MVFR1_EL1
)
4737 .allPrivileges().exceptUserMode().writes(0);
4738 InitReg(MISCREG_MVFR2_EL1
)
4739 .allPrivileges().exceptUserMode().writes(0);
4740 InitReg(MISCREG_ID_AA64PFR0_EL1
)
4741 .allPrivileges().exceptUserMode().writes(0);
4742 InitReg(MISCREG_ID_AA64PFR1_EL1
)
4743 .allPrivileges().exceptUserMode().writes(0);
4744 InitReg(MISCREG_ID_AA64DFR0_EL1
)
4745 .allPrivileges().exceptUserMode().writes(0);
4746 InitReg(MISCREG_ID_AA64DFR1_EL1
)
4747 .allPrivileges().exceptUserMode().writes(0);
4748 InitReg(MISCREG_ID_AA64AFR0_EL1
)
4749 .allPrivileges().exceptUserMode().writes(0);
4750 InitReg(MISCREG_ID_AA64AFR1_EL1
)
4751 .allPrivileges().exceptUserMode().writes(0);
4752 InitReg(MISCREG_ID_AA64ISAR0_EL1
)
4753 .allPrivileges().exceptUserMode().writes(0);
4754 InitReg(MISCREG_ID_AA64ISAR1_EL1
)
4755 .allPrivileges().exceptUserMode().writes(0);
4756 InitReg(MISCREG_ID_AA64MMFR0_EL1
)
4757 .allPrivileges().exceptUserMode().writes(0);
4758 InitReg(MISCREG_ID_AA64MMFR1_EL1
)
4759 .allPrivileges().exceptUserMode().writes(0);
4760 InitReg(MISCREG_ID_AA64MMFR2_EL1
)
4761 .allPrivileges().exceptUserMode().writes(0);
4763 InitReg(MISCREG_APDAKeyHi_EL1
)
4764 .allPrivileges().exceptUserMode();
4765 InitReg(MISCREG_APDAKeyLo_EL1
)
4766 .allPrivileges().exceptUserMode();
4767 InitReg(MISCREG_APDBKeyHi_EL1
)
4768 .allPrivileges().exceptUserMode();
4769 InitReg(MISCREG_APDBKeyLo_EL1
)
4770 .allPrivileges().exceptUserMode();
4771 InitReg(MISCREG_APGAKeyHi_EL1
)
4772 .allPrivileges().exceptUserMode();
4773 InitReg(MISCREG_APGAKeyLo_EL1
)
4774 .allPrivileges().exceptUserMode();
4775 InitReg(MISCREG_APIAKeyHi_EL1
)
4776 .allPrivileges().exceptUserMode();
4777 InitReg(MISCREG_APIAKeyLo_EL1
)
4778 .allPrivileges().exceptUserMode();
4779 InitReg(MISCREG_APIBKeyHi_EL1
)
4780 .allPrivileges().exceptUserMode();
4781 InitReg(MISCREG_APIBKeyLo_EL1
)
4782 .allPrivileges().exceptUserMode();
4784 InitReg(MISCREG_CCSIDR_EL1
)
4785 .allPrivileges().exceptUserMode().writes(0);
4786 InitReg(MISCREG_CLIDR_EL1
)
4787 .allPrivileges().exceptUserMode().writes(0);
4788 InitReg(MISCREG_AIDR_EL1
)
4789 .allPrivileges().exceptUserMode().writes(0);
4790 InitReg(MISCREG_CSSELR_EL1
)
4791 .allPrivileges().exceptUserMode()
4792 .mapsTo(MISCREG_CSSELR_NS
);
4793 InitReg(MISCREG_CTR_EL0
)
4795 InitReg(MISCREG_DCZID_EL0
)
4797 InitReg(MISCREG_VPIDR_EL2
)
4799 .mapsTo(MISCREG_VPIDR
);
4800 InitReg(MISCREG_VMPIDR_EL2
)
4802 .mapsTo(MISCREG_VMPIDR
);
4803 InitReg(MISCREG_SCTLR_EL1
)
4804 .allPrivileges().exceptUserMode()
4805 .res0( 0x20440 | (EnDB
? 0 : 0x2000)
4806 | (IESB
? 0 : 0x200000)
4807 | (EnDA
? 0 : 0x8000000)
4808 | (EnIB
? 0 : 0x40000000)
4809 | (EnIA
? 0 : 0x80000000))
4810 .res1(0x500800 | (SPAN
? 0 : 0x800000)
4811 | (nTLSMD
? 0 : 0x8000000)
4812 | (LSMAOE
? 0 : 0x10000000))
4813 .mapsTo(MISCREG_SCTLR_NS
);
4814 InitReg(MISCREG_SCTLR_EL12
)
4815 .allPrivileges().exceptUserMode()
4816 .res0( 0x20440 | (EnDB
? 0 : 0x2000)
4817 | (IESB
? 0 : 0x200000)
4818 | (EnDA
? 0 : 0x8000000)
4819 | (EnIB
? 0 : 0x40000000)
4820 | (EnIA
? 0 : 0x80000000))
4821 .res1(0x500800 | (SPAN
? 0 : 0x800000)
4822 | (nTLSMD
? 0 : 0x8000000)
4823 | (LSMAOE
? 0 : 0x10000000))
4824 .mapsTo(MISCREG_SCTLR_EL1
);
4825 InitReg(MISCREG_ACTLR_EL1
)
4826 .allPrivileges().exceptUserMode()
4827 .mapsTo(MISCREG_ACTLR_NS
);
4828 InitReg(MISCREG_CPACR_EL1
)
4829 .allPrivileges().exceptUserMode()
4830 .mapsTo(MISCREG_CPACR
);
4831 InitReg(MISCREG_CPACR_EL12
)
4832 .allPrivileges().exceptUserMode()
4833 .mapsTo(MISCREG_CPACR_EL1
);
4834 InitReg(MISCREG_SCTLR_EL2
)
4836 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4837 | (IESB
? 0 : 0x200000)
4838 | (EnDA
? 0 : 0x8000000)
4839 | (EnIB
? 0 : 0x40000000)
4840 | (EnIA
? 0 : 0x80000000))
4842 .mapsTo(MISCREG_HSCTLR
);
4843 InitReg(MISCREG_ACTLR_EL2
)
4845 .mapsTo(MISCREG_HACTLR
);
4846 InitReg(MISCREG_HCR_EL2
)
4848 .mapsTo(MISCREG_HCR
, MISCREG_HCR2
);
4849 InitReg(MISCREG_MDCR_EL2
)
4851 .mapsTo(MISCREG_HDCR
);
4852 InitReg(MISCREG_CPTR_EL2
)
4854 .mapsTo(MISCREG_HCPTR
);
4855 InitReg(MISCREG_HSTR_EL2
)
4857 .mapsTo(MISCREG_HSTR
);
4858 InitReg(MISCREG_HACR_EL2
)
4860 .mapsTo(MISCREG_HACR
);
4861 InitReg(MISCREG_SCTLR_EL3
)
4863 .res0(0x0512c7c0 | (EnDB
? 0 : 0x2000)
4864 | (IESB
? 0 : 0x200000)
4865 | (EnDA
? 0 : 0x8000000)
4866 | (EnIB
? 0 : 0x40000000)
4867 | (EnIA
? 0 : 0x80000000))
4869 InitReg(MISCREG_ACTLR_EL3
)
4871 InitReg(MISCREG_SCR_EL3
)
4873 .mapsTo(MISCREG_SCR
); // NAM D7-2005
4874 InitReg(MISCREG_SDER32_EL3
)
4876 .mapsTo(MISCREG_SDER
);
4877 InitReg(MISCREG_CPTR_EL3
)
4879 InitReg(MISCREG_MDCR_EL3
)
4881 .mapsTo(MISCREG_SDCR
);
4882 InitReg(MISCREG_TTBR0_EL1
)
4883 .allPrivileges().exceptUserMode()
4884 .mapsTo(MISCREG_TTBR0_NS
);
4885 InitReg(MISCREG_TTBR0_EL12
)
4886 .allPrivileges().exceptUserMode()
4887 .mapsTo(MISCREG_TTBR0_EL1
);
4888 InitReg(MISCREG_TTBR1_EL1
)
4889 .allPrivileges().exceptUserMode()
4890 .mapsTo(MISCREG_TTBR1_NS
);
4891 InitReg(MISCREG_TTBR1_EL12
)
4892 .allPrivileges().exceptUserMode()
4893 .mapsTo(MISCREG_TTBR1_EL1
);
4894 InitReg(MISCREG_TCR_EL1
)
4895 .allPrivileges().exceptUserMode()
4896 .mapsTo(MISCREG_TTBCR_NS
);
4897 InitReg(MISCREG_TCR_EL12
)
4898 .allPrivileges().exceptUserMode()
4899 .mapsTo(MISCREG_TTBCR_NS
);
4900 InitReg(MISCREG_TTBR0_EL2
)
4902 .mapsTo(MISCREG_HTTBR
);
4903 InitReg(MISCREG_TTBR1_EL2
)
4905 InitReg(MISCREG_TCR_EL2
)
4907 .mapsTo(MISCREG_HTCR
);
4908 InitReg(MISCREG_VTTBR_EL2
)
4910 .mapsTo(MISCREG_VTTBR
);
4911 InitReg(MISCREG_VTCR_EL2
)
4913 .mapsTo(MISCREG_VTCR
);
4914 InitReg(MISCREG_VSTTBR_EL2
)
4916 InitReg(MISCREG_VSTCR_EL2
)
4918 InitReg(MISCREG_TTBR0_EL3
)
4920 InitReg(MISCREG_TCR_EL3
)
4922 InitReg(MISCREG_DACR32_EL2
)
4924 .mapsTo(MISCREG_DACR_NS
);
4925 InitReg(MISCREG_SPSR_EL1
)
4926 .allPrivileges().exceptUserMode()
4927 .mapsTo(MISCREG_SPSR_SVC
); // NAM C5.2.17 SPSR_EL1
4928 InitReg(MISCREG_SPSR_EL12
)
4929 .allPrivileges().exceptUserMode()
4930 .mapsTo(MISCREG_SPSR_SVC
);
4931 InitReg(MISCREG_ELR_EL1
)
4932 .allPrivileges().exceptUserMode();
4933 InitReg(MISCREG_ELR_EL12
)
4934 .allPrivileges().exceptUserMode()
4935 .mapsTo(MISCREG_ELR_EL1
);
4936 InitReg(MISCREG_SP_EL0
)
4937 .allPrivileges().exceptUserMode();
4938 InitReg(MISCREG_SPSEL
)
4939 .allPrivileges().exceptUserMode();
4940 InitReg(MISCREG_CURRENTEL
)
4941 .allPrivileges().exceptUserMode().writes(0);
4942 InitReg(MISCREG_PAN
)
4943 .allPrivileges().exceptUserMode()
4944 .implemented(havePAN
);
4945 InitReg(MISCREG_NZCV
)
4947 InitReg(MISCREG_DAIF
)
4949 InitReg(MISCREG_FPCR
)
4951 InitReg(MISCREG_FPSR
)
4953 InitReg(MISCREG_DSPSR_EL0
)
4955 InitReg(MISCREG_DLR_EL0
)
4957 InitReg(MISCREG_SPSR_EL2
)
4959 .mapsTo(MISCREG_SPSR_HYP
); // NAM C5.2.18 SPSR_EL2
4960 InitReg(MISCREG_ELR_EL2
)
4962 InitReg(MISCREG_SP_EL1
)
4964 InitReg(MISCREG_SPSR_IRQ_AA64
)
4966 InitReg(MISCREG_SPSR_ABT_AA64
)
4968 InitReg(MISCREG_SPSR_UND_AA64
)
4970 InitReg(MISCREG_SPSR_FIQ_AA64
)
4972 InitReg(MISCREG_SPSR_EL3
)
4974 .mapsTo(MISCREG_SPSR_MON
); // NAM C5.2.19 SPSR_EL3
4975 InitReg(MISCREG_ELR_EL3
)
4977 InitReg(MISCREG_SP_EL2
)
4979 InitReg(MISCREG_AFSR0_EL1
)
4980 .allPrivileges().exceptUserMode()
4981 .mapsTo(MISCREG_ADFSR_NS
);
4982 InitReg(MISCREG_AFSR0_EL12
)
4983 .allPrivileges().exceptUserMode()
4984 .mapsTo(MISCREG_ADFSR_NS
);
4985 InitReg(MISCREG_AFSR1_EL1
)
4986 .allPrivileges().exceptUserMode()
4987 .mapsTo(MISCREG_AIFSR_NS
);
4988 InitReg(MISCREG_AFSR1_EL12
)
4989 .allPrivileges().exceptUserMode()
4990 .mapsTo(MISCREG_AIFSR_NS
);
4991 InitReg(MISCREG_ESR_EL1
)
4992 .allPrivileges().exceptUserMode();
4993 InitReg(MISCREG_ESR_EL12
)
4994 .allPrivileges().exceptUserMode()
4995 .mapsTo(MISCREG_ESR_EL1
);
4996 InitReg(MISCREG_IFSR32_EL2
)
4998 .mapsTo(MISCREG_IFSR_NS
);
4999 InitReg(MISCREG_AFSR0_EL2
)
5001 .mapsTo(MISCREG_HADFSR
);
5002 InitReg(MISCREG_AFSR1_EL2
)
5004 .mapsTo(MISCREG_HAIFSR
);
5005 InitReg(MISCREG_ESR_EL2
)
5007 .mapsTo(MISCREG_HSR
);
5008 InitReg(MISCREG_FPEXC32_EL2
)
5009 .hyp().mon().mapsTo(MISCREG_FPEXC
);
5010 InitReg(MISCREG_AFSR0_EL3
)
5012 InitReg(MISCREG_AFSR1_EL3
)
5014 InitReg(MISCREG_ESR_EL3
)
5016 InitReg(MISCREG_FAR_EL1
)
5017 .allPrivileges().exceptUserMode()
5018 .mapsTo(MISCREG_DFAR_NS
, MISCREG_IFAR_NS
);
5019 InitReg(MISCREG_FAR_EL12
)
5020 .allPrivileges().exceptUserMode()
5021 .mapsTo(MISCREG_DFAR_NS
, MISCREG_IFAR_NS
);
5022 InitReg(MISCREG_FAR_EL2
)
5024 .mapsTo(MISCREG_HDFAR
, MISCREG_HIFAR
);
5025 InitReg(MISCREG_HPFAR_EL2
)
5027 .mapsTo(MISCREG_HPFAR
);
5028 InitReg(MISCREG_FAR_EL3
)
5030 InitReg(MISCREG_IC_IALLUIS
)
5032 .writes(1).exceptUserMode();
5033 InitReg(MISCREG_PAR_EL1
)
5034 .allPrivileges().exceptUserMode()
5035 .mapsTo(MISCREG_PAR_NS
);
5036 InitReg(MISCREG_IC_IALLU
)
5038 .writes(1).exceptUserMode();
5039 InitReg(MISCREG_DC_IVAC_Xt
)
5041 .writes(1).exceptUserMode();
5042 InitReg(MISCREG_DC_ISW_Xt
)
5044 .writes(1).exceptUserMode();
5045 InitReg(MISCREG_AT_S1E1R_Xt
)
5046 .writes(1).exceptUserMode();
5047 InitReg(MISCREG_AT_S1E1W_Xt
)
5048 .writes(1).exceptUserMode();
5049 InitReg(MISCREG_AT_S1E0R_Xt
)
5050 .writes(1).exceptUserMode();
5051 InitReg(MISCREG_AT_S1E0W_Xt
)
5052 .writes(1).exceptUserMode();
5053 InitReg(MISCREG_DC_CSW_Xt
)
5055 .writes(1).exceptUserMode();
5056 InitReg(MISCREG_DC_CISW_Xt
)
5058 .writes(1).exceptUserMode();
5059 InitReg(MISCREG_DC_ZVA_Xt
)
5061 .writes(1).userSecureWrite(0);
5062 InitReg(MISCREG_IC_IVAU_Xt
)
5064 InitReg(MISCREG_DC_CVAC_Xt
)
5067 InitReg(MISCREG_DC_CVAU_Xt
)
5070 InitReg(MISCREG_DC_CIVAC_Xt
)
5073 InitReg(MISCREG_AT_S1E2R_Xt
)
5074 .monNonSecureWrite().hypWrite();
5075 InitReg(MISCREG_AT_S1E2W_Xt
)
5076 .monNonSecureWrite().hypWrite();
5077 InitReg(MISCREG_AT_S12E1R_Xt
)
5078 .hypWrite().monSecureWrite().monNonSecureWrite();
5079 InitReg(MISCREG_AT_S12E1W_Xt
)
5080 .hypWrite().monSecureWrite().monNonSecureWrite();
5081 InitReg(MISCREG_AT_S12E0R_Xt
)
5082 .hypWrite().monSecureWrite().monNonSecureWrite();
5083 InitReg(MISCREG_AT_S12E0W_Xt
)
5084 .hypWrite().monSecureWrite().monNonSecureWrite();
5085 InitReg(MISCREG_AT_S1E3R_Xt
)
5086 .monSecureWrite().monNonSecureWrite();
5087 InitReg(MISCREG_AT_S1E3W_Xt
)
5088 .monSecureWrite().monNonSecureWrite();
5089 InitReg(MISCREG_TLBI_VMALLE1IS
)
5090 .writes(1).exceptUserMode();
5091 InitReg(MISCREG_TLBI_VAE1IS_Xt
)
5092 .writes(1).exceptUserMode();
5093 InitReg(MISCREG_TLBI_ASIDE1IS_Xt
)
5094 .writes(1).exceptUserMode();
5095 InitReg(MISCREG_TLBI_VAAE1IS_Xt
)
5096 .writes(1).exceptUserMode();
5097 InitReg(MISCREG_TLBI_VALE1IS_Xt
)
5098 .writes(1).exceptUserMode();
5099 InitReg(MISCREG_TLBI_VAALE1IS_Xt
)
5100 .writes(1).exceptUserMode();
5101 InitReg(MISCREG_TLBI_VMALLE1
)
5102 .writes(1).exceptUserMode();
5103 InitReg(MISCREG_TLBI_VAE1_Xt
)
5104 .writes(1).exceptUserMode();
5105 InitReg(MISCREG_TLBI_ASIDE1_Xt
)
5106 .writes(1).exceptUserMode();
5107 InitReg(MISCREG_TLBI_VAAE1_Xt
)
5108 .writes(1).exceptUserMode();
5109 InitReg(MISCREG_TLBI_VALE1_Xt
)
5110 .writes(1).exceptUserMode();
5111 InitReg(MISCREG_TLBI_VAALE1_Xt
)
5112 .writes(1).exceptUserMode();
5113 InitReg(MISCREG_TLBI_IPAS2E1IS_Xt
)
5114 .hypWrite().monSecureWrite().monNonSecureWrite();
5115 InitReg(MISCREG_TLBI_IPAS2LE1IS_Xt
)
5116 .hypWrite().monSecureWrite().monNonSecureWrite();
5117 InitReg(MISCREG_TLBI_ALLE2IS
)
5118 .monNonSecureWrite().hypWrite();
5119 InitReg(MISCREG_TLBI_VAE2IS_Xt
)
5120 .monNonSecureWrite().hypWrite();
5121 InitReg(MISCREG_TLBI_ALLE1IS
)
5122 .hypWrite().monSecureWrite().monNonSecureWrite();
5123 InitReg(MISCREG_TLBI_VALE2IS_Xt
)
5124 .monNonSecureWrite().hypWrite();
5125 InitReg(MISCREG_TLBI_VMALLS12E1IS
)
5126 .hypWrite().monSecureWrite().monNonSecureWrite();
5127 InitReg(MISCREG_TLBI_IPAS2E1_Xt
)
5128 .hypWrite().monSecureWrite().monNonSecureWrite();
5129 InitReg(MISCREG_TLBI_IPAS2LE1_Xt
)
5130 .hypWrite().monSecureWrite().monNonSecureWrite();
5131 InitReg(MISCREG_TLBI_ALLE2
)
5132 .monNonSecureWrite().hypWrite();
5133 InitReg(MISCREG_TLBI_VAE2_Xt
)
5134 .monNonSecureWrite().hypWrite();
5135 InitReg(MISCREG_TLBI_ALLE1
)
5136 .hypWrite().monSecureWrite().monNonSecureWrite();
5137 InitReg(MISCREG_TLBI_VALE2_Xt
)
5138 .monNonSecureWrite().hypWrite();
5139 InitReg(MISCREG_TLBI_VMALLS12E1
)
5140 .hypWrite().monSecureWrite().monNonSecureWrite();
5141 InitReg(MISCREG_TLBI_ALLE3IS
)
5142 .monSecureWrite().monNonSecureWrite();
5143 InitReg(MISCREG_TLBI_VAE3IS_Xt
)
5144 .monSecureWrite().monNonSecureWrite();
5145 InitReg(MISCREG_TLBI_VALE3IS_Xt
)
5146 .monSecureWrite().monNonSecureWrite();
5147 InitReg(MISCREG_TLBI_ALLE3
)
5148 .monSecureWrite().monNonSecureWrite();
5149 InitReg(MISCREG_TLBI_VAE3_Xt
)
5150 .monSecureWrite().monNonSecureWrite();
5151 InitReg(MISCREG_TLBI_VALE3_Xt
)
5152 .monSecureWrite().monNonSecureWrite();
5153 InitReg(MISCREG_PMINTENSET_EL1
)
5154 .allPrivileges().exceptUserMode()
5155 .mapsTo(MISCREG_PMINTENSET
);
5156 InitReg(MISCREG_PMINTENCLR_EL1
)
5157 .allPrivileges().exceptUserMode()
5158 .mapsTo(MISCREG_PMINTENCLR
);
5159 InitReg(MISCREG_PMCR_EL0
)
5161 .mapsTo(MISCREG_PMCR
);
5162 InitReg(MISCREG_PMCNTENSET_EL0
)
5164 .mapsTo(MISCREG_PMCNTENSET
);
5165 InitReg(MISCREG_PMCNTENCLR_EL0
)
5167 .mapsTo(MISCREG_PMCNTENCLR
);
5168 InitReg(MISCREG_PMOVSCLR_EL0
)
5170 // .mapsTo(MISCREG_PMOVSCLR);
5171 InitReg(MISCREG_PMSWINC_EL0
)
5173 .mapsTo(MISCREG_PMSWINC
);
5174 InitReg(MISCREG_PMSELR_EL0
)
5176 .mapsTo(MISCREG_PMSELR
);
5177 InitReg(MISCREG_PMCEID0_EL0
)
5179 .mapsTo(MISCREG_PMCEID0
);
5180 InitReg(MISCREG_PMCEID1_EL0
)
5182 .mapsTo(MISCREG_PMCEID1
);
5183 InitReg(MISCREG_PMCCNTR_EL0
)
5185 .mapsTo(MISCREG_PMCCNTR
);
5186 InitReg(MISCREG_PMXEVTYPER_EL0
)
5188 .mapsTo(MISCREG_PMXEVTYPER
);
5189 InitReg(MISCREG_PMCCFILTR_EL0
)
5191 InitReg(MISCREG_PMXEVCNTR_EL0
)
5193 .mapsTo(MISCREG_PMXEVCNTR
);
5194 InitReg(MISCREG_PMUSERENR_EL0
)
5195 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5196 .mapsTo(MISCREG_PMUSERENR
);
5197 InitReg(MISCREG_PMOVSSET_EL0
)
5199 .mapsTo(MISCREG_PMOVSSET
);
5200 InitReg(MISCREG_MAIR_EL1
)
5201 .allPrivileges().exceptUserMode()
5202 .mapsTo(MISCREG_PRRR_NS
, MISCREG_NMRR_NS
);
5203 InitReg(MISCREG_MAIR_EL12
)
5204 .allPrivileges().exceptUserMode()
5205 .mapsTo(MISCREG_PRRR_NS
, MISCREG_NMRR_NS
);
5206 InitReg(MISCREG_AMAIR_EL1
)
5207 .allPrivileges().exceptUserMode()
5208 .mapsTo(MISCREG_AMAIR0_NS
, MISCREG_AMAIR1_NS
);
5209 InitReg(MISCREG_AMAIR_EL12
)
5210 .allPrivileges().exceptUserMode()
5211 .mapsTo(MISCREG_AMAIR0_NS
, MISCREG_AMAIR1_NS
);
5212 InitReg(MISCREG_MAIR_EL2
)
5214 .mapsTo(MISCREG_HMAIR0
, MISCREG_HMAIR1
);
5215 InitReg(MISCREG_AMAIR_EL2
)
5217 .mapsTo(MISCREG_HAMAIR0
, MISCREG_HAMAIR1
);
5218 InitReg(MISCREG_MAIR_EL3
)
5220 InitReg(MISCREG_AMAIR_EL3
)
5222 InitReg(MISCREG_L2CTLR_EL1
)
5223 .allPrivileges().exceptUserMode();
5224 InitReg(MISCREG_L2ECTLR_EL1
)
5225 .allPrivileges().exceptUserMode();
5226 InitReg(MISCREG_VBAR_EL1
)
5227 .allPrivileges().exceptUserMode()
5228 .mapsTo(MISCREG_VBAR_NS
);
5229 InitReg(MISCREG_VBAR_EL12
)
5230 .allPrivileges().exceptUserMode()
5231 .mapsTo(MISCREG_VBAR_NS
);
5232 InitReg(MISCREG_RVBAR_EL1
)
5233 .allPrivileges().exceptUserMode().writes(0);
5234 InitReg(MISCREG_ISR_EL1
)
5235 .allPrivileges().exceptUserMode().writes(0);
5236 InitReg(MISCREG_VBAR_EL2
)
5239 .mapsTo(MISCREG_HVBAR
);
5240 InitReg(MISCREG_RVBAR_EL2
)
5241 .mon().hyp().writes(0);
5242 InitReg(MISCREG_VBAR_EL3
)
5244 InitReg(MISCREG_RVBAR_EL3
)
5246 InitReg(MISCREG_RMR_EL3
)
5248 InitReg(MISCREG_CONTEXTIDR_EL1
)
5249 .allPrivileges().exceptUserMode()
5250 .mapsTo(MISCREG_CONTEXTIDR_NS
);
5251 InitReg(MISCREG_CONTEXTIDR_EL12
)
5252 .allPrivileges().exceptUserMode()
5253 .mapsTo(MISCREG_CONTEXTIDR_NS
);
5254 InitReg(MISCREG_TPIDR_EL1
)
5255 .allPrivileges().exceptUserMode()
5256 .mapsTo(MISCREG_TPIDRPRW_NS
);
5257 InitReg(MISCREG_TPIDR_EL0
)
5259 .mapsTo(MISCREG_TPIDRURW_NS
);
5260 InitReg(MISCREG_TPIDRRO_EL0
)
5261 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5262 .mapsTo(MISCREG_TPIDRURO_NS
);
5263 InitReg(MISCREG_TPIDR_EL2
)
5265 .mapsTo(MISCREG_HTPIDR
);
5266 InitReg(MISCREG_TPIDR_EL3
)
5268 // BEGIN Generic Timer (AArch64)
5269 InitReg(MISCREG_CNTFRQ_EL0
)
5272 .privSecureWrite(aarch32EL3
)
5273 .mapsTo(MISCREG_CNTFRQ
);
5274 InitReg(MISCREG_CNTPCT_EL0
)
5277 .mapsTo(MISCREG_CNTPCT
);
5278 InitReg(MISCREG_CNTVCT_EL0
)
5281 .mapsTo(MISCREG_CNTVCT
);
5282 InitReg(MISCREG_CNTP_CTL_EL0
)
5284 .res0(0xfffffffffffffff8)
5285 .mapsTo(MISCREG_CNTP_CTL_NS
);
5286 InitReg(MISCREG_CNTP_CVAL_EL0
)
5288 .mapsTo(MISCREG_CNTP_CVAL_NS
);
5289 InitReg(MISCREG_CNTP_TVAL_EL0
)
5291 .res0(0xffffffff00000000)
5292 .mapsTo(MISCREG_CNTP_TVAL_NS
);
5293 InitReg(MISCREG_CNTV_CTL_EL0
)
5295 .res0(0xfffffffffffffff8)
5296 .mapsTo(MISCREG_CNTV_CTL
);
5297 InitReg(MISCREG_CNTV_CVAL_EL0
)
5299 .mapsTo(MISCREG_CNTV_CVAL
);
5300 InitReg(MISCREG_CNTV_TVAL_EL0
)
5302 .res0(0xffffffff00000000)
5303 .mapsTo(MISCREG_CNTV_TVAL
);
5304 InitReg(MISCREG_CNTP_CTL_EL02
)
5307 .res0(0xfffffffffffffff8)
5308 .mapsTo(MISCREG_CNTP_CTL_NS
);
5309 InitReg(MISCREG_CNTP_CVAL_EL02
)
5312 .mapsTo(MISCREG_CNTP_CVAL_NS
);
5313 InitReg(MISCREG_CNTP_TVAL_EL02
)
5316 .res0(0xffffffff00000000)
5317 .mapsTo(MISCREG_CNTP_TVAL_NS
);
5318 InitReg(MISCREG_CNTV_CTL_EL02
)
5321 .res0(0xfffffffffffffff8)
5322 .mapsTo(MISCREG_CNTV_CTL
);
5323 InitReg(MISCREG_CNTV_CVAL_EL02
)
5326 .mapsTo(MISCREG_CNTV_CVAL
);
5327 InitReg(MISCREG_CNTV_TVAL_EL02
)
5330 .res0(0xffffffff00000000)
5331 .mapsTo(MISCREG_CNTV_TVAL
);
5332 InitReg(MISCREG_CNTKCTL_EL1
)
5335 .res0(0xfffffffffffdfc00)
5336 .mapsTo(MISCREG_CNTKCTL
);
5337 InitReg(MISCREG_CNTKCTL_EL12
)
5340 .res0(0xfffffffffffdfc00)
5341 .mapsTo(MISCREG_CNTKCTL
);
5342 InitReg(MISCREG_CNTPS_CTL_EL1
)
5345 .res0(0xfffffffffffffff8);
5346 InitReg(MISCREG_CNTPS_CVAL_EL1
)
5349 InitReg(MISCREG_CNTPS_TVAL_EL1
)
5352 .res0(0xffffffff00000000);
5353 InitReg(MISCREG_CNTHCTL_EL2
)
5356 .res0(0xfffffffffffc0000)
5357 .mapsTo(MISCREG_CNTHCTL
);
5358 InitReg(MISCREG_CNTHP_CTL_EL2
)
5361 .res0(0xfffffffffffffff8)
5362 .mapsTo(MISCREG_CNTHP_CTL
);
5363 InitReg(MISCREG_CNTHP_CVAL_EL2
)
5366 .mapsTo(MISCREG_CNTHP_CVAL
);
5367 InitReg(MISCREG_CNTHP_TVAL_EL2
)
5370 .res0(0xffffffff00000000)
5371 .mapsTo(MISCREG_CNTHP_TVAL
);
5372 InitReg(MISCREG_CNTHPS_CTL_EL2
)
5375 .res0(0xfffffffffffffff8)
5377 InitReg(MISCREG_CNTHPS_CVAL_EL2
)
5380 .res0(0xfffffffffffffff8)
5382 InitReg(MISCREG_CNTHPS_TVAL_EL2
)
5385 .res0(0xfffffffffffffff8)
5387 InitReg(MISCREG_CNTHV_CTL_EL2
)
5390 .res0(0xfffffffffffffff8);
5391 InitReg(MISCREG_CNTHV_CVAL_EL2
)
5394 InitReg(MISCREG_CNTHV_TVAL_EL2
)
5397 .res0(0xffffffff00000000);
5398 InitReg(MISCREG_CNTHVS_CTL_EL2
)
5401 .res0(0xfffffffffffffff8)
5403 InitReg(MISCREG_CNTHVS_CVAL_EL2
)
5406 .res0(0xfffffffffffffff8)
5408 InitReg(MISCREG_CNTHVS_TVAL_EL2
)
5411 .res0(0xfffffffffffffff8)
5413 // ENDIF Armv8.1-VHE
5414 InitReg(MISCREG_CNTVOFF_EL2
)
5417 .mapsTo(MISCREG_CNTVOFF
);
5418 // END Generic Timer (AArch64)
5419 InitReg(MISCREG_PMEVCNTR0_EL0
)
5421 // .mapsTo(MISCREG_PMEVCNTR0);
5422 InitReg(MISCREG_PMEVCNTR1_EL0
)
5424 // .mapsTo(MISCREG_PMEVCNTR1);
5425 InitReg(MISCREG_PMEVCNTR2_EL0
)
5427 // .mapsTo(MISCREG_PMEVCNTR2);
5428 InitReg(MISCREG_PMEVCNTR3_EL0
)
5430 // .mapsTo(MISCREG_PMEVCNTR3);
5431 InitReg(MISCREG_PMEVCNTR4_EL0
)
5433 // .mapsTo(MISCREG_PMEVCNTR4);
5434 InitReg(MISCREG_PMEVCNTR5_EL0
)
5436 // .mapsTo(MISCREG_PMEVCNTR5);
5437 InitReg(MISCREG_PMEVTYPER0_EL0
)
5439 // .mapsTo(MISCREG_PMEVTYPER0);
5440 InitReg(MISCREG_PMEVTYPER1_EL0
)
5442 // .mapsTo(MISCREG_PMEVTYPER1);
5443 InitReg(MISCREG_PMEVTYPER2_EL0
)
5445 // .mapsTo(MISCREG_PMEVTYPER2);
5446 InitReg(MISCREG_PMEVTYPER3_EL0
)
5448 // .mapsTo(MISCREG_PMEVTYPER3);
5449 InitReg(MISCREG_PMEVTYPER4_EL0
)
5451 // .mapsTo(MISCREG_PMEVTYPER4);
5452 InitReg(MISCREG_PMEVTYPER5_EL0
)
5454 // .mapsTo(MISCREG_PMEVTYPER5);
5455 InitReg(MISCREG_IL1DATA0_EL1
)
5456 .allPrivileges().exceptUserMode();
5457 InitReg(MISCREG_IL1DATA1_EL1
)
5458 .allPrivileges().exceptUserMode();
5459 InitReg(MISCREG_IL1DATA2_EL1
)
5460 .allPrivileges().exceptUserMode();
5461 InitReg(MISCREG_IL1DATA3_EL1
)
5462 .allPrivileges().exceptUserMode();
5463 InitReg(MISCREG_DL1DATA0_EL1
)
5464 .allPrivileges().exceptUserMode();
5465 InitReg(MISCREG_DL1DATA1_EL1
)
5466 .allPrivileges().exceptUserMode();
5467 InitReg(MISCREG_DL1DATA2_EL1
)
5468 .allPrivileges().exceptUserMode();
5469 InitReg(MISCREG_DL1DATA3_EL1
)
5470 .allPrivileges().exceptUserMode();
5471 InitReg(MISCREG_DL1DATA4_EL1
)
5472 .allPrivileges().exceptUserMode();
5473 InitReg(MISCREG_L2ACTLR_EL1
)
5474 .allPrivileges().exceptUserMode();
5475 InitReg(MISCREG_CPUACTLR_EL1
)
5476 .allPrivileges().exceptUserMode();
5477 InitReg(MISCREG_CPUECTLR_EL1
)
5478 .allPrivileges().exceptUserMode();
5479 InitReg(MISCREG_CPUMERRSR_EL1
)
5480 .allPrivileges().exceptUserMode();
5481 InitReg(MISCREG_L2MERRSR_EL1
)
5484 .allPrivileges().exceptUserMode();
5485 InitReg(MISCREG_CBAR_EL1
)
5486 .allPrivileges().exceptUserMode().writes(0);
5487 InitReg(MISCREG_CONTEXTIDR_EL2
)
5491 InitReg(MISCREG_ICC_PMR_EL1
)
5492 .res0(0xffffff00) // [31:8]
5493 .allPrivileges().exceptUserMode()
5494 .mapsTo(MISCREG_ICC_PMR
);
5495 InitReg(MISCREG_ICC_IAR0_EL1
)
5496 .allPrivileges().exceptUserMode().writes(0)
5497 .mapsTo(MISCREG_ICC_IAR0
);
5498 InitReg(MISCREG_ICC_EOIR0_EL1
)
5499 .allPrivileges().exceptUserMode().reads(0)
5500 .mapsTo(MISCREG_ICC_EOIR0
);
5501 InitReg(MISCREG_ICC_HPPIR0_EL1
)
5502 .allPrivileges().exceptUserMode().writes(0)
5503 .mapsTo(MISCREG_ICC_HPPIR0
);
5504 InitReg(MISCREG_ICC_BPR0_EL1
)
5505 .res0(0xfffffff8) // [31:3]
5506 .allPrivileges().exceptUserMode()
5507 .mapsTo(MISCREG_ICC_BPR0
);
5508 InitReg(MISCREG_ICC_AP0R0_EL1
)
5509 .allPrivileges().exceptUserMode()
5510 .mapsTo(MISCREG_ICC_AP0R0
);
5511 InitReg(MISCREG_ICC_AP0R1_EL1
)
5512 .allPrivileges().exceptUserMode()
5513 .mapsTo(MISCREG_ICC_AP0R1
);
5514 InitReg(MISCREG_ICC_AP0R2_EL1
)
5515 .allPrivileges().exceptUserMode()
5516 .mapsTo(MISCREG_ICC_AP0R2
);
5517 InitReg(MISCREG_ICC_AP0R3_EL1
)
5518 .allPrivileges().exceptUserMode()
5519 .mapsTo(MISCREG_ICC_AP0R3
);
5520 InitReg(MISCREG_ICC_AP1R0_EL1
)
5522 .mapsTo(MISCREG_ICC_AP1R0
);
5523 InitReg(MISCREG_ICC_AP1R0_EL1_NS
)
5525 .allPrivileges().exceptUserMode()
5526 .mapsTo(MISCREG_ICC_AP1R0_NS
);
5527 InitReg(MISCREG_ICC_AP1R0_EL1_S
)
5529 .allPrivileges().exceptUserMode()
5530 .mapsTo(MISCREG_ICC_AP1R0_S
);
5531 InitReg(MISCREG_ICC_AP1R1_EL1
)
5533 .mapsTo(MISCREG_ICC_AP1R1
);
5534 InitReg(MISCREG_ICC_AP1R1_EL1_NS
)
5536 .allPrivileges().exceptUserMode()
5537 .mapsTo(MISCREG_ICC_AP1R1_NS
);
5538 InitReg(MISCREG_ICC_AP1R1_EL1_S
)
5540 .allPrivileges().exceptUserMode()
5541 .mapsTo(MISCREG_ICC_AP1R1_S
);
5542 InitReg(MISCREG_ICC_AP1R2_EL1
)
5544 .mapsTo(MISCREG_ICC_AP1R2
);
5545 InitReg(MISCREG_ICC_AP1R2_EL1_NS
)
5547 .allPrivileges().exceptUserMode()
5548 .mapsTo(MISCREG_ICC_AP1R2_NS
);
5549 InitReg(MISCREG_ICC_AP1R2_EL1_S
)
5551 .allPrivileges().exceptUserMode()
5552 .mapsTo(MISCREG_ICC_AP1R2_S
);
5553 InitReg(MISCREG_ICC_AP1R3_EL1
)
5555 .mapsTo(MISCREG_ICC_AP1R3
);
5556 InitReg(MISCREG_ICC_AP1R3_EL1_NS
)
5558 .allPrivileges().exceptUserMode()
5559 .mapsTo(MISCREG_ICC_AP1R3_NS
);
5560 InitReg(MISCREG_ICC_AP1R3_EL1_S
)
5562 .allPrivileges().exceptUserMode()
5563 .mapsTo(MISCREG_ICC_AP1R3_S
);
5564 InitReg(MISCREG_ICC_DIR_EL1
)
5565 .res0(0xFF000000) // [31:24]
5566 .allPrivileges().exceptUserMode().reads(0)
5567 .mapsTo(MISCREG_ICC_DIR
);
5568 InitReg(MISCREG_ICC_RPR_EL1
)
5569 .allPrivileges().exceptUserMode().writes(0)
5570 .mapsTo(MISCREG_ICC_RPR
);
5571 InitReg(MISCREG_ICC_SGI1R_EL1
)
5572 .allPrivileges().exceptUserMode().reads(0)
5573 .mapsTo(MISCREG_ICC_SGI1R
);
5574 InitReg(MISCREG_ICC_ASGI1R_EL1
)
5575 .allPrivileges().exceptUserMode().reads(0)
5576 .mapsTo(MISCREG_ICC_ASGI1R
);
5577 InitReg(MISCREG_ICC_SGI0R_EL1
)
5578 .allPrivileges().exceptUserMode().reads(0)
5579 .mapsTo(MISCREG_ICC_SGI0R
);
5580 InitReg(MISCREG_ICC_IAR1_EL1
)
5581 .allPrivileges().exceptUserMode().writes(0)
5582 .mapsTo(MISCREG_ICC_IAR1
);
5583 InitReg(MISCREG_ICC_EOIR1_EL1
)
5584 .res0(0xFF000000) // [31:24]
5585 .allPrivileges().exceptUserMode().reads(0)
5586 .mapsTo(MISCREG_ICC_EOIR1
);
5587 InitReg(MISCREG_ICC_HPPIR1_EL1
)
5588 .allPrivileges().exceptUserMode().writes(0)
5589 .mapsTo(MISCREG_ICC_HPPIR1
);
5590 InitReg(MISCREG_ICC_BPR1_EL1
)
5592 .mapsTo(MISCREG_ICC_BPR1
);
5593 InitReg(MISCREG_ICC_BPR1_EL1_NS
)
5595 .res0(0xfffffff8) // [31:3]
5596 .allPrivileges().exceptUserMode()
5597 .mapsTo(MISCREG_ICC_BPR1_NS
);
5598 InitReg(MISCREG_ICC_BPR1_EL1_S
)
5600 .res0(0xfffffff8) // [31:3]
5601 .secure().exceptUserMode()
5602 .mapsTo(MISCREG_ICC_BPR1_S
);
5603 InitReg(MISCREG_ICC_CTLR_EL1
)
5605 .mapsTo(MISCREG_ICC_CTLR
);
5606 InitReg(MISCREG_ICC_CTLR_EL1_NS
)
5608 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
5609 .allPrivileges().exceptUserMode()
5610 .mapsTo(MISCREG_ICC_CTLR_NS
);
5611 InitReg(MISCREG_ICC_CTLR_EL1_S
)
5613 .res0(0xFFFB00BC) // [31:19, 17:16, 7, 5:2]
5614 .secure().exceptUserMode()
5615 .mapsTo(MISCREG_ICC_CTLR_S
);
5616 InitReg(MISCREG_ICC_SRE_EL1
)
5618 .mapsTo(MISCREG_ICC_SRE
);
5619 InitReg(MISCREG_ICC_SRE_EL1_NS
)
5621 .res0(0xFFFFFFF8) // [31:3]
5622 .allPrivileges().exceptUserMode()
5623 .mapsTo(MISCREG_ICC_SRE_NS
);
5624 InitReg(MISCREG_ICC_SRE_EL1_S
)
5626 .res0(0xFFFFFFF8) // [31:3]
5627 .secure().exceptUserMode()
5628 .mapsTo(MISCREG_ICC_SRE_S
);
5629 InitReg(MISCREG_ICC_IGRPEN0_EL1
)
5630 .res0(0xFFFFFFFE) // [31:1]
5631 .allPrivileges().exceptUserMode()
5632 .mapsTo(MISCREG_ICC_IGRPEN0
);
5633 InitReg(MISCREG_ICC_IGRPEN1_EL1
)
5635 .mapsTo(MISCREG_ICC_IGRPEN1
);
5636 InitReg(MISCREG_ICC_IGRPEN1_EL1_NS
)
5638 .res0(0xFFFFFFFE) // [31:1]
5639 .allPrivileges().exceptUserMode()
5640 .mapsTo(MISCREG_ICC_IGRPEN1_NS
);
5641 InitReg(MISCREG_ICC_IGRPEN1_EL1_S
)
5643 .res0(0xFFFFFFFE) // [31:1]
5644 .secure().exceptUserMode()
5645 .mapsTo(MISCREG_ICC_IGRPEN1_S
);
5646 InitReg(MISCREG_ICC_SRE_EL2
)
5648 .mapsTo(MISCREG_ICC_HSRE
);
5649 InitReg(MISCREG_ICC_CTLR_EL3
)
5650 .allPrivileges().exceptUserMode()
5651 .mapsTo(MISCREG_ICC_MCTLR
);
5652 InitReg(MISCREG_ICC_SRE_EL3
)
5653 .allPrivileges().exceptUserMode()
5654 .mapsTo(MISCREG_ICC_MSRE
);
5655 InitReg(MISCREG_ICC_IGRPEN1_EL3
)
5656 .allPrivileges().exceptUserMode()
5657 .mapsTo(MISCREG_ICC_MGRPEN1
);
5659 InitReg(MISCREG_ICH_AP0R0_EL2
)
5661 .mapsTo(MISCREG_ICH_AP0R0
);
5662 InitReg(MISCREG_ICH_AP0R1_EL2
)
5665 .mapsTo(MISCREG_ICH_AP0R1
);
5666 InitReg(MISCREG_ICH_AP0R2_EL2
)
5669 .mapsTo(MISCREG_ICH_AP0R2
);
5670 InitReg(MISCREG_ICH_AP0R3_EL2
)
5673 .mapsTo(MISCREG_ICH_AP0R3
);
5674 InitReg(MISCREG_ICH_AP1R0_EL2
)
5676 .mapsTo(MISCREG_ICH_AP1R0
);
5677 InitReg(MISCREG_ICH_AP1R1_EL2
)
5680 .mapsTo(MISCREG_ICH_AP1R1
);
5681 InitReg(MISCREG_ICH_AP1R2_EL2
)
5684 .mapsTo(MISCREG_ICH_AP1R2
);
5685 InitReg(MISCREG_ICH_AP1R3_EL2
)
5688 .mapsTo(MISCREG_ICH_AP1R3
);
5689 InitReg(MISCREG_ICH_HCR_EL2
)
5691 .mapsTo(MISCREG_ICH_HCR
);
5692 InitReg(MISCREG_ICH_VTR_EL2
)
5693 .hyp().mon().writes(0)
5694 .mapsTo(MISCREG_ICH_VTR
);
5695 InitReg(MISCREG_ICH_MISR_EL2
)
5696 .hyp().mon().writes(0)
5697 .mapsTo(MISCREG_ICH_MISR
);
5698 InitReg(MISCREG_ICH_EISR_EL2
)
5699 .hyp().mon().writes(0)
5700 .mapsTo(MISCREG_ICH_EISR
);
5701 InitReg(MISCREG_ICH_ELRSR_EL2
)
5702 .hyp().mon().writes(0)
5703 .mapsTo(MISCREG_ICH_ELRSR
);
5704 InitReg(MISCREG_ICH_VMCR_EL2
)
5706 .mapsTo(MISCREG_ICH_VMCR
);
5707 InitReg(MISCREG_ICH_LR0_EL2
)
5709 .allPrivileges().exceptUserMode();
5710 InitReg(MISCREG_ICH_LR1_EL2
)
5712 .allPrivileges().exceptUserMode();
5713 InitReg(MISCREG_ICH_LR2_EL2
)
5715 .allPrivileges().exceptUserMode();
5716 InitReg(MISCREG_ICH_LR3_EL2
)
5718 .allPrivileges().exceptUserMode();
5719 InitReg(MISCREG_ICH_LR4_EL2
)
5721 .allPrivileges().exceptUserMode();
5722 InitReg(MISCREG_ICH_LR5_EL2
)
5724 .allPrivileges().exceptUserMode();
5725 InitReg(MISCREG_ICH_LR6_EL2
)
5727 .allPrivileges().exceptUserMode();
5728 InitReg(MISCREG_ICH_LR7_EL2
)
5730 .allPrivileges().exceptUserMode();
5731 InitReg(MISCREG_ICH_LR8_EL2
)
5733 .allPrivileges().exceptUserMode();
5734 InitReg(MISCREG_ICH_LR9_EL2
)
5736 .allPrivileges().exceptUserMode();
5737 InitReg(MISCREG_ICH_LR10_EL2
)
5739 .allPrivileges().exceptUserMode();
5740 InitReg(MISCREG_ICH_LR11_EL2
)
5742 .allPrivileges().exceptUserMode();
5743 InitReg(MISCREG_ICH_LR12_EL2
)
5745 .allPrivileges().exceptUserMode();
5746 InitReg(MISCREG_ICH_LR13_EL2
)
5748 .allPrivileges().exceptUserMode();
5749 InitReg(MISCREG_ICH_LR14_EL2
)
5751 .allPrivileges().exceptUserMode();
5752 InitReg(MISCREG_ICH_LR15_EL2
)
5754 .allPrivileges().exceptUserMode();
5757 InitReg(MISCREG_ICC_AP0R0
)
5758 .allPrivileges().exceptUserMode();
5759 InitReg(MISCREG_ICC_AP0R1
)
5760 .allPrivileges().exceptUserMode();
5761 InitReg(MISCREG_ICC_AP0R2
)
5762 .allPrivileges().exceptUserMode();
5763 InitReg(MISCREG_ICC_AP0R3
)
5764 .allPrivileges().exceptUserMode();
5765 InitReg(MISCREG_ICC_AP1R0
)
5766 .allPrivileges().exceptUserMode();
5767 InitReg(MISCREG_ICC_AP1R0_NS
)
5768 .allPrivileges().exceptUserMode();
5769 InitReg(MISCREG_ICC_AP1R0_S
)
5770 .allPrivileges().exceptUserMode();
5771 InitReg(MISCREG_ICC_AP1R1
)
5772 .allPrivileges().exceptUserMode();
5773 InitReg(MISCREG_ICC_AP1R1_NS
)
5774 .allPrivileges().exceptUserMode();
5775 InitReg(MISCREG_ICC_AP1R1_S
)
5776 .allPrivileges().exceptUserMode();
5777 InitReg(MISCREG_ICC_AP1R2
)
5778 .allPrivileges().exceptUserMode();
5779 InitReg(MISCREG_ICC_AP1R2_NS
)
5780 .allPrivileges().exceptUserMode();
5781 InitReg(MISCREG_ICC_AP1R2_S
)
5782 .allPrivileges().exceptUserMode();
5783 InitReg(MISCREG_ICC_AP1R3
)
5784 .allPrivileges().exceptUserMode();
5785 InitReg(MISCREG_ICC_AP1R3_NS
)
5786 .allPrivileges().exceptUserMode();
5787 InitReg(MISCREG_ICC_AP1R3_S
)
5788 .allPrivileges().exceptUserMode();
5789 InitReg(MISCREG_ICC_ASGI1R
)
5790 .allPrivileges().exceptUserMode().reads(0);
5791 InitReg(MISCREG_ICC_BPR0
)
5792 .allPrivileges().exceptUserMode();
5793 InitReg(MISCREG_ICC_BPR1
)
5794 .allPrivileges().exceptUserMode();
5795 InitReg(MISCREG_ICC_BPR1_NS
)
5796 .allPrivileges().exceptUserMode();
5797 InitReg(MISCREG_ICC_BPR1_S
)
5798 .allPrivileges().exceptUserMode();
5799 InitReg(MISCREG_ICC_CTLR
)
5800 .allPrivileges().exceptUserMode();
5801 InitReg(MISCREG_ICC_CTLR_NS
)
5802 .allPrivileges().exceptUserMode();
5803 InitReg(MISCREG_ICC_CTLR_S
)
5804 .allPrivileges().exceptUserMode();
5805 InitReg(MISCREG_ICC_DIR
)
5806 .allPrivileges().exceptUserMode().reads(0);
5807 InitReg(MISCREG_ICC_EOIR0
)
5808 .allPrivileges().exceptUserMode().reads(0);
5809 InitReg(MISCREG_ICC_EOIR1
)
5810 .allPrivileges().exceptUserMode().reads(0);
5811 InitReg(MISCREG_ICC_HPPIR0
)
5812 .allPrivileges().exceptUserMode().writes(0);
5813 InitReg(MISCREG_ICC_HPPIR1
)
5814 .allPrivileges().exceptUserMode().writes(0);
5815 InitReg(MISCREG_ICC_HSRE
)
5816 .allPrivileges().exceptUserMode();
5817 InitReg(MISCREG_ICC_IAR0
)
5818 .allPrivileges().exceptUserMode().writes(0);
5819 InitReg(MISCREG_ICC_IAR1
)
5820 .allPrivileges().exceptUserMode().writes(0);
5821 InitReg(MISCREG_ICC_IGRPEN0
)
5822 .allPrivileges().exceptUserMode();
5823 InitReg(MISCREG_ICC_IGRPEN1
)
5824 .allPrivileges().exceptUserMode();
5825 InitReg(MISCREG_ICC_IGRPEN1_NS
)
5826 .allPrivileges().exceptUserMode();
5827 InitReg(MISCREG_ICC_IGRPEN1_S
)
5828 .allPrivileges().exceptUserMode();
5829 InitReg(MISCREG_ICC_MCTLR
)
5830 .allPrivileges().exceptUserMode();
5831 InitReg(MISCREG_ICC_MGRPEN1
)
5832 .allPrivileges().exceptUserMode();
5833 InitReg(MISCREG_ICC_MSRE
)
5834 .allPrivileges().exceptUserMode();
5835 InitReg(MISCREG_ICC_PMR
)
5836 .allPrivileges().exceptUserMode();
5837 InitReg(MISCREG_ICC_RPR
)
5838 .allPrivileges().exceptUserMode().writes(0);
5839 InitReg(MISCREG_ICC_SGI0R
)
5840 .allPrivileges().exceptUserMode().reads(0);
5841 InitReg(MISCREG_ICC_SGI1R
)
5842 .allPrivileges().exceptUserMode().reads(0);
5843 InitReg(MISCREG_ICC_SRE
)
5844 .allPrivileges().exceptUserMode();
5845 InitReg(MISCREG_ICC_SRE_NS
)
5846 .allPrivileges().exceptUserMode();
5847 InitReg(MISCREG_ICC_SRE_S
)
5848 .allPrivileges().exceptUserMode();
5850 InitReg(MISCREG_ICH_AP0R0
)
5852 InitReg(MISCREG_ICH_AP0R1
)
5854 InitReg(MISCREG_ICH_AP0R2
)
5856 InitReg(MISCREG_ICH_AP0R3
)
5858 InitReg(MISCREG_ICH_AP1R0
)
5860 InitReg(MISCREG_ICH_AP1R1
)
5862 InitReg(MISCREG_ICH_AP1R2
)
5864 InitReg(MISCREG_ICH_AP1R3
)
5866 InitReg(MISCREG_ICH_HCR
)
5868 InitReg(MISCREG_ICH_VTR
)
5869 .hyp().mon().writes(0);
5870 InitReg(MISCREG_ICH_MISR
)
5871 .hyp().mon().writes(0);
5872 InitReg(MISCREG_ICH_EISR
)
5873 .hyp().mon().writes(0);
5874 InitReg(MISCREG_ICH_ELRSR
)
5875 .hyp().mon().writes(0);
5876 InitReg(MISCREG_ICH_VMCR
)
5878 InitReg(MISCREG_ICH_LR0
)
5880 InitReg(MISCREG_ICH_LR1
)
5882 InitReg(MISCREG_ICH_LR2
)
5884 InitReg(MISCREG_ICH_LR3
)
5886 InitReg(MISCREG_ICH_LR4
)
5888 InitReg(MISCREG_ICH_LR5
)
5890 InitReg(MISCREG_ICH_LR6
)
5892 InitReg(MISCREG_ICH_LR7
)
5894 InitReg(MISCREG_ICH_LR8
)
5896 InitReg(MISCREG_ICH_LR9
)
5898 InitReg(MISCREG_ICH_LR10
)
5900 InitReg(MISCREG_ICH_LR11
)
5902 InitReg(MISCREG_ICH_LR12
)
5904 InitReg(MISCREG_ICH_LR13
)
5906 InitReg(MISCREG_ICH_LR14
)
5908 InitReg(MISCREG_ICH_LR15
)
5910 InitReg(MISCREG_ICH_LRC0
)
5911 .mapsTo(MISCREG_ICH_LR0
)
5913 InitReg(MISCREG_ICH_LRC1
)
5914 .mapsTo(MISCREG_ICH_LR1
)
5916 InitReg(MISCREG_ICH_LRC2
)
5917 .mapsTo(MISCREG_ICH_LR2
)
5919 InitReg(MISCREG_ICH_LRC3
)
5920 .mapsTo(MISCREG_ICH_LR3
)
5922 InitReg(MISCREG_ICH_LRC4
)
5923 .mapsTo(MISCREG_ICH_LR4
)
5925 InitReg(MISCREG_ICH_LRC5
)
5926 .mapsTo(MISCREG_ICH_LR5
)
5928 InitReg(MISCREG_ICH_LRC6
)
5929 .mapsTo(MISCREG_ICH_LR6
)
5931 InitReg(MISCREG_ICH_LRC7
)
5932 .mapsTo(MISCREG_ICH_LR7
)
5934 InitReg(MISCREG_ICH_LRC8
)
5935 .mapsTo(MISCREG_ICH_LR8
)
5937 InitReg(MISCREG_ICH_LRC9
)
5938 .mapsTo(MISCREG_ICH_LR9
)
5940 InitReg(MISCREG_ICH_LRC10
)
5941 .mapsTo(MISCREG_ICH_LR10
)
5943 InitReg(MISCREG_ICH_LRC11
)
5944 .mapsTo(MISCREG_ICH_LR11
)
5946 InitReg(MISCREG_ICH_LRC12
)
5947 .mapsTo(MISCREG_ICH_LR12
)
5949 InitReg(MISCREG_ICH_LRC13
)
5950 .mapsTo(MISCREG_ICH_LR13
)
5952 InitReg(MISCREG_ICH_LRC14
)
5953 .mapsTo(MISCREG_ICH_LR14
)
5955 InitReg(MISCREG_ICH_LRC15
)
5956 .mapsTo(MISCREG_ICH_LR15
)
5960 InitReg(MISCREG_ID_AA64ZFR0_EL1
)
5961 .allPrivileges().exceptUserMode().writes(0);
5962 InitReg(MISCREG_ZCR_EL3
)
5964 InitReg(MISCREG_ZCR_EL2
)
5966 InitReg(MISCREG_ZCR_EL12
)
5967 .allPrivileges().exceptUserMode()
5968 .mapsTo(MISCREG_ZCR_EL1
);
5969 InitReg(MISCREG_ZCR_EL1
)
5970 .allPrivileges().exceptUserMode();
5973 InitReg(MISCREG_NOP
)
5975 InitReg(MISCREG_RAZ
)
5976 .allPrivileges().exceptUserMode().writes(0);
5977 InitReg(MISCREG_CP14_UNIMPL
)
5980 InitReg(MISCREG_CP15_UNIMPL
)
5983 InitReg(MISCREG_UNKNOWN
);
5984 InitReg(MISCREG_IMPDEF_UNIMPL
)
5986 .warnNotFail(impdefAsNop
);
5988 // RAS extension (unimplemented)
5989 InitReg(MISCREG_ERRIDR_EL1
)
5992 InitReg(MISCREG_ERRSELR_EL1
)
5995 InitReg(MISCREG_ERXFR_EL1
)
5998 InitReg(MISCREG_ERXCTLR_EL1
)
6001 InitReg(MISCREG_ERXSTATUS_EL1
)
6004 InitReg(MISCREG_ERXADDR_EL1
)
6007 InitReg(MISCREG_ERXMISC0_EL1
)
6010 InitReg(MISCREG_ERXMISC1_EL1
)
6013 InitReg(MISCREG_DISR_EL1
)
6016 InitReg(MISCREG_VSESR_EL2
)
6019 InitReg(MISCREG_VDISR_EL2
)
6023 // Register mappings for some unimplemented registers:
6027 // DBGDTR_EL0 -> DBGDTR{R or T}Xint
6028 // DBGDTRRX_EL0 -> DBGDTRRXint
6029 // DBGDTRTX_EL0 -> DBGDTRRXint
6030 // MDCR_EL3 -> SDCR, NAM D7-2108 (the latter is unimpl. in gem5)
6035 } // namespace ArmISA