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;
3580 isar6.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
3581 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
3612 .
res1(0x00400800 | (SPAN ? 0 : 0x800000)
3613 | (LSMAOE ? 0 : 0x10)
3614 | (nTLSMD ? 0 : 0x8));
3616 auto sctlr_reset = [
aarch64=highestELIs64] ()
3662 .
reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
3673 .
res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3674 | (IESB ? 0 : 0x200000)
3675 | (EnDA ? 0 : 0x8000000)
3676 | (EnIB ? 0 : 0x40000000)
3677 | (EnIA ? 0 : 0x80000000))
3683 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3684 0x90000000 :
mask(31, 0));
3687 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3688 0xffa9ff8c :
mask(31, 0));
4092 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4102 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4327 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::mdscrEL1>)
4328 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::mdscrEL1>)
4336 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::oseccrEL1>)
4337 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::oseccrEL1>)
4342 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4343 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4348 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4349 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4354 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4355 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4360 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4361 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4366 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4367 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4372 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4373 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4378 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4379 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4384 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4385 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4390 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4391 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4396 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4397 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4402 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4403 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4408 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4409 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4414 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4415 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4420 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4421 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4426 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4427 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4432 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4433 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4438 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4439 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4444 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4445 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4450 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4451 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4456 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4457 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4462 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4463 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4468 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4469 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4474 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4475 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4480 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4481 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4486 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4487 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4492 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4493 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4498 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4499 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4504 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4505 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4510 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4511 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4516 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4517 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4522 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4523 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4528 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4529 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4534 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4535 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4540 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4541 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4546 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4547 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4552 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4553 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4558 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4559 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4564 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4565 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4570 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4571 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4576 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4577 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4582 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4583 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4588 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4589 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4594 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4595 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4600 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4601 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4606 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4607 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4612 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4613 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4618 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4619 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4624 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4625 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4630 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4631 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4636 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4637 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4642 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4643 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4648 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4649 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4654 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4655 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4660 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4661 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4666 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4667 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4672 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4673 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4678 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4679 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4684 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4685 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4690 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4691 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4696 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4697 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4702 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4703 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4708 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4709 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4714 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4715 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4720 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4721 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4752 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::oslsrEL1>)
4757 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::osdlrEL1>)
4763 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::dbgprcrEL1>)
4764 .
faultWrite(
EL1, faultDebugOsEL1<false, &HDFGTR::dbgprcrEL1>)
4769 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4770 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4775 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4776 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4781 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgauthstatusEL1>)
4789 .allPrivileges().exceptUserMode().writes(0)
4790 .faultRead(
EL0, faultIdst)
4791 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::midrEL1>)
4794 .allPrivileges().exceptUserMode().writes(0)
4795 .faultRead(
EL0, faultIdst)
4796 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::mpidrEL1>)
4799 .faultRead(
EL0, faultIdst)
4800 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::revidrEL1>)
4801 .allPrivileges().exceptUserMode().writes(0);
4803 .allPrivileges().exceptUserMode().writes(0)
4804 .faultRead(
EL0, faultIdst)
4805 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4808 .allPrivileges().exceptUserMode().writes(0)
4809 .faultRead(
EL0, faultIdst)
4810 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4813 .allPrivileges().exceptUserMode().writes(0)
4814 .faultRead(
EL0, faultIdst)
4815 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4818 .allPrivileges().exceptUserMode().writes(0)
4819 .faultRead(
EL0, faultIdst)
4820 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4823 .allPrivileges().exceptUserMode().writes(0)
4824 .faultRead(
EL0, faultIdst)
4825 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4828 .allPrivileges().exceptUserMode().writes(0)
4829 .faultRead(
EL0, faultIdst)
4830 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4833 .allPrivileges().exceptUserMode().writes(0)
4834 .faultRead(
EL0, faultIdst)
4835 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4838 .allPrivileges().exceptUserMode().writes(0)
4839 .faultRead(
EL0, faultIdst)
4840 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4843 .allPrivileges().exceptUserMode().writes(0)
4844 .faultRead(
EL0, faultIdst)
4845 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4848 .allPrivileges().exceptUserMode().writes(0)
4849 .faultRead(
EL0, faultIdst)
4850 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4853 .allPrivileges().exceptUserMode().writes(0)
4854 .faultRead(
EL0, faultIdst)
4855 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4858 .allPrivileges().exceptUserMode().writes(0)
4859 .faultRead(
EL0, faultIdst)
4860 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4863 .allPrivileges().exceptUserMode().writes(0)
4864 .faultRead(
EL0, faultIdst)
4865 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4868 .allPrivileges().exceptUserMode().writes(0)
4869 .faultRead(
EL0, faultIdst)
4870 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4873 .allPrivileges().exceptUserMode().writes(0)
4874 .faultRead(
EL0, faultIdst)
4875 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4878 .allPrivileges().exceptUserMode().writes(0)
4879 .faultRead(
EL0, faultIdst)
4880 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4883 .faultRead(
EL0, faultIdst)
4884 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4885 .allPrivileges().exceptUserMode().writes(0)
4888 .faultRead(
EL0, faultIdst)
4889 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4890 .allPrivileges().exceptUserMode().writes(0)
4893 .faultRead(
EL0, faultIdst)
4894 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4895 .allPrivileges().exceptUserMode().writes(0);
4897 .reset([
this,release=release,tc=tc](){
4898 AA64PFR0 pfr0_el1 = 0;
4901 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION)
4903 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4904 pfr0_el1.fp = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4905 pfr0_el1.advsimd = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4906 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4907 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4910 pfr0_el1.mpam = 0x0;
4911 pfr0_el1.gic =
FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4915 .faultRead(
EL0, faultIdst)
4916 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4917 .allPrivileges().writes(0);
4919 .reset([release=release](){
4920 AA64PFR1 pfr1_el1 = 0;
4921 pfr1_el1.sme = release->has(ArmExtension::FEAT_SME) ? 0x1 : 0x0;
4922 pfr1_el1.mpamFrac = release->has(ArmExtension::FEAT_MPAM) ?
4927 .faultRead(
EL0, faultIdst)
4928 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4929 .allPrivileges().writes(0);
4932 AA64DFR0 dfr0_el1 =
p.id_aa64dfr0_el1;
4933 dfr0_el1.pmuver =
p.pmu ? 1 : 0;
4936 .faultRead(
EL0, faultIdst)
4937 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4938 .allPrivileges().writes(0);
4940 .reset(
p.id_aa64dfr1_el1)
4941 .faultRead(
EL0, faultIdst)
4942 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4943 .allPrivileges().writes(0);
4945 .reset(
p.id_aa64afr0_el1)
4946 .faultRead(
EL0, faultIdst)
4947 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4948 .allPrivileges().writes(0);
4950 .reset(
p.id_aa64afr1_el1)
4951 .faultRead(
EL0, faultIdst)
4952 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4953 .allPrivileges().writes(0);
4955 .reset([
p,release=release](){
4956 AA64ISAR0 isar0_el1 =
p.id_aa64isar0_el1;
4957 isar0_el1.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
4958 isar0_el1.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
4959 isar0_el1.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
4960 isar0_el1.aes = release->has(ArmExtension::FEAT_PMULL) ?
4961 0x2 : release->has(ArmExtension::FEAT_AES) ?
4963 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4964 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4965 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4966 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4967 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIRANGE) ?
4968 0x2 : release->has(ArmExtension::FEAT_TLBIOS) ?
4970 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4971 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4973 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4974 isar0_el1.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
4975 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
4978 .faultRead(
EL0, faultIdst)
4979 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4980 .allPrivileges().writes(0);
4982 .reset([
p,release=release](){
4983 AA64ISAR1 isar1_el1 =
p.id_aa64isar1_el1;
4984 isar1_el1.xs = release->has(ArmExtension::FEAT_XS) ? 0x1 : 0x0;
4985 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
4986 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4987 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
4988 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
4989 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
4991 release->has(ArmExtension::FEAT_FRINTTS) ? 0x1 : 0x0;
4994 .faultRead(
EL0, faultIdst)
4995 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4996 .allPrivileges().writes(0);
4999 AA64MMFR0 mmfr0_el1 =
p.id_aa64mmfr0_el1;
5000 mmfr0_el1.asidbits =
asidbits ? 0x2 : 0x0;
5004 .faultRead(
EL0, faultIdst)
5005 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5006 .allPrivileges().writes(0);
5008 .reset([
p,release=release](){
5009 AA64MMFR1 mmfr1_el1 =
p.id_aa64mmfr1_el1;
5010 mmfr1_el1.vmidbits =
5011 release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
5012 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
5013 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
5014 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
5015 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
5018 .faultRead(
EL0, faultIdst)
5019 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5020 .allPrivileges().writes(0);
5022 .reset([
p,release=release](){
5023 AA64MMFR2 mmfr2_el1 =
p.id_aa64mmfr2_el1;
5024 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
5025 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
5026 mmfr2_el1.st = release->has(ArmExtension::FEAT_TTST) ? 0x1 : 0x0;
5027 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
5028 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
5031 .faultRead(
EL0, faultIdst)
5032 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5033 .allPrivileges().writes(0);
5035 .reset([
p,release=release](){
5036 AA64MMFR3 mmfr3_el1 = 0;
5038 release->has(ArmExtension::FEAT_SCTLR2) ? 0x1 : 0x0;
5039 mmfr3_el1.tcrx = release->has(ArmExtension::FEAT_TCR2) ? 0x1 : 0x0;
5040 mmfr3_el1.s1pie = release->has(ArmExtension::FEAT_S1PIE) ? 0x1 : 0x0;
5043 .faultRead(
EL0, faultIdst)
5044 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5045 .allPrivileges().writes(0);
5048 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5049 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5050 .fault(
EL2, faultPauthEL2)
5051 .allPrivileges().exceptUserMode();
5053 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5054 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5055 .fault(
EL2, faultPauthEL2)
5056 .allPrivileges().exceptUserMode();
5058 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5059 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5060 .fault(
EL2, faultPauthEL2)
5061 .allPrivileges().exceptUserMode();
5063 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5064 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5065 .fault(
EL2, faultPauthEL2)
5066 .allPrivileges().exceptUserMode();
5068 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5069 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5070 .fault(
EL2, faultPauthEL2)
5071 .allPrivileges().exceptUserMode();
5073 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5074 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5075 .fault(
EL2, faultPauthEL2)
5076 .allPrivileges().exceptUserMode();
5078 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5079 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5080 .fault(
EL2, faultPauthEL2)
5081 .allPrivileges().exceptUserMode();
5083 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5084 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5085 .fault(
EL2, faultPauthEL2)
5086 .allPrivileges().exceptUserMode();
5088 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5089 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5090 .fault(
EL2, faultPauthEL2)
5091 .allPrivileges().exceptUserMode();
5093 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5094 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5095 .fault(
EL2, faultPauthEL2)
5096 .allPrivileges().exceptUserMode();
5099 .faultRead(
EL0, faultIdst)
5100 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::ccsidrEL1>)
5101 .allPrivileges().writes(0);
5103 .faultRead(
EL0, faultIdst)
5104 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::clidrEL1>)
5105 .allPrivileges().writes(0);
5107 .faultRead(
EL0, faultIdst)
5108 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::aidrEL1>)
5109 .allPrivileges().writes(0);
5111 .allPrivileges().exceptUserMode()
5112 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::csselrEL1>)
5113 .faultWrite(
EL1, faultCacheEL1<false, &HFGTR::csselrEL1>)
5116 .faultRead(
EL0, faultCtrEL0)
5117 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid2, &HFGTR::ctrEL0>)
5122 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::dczidEL0>)
5123 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::dczidEL0>)
5134 .allPrivileges().exceptUserMode()
5135 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::sctlrEL1>)
5136 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::sctlrEL1>)
5137 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5138 | (IESB ? 0 : 0x200000)
5139 | (EnDA ? 0 : 0x8000000)
5140 | (EnIB ? 0 : 0x40000000)
5141 | (EnIA ? 0 : 0x80000000))
5142 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5143 | (nTLSMD ? 0 : 0x8000000)
5144 | (LSMAOE ? 0 : 0x10000000))
5149 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5150 | (IESB ? 0 : 0x200000)
5151 | (EnDA ? 0 : 0x8000000)
5152 | (EnIB ? 0 : 0x40000000)
5153 | (EnIA ? 0 : 0x80000000))
5154 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5155 | (nTLSMD ? 0 : 0x8000000)
5156 | (LSMAOE ? 0 : 0x10000000))
5159 .allPrivileges().exceptUserMode()
5160 .faultRead(
EL1, faultSctlr2EL1<true, &HCR::trvm>)
5161 .faultWrite(
EL1, faultSctlr2EL1<false, &HCR::tvm>)
5162 .fault(
EL2,faultSctlr2EL2);
5164 .fault(
EL2, faultVheEL2<faultSctlr2EL2>)
5168 .allPrivileges().exceptUserMode()
5169 .fault(
EL1, faultHcrEL1<&HCR::tacr>)
5172 .allPrivileges().exceptUserMode()
5173 .faultRead(
EL1, faultCpacrEL1<true, &HFGTR::cpacrEL1>)
5174 .faultWrite(
EL1, faultCpacrEL1<false, &HFGTR::cpacrEL1>)
5175 .fault(
EL2, faultCpacrEL2)
5178 .fault(
EL2, faultVheEL2<faultCpacrEL2>)
5183 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5184 | (IESB ? 0 : 0x200000)
5185 | (EnDA ? 0 : 0x8000000)
5186 | (EnIB ? 0 : 0x40000000)
5187 | (EnIA ? 0 : 0x80000000))
5192 .fault(
EL2, faultSctlr2EL2);
5201 .fault(
EL2, faultHcrxEL2);
5204 .fault(
EL2, faultDebugEL2)
5208 .fault(
EL2, faultCpacrEL2)
5219 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5220 | (IESB ? 0 : 0x200000)
5221 | (EnDA ? 0 : 0x8000000)
5222 | (EnIB ? 0 : 0x40000000)
5223 | (EnIA ? 0 : 0x80000000))
5241 .allPrivileges().exceptUserMode()
5242 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr0EL1>)
5243 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr0EL1>)
5250 .allPrivileges().exceptUserMode()
5251 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr1EL1>)
5252 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr1EL1>)
5259 .allPrivileges().exceptUserMode()
5260 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::tcrEL1>)
5261 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::tcrEL1>)
5268 .allPrivileges().exceptUserMode()
5269 .faultRead(
EL1, faultTcr2EL1<true, &HCR::trvm>)
5270 .faultWrite(
EL1, faultTcr2EL1<false, &HCR::tvm>)
5271 .fault(
EL2, faultTcr2EL2);
5273 .fault(
EL2, faultVheEL2<faultTcr2EL2>)
5274 .fault(
EL3, faultTcr2VheEL3)
5286 .fault(
EL2, faultTcr2EL2);
5305 .allPrivileges().exceptUserMode()
5312 .allPrivileges().exceptUserMode();
5318 .allPrivileges().exceptUserMode()
5319 .fault(
EL1, faultSpEL0)
5320 .fault(
EL2, faultSpEL0)
5321 .fault(
EL3, faultSpEL0);
5323 .allPrivileges().exceptUserMode();
5325 .allPrivileges().exceptUserMode().writes(0);
5327 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
5330 .allPrivileges().exceptUserMode();
5335 .fault(
EL0, faultDaif);
5338 .fault(
EL0, faultFpcrEL0)
5339 .fault(
EL1, faultFpcrEL1)
5340 .fault(
EL2, faultFpcrEL2)
5341 .fault(
EL3, faultFpcrEL3);
5344 .fault(
EL0, faultFpcrEL0)
5345 .fault(
EL1, faultFpcrEL1)
5346 .fault(
EL2, faultFpcrEL2)
5347 .fault(
EL3, faultFpcrEL3);
5375 .allPrivileges().exceptUserMode()
5376 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr0EL1>)
5377 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr0EL1>)
5384 .allPrivileges().exceptUserMode()
5385 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr1EL1>)
5386 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr1EL1>)
5393 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::esrEL1>)
5394 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::esrEL1>)
5395 .allPrivileges().exceptUserMode();
5413 .fault(
EL2, faultFpcrEL2)
5414 .fault(
EL3, faultFpcrEL3)
5423 .allPrivileges().exceptUserMode()
5424 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::farEL1>)
5425 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::farEL1>)
5441 .faultWrite(
EL1, faultPouIsEL1<&HFGITR::icialluis>)
5442 .writes(1).exceptUserMode();
5444 .allPrivileges().exceptUserMode()
5448 .faultWrite(
EL1, faultPouEL1<&HFGITR::iciallu>)
5449 .writes(1).exceptUserMode();
5451 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dcivac>)
5452 .writes(1).exceptUserMode();
5455 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dcisw>)
5456 .writes(1).exceptUserMode();
5458 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1r>)
5459 .writes(1).exceptUserMode();
5461 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1w>)
5462 .writes(1).exceptUserMode();
5464 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0r>)
5465 .writes(1).exceptUserMode();
5467 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0w>)
5468 .writes(1).exceptUserMode();
5471 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccsw>)
5472 .writes(1).exceptUserMode();
5475 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccisw>)
5476 .writes(1).exceptUserMode();
5479 .faultWrite(
EL0, faultDczvaEL0)
5480 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tdz, &HFGITR::dczva>);
5482 .faultWrite(
EL0, faultPouEL0)
5483 .faultWrite(
EL1, faultPouEL1<&HFGITR::icivau>)
5486 .faultWrite(
EL0, faultCvacEL0)
5487 .faultWrite(
EL1, faultHcrEL1<&HCR::tpc>)
5490 .faultWrite(
EL0, faultPouEL0)
5491 .faultWrite(
EL1, faultPouEL1<&HFGITR::dccvau>)
5494 .faultWrite(
EL0, faultCvacEL0)
5495 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dccivac>)
5498 .monWrite().hypWrite();
5500 .monWrite().hypWrite();
5502 .hypWrite().monSecureWrite().monNonSecureWrite();
5504 .hypWrite().monSecureWrite().monNonSecureWrite();
5506 .hypWrite().monSecureWrite().monNonSecureWrite();
5508 .hypWrite().monSecureWrite().monNonSecureWrite();
5510 .monSecureWrite().monNonSecureWrite();
5512 .monSecureWrite().monNonSecureWrite();
5513 InitReg(MISCREG_TLBI_VMALLE1OS)
5514 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivmalle1os>)
5515 .writes(1).exceptUserMode();
5516 InitReg(MISCREG_TLBI_VAE1OS)
5517 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivae1os>)
5518 .writes(1).exceptUserMode();
5519 InitReg(MISCREG_TLBI_ASIDE1OS)
5520 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbiaside1os>)
5521 .writes(1).exceptUserMode();
5522 InitReg(MISCREG_TLBI_VAAE1OS)
5523 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaae1os>)
5524 .writes(1).exceptUserMode();
5525 InitReg(MISCREG_TLBI_VALE1OS)
5526 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivale1os>)
5527 .writes(1).exceptUserMode();
5528 InitReg(MISCREG_TLBI_VAALE1OS)
5529 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaale1os>)
5530 .writes(1).exceptUserMode();
5531 InitReg(MISCREG_TLBI_VMALLE1IS)
5532 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivmalle1is>)
5533 .writes(1).exceptUserMode();
5534 InitReg(MISCREG_TLBI_VAE1IS)
5535 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivae1is>)
5536 .writes(1).exceptUserMode();
5537 InitReg(MISCREG_TLBI_ASIDE1IS)
5538 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbiaside1is>)
5539 .writes(1).exceptUserMode();
5540 InitReg(MISCREG_TLBI_VAAE1IS)
5541 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaae1is>)
5542 .writes(1).exceptUserMode();
5543 InitReg(MISCREG_TLBI_VALE1IS)
5544 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivale1is>)
5545 .writes(1).exceptUserMode();
5546 InitReg(MISCREG_TLBI_VAALE1IS)
5547 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaale1is>)
5548 .writes(1).exceptUserMode();
5549 InitReg(MISCREG_TLBI_VMALLE1)
5550 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5551 .writes(1).exceptUserMode();
5552 InitReg(MISCREG_TLBI_VAE1)
5553 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5554 .writes(1).exceptUserMode();
5555 InitReg(MISCREG_TLBI_ASIDE1)
5556 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5557 .writes(1).exceptUserMode();
5558 InitReg(MISCREG_TLBI_VAAE1)
5559 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5560 .writes(1).exceptUserMode();
5561 InitReg(MISCREG_TLBI_VALE1)
5562 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5563 .writes(1).exceptUserMode();
5564 InitReg(MISCREG_TLBI_VAALE1)
5565 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5566 .writes(1).exceptUserMode();
5567 InitReg(MISCREG_TLBI_IPAS2E1OS)
5568 .monWrite().hypWrite();
5569 InitReg(MISCREG_TLBI_IPAS2LE1OS)
5570 .monWrite().hypWrite();
5571 InitReg(MISCREG_TLBI_ALLE2OS)
5572 .monWrite().hypWrite();
5573 InitReg(MISCREG_TLBI_VAE2OS)
5574 .monWrite().hypWrite();
5575 InitReg(MISCREG_TLBI_ALLE1OS)
5576 .monWrite().hypWrite();
5577 InitReg(MISCREG_TLBI_VALE2OS)
5578 .monWrite().hypWrite();
5579 InitReg(MISCREG_TLBI_VMALLS12E1OS)
5580 .monWrite().hypWrite();
5581 InitReg(MISCREG_TLBI_IPAS2E1IS)
5582 .monWrite().hypWrite();
5583 InitReg(MISCREG_TLBI_IPAS2LE1IS)
5584 .monWrite().hypWrite();
5585 InitReg(MISCREG_TLBI_ALLE2IS)
5586 .monWrite().hypWrite();
5587 InitReg(MISCREG_TLBI_VAE2IS)
5588 .monWrite().hypWrite();
5589 InitReg(MISCREG_TLBI_ALLE1IS)
5590 .monWrite().hypWrite();
5591 InitReg(MISCREG_TLBI_VALE2IS)
5592 .monWrite().hypWrite();
5593 InitReg(MISCREG_TLBI_VMALLS12E1IS)
5594 .monWrite().hypWrite();
5595 InitReg(MISCREG_TLBI_IPAS2E1)
5596 .monWrite().hypWrite();
5597 InitReg(MISCREG_TLBI_IPAS2LE1)
5598 .monWrite().hypWrite();
5599 InitReg(MISCREG_TLBI_ALLE2)
5600 .monWrite().hypWrite();
5601 InitReg(MISCREG_TLBI_VAE2)
5602 .monWrite().hypWrite();
5603 InitReg(MISCREG_TLBI_ALLE1)
5604 .monWrite().hypWrite();
5605 InitReg(MISCREG_TLBI_VALE2)
5606 .monWrite().hypWrite();
5607 InitReg(MISCREG_TLBI_VMALLS12E1)
5608 .monWrite().hypWrite();
5609 InitReg(MISCREG_TLBI_ALLE3OS)
5610 .monSecureWrite().monNonSecureWrite();
5611 InitReg(MISCREG_TLBI_VAE3OS)
5612 .monSecureWrite().monNonSecureWrite();
5613 InitReg(MISCREG_TLBI_VALE3OS)
5614 .monSecureWrite().monNonSecureWrite();
5615 InitReg(MISCREG_TLBI_ALLE3IS)
5616 .monSecureWrite().monNonSecureWrite();
5617 InitReg(MISCREG_TLBI_VAE3IS)
5618 .monSecureWrite().monNonSecureWrite();
5619 InitReg(MISCREG_TLBI_VALE3IS)
5620 .monSecureWrite().monNonSecureWrite();
5621 InitReg(MISCREG_TLBI_ALLE3)
5622 .monSecureWrite().monNonSecureWrite();
5623 InitReg(MISCREG_TLBI_VAE3)
5624 .monSecureWrite().monNonSecureWrite();
5625 InitReg(MISCREG_TLBI_VALE3)
5626 .monSecureWrite().monNonSecureWrite();
5628 InitReg(MISCREG_TLBI_RVAE1)
5629 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5630 .writes(1).exceptUserMode();
5631 InitReg(MISCREG_TLBI_RVAAE1)
5632 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5633 .writes(1).exceptUserMode();
5634 InitReg(MISCREG_TLBI_RVALE1)
5635 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5636 .writes(1).exceptUserMode();
5637 InitReg(MISCREG_TLBI_RVAALE1)
5638 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5639 .writes(1).exceptUserMode();
5640 InitReg(MISCREG_TLBI_RIPAS2E1)
5641 .hypWrite().monWrite();
5642 InitReg(MISCREG_TLBI_RIPAS2LE1)
5643 .hypWrite().monWrite();
5644 InitReg(MISCREG_TLBI_RVAE2)
5645 .hypWrite().monWrite();
5646 InitReg(MISCREG_TLBI_RVALE2)
5647 .hypWrite().monWrite();
5648 InitReg(MISCREG_TLBI_RVAE3)
5650 InitReg(MISCREG_TLBI_RVALE3)
5652 InitReg(MISCREG_TLBI_RVAE1IS)
5653 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvae1is>)
5654 .writes(1).exceptUserMode();
5655 InitReg(MISCREG_TLBI_RVAAE1IS)
5656 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaae1is>)
5657 .writes(1).exceptUserMode();
5658 InitReg(MISCREG_TLBI_RVALE1IS)
5659 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvale1is>)
5660 .writes(1).exceptUserMode();
5661 InitReg(MISCREG_TLBI_RVAALE1IS)
5662 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaale1is>)
5663 .writes(1).exceptUserMode();
5664 InitReg(MISCREG_TLBI_RIPAS2E1IS)
5665 .hypWrite().monWrite();
5666 InitReg(MISCREG_TLBI_RIPAS2LE1IS)
5667 .hypWrite().monWrite();
5668 InitReg(MISCREG_TLBI_RVAE2IS)
5669 .hypWrite().monWrite();
5670 InitReg(MISCREG_TLBI_RVALE2IS)
5671 .hypWrite().monWrite();
5672 InitReg(MISCREG_TLBI_RVAE3IS)
5674 InitReg(MISCREG_TLBI_RVALE3IS)
5676 InitReg(MISCREG_TLBI_RVAE1OS)
5677 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvae1os>)
5678 .writes(1).exceptUserMode();
5679 InitReg(MISCREG_TLBI_RVAAE1OS)
5680 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaae1os>)
5681 .writes(1).exceptUserMode();
5682 InitReg(MISCREG_TLBI_RVALE1OS)
5683 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvale1os>)
5684 .writes(1).exceptUserMode();
5685 InitReg(MISCREG_TLBI_RVAALE1OS)
5686 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaale1os>)
5687 .writes(1).exceptUserMode();
5688 InitReg(MISCREG_TLBI_RIPAS2E1OS)
5689 .hypWrite().monWrite();
5690 InitReg(MISCREG_TLBI_RIPAS2LE1OS)
5691 .hypWrite().monWrite();
5692 InitReg(MISCREG_TLBI_RVAE2OS)
5693 .hypWrite().monWrite();
5694 InitReg(MISCREG_TLBI_RVALE2OS)
5695 .hypWrite().monWrite();
5696 InitReg(MISCREG_TLBI_RVAE3OS)
5698 InitReg(MISCREG_TLBI_RVALE3OS)
5700 InitReg(MISCREG_TLBI_VMALLE1OSNXS)
5701 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivmalle1os>)
5702 .writes(1).exceptUserMode();
5703 InitReg(MISCREG_TLBI_VAE1OSNXS)
5704 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivae1os>)
5705 .writes(1).exceptUserMode();
5706 InitReg(MISCREG_TLBI_ASIDE1OSNXS)
5707 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbiaside1os>)
5708 .writes(1).exceptUserMode();
5709 InitReg(MISCREG_TLBI_VAAE1OSNXS)
5710 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaae1os>)
5711 .writes(1).exceptUserMode();
5712 InitReg(MISCREG_TLBI_VALE1OSNXS)
5713 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivale1os>)
5714 .writes(1).exceptUserMode();
5715 InitReg(MISCREG_TLBI_VAALE1OSNXS)
5716 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaale1os>)
5717 .writes(1).exceptUserMode();
5718 InitReg(MISCREG_TLBI_VMALLE1ISNXS)
5719 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivmalle1is>)
5720 .writes(1).exceptUserMode();
5721 InitReg(MISCREG_TLBI_VAE1ISNXS)
5722 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivae1is>)
5723 .writes(1).exceptUserMode();
5724 InitReg(MISCREG_TLBI_ASIDE1ISNXS)
5725 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbiaside1is>)
5726 .writes(1).exceptUserMode();
5727 InitReg(MISCREG_TLBI_VAAE1ISNXS)
5728 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaae1is>)
5729 .writes(1).exceptUserMode();
5730 InitReg(MISCREG_TLBI_VALE1ISNXS)
5731 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivale1is>)
5732 .writes(1).exceptUserMode();
5733 InitReg(MISCREG_TLBI_VAALE1ISNXS)
5734 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaale1is>)
5735 .writes(1).exceptUserMode();
5736 InitReg(MISCREG_TLBI_VMALLE1NXS)
5737 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5738 .writes(1).exceptUserMode();
5739 InitReg(MISCREG_TLBI_VAE1NXS)
5740 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5741 .writes(1).exceptUserMode();
5742 InitReg(MISCREG_TLBI_ASIDE1NXS)
5743 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5744 .writes(1).exceptUserMode();
5745 InitReg(MISCREG_TLBI_VAAE1NXS)
5746 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5747 .writes(1).exceptUserMode();
5748 InitReg(MISCREG_TLBI_VALE1NXS)
5749 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5750 .writes(1).exceptUserMode();
5751 InitReg(MISCREG_TLBI_VAALE1NXS)
5752 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5753 .writes(1).exceptUserMode();
5754 InitReg(MISCREG_TLBI_IPAS2E1OSNXS)
5755 .hypWrite().monWrite();
5756 InitReg(MISCREG_TLBI_IPAS2LE1OSNXS)
5757 .hypWrite().monWrite();
5758 InitReg(MISCREG_TLBI_ALLE2OSNXS)
5759 .hypWrite().monWrite();
5760 InitReg(MISCREG_TLBI_VAE2OSNXS)
5761 .hypWrite().monWrite();
5762 InitReg(MISCREG_TLBI_ALLE1OSNXS)
5763 .hypWrite().monWrite();
5764 InitReg(MISCREG_TLBI_VALE2OSNXS)
5765 .hypWrite().monWrite();
5766 InitReg(MISCREG_TLBI_VMALLS12E1OSNXS)
5767 .hypWrite().monWrite();
5768 InitReg(MISCREG_TLBI_IPAS2E1ISNXS)
5769 .hypWrite().monWrite();
5770 InitReg(MISCREG_TLBI_IPAS2LE1ISNXS)
5771 .hypWrite().monWrite();
5772 InitReg(MISCREG_TLBI_ALLE2ISNXS)
5773 .hypWrite().monWrite();
5774 InitReg(MISCREG_TLBI_VAE2ISNXS)
5775 .hypWrite().monWrite();
5776 InitReg(MISCREG_TLBI_ALLE1ISNXS)
5777 .hypWrite().monWrite();
5778 InitReg(MISCREG_TLBI_VALE2ISNXS)
5779 .hypWrite().monWrite();
5780 InitReg(MISCREG_TLBI_VMALLS12E1ISNXS)
5781 .hypWrite().monWrite();
5782 InitReg(MISCREG_TLBI_IPAS2E1NXS)
5783 .hypWrite().monWrite();
5784 InitReg(MISCREG_TLBI_IPAS2LE1NXS)
5785 .hypWrite().monWrite();
5786 InitReg(MISCREG_TLBI_ALLE2NXS)
5787 .hypWrite().monWrite();
5788 InitReg(MISCREG_TLBI_VAE2NXS)
5789 .hypWrite().monWrite();
5790 InitReg(MISCREG_TLBI_ALLE1NXS)
5791 .hypWrite().monWrite();
5792 InitReg(MISCREG_TLBI_VALE2NXS)
5793 .hypWrite().monWrite();
5794 InitReg(MISCREG_TLBI_VMALLS12E1NXS)
5795 .hypWrite().monWrite();
5796 InitReg(MISCREG_TLBI_ALLE3OSNXS)
5798 InitReg(MISCREG_TLBI_VAE3OSNXS)
5800 InitReg(MISCREG_TLBI_VALE3OSNXS)
5802 InitReg(MISCREG_TLBI_ALLE3ISNXS)
5804 InitReg(MISCREG_TLBI_VAE3ISNXS)
5806 InitReg(MISCREG_TLBI_VALE3ISNXS)
5808 InitReg(MISCREG_TLBI_ALLE3NXS)
5810 InitReg(MISCREG_TLBI_VAE3NXS)
5812 InitReg(MISCREG_TLBI_VALE3NXS)
5815 InitReg(MISCREG_TLBI_RVAE1NXS)
5816 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5817 .writes(1).exceptUserMode();
5818 InitReg(MISCREG_TLBI_RVAAE1NXS)
5819 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5820 .writes(1).exceptUserMode();
5821 InitReg(MISCREG_TLBI_RVALE1NXS)
5822 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5823 .writes(1).exceptUserMode();
5824 InitReg(MISCREG_TLBI_RVAALE1NXS)
5825 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5826 .writes(1).exceptUserMode();
5827 InitReg(MISCREG_TLBI_RIPAS2E1NXS)
5828 .hypWrite().monWrite();
5829 InitReg(MISCREG_TLBI_RIPAS2LE1NXS)
5830 .hypWrite().monWrite();
5831 InitReg(MISCREG_TLBI_RVAE2NXS)
5832 .hypWrite().monWrite();
5833 InitReg(MISCREG_TLBI_RVALE2NXS)
5834 .hypWrite().monWrite();
5835 InitReg(MISCREG_TLBI_RVAE3NXS)
5837 InitReg(MISCREG_TLBI_RVALE3NXS)
5839 InitReg(MISCREG_TLBI_RVAE1ISNXS)
5840 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvae1is>)
5841 .writes(1).exceptUserMode();
5842 InitReg(MISCREG_TLBI_RVAAE1ISNXS)
5843 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaae1is>)
5844 .writes(1).exceptUserMode();
5845 InitReg(MISCREG_TLBI_RVALE1ISNXS)
5846 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvale1is>)
5847 .writes(1).exceptUserMode();
5848 InitReg(MISCREG_TLBI_RVAALE1ISNXS)
5849 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaale1is>)
5850 .writes(1).exceptUserMode();
5851 InitReg(MISCREG_TLBI_RIPAS2E1ISNXS)
5852 .hypWrite().monWrite();
5853 InitReg(MISCREG_TLBI_RIPAS2LE1ISNXS)
5854 .hypWrite().monWrite();
5855 InitReg(MISCREG_TLBI_RVAE2ISNXS)
5856 .hypWrite().monWrite();
5857 InitReg(MISCREG_TLBI_RVALE2ISNXS)
5858 .hypWrite().monWrite();
5859 InitReg(MISCREG_TLBI_RVAE3ISNXS)
5861 InitReg(MISCREG_TLBI_RVALE3ISNXS)
5863 InitReg(MISCREG_TLBI_RVAE1OSNXS)
5864 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvae1os>)
5865 .writes(1).exceptUserMode();
5866 InitReg(MISCREG_TLBI_RVAAE1OSNXS)
5867 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaae1os>)
5868 .writes(1).exceptUserMode();
5869 InitReg(MISCREG_TLBI_RVALE1OSNXS)
5870 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvale1os>)
5871 .writes(1).exceptUserMode();
5872 InitReg(MISCREG_TLBI_RVAALE1OSNXS)
5873 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaale1os>)
5874 .writes(1).exceptUserMode();
5875 InitReg(MISCREG_TLBI_RIPAS2E1OSNXS)
5876 .hypWrite().monWrite();
5877 InitReg(MISCREG_TLBI_RIPAS2LE1OSNXS)
5878 .hypWrite().monWrite();
5879 InitReg(MISCREG_TLBI_RVAE2OSNXS)
5880 .hypWrite().monWrite();
5881 InitReg(MISCREG_TLBI_RVALE2OSNXS)
5882 .hypWrite().monWrite();
5883 InitReg(MISCREG_TLBI_RVAE3OSNXS)
5885 InitReg(MISCREG_TLBI_RVALE3OSNXS)
5888 .allPrivileges().exceptUserMode()
5891 .allPrivileges().exceptUserMode()
5929 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5935 .allPrivileges().exceptUserMode()
5936 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::mairEL1>)
5937 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::mairEL1>)
5944 .allPrivileges().exceptUserMode()
5945 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::amairEL1>)
5946 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::amairEL1>)
5963 .allPrivileges().exceptUserMode();
5965 .allPrivileges().exceptUserMode();
5967 .allPrivileges().exceptUserMode()
5968 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::vbarEL1>)
5969 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::vbarEL1>)
5980 .allPrivileges().exceptUserMode().writes(0);
5998 .allPrivileges().exceptUserMode()
5999 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::contextidrEL1>)
6000 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::contextidrEL1>)
6007 .allPrivileges().exceptUserMode()
6008 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL1>)
6009 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL1>)
6013 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrEL0>)
6014 .faultWrite(
EL0, faultFgtEL0<false, &HFGTR::tpidrEL0>)
6015 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL0>)
6016 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL0>)
6019 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
6020 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrroEL0>)
6021 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrroEL0>)
6022 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrroEL0>)
6032 .faultRead(
EL0, faultGenericTimerEL0)
6034 .privSecureWrite(aarch32EL3)
6038 .faultRead(
EL0, faultCntpctEL0)
6039 .faultRead(
EL1, faultCntpctEL1)
6044 .faultRead(
EL0, faultCntvctEL0)
6045 .faultRead(
EL1, faultCntvctEL1)
6050 .fault(
EL0, faultCntpCtlEL0)
6051 .fault(
EL1, faultCntpCtlEL1)
6052 .res0(0xfffffffffffffff8)
6056 .fault(
EL0, faultCntpCtlEL0)
6057 .fault(
EL1, faultCntpCtlEL1)
6061 .fault(
EL0, faultCntpCtlEL0)
6062 .fault(
EL1, faultCntpCtlEL1)
6063 .res0(0xffffffff00000000)
6067 .fault(
EL0, faultCntvCtlEL0)
6068 .fault(
EL1, faultCntvCtlEL1)
6069 .res0(0xfffffffffffffff8)
6073 .fault(
EL0, faultCntvCtlEL0)
6074 .fault(
EL1, faultCntvCtlEL1)
6078 .fault(
EL0, faultCntvCtlEL0)
6079 .fault(
EL1, faultCntvCtlEL1)
6080 .res0(0xffffffff00000000)
6085 .res0(0xfffffffffffffff8)
6094 .res0(0xffffffff00000000)
6099 .res0(0xfffffffffffffff8)
6108 .res0(0xffffffff00000000)
6113 .res0(0xfffffffffffdfc00)
6118 .res0(0xfffffffffffdfc00)
6123 .fault(
EL1, faultCntpsCtlEL1)
6124 .res0(0xfffffffffffffff8);
6128 .fault(
EL1, faultCntpsCtlEL1);
6132 .fault(
EL1, faultCntpsCtlEL1)
6133 .res0(0xffffffff00000000);
6137 .res0(0xfffffffffffc0000)
6142 .res0(0xfffffffffffffff8)
6151 .res0(0xffffffff00000000)
6154 .mon(sel2_implemented)
6155 .hypSecure(sel2_implemented)
6156 .res0(0xfffffffffffffff8);
6158 .mon(sel2_implemented)
6159 .hypSecure(sel2_implemented);
6161 .mon(sel2_implemented)
6162 .hypSecure(sel2_implemented)
6163 .res0(0xffffffff00000000);
6165 .mon(vhe_implemented)
6167 .res0(0xfffffffffffffff8);
6169 .mon(vhe_implemented)
6170 .hyp(vhe_implemented);
6172 .mon(vhe_implemented)
6173 .hyp(vhe_implemented)
6174 .res0(0xffffffff00000000);
6176 .mon(vhe_implemented && sel2_implemented)
6177 .hypSecure(vhe_implemented && sel2_implemented)
6178 .res0(0xfffffffffffffff8);
6180 .mon(vhe_implemented && sel2_implemented)
6181 .hypSecure(vhe_implemented && sel2_implemented);
6183 .mon(vhe_implemented && sel2_implemented)
6184 .hypSecure(vhe_implemented && sel2_implemented)
6185 .res0(0xffffffff00000000);
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();
6249 .allPrivileges().exceptUserMode();
6251 .allPrivileges().exceptUserMode();
6253 .allPrivileges().exceptUserMode();
6256 .fault(faultUnimplemented);
6258 .allPrivileges().exceptUserMode().writes(0);
6265 .allPrivileges().exceptUserMode()
6268 .allPrivileges().exceptUserMode().writes(0)
6271 .allPrivileges().exceptUserMode().reads(0)
6274 .allPrivileges().exceptUserMode().writes(0)
6278 .allPrivileges().exceptUserMode()
6281 .allPrivileges().exceptUserMode()
6284 .allPrivileges().exceptUserMode()
6287 .allPrivileges().exceptUserMode()
6290 .allPrivileges().exceptUserMode()
6297 .allPrivileges().exceptUserMode()
6301 .allPrivileges().exceptUserMode()
6308 .allPrivileges().exceptUserMode()
6312 .allPrivileges().exceptUserMode()
6319 .allPrivileges().exceptUserMode()
6323 .allPrivileges().exceptUserMode()
6330 .allPrivileges().exceptUserMode()
6334 .allPrivileges().exceptUserMode()
6338 .allPrivileges().exceptUserMode().reads(0)
6341 .allPrivileges().exceptUserMode().writes(0)
6344 .allPrivileges().exceptUserMode().reads(0)
6345 .faultWrite(
EL1, faultIccSgiEL1)
6346 .faultWrite(
EL2, faultIccSgiEL2)
6349 .allPrivileges().exceptUserMode().reads(0)
6350 .faultWrite(
EL1, faultIccSgiEL1)
6351 .faultWrite(
EL2, faultIccSgiEL2)
6354 .allPrivileges().exceptUserMode().reads(0)
6355 .faultWrite(
EL1, faultIccSgiEL1)
6356 .faultWrite(
EL2, faultIccSgiEL2)
6359 .allPrivileges().exceptUserMode().writes(0)
6363 .allPrivileges().exceptUserMode().reads(0)
6366 .allPrivileges().exceptUserMode().writes(0)
6374 .allPrivileges().exceptUserMode()
6379 .secure().exceptUserMode()
6387 .allPrivileges().exceptUserMode()
6392 .secure().exceptUserMode()
6400 .allPrivileges().exceptUserMode()
6405 .secure().exceptUserMode()
6409 .allPrivileges().exceptUserMode()
6410 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6411 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6415 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6416 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6421 .allPrivileges().exceptUserMode()
6426 .secure().exceptUserMode()
6469 .hyp().mon().writes(0)
6472 .hyp().mon().writes(0)
6475 .hyp().mon().writes(0)
6478 .hyp().mon().writes(0)
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();
6562 .allPrivileges().exceptUserMode();
6564 .allPrivileges().exceptUserMode();
6566 .allPrivileges().exceptUserMode().reads(0);
6568 .allPrivileges().exceptUserMode();
6570 .allPrivileges().exceptUserMode();
6572 .allPrivileges().exceptUserMode();
6574 .allPrivileges().exceptUserMode();
6576 .allPrivileges().exceptUserMode();
6578 .allPrivileges().exceptUserMode();
6580 .allPrivileges().exceptUserMode();
6582 .allPrivileges().exceptUserMode().reads(0);
6584 .allPrivileges().exceptUserMode().reads(0);
6586 .allPrivileges().exceptUserMode().reads(0);
6588 .allPrivileges().exceptUserMode().writes(0);
6590 .allPrivileges().exceptUserMode().writes(0);
6594 .allPrivileges().exceptUserMode().writes(0);
6596 .allPrivileges().exceptUserMode().writes(0);
6598 .allPrivileges().exceptUserMode();
6600 .allPrivileges().exceptUserMode();
6602 .allPrivileges().exceptUserMode();
6604 .allPrivileges().exceptUserMode();
6612 .allPrivileges().exceptUserMode();
6614 .allPrivileges().exceptUserMode().writes(0);
6616 .allPrivileges().exceptUserMode().reads(0);
6618 .allPrivileges().exceptUserMode().reads(0);
6620 .allPrivileges().exceptUserMode();
6622 .allPrivileges().exceptUserMode();
6624 .allPrivileges().exceptUserMode();
6645 .hyp().mon().writes(0);
6647 .hyp().mon().writes(0);
6649 .hyp().mon().writes(0);
6651 .hyp().mon().writes(0);
6722 AA64ZFR0 zfr0_el1 = 0;
6723 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
6724 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
6725 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
6728 .faultRead(
EL0, faultIdst)
6729 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6730 .allPrivileges().exceptUserMode().writes(0);
6733 .fault(
EL3, faultZcrEL3)
6737 .fault(
EL2, faultZcrEL2)
6738 .fault(
EL3, faultZcrEL3)
6741 .fault(
EL2, faultVheEL2<faultZcrEL2>)
6746 .fault(
EL1, faultZcrEL1)
6747 .fault(
EL2, faultZcrEL2)
6748 .fault(
EL3, faultZcrEL3)
6749 .allPrivileges().exceptUserMode();
6754 AA64SMFR0 smfr0_el1 = 0;
6755 smfr0_el1.f32f32 = 0x1;
6759 smfr0_el1.b16f32 = 0x1;
6760 smfr0_el1.f16f32 = 0x1;
6761 smfr0_el1.i8i32 = 0xF;
6762 smfr0_el1.f64f64 = 0x1;
6763 smfr0_el1.i16i64 = 0xF;
6764 smfr0_el1.smEver = 0;
6765 smfr0_el1.fa64 = 0x1;
6768 .faultRead(
EL0, faultIdst)
6769 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6770 .allPrivileges().writes(0);
6778 .fault(
EL0, faultSmenEL0)
6779 .fault(
EL1, faultSmenEL1)
6780 .fault(
EL2, faultTsmSmen)
6781 .fault(
EL3, faultEsm)
6785 SMIDR smidr_el1 = 0;
6786 smidr_el1.affinity = 0;
6788 smidr_el1.implementer = 0x41;
6791 .faultRead(
EL0, faultIdst)
6792 .faultRead(
EL1, faultHcrEL1<&HCR::tid1>)
6793 .allPrivileges().writes(0);
6796 .fault(
EL1, faultEsm)
6797 .fault(
EL2, faultEsm)
6798 .fault(
EL3, faultEsm)
6799 .allPrivileges().exceptUserMode();
6801 .fault(
EL2, faultEsm)
6802 .fault(
EL3, faultEsm)
6813 smcr_el3.len = smeVL - 1;
6816 .fault(
EL3, faultEsm)
6827 smcr_el2.len = smeVL - 1;
6830 .fault(
EL2, faultTsmSmen)
6831 .fault(
EL3, faultEsm)
6834 .allPrivileges().exceptUserMode();
6844 smcr_el1.len = smeVL - 1;
6847 .fault(
EL1, faultSmenEL1)
6848 .fault(
EL2, faultTsmSmen)
6849 .fault(
EL3, faultEsm)
6850 .allPrivileges().exceptUserMode();
6855 .faultRead(
EL0, faultRng)
6856 .faultRead(
EL1, faultRng)
6857 .faultRead(
EL2, faultRng)
6858 .faultRead(
EL3, faultRng)
6860 .allPrivileges().writes(0);
6862 .faultRead(
EL0, faultRng)
6863 .faultRead(
EL1, faultRng)
6864 .faultRead(
EL2, faultRng)
6865 .faultRead(
EL3, faultRng)
6867 .allPrivileges().writes(0);
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));
6883 .fault(
EL2, faultFgtCtrlRegs)
6884 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6886 .fault(
EL2, faultFgtCtrlRegs)
6887 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6893 .allPrivileges().exceptUserMode().writes(0);
6896 .fault(
EL1, faultImpdefUnimplEL1)
6897 .fault(
EL2, faultUnimplemented)
6898 .fault(
EL3, faultUnimplemented)
6899 .warnNotFail(impdefAsNop);
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);
6931 .fault(faultUnimplemented);
6934 .fault(faultUnimplemented);
6938 .reset(
p.mpamidr_el1)
6940 .faultRead(
EL1, faultMpamIdrEL1)
6941 .faultRead(
EL2, faultMpamEL2)
6942 .allPrivileges().exceptUserMode().writes(0);
6945 .fault(
EL1, faultMpam0EL1)
6946 .fault(
EL2, faultMpamEL2)
6947 .priv().hyp().mon();
6950 .fault(
EL1, faultMpam1EL1)
6951 .fault(
EL2, faultMpamEL2)
6952 .priv().hyp().mon();
6955 .fault(
EL2, faultMpam12EL2)
6960 .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)
6985 .fault(
EL2, faultMpamEL2)
6988 .fault(
EL2, faultMpamEL2)
6992 .fault(
EL2, faultMpamEL2)
6999 .fault(
EL1, faultMpamsmEL1)
7000 .fault(
EL2, faultMpamEL2)
7001 .allPrivileges().exceptUserMode();
7005 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPire0EL1>)
7006 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPire0EL1>)
7007 .fault(
EL2, faultPieEL2)
7010 .fault(
EL2, faultPieEL2)
7013 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPirEL1>)
7014 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPirEL1>)
7015 .fault(
EL2, faultPieEL2)
7018 .fault(
EL2, faultVheEL2<faultPieEL2>)
7022 .fault(
EL2, faultVheEL2<faultPieEL2>)
7026 .fault(
EL2, faultPieEL2)
7042 assert(idxToMiscRegNum.empty());
7043 for (
const auto& [key,
val] : miscRegNumToIdx) {
7044 idxToMiscRegNum.insert({
val, key});