3062 static bool completed =
false;
3080 bool LSMAOE =
false;
3083 bool nTLSMD =
false;
3091 const bool vhe_implemented =
release->has(ArmExtension::FEAT_VHE);
3092 const bool sel2_implemented =
release->has(ArmExtension::FEAT_SEL2);
3149 mvfr1.flushToZero = 1;
3150 mvfr1.defaultNaN = 1;
3151 mvfr1.advSimdLoadStore = 1;
3152 mvfr1.advSimdInteger = 1;
3153 mvfr1.advSimdSinglePrecision = 1;
3154 mvfr1.advSimdHalfPrecision = 1;
3155 mvfr1.vfpHalfPrecision = 1;
3162 mvfr0.advSimdRegisters = 2;
3163 mvfr0.singlePrecision = 2;
3164 mvfr0.doublePrecision = 2;
3165 mvfr0.vfpExceptionTrapping = 0;
3167 mvfr0.squareRoot = 1;
3168 mvfr0.shortVectors = 1;
3169 mvfr0.roundingModes = 1;
3467 unsigned line_size_words =
3468 system->cacheLineSize() / 4;
3469 unsigned log2_line_size_words = 0;
3471 while (line_size_words >>= 1) {
3472 ++log2_line_size_words;
3477 ctr.iCacheLineSize = log2_line_size_words;
3479 ctr.l1IndexPolicy = 0x3;
3481 ctr.dCacheLineSize = log2_line_size_words;
3483 ctr.erg = log2_line_size_words;
3485 ctr.cwg = log2_line_size_words;
3512 bool have_timer = (
system &&
system->getGenericTimer() !=
nullptr);
3514 (release->has(ArmExtension::SECURITY) ?
3516 (release->has(ArmExtension::VIRTUALIZATION) ?
3518 (have_timer ? 0x00010000 : 0x0);
3523 .
reset(
p.pmu ? 0x03000000 : 0)
3528 .
reset([
p,release=release](){
3530 if (release->has(ArmExtension::LPAE))
3531 mmfr0 = (mmfr0 & ~0xf) | 0x5;
3563 .
reset([
p,release=release] () {
3564 ISAR5 isar5 =
p.id_isar5;
3565 isar5.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
3566 isar5.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
3567 isar5.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
3568 isar5.aes = release->has(ArmExtension::FEAT_PMULL) ?
3569 0x2 : release->has(ArmExtension::FEAT_AES) ?
3571 isar5.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
3572 isar5.vcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
3577 .
reset([
p,release=release] () {
3578 ISAR6 isar6 =
p.id_isar6;
3579 isar6.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
3610 .
res1(0x00400800 | (SPAN ? 0 : 0x800000)
3611 | (LSMAOE ? 0 : 0x10)
3612 | (nTLSMD ? 0 : 0x8));
3614 auto sctlr_reset = [
aarch64=highestELIs64] ()
3660 .
reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
3671 .
res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3672 | (IESB ? 0 : 0x200000)
3673 | (EnDA ? 0 : 0x8000000)
3674 | (EnIB ? 0 : 0x40000000)
3675 | (EnIA ? 0 : 0x80000000))
3681 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3682 0x90000000 :
mask(31, 0));
3685 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3686 0xffa9ff8c :
mask(31, 0));
4090 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4100 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4325 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::mdscrEL1>)
4326 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::mdscrEL1>)
4334 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::oseccrEL1>)
4335 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::oseccrEL1>)
4340 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4341 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4346 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4347 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4352 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4353 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4358 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4359 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4364 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4365 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4370 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4371 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4376 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4377 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4382 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4383 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4388 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4389 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4394 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4395 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4400 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4401 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4406 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4407 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4412 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4413 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4418 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4419 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4424 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4425 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4430 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4431 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4436 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4437 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4442 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4443 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4448 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4449 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4454 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4455 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4460 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4461 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4466 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4467 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4472 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4473 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4478 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4479 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4484 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4485 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4490 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4491 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4496 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4497 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4502 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4503 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4508 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4509 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4514 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4515 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4520 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4521 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4526 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4527 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4532 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4533 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4538 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4539 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4544 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4545 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4550 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4551 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4556 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4557 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4562 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4563 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4568 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4569 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4574 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4575 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4580 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4581 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4586 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4587 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4592 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4593 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4598 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4599 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4604 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4605 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4610 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4611 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4616 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4617 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4622 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4623 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4628 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4629 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4634 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4635 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4640 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4641 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4646 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4647 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4652 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4653 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4658 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4659 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4664 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4665 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4670 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4671 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4676 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4677 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4682 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4683 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4688 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4689 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4694 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4695 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4700 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4701 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4706 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4707 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4712 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4713 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4718 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4719 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4750 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::oslsrEL1>)
4755 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::osdlrEL1>)
4761 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::dbgprcrEL1>)
4762 .
faultWrite(
EL1, faultDebugOsEL1<false, &HDFGTR::dbgprcrEL1>)
4767 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4768 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4773 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4774 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4779 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgauthstatusEL1>)
4787 .allPrivileges().exceptUserMode().writes(0)
4788 .faultRead(
EL0, faultIdst)
4789 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::midrEL1>)
4792 .allPrivileges().exceptUserMode().writes(0)
4793 .faultRead(
EL0, faultIdst)
4794 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::mpidrEL1>)
4797 .faultRead(
EL0, faultIdst)
4798 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::revidrEL1>)
4799 .allPrivileges().exceptUserMode().writes(0);
4801 .allPrivileges().exceptUserMode().writes(0)
4802 .faultRead(
EL0, faultIdst)
4803 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4806 .allPrivileges().exceptUserMode().writes(0)
4807 .faultRead(
EL0, faultIdst)
4808 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4811 .allPrivileges().exceptUserMode().writes(0)
4812 .faultRead(
EL0, faultIdst)
4813 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4816 .allPrivileges().exceptUserMode().writes(0)
4817 .faultRead(
EL0, faultIdst)
4818 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4821 .allPrivileges().exceptUserMode().writes(0)
4822 .faultRead(
EL0, faultIdst)
4823 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4826 .allPrivileges().exceptUserMode().writes(0)
4827 .faultRead(
EL0, faultIdst)
4828 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4831 .allPrivileges().exceptUserMode().writes(0)
4832 .faultRead(
EL0, faultIdst)
4833 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4836 .allPrivileges().exceptUserMode().writes(0)
4837 .faultRead(
EL0, faultIdst)
4838 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4841 .allPrivileges().exceptUserMode().writes(0)
4842 .faultRead(
EL0, faultIdst)
4843 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4846 .allPrivileges().exceptUserMode().writes(0)
4847 .faultRead(
EL0, faultIdst)
4848 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4851 .allPrivileges().exceptUserMode().writes(0)
4852 .faultRead(
EL0, faultIdst)
4853 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4856 .allPrivileges().exceptUserMode().writes(0)
4857 .faultRead(
EL0, faultIdst)
4858 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4861 .allPrivileges().exceptUserMode().writes(0)
4862 .faultRead(
EL0, faultIdst)
4863 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4866 .allPrivileges().exceptUserMode().writes(0)
4867 .faultRead(
EL0, faultIdst)
4868 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4871 .allPrivileges().exceptUserMode().writes(0)
4872 .faultRead(
EL0, faultIdst)
4873 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4876 .allPrivileges().exceptUserMode().writes(0)
4877 .faultRead(
EL0, faultIdst)
4878 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4881 .faultRead(
EL0, faultIdst)
4882 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4883 .allPrivileges().exceptUserMode().writes(0)
4886 .faultRead(
EL0, faultIdst)
4887 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4888 .allPrivileges().exceptUserMode().writes(0)
4891 .faultRead(
EL0, faultIdst)
4892 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4893 .allPrivileges().exceptUserMode().writes(0);
4895 .reset([
this,release=release,tc=tc](){
4896 AA64PFR0 pfr0_el1 = 0;
4899 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION)
4901 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4902 pfr0_el1.fp = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4903 pfr0_el1.advsimd = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4904 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4905 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4908 pfr0_el1.mpam = 0x0;
4909 pfr0_el1.gic =
FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4913 .faultRead(
EL0, faultIdst)
4914 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4915 .allPrivileges().writes(0);
4917 .reset([release=release](){
4918 AA64PFR1 pfr1_el1 = 0;
4919 pfr1_el1.sme = release->has(ArmExtension::FEAT_SME) ? 0x1 : 0x0;
4920 pfr1_el1.mpamFrac = release->has(ArmExtension::FEAT_MPAM) ?
4925 .faultRead(
EL0, faultIdst)
4926 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4927 .allPrivileges().writes(0);
4930 AA64DFR0 dfr0_el1 =
p.id_aa64dfr0_el1;
4931 dfr0_el1.pmuver =
p.pmu ? 1 : 0;
4934 .faultRead(
EL0, faultIdst)
4935 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4936 .allPrivileges().writes(0);
4938 .reset(
p.id_aa64dfr1_el1)
4939 .faultRead(
EL0, faultIdst)
4940 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4941 .allPrivileges().writes(0);
4943 .reset(
p.id_aa64afr0_el1)
4944 .faultRead(
EL0, faultIdst)
4945 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4946 .allPrivileges().writes(0);
4948 .reset(
p.id_aa64afr1_el1)
4949 .faultRead(
EL0, faultIdst)
4950 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4951 .allPrivileges().writes(0);
4953 .reset([
p,release=release](){
4954 AA64ISAR0 isar0_el1 =
p.id_aa64isar0_el1;
4955 isar0_el1.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
4956 isar0_el1.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
4957 isar0_el1.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
4958 isar0_el1.aes = release->has(ArmExtension::FEAT_PMULL) ?
4959 0x2 : release->has(ArmExtension::FEAT_AES) ?
4961 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4962 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4963 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4964 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4965 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIRANGE) ?
4966 0x2 : release->has(ArmExtension::FEAT_TLBIOS) ?
4968 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4969 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4971 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4974 .faultRead(
EL0, faultIdst)
4975 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4976 .allPrivileges().writes(0);
4978 .reset([
p,release=release](){
4979 AA64ISAR1 isar1_el1 =
p.id_aa64isar1_el1;
4980 isar1_el1.xs = release->has(ArmExtension::FEAT_XS) ? 0x1 : 0x0;
4981 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
4982 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4983 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
4984 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
4985 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4988 .faultRead(
EL0, faultIdst)
4989 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4990 .allPrivileges().writes(0);
4993 AA64MMFR0 mmfr0_el1 =
p.id_aa64mmfr0_el1;
4994 mmfr0_el1.asidbits =
asidbits ? 0x2 : 0x0;
4998 .faultRead(
EL0, faultIdst)
4999 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5000 .allPrivileges().writes(0);
5002 .reset([
p,release=release](){
5003 AA64MMFR1 mmfr1_el1 =
p.id_aa64mmfr1_el1;
5004 mmfr1_el1.vmidbits =
5005 release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
5006 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
5007 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
5008 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
5009 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
5012 .faultRead(
EL0, faultIdst)
5013 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5014 .allPrivileges().writes(0);
5016 .reset([
p,release=release](){
5017 AA64MMFR2 mmfr2_el1 =
p.id_aa64mmfr2_el1;
5018 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
5019 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
5020 mmfr2_el1.st = release->has(ArmExtension::FEAT_TTST) ? 0x1 : 0x0;
5021 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
5022 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
5025 .faultRead(
EL0, faultIdst)
5026 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5027 .allPrivileges().writes(0);
5029 .reset([
p,release=release](){
5030 AA64MMFR3 mmfr3_el1 = 0;
5032 release->has(ArmExtension::FEAT_SCTLR2) ? 0x1 : 0x0;
5033 mmfr3_el1.tcrx = release->has(ArmExtension::FEAT_TCR2) ? 0x1 : 0x0;
5034 mmfr3_el1.s1pie = release->has(ArmExtension::FEAT_S1PIE) ? 0x1 : 0x0;
5037 .faultRead(
EL0, faultIdst)
5038 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5039 .allPrivileges().writes(0);
5042 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5043 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5044 .fault(
EL2, faultPauthEL2)
5045 .allPrivileges().exceptUserMode();
5047 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5048 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5049 .fault(
EL2, faultPauthEL2)
5050 .allPrivileges().exceptUserMode();
5052 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5053 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5054 .fault(
EL2, faultPauthEL2)
5055 .allPrivileges().exceptUserMode();
5057 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5058 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5059 .fault(
EL2, faultPauthEL2)
5060 .allPrivileges().exceptUserMode();
5062 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5063 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5064 .fault(
EL2, faultPauthEL2)
5065 .allPrivileges().exceptUserMode();
5067 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5068 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5069 .fault(
EL2, faultPauthEL2)
5070 .allPrivileges().exceptUserMode();
5072 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5073 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5074 .fault(
EL2, faultPauthEL2)
5075 .allPrivileges().exceptUserMode();
5077 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5078 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5079 .fault(
EL2, faultPauthEL2)
5080 .allPrivileges().exceptUserMode();
5082 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5083 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5084 .fault(
EL2, faultPauthEL2)
5085 .allPrivileges().exceptUserMode();
5087 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5088 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5089 .fault(
EL2, faultPauthEL2)
5090 .allPrivileges().exceptUserMode();
5093 .faultRead(
EL0, faultIdst)
5094 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::ccsidrEL1>)
5095 .allPrivileges().writes(0);
5097 .faultRead(
EL0, faultIdst)
5098 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::clidrEL1>)
5099 .allPrivileges().writes(0);
5101 .faultRead(
EL0, faultIdst)
5102 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::aidrEL1>)
5103 .allPrivileges().writes(0);
5105 .allPrivileges().exceptUserMode()
5106 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::csselrEL1>)
5107 .faultWrite(
EL1, faultCacheEL1<false, &HFGTR::csselrEL1>)
5110 .faultRead(
EL0, faultCtrEL0)
5111 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid2, &HFGTR::ctrEL0>)
5116 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::dczidEL0>)
5117 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::dczidEL0>)
5128 .allPrivileges().exceptUserMode()
5129 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::sctlrEL1>)
5130 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::sctlrEL1>)
5131 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5132 | (IESB ? 0 : 0x200000)
5133 | (EnDA ? 0 : 0x8000000)
5134 | (EnIB ? 0 : 0x40000000)
5135 | (EnIA ? 0 : 0x80000000))
5136 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5137 | (nTLSMD ? 0 : 0x8000000)
5138 | (LSMAOE ? 0 : 0x10000000))
5143 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5144 | (IESB ? 0 : 0x200000)
5145 | (EnDA ? 0 : 0x8000000)
5146 | (EnIB ? 0 : 0x40000000)
5147 | (EnIA ? 0 : 0x80000000))
5148 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5149 | (nTLSMD ? 0 : 0x8000000)
5150 | (LSMAOE ? 0 : 0x10000000))
5153 .allPrivileges().exceptUserMode()
5154 .faultRead(
EL1, faultSctlr2EL1<true, &HCR::trvm>)
5155 .faultWrite(
EL1, faultSctlr2EL1<false, &HCR::tvm>)
5156 .fault(
EL2,faultSctlr2EL2);
5158 .fault(
EL2, faultVheEL2<faultSctlr2EL2>)
5162 .allPrivileges().exceptUserMode()
5163 .fault(
EL1, faultHcrEL1<&HCR::tacr>)
5166 .allPrivileges().exceptUserMode()
5167 .faultRead(
EL1, faultCpacrEL1<true, &HFGTR::cpacrEL1>)
5168 .faultWrite(
EL1, faultCpacrEL1<false, &HFGTR::cpacrEL1>)
5169 .fault(
EL2, faultCpacrEL2)
5172 .fault(
EL2, faultVheEL2<faultCpacrEL2>)
5177 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5178 | (IESB ? 0 : 0x200000)
5179 | (EnDA ? 0 : 0x8000000)
5180 | (EnIB ? 0 : 0x40000000)
5181 | (EnIA ? 0 : 0x80000000))
5186 .fault(
EL2, faultSctlr2EL2);
5195 .fault(
EL2, faultHcrxEL2);
5198 .fault(
EL2, faultDebugEL2)
5202 .fault(
EL2, faultCpacrEL2)
5213 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5214 | (IESB ? 0 : 0x200000)
5215 | (EnDA ? 0 : 0x8000000)
5216 | (EnIB ? 0 : 0x40000000)
5217 | (EnIA ? 0 : 0x80000000))
5235 .allPrivileges().exceptUserMode()
5236 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr0EL1>)
5237 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr0EL1>)
5244 .allPrivileges().exceptUserMode()
5245 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr1EL1>)
5246 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr1EL1>)
5253 .allPrivileges().exceptUserMode()
5254 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::tcrEL1>)
5255 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::tcrEL1>)
5262 .allPrivileges().exceptUserMode()
5263 .faultRead(
EL1, faultTcr2EL1<true, &HCR::trvm>)
5264 .faultWrite(
EL1, faultTcr2EL1<false, &HCR::tvm>)
5265 .fault(
EL2, faultTcr2EL2);
5267 .fault(
EL2, faultVheEL2<faultTcr2EL2>)
5268 .fault(
EL3, faultTcr2VheEL3)
5280 .fault(
EL2, faultTcr2EL2);
5299 .allPrivileges().exceptUserMode()
5306 .allPrivileges().exceptUserMode();
5312 .allPrivileges().exceptUserMode()
5313 .fault(
EL1, faultSpEL0)
5314 .fault(
EL2, faultSpEL0)
5315 .fault(
EL3, faultSpEL0);
5317 .allPrivileges().exceptUserMode();
5319 .allPrivileges().exceptUserMode().writes(0);
5321 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
5324 .allPrivileges().exceptUserMode();
5329 .fault(
EL0, faultDaif);
5332 .fault(
EL0, faultFpcrEL0)
5333 .fault(
EL1, faultFpcrEL1)
5334 .fault(
EL2, faultFpcrEL2)
5335 .fault(
EL3, faultFpcrEL3);
5338 .fault(
EL0, faultFpcrEL0)
5339 .fault(
EL1, faultFpcrEL1)
5340 .fault(
EL2, faultFpcrEL2)
5341 .fault(
EL3, faultFpcrEL3);
5369 .allPrivileges().exceptUserMode()
5370 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr0EL1>)
5371 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr0EL1>)
5378 .allPrivileges().exceptUserMode()
5379 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr1EL1>)
5380 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr1EL1>)
5387 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::esrEL1>)
5388 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::esrEL1>)
5389 .allPrivileges().exceptUserMode();
5407 .fault(
EL2, faultFpcrEL2)
5408 .fault(
EL3, faultFpcrEL3)
5417 .allPrivileges().exceptUserMode()
5418 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::farEL1>)
5419 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::farEL1>)
5435 .faultWrite(
EL1, faultPouIsEL1<&HFGITR::icialluis>)
5436 .writes(1).exceptUserMode();
5438 .allPrivileges().exceptUserMode()
5442 .faultWrite(
EL1, faultPouEL1<&HFGITR::iciallu>)
5443 .writes(1).exceptUserMode();
5445 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dcivac>)
5446 .writes(1).exceptUserMode();
5449 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dcisw>)
5450 .writes(1).exceptUserMode();
5452 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1r>)
5453 .writes(1).exceptUserMode();
5455 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1w>)
5456 .writes(1).exceptUserMode();
5458 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0r>)
5459 .writes(1).exceptUserMode();
5461 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0w>)
5462 .writes(1).exceptUserMode();
5465 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccsw>)
5466 .writes(1).exceptUserMode();
5469 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccisw>)
5470 .writes(1).exceptUserMode();
5473 .faultWrite(
EL0, faultDczvaEL0)
5474 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tdz, &HFGITR::dczva>);
5476 .faultWrite(
EL0, faultPouEL0)
5477 .faultWrite(
EL1, faultPouEL1<&HFGITR::icivau>)
5480 .faultWrite(
EL0, faultCvacEL0)
5481 .faultWrite(
EL1, faultHcrEL1<&HCR::tpc>)
5484 .faultWrite(
EL0, faultPouEL0)
5485 .faultWrite(
EL1, faultPouEL1<&HFGITR::dccvau>)
5488 .faultWrite(
EL0, faultCvacEL0)
5489 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dccivac>)
5492 .monWrite().hypWrite();
5494 .monWrite().hypWrite();
5496 .hypWrite().monSecureWrite().monNonSecureWrite();
5498 .hypWrite().monSecureWrite().monNonSecureWrite();
5500 .hypWrite().monSecureWrite().monNonSecureWrite();
5502 .hypWrite().monSecureWrite().monNonSecureWrite();
5504 .monSecureWrite().monNonSecureWrite();
5506 .monSecureWrite().monNonSecureWrite();
5507 InitReg(MISCREG_TLBI_VMALLE1OS)
5508 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivmalle1os>)
5509 .writes(1).exceptUserMode();
5510 InitReg(MISCREG_TLBI_VAE1OS)
5511 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivae1os>)
5512 .writes(1).exceptUserMode();
5513 InitReg(MISCREG_TLBI_ASIDE1OS)
5514 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbiaside1os>)
5515 .writes(1).exceptUserMode();
5516 InitReg(MISCREG_TLBI_VAAE1OS)
5517 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaae1os>)
5518 .writes(1).exceptUserMode();
5519 InitReg(MISCREG_TLBI_VALE1OS)
5520 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivale1os>)
5521 .writes(1).exceptUserMode();
5522 InitReg(MISCREG_TLBI_VAALE1OS)
5523 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaale1os>)
5524 .writes(1).exceptUserMode();
5525 InitReg(MISCREG_TLBI_VMALLE1IS)
5526 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivmalle1is>)
5527 .writes(1).exceptUserMode();
5528 InitReg(MISCREG_TLBI_VAE1IS)
5529 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivae1is>)
5530 .writes(1).exceptUserMode();
5531 InitReg(MISCREG_TLBI_ASIDE1IS)
5532 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbiaside1is>)
5533 .writes(1).exceptUserMode();
5534 InitReg(MISCREG_TLBI_VAAE1IS)
5535 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaae1is>)
5536 .writes(1).exceptUserMode();
5537 InitReg(MISCREG_TLBI_VALE1IS)
5538 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivale1is>)
5539 .writes(1).exceptUserMode();
5540 InitReg(MISCREG_TLBI_VAALE1IS)
5541 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaale1is>)
5542 .writes(1).exceptUserMode();
5543 InitReg(MISCREG_TLBI_VMALLE1)
5544 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5545 .writes(1).exceptUserMode();
5546 InitReg(MISCREG_TLBI_VAE1)
5547 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5548 .writes(1).exceptUserMode();
5549 InitReg(MISCREG_TLBI_ASIDE1)
5550 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5551 .writes(1).exceptUserMode();
5552 InitReg(MISCREG_TLBI_VAAE1)
5553 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5554 .writes(1).exceptUserMode();
5555 InitReg(MISCREG_TLBI_VALE1)
5556 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5557 .writes(1).exceptUserMode();
5558 InitReg(MISCREG_TLBI_VAALE1)
5559 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5560 .writes(1).exceptUserMode();
5561 InitReg(MISCREG_TLBI_IPAS2E1OS)
5562 .monWrite().hypWrite();
5563 InitReg(MISCREG_TLBI_IPAS2LE1OS)
5564 .monWrite().hypWrite();
5565 InitReg(MISCREG_TLBI_ALLE2OS)
5566 .monWrite().hypWrite();
5567 InitReg(MISCREG_TLBI_VAE2OS)
5568 .monWrite().hypWrite();
5569 InitReg(MISCREG_TLBI_ALLE1OS)
5570 .monWrite().hypWrite();
5571 InitReg(MISCREG_TLBI_VALE2OS)
5572 .monWrite().hypWrite();
5573 InitReg(MISCREG_TLBI_VMALLS12E1OS)
5574 .monWrite().hypWrite();
5575 InitReg(MISCREG_TLBI_IPAS2E1IS)
5576 .monWrite().hypWrite();
5577 InitReg(MISCREG_TLBI_IPAS2LE1IS)
5578 .monWrite().hypWrite();
5579 InitReg(MISCREG_TLBI_ALLE2IS)
5580 .monWrite().hypWrite();
5581 InitReg(MISCREG_TLBI_VAE2IS)
5582 .monWrite().hypWrite();
5583 InitReg(MISCREG_TLBI_ALLE1IS)
5584 .monWrite().hypWrite();
5585 InitReg(MISCREG_TLBI_VALE2IS)
5586 .monWrite().hypWrite();
5587 InitReg(MISCREG_TLBI_VMALLS12E1IS)
5588 .monWrite().hypWrite();
5589 InitReg(MISCREG_TLBI_IPAS2E1)
5590 .monWrite().hypWrite();
5591 InitReg(MISCREG_TLBI_IPAS2LE1)
5592 .monWrite().hypWrite();
5593 InitReg(MISCREG_TLBI_ALLE2)
5594 .monWrite().hypWrite();
5595 InitReg(MISCREG_TLBI_VAE2)
5596 .monWrite().hypWrite();
5597 InitReg(MISCREG_TLBI_ALLE1)
5598 .monWrite().hypWrite();
5599 InitReg(MISCREG_TLBI_VALE2)
5600 .monWrite().hypWrite();
5601 InitReg(MISCREG_TLBI_VMALLS12E1)
5602 .monWrite().hypWrite();
5603 InitReg(MISCREG_TLBI_ALLE3OS)
5604 .monSecureWrite().monNonSecureWrite();
5605 InitReg(MISCREG_TLBI_VAE3OS)
5606 .monSecureWrite().monNonSecureWrite();
5607 InitReg(MISCREG_TLBI_VALE3OS)
5608 .monSecureWrite().monNonSecureWrite();
5609 InitReg(MISCREG_TLBI_ALLE3IS)
5610 .monSecureWrite().monNonSecureWrite();
5611 InitReg(MISCREG_TLBI_VAE3IS)
5612 .monSecureWrite().monNonSecureWrite();
5613 InitReg(MISCREG_TLBI_VALE3IS)
5614 .monSecureWrite().monNonSecureWrite();
5615 InitReg(MISCREG_TLBI_ALLE3)
5616 .monSecureWrite().monNonSecureWrite();
5617 InitReg(MISCREG_TLBI_VAE3)
5618 .monSecureWrite().monNonSecureWrite();
5619 InitReg(MISCREG_TLBI_VALE3)
5620 .monSecureWrite().monNonSecureWrite();
5622 InitReg(MISCREG_TLBI_RVAE1)
5623 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5624 .writes(1).exceptUserMode();
5625 InitReg(MISCREG_TLBI_RVAAE1)
5626 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5627 .writes(1).exceptUserMode();
5628 InitReg(MISCREG_TLBI_RVALE1)
5629 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5630 .writes(1).exceptUserMode();
5631 InitReg(MISCREG_TLBI_RVAALE1)
5632 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5633 .writes(1).exceptUserMode();
5634 InitReg(MISCREG_TLBI_RIPAS2E1)
5635 .hypWrite().monWrite();
5636 InitReg(MISCREG_TLBI_RIPAS2LE1)
5637 .hypWrite().monWrite();
5638 InitReg(MISCREG_TLBI_RVAE2)
5639 .hypWrite().monWrite();
5640 InitReg(MISCREG_TLBI_RVALE2)
5641 .hypWrite().monWrite();
5642 InitReg(MISCREG_TLBI_RVAE3)
5644 InitReg(MISCREG_TLBI_RVALE3)
5646 InitReg(MISCREG_TLBI_RVAE1IS)
5647 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvae1is>)
5648 .writes(1).exceptUserMode();
5649 InitReg(MISCREG_TLBI_RVAAE1IS)
5650 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaae1is>)
5651 .writes(1).exceptUserMode();
5652 InitReg(MISCREG_TLBI_RVALE1IS)
5653 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvale1is>)
5654 .writes(1).exceptUserMode();
5655 InitReg(MISCREG_TLBI_RVAALE1IS)
5656 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaale1is>)
5657 .writes(1).exceptUserMode();
5658 InitReg(MISCREG_TLBI_RIPAS2E1IS)
5659 .hypWrite().monWrite();
5660 InitReg(MISCREG_TLBI_RIPAS2LE1IS)
5661 .hypWrite().monWrite();
5662 InitReg(MISCREG_TLBI_RVAE2IS)
5663 .hypWrite().monWrite();
5664 InitReg(MISCREG_TLBI_RVALE2IS)
5665 .hypWrite().monWrite();
5666 InitReg(MISCREG_TLBI_RVAE3IS)
5668 InitReg(MISCREG_TLBI_RVALE3IS)
5670 InitReg(MISCREG_TLBI_RVAE1OS)
5671 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvae1os>)
5672 .writes(1).exceptUserMode();
5673 InitReg(MISCREG_TLBI_RVAAE1OS)
5674 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaae1os>)
5675 .writes(1).exceptUserMode();
5676 InitReg(MISCREG_TLBI_RVALE1OS)
5677 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvale1os>)
5678 .writes(1).exceptUserMode();
5679 InitReg(MISCREG_TLBI_RVAALE1OS)
5680 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaale1os>)
5681 .writes(1).exceptUserMode();
5682 InitReg(MISCREG_TLBI_RIPAS2E1OS)
5683 .hypWrite().monWrite();
5684 InitReg(MISCREG_TLBI_RIPAS2LE1OS)
5685 .hypWrite().monWrite();
5686 InitReg(MISCREG_TLBI_RVAE2OS)
5687 .hypWrite().monWrite();
5688 InitReg(MISCREG_TLBI_RVALE2OS)
5689 .hypWrite().monWrite();
5690 InitReg(MISCREG_TLBI_RVAE3OS)
5692 InitReg(MISCREG_TLBI_RVALE3OS)
5694 InitReg(MISCREG_TLBI_VMALLE1OSNXS)
5695 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivmalle1os>)
5696 .writes(1).exceptUserMode();
5697 InitReg(MISCREG_TLBI_VAE1OSNXS)
5698 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivae1os>)
5699 .writes(1).exceptUserMode();
5700 InitReg(MISCREG_TLBI_ASIDE1OSNXS)
5701 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbiaside1os>)
5702 .writes(1).exceptUserMode();
5703 InitReg(MISCREG_TLBI_VAAE1OSNXS)
5704 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaae1os>)
5705 .writes(1).exceptUserMode();
5706 InitReg(MISCREG_TLBI_VALE1OSNXS)
5707 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivale1os>)
5708 .writes(1).exceptUserMode();
5709 InitReg(MISCREG_TLBI_VAALE1OSNXS)
5710 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaale1os>)
5711 .writes(1).exceptUserMode();
5712 InitReg(MISCREG_TLBI_VMALLE1ISNXS)
5713 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivmalle1is>)
5714 .writes(1).exceptUserMode();
5715 InitReg(MISCREG_TLBI_VAE1ISNXS)
5716 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivae1is>)
5717 .writes(1).exceptUserMode();
5718 InitReg(MISCREG_TLBI_ASIDE1ISNXS)
5719 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbiaside1is>)
5720 .writes(1).exceptUserMode();
5721 InitReg(MISCREG_TLBI_VAAE1ISNXS)
5722 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaae1is>)
5723 .writes(1).exceptUserMode();
5724 InitReg(MISCREG_TLBI_VALE1ISNXS)
5725 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivale1is>)
5726 .writes(1).exceptUserMode();
5727 InitReg(MISCREG_TLBI_VAALE1ISNXS)
5728 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaale1is>)
5729 .writes(1).exceptUserMode();
5730 InitReg(MISCREG_TLBI_VMALLE1NXS)
5731 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5732 .writes(1).exceptUserMode();
5733 InitReg(MISCREG_TLBI_VAE1NXS)
5734 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5735 .writes(1).exceptUserMode();
5736 InitReg(MISCREG_TLBI_ASIDE1NXS)
5737 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5738 .writes(1).exceptUserMode();
5739 InitReg(MISCREG_TLBI_VAAE1NXS)
5740 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5741 .writes(1).exceptUserMode();
5742 InitReg(MISCREG_TLBI_VALE1NXS)
5743 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5744 .writes(1).exceptUserMode();
5745 InitReg(MISCREG_TLBI_VAALE1NXS)
5746 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5747 .writes(1).exceptUserMode();
5748 InitReg(MISCREG_TLBI_IPAS2E1OSNXS)
5749 .hypWrite().monWrite();
5750 InitReg(MISCREG_TLBI_IPAS2LE1OSNXS)
5751 .hypWrite().monWrite();
5752 InitReg(MISCREG_TLBI_ALLE2OSNXS)
5753 .hypWrite().monWrite();
5754 InitReg(MISCREG_TLBI_VAE2OSNXS)
5755 .hypWrite().monWrite();
5756 InitReg(MISCREG_TLBI_ALLE1OSNXS)
5757 .hypWrite().monWrite();
5758 InitReg(MISCREG_TLBI_VALE2OSNXS)
5759 .hypWrite().monWrite();
5760 InitReg(MISCREG_TLBI_VMALLS12E1OSNXS)
5761 .hypWrite().monWrite();
5762 InitReg(MISCREG_TLBI_IPAS2E1ISNXS)
5763 .hypWrite().monWrite();
5764 InitReg(MISCREG_TLBI_IPAS2LE1ISNXS)
5765 .hypWrite().monWrite();
5766 InitReg(MISCREG_TLBI_ALLE2ISNXS)
5767 .hypWrite().monWrite();
5768 InitReg(MISCREG_TLBI_VAE2ISNXS)
5769 .hypWrite().monWrite();
5770 InitReg(MISCREG_TLBI_ALLE1ISNXS)
5771 .hypWrite().monWrite();
5772 InitReg(MISCREG_TLBI_VALE2ISNXS)
5773 .hypWrite().monWrite();
5774 InitReg(MISCREG_TLBI_VMALLS12E1ISNXS)
5775 .hypWrite().monWrite();
5776 InitReg(MISCREG_TLBI_IPAS2E1NXS)
5777 .hypWrite().monWrite();
5778 InitReg(MISCREG_TLBI_IPAS2LE1NXS)
5779 .hypWrite().monWrite();
5780 InitReg(MISCREG_TLBI_ALLE2NXS)
5781 .hypWrite().monWrite();
5782 InitReg(MISCREG_TLBI_VAE2NXS)
5783 .hypWrite().monWrite();
5784 InitReg(MISCREG_TLBI_ALLE1NXS)
5785 .hypWrite().monWrite();
5786 InitReg(MISCREG_TLBI_VALE2NXS)
5787 .hypWrite().monWrite();
5788 InitReg(MISCREG_TLBI_VMALLS12E1NXS)
5789 .hypWrite().monWrite();
5790 InitReg(MISCREG_TLBI_ALLE3OSNXS)
5792 InitReg(MISCREG_TLBI_VAE3OSNXS)
5794 InitReg(MISCREG_TLBI_VALE3OSNXS)
5796 InitReg(MISCREG_TLBI_ALLE3ISNXS)
5798 InitReg(MISCREG_TLBI_VAE3ISNXS)
5800 InitReg(MISCREG_TLBI_VALE3ISNXS)
5802 InitReg(MISCREG_TLBI_ALLE3NXS)
5804 InitReg(MISCREG_TLBI_VAE3NXS)
5806 InitReg(MISCREG_TLBI_VALE3NXS)
5809 InitReg(MISCREG_TLBI_RVAE1NXS)
5810 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5811 .writes(1).exceptUserMode();
5812 InitReg(MISCREG_TLBI_RVAAE1NXS)
5813 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5814 .writes(1).exceptUserMode();
5815 InitReg(MISCREG_TLBI_RVALE1NXS)
5816 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5817 .writes(1).exceptUserMode();
5818 InitReg(MISCREG_TLBI_RVAALE1NXS)
5819 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5820 .writes(1).exceptUserMode();
5821 InitReg(MISCREG_TLBI_RIPAS2E1NXS)
5822 .hypWrite().monWrite();
5823 InitReg(MISCREG_TLBI_RIPAS2LE1NXS)
5824 .hypWrite().monWrite();
5825 InitReg(MISCREG_TLBI_RVAE2NXS)
5826 .hypWrite().monWrite();
5827 InitReg(MISCREG_TLBI_RVALE2NXS)
5828 .hypWrite().monWrite();
5829 InitReg(MISCREG_TLBI_RVAE3NXS)
5831 InitReg(MISCREG_TLBI_RVALE3NXS)
5833 InitReg(MISCREG_TLBI_RVAE1ISNXS)
5834 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvae1is>)
5835 .writes(1).exceptUserMode();
5836 InitReg(MISCREG_TLBI_RVAAE1ISNXS)
5837 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaae1is>)
5838 .writes(1).exceptUserMode();
5839 InitReg(MISCREG_TLBI_RVALE1ISNXS)
5840 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvale1is>)
5841 .writes(1).exceptUserMode();
5842 InitReg(MISCREG_TLBI_RVAALE1ISNXS)
5843 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaale1is>)
5844 .writes(1).exceptUserMode();
5845 InitReg(MISCREG_TLBI_RIPAS2E1ISNXS)
5846 .hypWrite().monWrite();
5847 InitReg(MISCREG_TLBI_RIPAS2LE1ISNXS)
5848 .hypWrite().monWrite();
5849 InitReg(MISCREG_TLBI_RVAE2ISNXS)
5850 .hypWrite().monWrite();
5851 InitReg(MISCREG_TLBI_RVALE2ISNXS)
5852 .hypWrite().monWrite();
5853 InitReg(MISCREG_TLBI_RVAE3ISNXS)
5855 InitReg(MISCREG_TLBI_RVALE3ISNXS)
5857 InitReg(MISCREG_TLBI_RVAE1OSNXS)
5858 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvae1os>)
5859 .writes(1).exceptUserMode();
5860 InitReg(MISCREG_TLBI_RVAAE1OSNXS)
5861 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaae1os>)
5862 .writes(1).exceptUserMode();
5863 InitReg(MISCREG_TLBI_RVALE1OSNXS)
5864 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvale1os>)
5865 .writes(1).exceptUserMode();
5866 InitReg(MISCREG_TLBI_RVAALE1OSNXS)
5867 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaale1os>)
5868 .writes(1).exceptUserMode();
5869 InitReg(MISCREG_TLBI_RIPAS2E1OSNXS)
5870 .hypWrite().monWrite();
5871 InitReg(MISCREG_TLBI_RIPAS2LE1OSNXS)
5872 .hypWrite().monWrite();
5873 InitReg(MISCREG_TLBI_RVAE2OSNXS)
5874 .hypWrite().monWrite();
5875 InitReg(MISCREG_TLBI_RVALE2OSNXS)
5876 .hypWrite().monWrite();
5877 InitReg(MISCREG_TLBI_RVAE3OSNXS)
5879 InitReg(MISCREG_TLBI_RVALE3OSNXS)
5882 .allPrivileges().exceptUserMode()
5885 .allPrivileges().exceptUserMode()
5923 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5929 .allPrivileges().exceptUserMode()
5930 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::mairEL1>)
5931 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::mairEL1>)
5938 .allPrivileges().exceptUserMode()
5939 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::amairEL1>)
5940 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::amairEL1>)
5957 .allPrivileges().exceptUserMode();
5959 .allPrivileges().exceptUserMode();
5961 .allPrivileges().exceptUserMode()
5962 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::vbarEL1>)
5963 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::vbarEL1>)
5974 .allPrivileges().exceptUserMode().writes(0);
5992 .allPrivileges().exceptUserMode()
5993 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::contextidrEL1>)
5994 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::contextidrEL1>)
6001 .allPrivileges().exceptUserMode()
6002 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL1>)
6003 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL1>)
6007 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrEL0>)
6008 .faultWrite(
EL0, faultFgtEL0<false, &HFGTR::tpidrEL0>)
6009 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL0>)
6010 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL0>)
6013 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
6014 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrroEL0>)
6015 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrroEL0>)
6016 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrroEL0>)
6026 .faultRead(
EL0, faultGenericTimerEL0)
6028 .privSecureWrite(aarch32EL3)
6032 .faultRead(
EL0, faultCntpctEL0)
6033 .faultRead(
EL1, faultCntpctEL1)
6038 .faultRead(
EL0, faultCntvctEL0)
6039 .faultRead(
EL1, faultCntvctEL1)
6044 .fault(
EL0, faultCntpCtlEL0)
6045 .fault(
EL1, faultCntpCtlEL1)
6046 .res0(0xfffffffffffffff8)
6050 .fault(
EL0, faultCntpCtlEL0)
6051 .fault(
EL1, faultCntpCtlEL1)
6055 .fault(
EL0, faultCntpCtlEL0)
6056 .fault(
EL1, faultCntpCtlEL1)
6057 .res0(0xffffffff00000000)
6061 .fault(
EL0, faultCntvCtlEL0)
6062 .fault(
EL1, faultCntvCtlEL1)
6063 .res0(0xfffffffffffffff8)
6067 .fault(
EL0, faultCntvCtlEL0)
6068 .fault(
EL1, faultCntvCtlEL1)
6072 .fault(
EL0, faultCntvCtlEL0)
6073 .fault(
EL1, faultCntvCtlEL1)
6074 .res0(0xffffffff00000000)
6079 .res0(0xfffffffffffffff8)
6088 .res0(0xffffffff00000000)
6093 .res0(0xfffffffffffffff8)
6102 .res0(0xffffffff00000000)
6107 .res0(0xfffffffffffdfc00)
6112 .res0(0xfffffffffffdfc00)
6117 .fault(
EL1, faultCntpsCtlEL1)
6118 .res0(0xfffffffffffffff8);
6122 .fault(
EL1, faultCntpsCtlEL1);
6126 .fault(
EL1, faultCntpsCtlEL1)
6127 .res0(0xffffffff00000000);
6131 .res0(0xfffffffffffc0000)
6136 .res0(0xfffffffffffffff8)
6145 .res0(0xffffffff00000000)
6148 .mon(sel2_implemented)
6149 .hypSecure(sel2_implemented)
6150 .res0(0xfffffffffffffff8);
6152 .mon(sel2_implemented)
6153 .hypSecure(sel2_implemented);
6155 .mon(sel2_implemented)
6156 .hypSecure(sel2_implemented)
6157 .res0(0xffffffff00000000);
6159 .mon(vhe_implemented)
6161 .res0(0xfffffffffffffff8);
6163 .mon(vhe_implemented)
6164 .hyp(vhe_implemented);
6166 .mon(vhe_implemented)
6167 .hyp(vhe_implemented)
6168 .res0(0xffffffff00000000);
6170 .mon(vhe_implemented && sel2_implemented)
6171 .hypSecure(vhe_implemented && sel2_implemented)
6172 .res0(0xfffffffffffffff8);
6174 .mon(vhe_implemented && sel2_implemented)
6175 .hypSecure(vhe_implemented && sel2_implemented);
6177 .mon(vhe_implemented && sel2_implemented)
6178 .hypSecure(vhe_implemented && sel2_implemented)
6179 .res0(0xffffffff00000000);
6223 .allPrivileges().exceptUserMode();
6225 .allPrivileges().exceptUserMode();
6227 .allPrivileges().exceptUserMode();
6229 .allPrivileges().exceptUserMode();
6231 .allPrivileges().exceptUserMode();
6233 .allPrivileges().exceptUserMode();
6235 .allPrivileges().exceptUserMode();
6237 .allPrivileges().exceptUserMode();
6239 .allPrivileges().exceptUserMode();
6241 .allPrivileges().exceptUserMode();
6243 .allPrivileges().exceptUserMode();
6245 .allPrivileges().exceptUserMode();
6247 .allPrivileges().exceptUserMode();
6250 .fault(faultUnimplemented);
6252 .allPrivileges().exceptUserMode().writes(0);
6259 .allPrivileges().exceptUserMode()
6262 .allPrivileges().exceptUserMode().writes(0)
6265 .allPrivileges().exceptUserMode().reads(0)
6268 .allPrivileges().exceptUserMode().writes(0)
6272 .allPrivileges().exceptUserMode()
6275 .allPrivileges().exceptUserMode()
6278 .allPrivileges().exceptUserMode()
6281 .allPrivileges().exceptUserMode()
6284 .allPrivileges().exceptUserMode()
6291 .allPrivileges().exceptUserMode()
6295 .allPrivileges().exceptUserMode()
6302 .allPrivileges().exceptUserMode()
6306 .allPrivileges().exceptUserMode()
6313 .allPrivileges().exceptUserMode()
6317 .allPrivileges().exceptUserMode()
6324 .allPrivileges().exceptUserMode()
6328 .allPrivileges().exceptUserMode()
6332 .allPrivileges().exceptUserMode().reads(0)
6335 .allPrivileges().exceptUserMode().writes(0)
6338 .allPrivileges().exceptUserMode().reads(0)
6339 .faultWrite(
EL1, faultIccSgiEL1)
6340 .faultWrite(
EL2, faultIccSgiEL2)
6343 .allPrivileges().exceptUserMode().reads(0)
6344 .faultWrite(
EL1, faultIccSgiEL1)
6345 .faultWrite(
EL2, faultIccSgiEL2)
6348 .allPrivileges().exceptUserMode().reads(0)
6349 .faultWrite(
EL1, faultIccSgiEL1)
6350 .faultWrite(
EL2, faultIccSgiEL2)
6353 .allPrivileges().exceptUserMode().writes(0)
6357 .allPrivileges().exceptUserMode().reads(0)
6360 .allPrivileges().exceptUserMode().writes(0)
6368 .allPrivileges().exceptUserMode()
6373 .secure().exceptUserMode()
6381 .allPrivileges().exceptUserMode()
6386 .secure().exceptUserMode()
6394 .allPrivileges().exceptUserMode()
6399 .secure().exceptUserMode()
6403 .allPrivileges().exceptUserMode()
6404 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6405 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6409 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6410 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6415 .allPrivileges().exceptUserMode()
6420 .secure().exceptUserMode()
6463 .hyp().mon().writes(0)
6466 .hyp().mon().writes(0)
6469 .hyp().mon().writes(0)
6472 .hyp().mon().writes(0)
6528 .allPrivileges().exceptUserMode();
6530 .allPrivileges().exceptUserMode();
6532 .allPrivileges().exceptUserMode();
6534 .allPrivileges().exceptUserMode();
6536 .allPrivileges().exceptUserMode();
6538 .allPrivileges().exceptUserMode();
6540 .allPrivileges().exceptUserMode();
6542 .allPrivileges().exceptUserMode();
6544 .allPrivileges().exceptUserMode();
6546 .allPrivileges().exceptUserMode();
6548 .allPrivileges().exceptUserMode();
6550 .allPrivileges().exceptUserMode();
6552 .allPrivileges().exceptUserMode();
6554 .allPrivileges().exceptUserMode();
6556 .allPrivileges().exceptUserMode();
6558 .allPrivileges().exceptUserMode();
6560 .allPrivileges().exceptUserMode().reads(0);
6562 .allPrivileges().exceptUserMode();
6564 .allPrivileges().exceptUserMode();
6566 .allPrivileges().exceptUserMode();
6568 .allPrivileges().exceptUserMode();
6570 .allPrivileges().exceptUserMode();
6572 .allPrivileges().exceptUserMode();
6574 .allPrivileges().exceptUserMode();
6576 .allPrivileges().exceptUserMode().reads(0);
6578 .allPrivileges().exceptUserMode().reads(0);
6580 .allPrivileges().exceptUserMode().reads(0);
6582 .allPrivileges().exceptUserMode().writes(0);
6584 .allPrivileges().exceptUserMode().writes(0);
6588 .allPrivileges().exceptUserMode().writes(0);
6590 .allPrivileges().exceptUserMode().writes(0);
6592 .allPrivileges().exceptUserMode();
6594 .allPrivileges().exceptUserMode();
6596 .allPrivileges().exceptUserMode();
6598 .allPrivileges().exceptUserMode();
6606 .allPrivileges().exceptUserMode();
6608 .allPrivileges().exceptUserMode().writes(0);
6610 .allPrivileges().exceptUserMode().reads(0);
6612 .allPrivileges().exceptUserMode().reads(0);
6614 .allPrivileges().exceptUserMode();
6616 .allPrivileges().exceptUserMode();
6618 .allPrivileges().exceptUserMode();
6639 .hyp().mon().writes(0);
6641 .hyp().mon().writes(0);
6643 .hyp().mon().writes(0);
6645 .hyp().mon().writes(0);
6716 AA64ZFR0 zfr0_el1 = 0;
6717 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
6718 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
6719 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
6722 .faultRead(
EL0, faultIdst)
6723 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6724 .allPrivileges().exceptUserMode().writes(0);
6727 .fault(
EL3, faultZcrEL3)
6731 .fault(
EL2, faultZcrEL2)
6732 .fault(
EL3, faultZcrEL3)
6735 .fault(
EL2, faultVheEL2<faultZcrEL2>)
6740 .fault(
EL1, faultZcrEL1)
6741 .fault(
EL2, faultZcrEL2)
6742 .fault(
EL3, faultZcrEL3)
6743 .allPrivileges().exceptUserMode();
6748 AA64SMFR0 smfr0_el1 = 0;
6749 smfr0_el1.f32f32 = 0x1;
6753 smfr0_el1.b16f32 = 0x1;
6754 smfr0_el1.f16f32 = 0x1;
6755 smfr0_el1.i8i32 = 0xF;
6756 smfr0_el1.f64f64 = 0x1;
6757 smfr0_el1.i16i64 = 0xF;
6758 smfr0_el1.smEver = 0;
6759 smfr0_el1.fa64 = 0x1;
6762 .faultRead(
EL0, faultIdst)
6763 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6764 .allPrivileges().writes(0);
6772 .fault(
EL0, faultSmenEL0)
6773 .fault(
EL1, faultSmenEL1)
6774 .fault(
EL2, faultTsmSmen)
6775 .fault(
EL3, faultEsm)
6779 SMIDR smidr_el1 = 0;
6780 smidr_el1.affinity = 0;
6782 smidr_el1.implementer = 0x41;
6785 .faultRead(
EL0, faultIdst)
6786 .faultRead(
EL1, faultHcrEL1<&HCR::tid1>)
6787 .allPrivileges().writes(0);
6790 .fault(
EL1, faultEsm)
6791 .fault(
EL2, faultEsm)
6792 .fault(
EL3, faultEsm)
6793 .allPrivileges().exceptUserMode();
6795 .fault(
EL2, faultEsm)
6796 .fault(
EL3, faultEsm)
6807 smcr_el3.len = smeVL - 1;
6810 .fault(
EL3, faultEsm)
6821 smcr_el2.len = smeVL - 1;
6824 .fault(
EL2, faultTsmSmen)
6825 .fault(
EL3, faultEsm)
6828 .allPrivileges().exceptUserMode();
6838 smcr_el1.len = smeVL - 1;
6841 .fault(
EL1, faultSmenEL1)
6842 .fault(
EL2, faultTsmSmen)
6843 .fault(
EL3, faultEsm)
6844 .allPrivileges().exceptUserMode();
6849 .faultRead(
EL0, faultRng)
6850 .faultRead(
EL1, faultRng)
6851 .faultRead(
EL2, faultRng)
6852 .faultRead(
EL3, faultRng)
6854 .allPrivileges().writes(0);
6856 .faultRead(
EL0, faultRng)
6857 .faultRead(
EL1, faultRng)
6858 .faultRead(
EL2, faultRng)
6859 .faultRead(
EL3, faultRng)
6861 .allPrivileges().writes(0);
6865 .fault(
EL2, faultFgtCtrlRegs)
6866 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6868 .fault(
EL2, faultFgtCtrlRegs)
6869 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6871 .fault(
EL2, faultFgtCtrlRegs)
6872 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6874 .fault(
EL2, faultFgtCtrlRegs)
6875 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6877 .fault(
EL2, faultFgtCtrlRegs)
6878 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6880 .fault(
EL2, faultFgtCtrlRegs)
6881 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6887 .allPrivileges().exceptUserMode().writes(0);
6890 .fault(
EL1, faultImpdefUnimplEL1)
6891 .fault(
EL2, faultUnimplemented)
6892 .fault(
EL3, faultUnimplemented)
6893 .warnNotFail(impdefAsNop);
6898 .fault(faultUnimplemented);
6901 .fault(faultUnimplemented);
6904 .fault(faultUnimplemented);
6907 .fault(faultUnimplemented);
6910 .fault(faultUnimplemented);
6913 .fault(faultUnimplemented);
6916 .fault(faultUnimplemented);
6919 .fault(faultUnimplemented);
6922 .fault(faultUnimplemented);
6925 .fault(faultUnimplemented);
6928 .fault(faultUnimplemented);
6932 .reset(
p.mpamidr_el1)
6934 .faultRead(
EL1, faultMpamIdrEL1)
6935 .faultRead(
EL2, faultMpamEL2)
6936 .allPrivileges().exceptUserMode().writes(0);
6939 .fault(
EL1, faultMpam0EL1)
6940 .fault(
EL2, faultMpamEL2)
6941 .priv().hyp().mon();
6944 .fault(
EL1, faultMpam1EL1)
6945 .fault(
EL2, faultMpamEL2)
6946 .priv().hyp().mon();
6949 .fault(
EL2, faultMpam12EL2)
6954 .fault(
EL2, faultMpamEL2)
6958 .fault(
EL2, faultMpamEL2)
6961 .fault(
EL2, faultMpamEL2)
6964 .fault(
EL2, faultMpamEL2)
6967 .fault(
EL2, faultMpamEL2)
6970 .fault(
EL2, faultMpamEL2)
6973 .fault(
EL2, faultMpamEL2)
6976 .fault(
EL2, faultMpamEL2)
6979 .fault(
EL2, faultMpamEL2)
6982 .fault(
EL2, faultMpamEL2)
6986 .fault(
EL2, faultMpamEL2)
6993 .fault(
EL1, faultMpamsmEL1)
6994 .fault(
EL2, faultMpamEL2)
6995 .allPrivileges().exceptUserMode();
6999 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPire0EL1>)
7000 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPire0EL1>)
7001 .fault(
EL2, faultPieEL2)
7004 .fault(
EL2, faultPieEL2)
7007 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPirEL1>)
7008 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPirEL1>)
7009 .fault(
EL2, faultPieEL2)
7012 .fault(
EL2, faultVheEL2<faultPieEL2>)
7016 .fault(
EL2, faultVheEL2<faultPieEL2>)
7020 .fault(
EL2, faultPieEL2)
7036 assert(idxToMiscRegNum.empty());
7037 for (
const auto& [key,
val] : miscRegNumToIdx) {
7038 idxToMiscRegNum.insert({
val, key});