3086 static bool completed =
false;
3104 bool LSMAOE =
false;
3107 bool nTLSMD =
false;
3115 const bool vhe_implemented =
release->has(ArmExtension::FEAT_VHE);
3116 const bool sel2_implemented =
release->has(ArmExtension::FEAT_SEL2);
3173 mvfr1.flushToZero = 1;
3174 mvfr1.defaultNaN = 1;
3175 mvfr1.advSimdLoadStore = 1;
3176 mvfr1.advSimdInteger = 1;
3177 mvfr1.advSimdSinglePrecision = 1;
3178 mvfr1.advSimdHalfPrecision = 1;
3179 mvfr1.vfpHalfPrecision = 1;
3186 mvfr0.advSimdRegisters = 2;
3187 mvfr0.singlePrecision = 2;
3188 mvfr0.doublePrecision = 2;
3189 mvfr0.vfpExceptionTrapping = 0;
3191 mvfr0.squareRoot = 1;
3192 mvfr0.shortVectors = 1;
3193 mvfr0.roundingModes = 1;
3491 unsigned line_size_words =
3492 system->cacheLineSize() / 4;
3493 unsigned log2_line_size_words = 0;
3495 while (line_size_words >>= 1) {
3496 ++log2_line_size_words;
3501 ctr.iCacheLineSize = log2_line_size_words;
3503 ctr.l1IndexPolicy = 0x3;
3505 ctr.dCacheLineSize = log2_line_size_words;
3507 ctr.erg = log2_line_size_words;
3509 ctr.cwg = log2_line_size_words;
3536 bool have_timer = (
system &&
system->getGenericTimer() !=
nullptr);
3538 (release->has(ArmExtension::SECURITY) ?
3540 (release->has(ArmExtension::VIRTUALIZATION) ?
3542 (have_timer ? 0x00010000 : 0x0);
3547 .
reset(
p.pmu ? 0x03000000 : 0)
3552 .
reset([
p,release=release](){
3554 if (release->has(ArmExtension::LPAE))
3555 mmfr0 = (mmfr0 & ~0xf) | 0x5;
3587 .
reset([
p,release=release] () {
3588 ISAR5 isar5 =
p.id_isar5;
3589 isar5.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
3590 isar5.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
3591 isar5.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
3592 isar5.aes = release->has(ArmExtension::FEAT_PMULL) ?
3593 0x2 : release->has(ArmExtension::FEAT_AES) ?
3595 isar5.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
3596 isar5.vcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
3601 .
reset([
p,release=release] () {
3602 ISAR6 isar6 =
p.id_isar6;
3603 isar6.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
3604 isar6.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
3605 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
3606 isar6.bf16 = release->has(ArmExtension::FEAT_AA32BF16) ? 0x1 : 0x0;
3637 .
res1(0x00400800 | (SPAN ? 0 : 0x800000)
3638 | (LSMAOE ? 0 : 0x10)
3639 | (nTLSMD ? 0 : 0x8));
3641 auto sctlr_reset = [
aarch64=highestELIs64] ()
3687 .
reset(release->has(ArmExtension::SECURITY) ? 0 : 1)
3698 .
res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
3699 | (IESB ? 0 : 0x200000)
3700 | (EnDA ? 0 : 0x8000000)
3701 | (EnIB ? 0 : 0x40000000)
3702 | (EnIA ? 0 : 0x80000000))
3708 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3709 0x90000000 :
mask(31, 0));
3712 .
res0(release->has(ArmExtension::VIRTUALIZATION) ?
3713 0xffa9ff8c :
mask(31, 0));
4117 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4127 .
res0(release->has(ArmExtension::LPAE) ? 0 :
mask(31, 0))
4352 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::mdscrEL1>)
4353 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::mdscrEL1>)
4361 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::oseccrEL1>)
4362 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::oseccrEL1>)
4367 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4368 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4373 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4374 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4379 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4380 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4385 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4386 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4391 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4392 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4397 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4398 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4403 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4404 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4409 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4410 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4415 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4416 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4421 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4422 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4427 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4428 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4433 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4434 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4439 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4440 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4445 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4446 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4451 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4452 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4457 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbvrnEL1>)
4458 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbvrnEL1>)
4463 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4464 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4469 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4470 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4475 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4476 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4481 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4482 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4487 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4488 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4493 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4494 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4499 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4500 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4505 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4506 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4511 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4512 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4517 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4518 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4523 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4524 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4529 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4530 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4535 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4536 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4541 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4542 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4547 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4548 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4553 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgbcrnEL1>)
4554 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgbcrnEL1>)
4559 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4560 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4565 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4566 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4571 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4572 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4577 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4578 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4583 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4584 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4589 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4590 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4595 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4596 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4601 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4602 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4607 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4608 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4613 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4614 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4619 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4620 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4625 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4626 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4631 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4632 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4637 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4638 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4643 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4644 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4649 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwvrnEL1>)
4650 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwvrnEL1>)
4655 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4656 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4661 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4662 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4667 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4668 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4673 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4674 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4679 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4680 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4685 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4686 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4691 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4692 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4697 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4698 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4703 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4704 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4709 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4710 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4715 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4716 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4721 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4722 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4727 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4728 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4733 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4734 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4739 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4740 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4745 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgwcrnEL1>)
4746 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgwcrnEL1>)
4777 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::oslsrEL1>)
4782 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::osdlrEL1>)
4788 .
faultRead(
EL1, faultDebugOsEL1<true, &HDFGTR::dbgprcrEL1>)
4789 .
faultWrite(
EL1, faultDebugOsEL1<false, &HDFGTR::dbgprcrEL1>)
4794 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4795 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4800 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgclaim>)
4801 .
faultWrite(
EL1, faultDebugWithFgtEL1<false, &HDFGTR::dbgclaim>)
4806 .
faultRead(
EL1, faultDebugWithFgtEL1<true, &HDFGTR::dbgauthstatusEL1>)
4814 .allPrivileges().exceptUserMode().writes(0)
4815 .faultRead(
EL0, faultIdst)
4816 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::midrEL1>)
4819 .allPrivileges().exceptUserMode().writes(0)
4820 .faultRead(
EL0, faultIdst)
4821 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::mpidrEL1>)
4824 .faultRead(
EL0, faultIdst)
4825 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::revidrEL1>)
4826 .allPrivileges().exceptUserMode().writes(0);
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 .allPrivileges().exceptUserMode().writes(0)
4884 .faultRead(
EL0, faultIdst)
4885 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4888 .allPrivileges().exceptUserMode().writes(0)
4889 .faultRead(
EL0, faultIdst)
4890 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4893 .allPrivileges().exceptUserMode().writes(0)
4894 .faultRead(
EL0, faultIdst)
4895 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4898 .allPrivileges().exceptUserMode().writes(0)
4899 .faultRead(
EL0, faultIdst)
4900 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4903 .allPrivileges().exceptUserMode().writes(0)
4904 .faultRead(
EL0, faultIdst)
4905 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4908 .faultRead(
EL0, faultIdst)
4909 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4910 .allPrivileges().exceptUserMode().writes(0)
4913 .faultRead(
EL0, faultIdst)
4914 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4915 .allPrivileges().exceptUserMode().writes(0)
4918 .faultRead(
EL0, faultIdst)
4919 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4920 .allPrivileges().exceptUserMode().writes(0);
4922 .reset([
this,release=release,tc=tc](){
4923 AA64PFR0 pfr0_el1 = 0;
4926 pfr0_el1.el2 = release->has(ArmExtension::VIRTUALIZATION)
4928 pfr0_el1.el3 = release->has(ArmExtension::SECURITY) ? 0x2 : 0x0;
4929 pfr0_el1.fp = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4930 pfr0_el1.advsimd = release->has(ArmExtension::FEAT_FP16) ? 0x1 : 0x0;
4931 pfr0_el1.sve = release->has(ArmExtension::FEAT_SVE) ? 0x1 : 0x0;
4932 pfr0_el1.sel2 = release->has(ArmExtension::FEAT_SEL2) ? 0x1 : 0x0;
4935 pfr0_el1.mpam = 0x0;
4936 pfr0_el1.gic =
FullSystem && getGICv3CPUInterface(tc) ? 0x1 : 0;
4940 .faultRead(
EL0, faultIdst)
4941 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4942 .allPrivileges().writes(0);
4944 .reset([release=release](){
4945 AA64PFR1 pfr1_el1 = 0;
4946 pfr1_el1.sme = release->has(ArmExtension::FEAT_SME) ? 0x1 : 0x0;
4947 pfr1_el1.mpamFrac = release->has(ArmExtension::FEAT_MPAM) ?
4952 .faultRead(
EL0, faultIdst)
4953 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4954 .allPrivileges().writes(0);
4957 AA64DFR0 dfr0_el1 =
p.id_aa64dfr0_el1;
4958 dfr0_el1.pmuver =
p.pmu ? 1 : 0;
4961 .faultRead(
EL0, faultIdst)
4962 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4963 .allPrivileges().writes(0);
4965 .reset(
p.id_aa64dfr1_el1)
4966 .faultRead(
EL0, faultIdst)
4967 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4968 .allPrivileges().writes(0);
4970 .reset(
p.id_aa64afr0_el1)
4971 .faultRead(
EL0, faultIdst)
4972 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4973 .allPrivileges().writes(0);
4975 .reset(
p.id_aa64afr1_el1)
4976 .faultRead(
EL0, faultIdst)
4977 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
4978 .allPrivileges().writes(0);
4980 .reset([
p,release=release](){
4981 AA64ISAR0 isar0_el1 =
p.id_aa64isar0_el1;
4982 isar0_el1.crc32 = release->has(ArmExtension::FEAT_CRC32) ? 0x1 : 0x0;
4983 isar0_el1.sha2 = release->has(ArmExtension::FEAT_SHA256) ? 0x1 : 0x0;
4984 isar0_el1.sha1 = release->has(ArmExtension::FEAT_SHA1) ? 0x1 : 0x0;
4985 isar0_el1.aes = release->has(ArmExtension::FEAT_PMULL) ?
4986 0x2 : release->has(ArmExtension::FEAT_AES) ?
4988 isar0_el1.dp = release->has(ArmExtension::FEAT_DOTPROD) ? 0x1 : 0x0;
4989 isar0_el1.atomic = release->has(ArmExtension::FEAT_LSE) ? 0x2 : 0x0;
4990 isar0_el1.rdm = release->has(ArmExtension::FEAT_RDM) ? 0x1 : 0x0;
4991 isar0_el1.tme = release->has(ArmExtension::TME) ? 0x1 : 0x0;
4992 isar0_el1.tlb = release->has(ArmExtension::FEAT_TLBIRANGE) ?
4993 0x2 : release->has(ArmExtension::FEAT_TLBIOS) ?
4995 isar0_el1.ts = release->has(ArmExtension::FEAT_FLAGM2) ?
4996 0x2 : release->has(ArmExtension::FEAT_FLAGM) ?
4998 isar0_el1.rndr = release->has(ArmExtension::FEAT_RNG) ? 0x1 : 0x0;
4999 isar0_el1.fhm = release->has(ArmExtension::FEAT_FP16) ? 0x1 :
5000 (release->has(ArmExtension::FEAT_FHM) ? 0x1 : 0x0);
5003 .faultRead(
EL0, faultIdst)
5004 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5005 .allPrivileges().writes(0);
5007 .reset([
p,release=release](){
5008 AA64ISAR1 isar1_el1 =
p.id_aa64isar1_el1;
5009 isar1_el1.xs = release->has(ArmExtension::FEAT_XS) ? 0x1 : 0x0;
5010 isar1_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 0x1 : 0x0;
5011 isar1_el1.apa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
5012 isar1_el1.jscvt = release->has(ArmExtension::FEAT_JSCVT) ? 0x1 : 0x0;
5013 isar1_el1.fcma = release->has(ArmExtension::FEAT_FCMA) ? 0x1 : 0x0;
5014 isar1_el1.gpa = release->has(ArmExtension::FEAT_PAuth) ? 0x1 : 0x0;
5016 release->has(ArmExtension::FEAT_FRINTTS) ? 0x1 : 0x0;
5017 isar1_el1.bf16 = release->has(ArmExtension::FEAT_EBF16) ? 0x2 :
5018 (release->has(ArmExtension::FEAT_BF16) ? 0x1 : 0x0);
5021 .faultRead(
EL0, faultIdst)
5022 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5023 .allPrivileges().writes(0);
5026 AA64MMFR0 mmfr0_el1 =
p.id_aa64mmfr0_el1;
5027 mmfr0_el1.asidbits =
asidbits ? 0x2 : 0x0;
5031 .faultRead(
EL0, faultIdst)
5032 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5033 .allPrivileges().writes(0);
5035 .reset([
p,release=release](){
5036 AA64MMFR1 mmfr1_el1 =
p.id_aa64mmfr1_el1;
5037 mmfr1_el1.vmidbits =
5038 release->has(ArmExtension::FEAT_VMID16) ? 0x2 : 0x0;
5039 mmfr1_el1.vh = release->has(ArmExtension::FEAT_VHE) ? 0x1 : 0x0;
5040 mmfr1_el1.hpds = release->has(ArmExtension::FEAT_HPDS) ? 0x1 : 0x0;
5041 mmfr1_el1.pan = release->has(ArmExtension::FEAT_PAN) ? 0x1 : 0x0;
5042 mmfr1_el1.hcx = release->has(ArmExtension::FEAT_HCX) ? 0x1 : 0x0;
5043 mmfr1_el1.afp = release->has(ArmExtension::FEAT_AFP) ? 0x1 : 0x0;
5046 .faultRead(
EL0, faultIdst)
5047 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5048 .allPrivileges().writes(0);
5050 .reset([
p,release=release](){
5051 AA64MMFR2 mmfr2_el1 =
p.id_aa64mmfr2_el1;
5052 mmfr2_el1.uao = release->has(ArmExtension::FEAT_UAO) ? 0x1 : 0x0;
5053 mmfr2_el1.varange = release->has(ArmExtension::FEAT_LVA) ? 0x1 : 0x0;
5054 mmfr2_el1.st = release->has(ArmExtension::FEAT_TTST) ? 0x1 : 0x0;
5055 mmfr2_el1.ids = release->has(ArmExtension::FEAT_IDST) ? 0x1 : 0x0;
5056 mmfr2_el1.evt = release->has(ArmExtension::FEAT_EVT) ? 0x2 : 0x0;
5059 .faultRead(
EL0, faultIdst)
5060 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5061 .allPrivileges().writes(0);
5063 .reset([
p,release=release](){
5064 AA64MMFR3 mmfr3_el1 = 0;
5066 release->has(ArmExtension::FEAT_SCTLR2) ? 0x1 : 0x0;
5067 mmfr3_el1.tcrx = release->has(ArmExtension::FEAT_TCR2) ? 0x1 : 0x0;
5068 mmfr3_el1.s1pie = release->has(ArmExtension::FEAT_S1PIE) ? 0x1 : 0x0;
5071 .faultRead(
EL0, faultIdst)
5072 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
5073 .allPrivileges().writes(0);
5076 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5077 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5078 .fault(
EL2, faultPauthEL2)
5079 .allPrivileges().exceptUserMode();
5081 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdaKey>)
5082 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdaKey>)
5083 .fault(
EL2, faultPauthEL2)
5084 .allPrivileges().exceptUserMode();
5086 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5087 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5088 .fault(
EL2, faultPauthEL2)
5089 .allPrivileges().exceptUserMode();
5091 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apdbKey>)
5092 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apdbKey>)
5093 .fault(
EL2, faultPauthEL2)
5094 .allPrivileges().exceptUserMode();
5096 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5097 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5098 .fault(
EL2, faultPauthEL2)
5099 .allPrivileges().exceptUserMode();
5101 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apgaKey>)
5102 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apgaKey>)
5103 .fault(
EL2, faultPauthEL2)
5104 .allPrivileges().exceptUserMode();
5106 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5107 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5108 .fault(
EL2, faultPauthEL2)
5109 .allPrivileges().exceptUserMode();
5111 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apiaKey>)
5112 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apiaKey>)
5113 .fault(
EL2, faultPauthEL2)
5114 .allPrivileges().exceptUserMode();
5116 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5117 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5118 .fault(
EL2, faultPauthEL2)
5119 .allPrivileges().exceptUserMode();
5121 .faultRead(
EL1, faultPauthEL1<true, &HFGTR::apibKey>)
5122 .faultWrite(
EL1, faultPauthEL1<false, &HFGTR::apibKey>)
5123 .fault(
EL2, faultPauthEL2)
5124 .allPrivileges().exceptUserMode();
5127 .faultRead(
EL0, faultIdst)
5128 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::ccsidrEL1>)
5129 .allPrivileges().writes(0);
5131 .faultRead(
EL0, faultIdst)
5132 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::clidrEL1>)
5133 .allPrivileges().writes(0);
5135 .faultRead(
EL0, faultIdst)
5136 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid1, &HFGTR::aidrEL1>)
5137 .allPrivileges().writes(0);
5139 .allPrivileges().exceptUserMode()
5140 .faultRead(
EL1, faultCacheEL1<true, &HFGTR::csselrEL1>)
5141 .faultWrite(
EL1, faultCacheEL1<false, &HFGTR::csselrEL1>)
5144 .faultRead(
EL0, faultCtrEL0)
5145 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::tid2, &HFGTR::ctrEL0>)
5150 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::dczidEL0>)
5151 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::dczidEL0>)
5162 .allPrivileges().exceptUserMode()
5163 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::sctlrEL1>)
5164 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::sctlrEL1>)
5165 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5166 | (IESB ? 0 : 0x200000)
5167 | (EnDA ? 0 : 0x8000000)
5168 | (EnIB ? 0 : 0x40000000)
5169 | (EnIA ? 0 : 0x80000000))
5170 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5171 | (nTLSMD ? 0 : 0x8000000)
5172 | (LSMAOE ? 0 : 0x10000000))
5177 .res0( 0x20440 | (EnDB ? 0 : 0x2000)
5178 | (IESB ? 0 : 0x200000)
5179 | (EnDA ? 0 : 0x8000000)
5180 | (EnIB ? 0 : 0x40000000)
5181 | (EnIA ? 0 : 0x80000000))
5182 .res1(0x500800 | (SPAN ? 0 : 0x800000)
5183 | (nTLSMD ? 0 : 0x8000000)
5184 | (LSMAOE ? 0 : 0x10000000))
5187 .allPrivileges().exceptUserMode()
5188 .faultRead(
EL1, faultSctlr2EL1<true, &HCR::trvm>)
5189 .faultWrite(
EL1, faultSctlr2EL1<false, &HCR::tvm>)
5190 .fault(
EL2,faultSctlr2EL2);
5192 .fault(
EL2, faultVheEL2<faultSctlr2EL2>)
5196 .allPrivileges().exceptUserMode()
5197 .fault(
EL1, faultHcrEL1<&HCR::tacr>)
5200 .allPrivileges().exceptUserMode()
5201 .faultRead(
EL1, faultCpacrEL1<true, &HFGTR::cpacrEL1>)
5202 .faultWrite(
EL1, faultCpacrEL1<false, &HFGTR::cpacrEL1>)
5203 .fault(
EL2, faultCpacrEL2)
5206 .fault(
EL2, faultVheEL2<faultCpacrEL2>)
5211 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5212 | (IESB ? 0 : 0x200000)
5213 | (EnDA ? 0 : 0x8000000)
5214 | (EnIB ? 0 : 0x40000000)
5215 | (EnIA ? 0 : 0x80000000))
5220 .fault(
EL2, faultSctlr2EL2);
5229 .fault(
EL2, faultHcrxEL2);
5232 .fault(
EL2, faultDebugEL2)
5236 .fault(
EL2, faultCpacrEL2)
5247 .res0(0x0512c7c0 | (EnDB ? 0 : 0x2000)
5248 | (IESB ? 0 : 0x200000)
5249 | (EnDA ? 0 : 0x8000000)
5250 | (EnIB ? 0 : 0x40000000)
5251 | (EnIA ? 0 : 0x80000000))
5269 .allPrivileges().exceptUserMode()
5270 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr0EL1>)
5271 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr0EL1>)
5278 .allPrivileges().exceptUserMode()
5279 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::ttbr1EL1>)
5280 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::ttbr1EL1>)
5287 .allPrivileges().exceptUserMode()
5288 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::tcrEL1>)
5289 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::tcrEL1>)
5296 .allPrivileges().exceptUserMode()
5297 .faultRead(
EL1, faultTcr2EL1<true, &HCR::trvm>)
5298 .faultWrite(
EL1, faultTcr2EL1<false, &HCR::tvm>)
5299 .fault(
EL2, faultTcr2EL2);
5301 .fault(
EL2, faultVheEL2<faultTcr2EL2>)
5302 .fault(
EL3, faultTcr2VheEL3)
5314 .fault(
EL2, faultTcr2EL2);
5333 .allPrivileges().exceptUserMode()
5340 .allPrivileges().exceptUserMode();
5346 .allPrivileges().exceptUserMode()
5347 .fault(
EL1, faultSpEL0)
5348 .fault(
EL2, faultSpEL0)
5349 .fault(
EL3, faultSpEL0);
5351 .allPrivileges().exceptUserMode();
5353 .allPrivileges().exceptUserMode().writes(0);
5355 .allPrivileges(release->has(ArmExtension::FEAT_PAN))
5358 .allPrivileges().exceptUserMode();
5363 .fault(
EL0, faultDaif);
5366 .fault(
EL0, faultFpcrEL0)
5367 .fault(
EL1, faultFpcrEL1)
5368 .fault(
EL2, faultFpcrEL2)
5369 .fault(
EL3, faultFpcrEL3);
5372 .fault(
EL0, faultFpcrEL0)
5373 .fault(
EL1, faultFpcrEL1)
5374 .fault(
EL2, faultFpcrEL2)
5375 .fault(
EL3, faultFpcrEL3);
5403 .allPrivileges().exceptUserMode()
5404 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr0EL1>)
5405 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr0EL1>)
5412 .allPrivileges().exceptUserMode()
5413 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::afsr1EL1>)
5414 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::afsr1EL1>)
5421 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::esrEL1>)
5422 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::esrEL1>)
5423 .allPrivileges().exceptUserMode();
5441 .fault(
EL2, faultFpcrEL2)
5442 .fault(
EL3, faultFpcrEL3)
5451 .allPrivileges().exceptUserMode()
5452 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::farEL1>)
5453 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::farEL1>)
5469 .faultWrite(
EL1, faultPouIsEL1<&HFGITR::icialluis>)
5470 .writes(1).exceptUserMode();
5472 .allPrivileges().exceptUserMode()
5476 .faultWrite(
EL1, faultPouEL1<&HFGITR::iciallu>)
5477 .writes(1).exceptUserMode();
5479 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dcivac>)
5480 .writes(1).exceptUserMode();
5483 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dcisw>)
5484 .writes(1).exceptUserMode();
5486 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1r>)
5487 .writes(1).exceptUserMode();
5489 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e1w>)
5490 .writes(1).exceptUserMode();
5492 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0r>)
5493 .writes(1).exceptUserMode();
5495 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::at, &HFGITR::ats1e0w>)
5496 .writes(1).exceptUserMode();
5499 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccsw>)
5500 .writes(1).exceptUserMode();
5503 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tsw, &HFGITR::dccisw>)
5504 .writes(1).exceptUserMode();
5507 .faultWrite(
EL0, faultDczvaEL0)
5508 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tdz, &HFGITR::dczva>);
5510 .faultWrite(
EL0, faultPouEL0)
5511 .faultWrite(
EL1, faultPouEL1<&HFGITR::icivau>)
5514 .faultWrite(
EL0, faultCvacEL0)
5515 .faultWrite(
EL1, faultHcrEL1<&HCR::tpc>)
5518 .faultWrite(
EL0, faultPouEL0)
5519 .faultWrite(
EL1, faultPouEL1<&HFGITR::dccvau>)
5522 .faultWrite(
EL0, faultCvacEL0)
5523 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::tpc, &HFGITR::dccivac>)
5526 .monWrite().hypWrite();
5528 .monWrite().hypWrite();
5530 .hypWrite().monSecureWrite().monNonSecureWrite();
5532 .hypWrite().monSecureWrite().monNonSecureWrite();
5534 .hypWrite().monSecureWrite().monNonSecureWrite();
5536 .hypWrite().monSecureWrite().monNonSecureWrite();
5538 .monSecureWrite().monNonSecureWrite();
5540 .monSecureWrite().monNonSecureWrite();
5541 InitReg(MISCREG_TLBI_VMALLE1OS)
5542 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivmalle1os>)
5543 .writes(1).exceptUserMode();
5544 InitReg(MISCREG_TLBI_VAE1OS)
5545 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivae1os>)
5546 .writes(1).exceptUserMode();
5547 InitReg(MISCREG_TLBI_ASIDE1OS)
5548 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbiaside1os>)
5549 .writes(1).exceptUserMode();
5550 InitReg(MISCREG_TLBI_VAAE1OS)
5551 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaae1os>)
5552 .writes(1).exceptUserMode();
5553 InitReg(MISCREG_TLBI_VALE1OS)
5554 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivale1os>)
5555 .writes(1).exceptUserMode();
5556 InitReg(MISCREG_TLBI_VAALE1OS)
5557 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbivaale1os>)
5558 .writes(1).exceptUserMode();
5559 InitReg(MISCREG_TLBI_VMALLE1IS)
5560 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivmalle1is>)
5561 .writes(1).exceptUserMode();
5562 InitReg(MISCREG_TLBI_VAE1IS)
5563 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivae1is>)
5564 .writes(1).exceptUserMode();
5565 InitReg(MISCREG_TLBI_ASIDE1IS)
5566 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbiaside1is>)
5567 .writes(1).exceptUserMode();
5568 InitReg(MISCREG_TLBI_VAAE1IS)
5569 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaae1is>)
5570 .writes(1).exceptUserMode();
5571 InitReg(MISCREG_TLBI_VALE1IS)
5572 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivale1is>)
5573 .writes(1).exceptUserMode();
5574 InitReg(MISCREG_TLBI_VAALE1IS)
5575 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbivaale1is>)
5576 .writes(1).exceptUserMode();
5577 InitReg(MISCREG_TLBI_VMALLE1)
5578 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5579 .writes(1).exceptUserMode();
5580 InitReg(MISCREG_TLBI_VAE1)
5581 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5582 .writes(1).exceptUserMode();
5583 InitReg(MISCREG_TLBI_ASIDE1)
5584 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5585 .writes(1).exceptUserMode();
5586 InitReg(MISCREG_TLBI_VAAE1)
5587 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5588 .writes(1).exceptUserMode();
5589 InitReg(MISCREG_TLBI_VALE1)
5590 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5591 .writes(1).exceptUserMode();
5592 InitReg(MISCREG_TLBI_VAALE1)
5593 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5594 .writes(1).exceptUserMode();
5595 InitReg(MISCREG_TLBI_IPAS2E1OS)
5596 .monWrite().hypWrite();
5597 InitReg(MISCREG_TLBI_IPAS2LE1OS)
5598 .monWrite().hypWrite();
5599 InitReg(MISCREG_TLBI_ALLE2OS)
5600 .monWrite().hypWrite();
5601 InitReg(MISCREG_TLBI_VAE2OS)
5602 .monWrite().hypWrite();
5603 InitReg(MISCREG_TLBI_ALLE1OS)
5604 .monWrite().hypWrite();
5605 InitReg(MISCREG_TLBI_VALE2OS)
5606 .monWrite().hypWrite();
5607 InitReg(MISCREG_TLBI_VMALLS12E1OS)
5608 .monWrite().hypWrite();
5609 InitReg(MISCREG_TLBI_IPAS2E1IS)
5610 .monWrite().hypWrite();
5611 InitReg(MISCREG_TLBI_IPAS2LE1IS)
5612 .monWrite().hypWrite();
5613 InitReg(MISCREG_TLBI_ALLE2IS)
5614 .monWrite().hypWrite();
5615 InitReg(MISCREG_TLBI_VAE2IS)
5616 .monWrite().hypWrite();
5617 InitReg(MISCREG_TLBI_ALLE1IS)
5618 .monWrite().hypWrite();
5619 InitReg(MISCREG_TLBI_VALE2IS)
5620 .monWrite().hypWrite();
5621 InitReg(MISCREG_TLBI_VMALLS12E1IS)
5622 .monWrite().hypWrite();
5623 InitReg(MISCREG_TLBI_IPAS2E1)
5624 .monWrite().hypWrite();
5625 InitReg(MISCREG_TLBI_IPAS2LE1)
5626 .monWrite().hypWrite();
5627 InitReg(MISCREG_TLBI_ALLE2)
5628 .monWrite().hypWrite();
5629 InitReg(MISCREG_TLBI_VAE2)
5630 .monWrite().hypWrite();
5631 InitReg(MISCREG_TLBI_ALLE1)
5632 .monWrite().hypWrite();
5633 InitReg(MISCREG_TLBI_VALE2)
5634 .monWrite().hypWrite();
5635 InitReg(MISCREG_TLBI_VMALLS12E1)
5636 .monWrite().hypWrite();
5637 InitReg(MISCREG_TLBI_ALLE3OS)
5638 .monSecureWrite().monNonSecureWrite();
5639 InitReg(MISCREG_TLBI_VAE3OS)
5640 .monSecureWrite().monNonSecureWrite();
5641 InitReg(MISCREG_TLBI_VALE3OS)
5642 .monSecureWrite().monNonSecureWrite();
5643 InitReg(MISCREG_TLBI_ALLE3IS)
5644 .monSecureWrite().monNonSecureWrite();
5645 InitReg(MISCREG_TLBI_VAE3IS)
5646 .monSecureWrite().monNonSecureWrite();
5647 InitReg(MISCREG_TLBI_VALE3IS)
5648 .monSecureWrite().monNonSecureWrite();
5649 InitReg(MISCREG_TLBI_ALLE3)
5650 .monSecureWrite().monNonSecureWrite();
5651 InitReg(MISCREG_TLBI_VAE3)
5652 .monSecureWrite().monNonSecureWrite();
5653 InitReg(MISCREG_TLBI_VALE3)
5654 .monSecureWrite().monNonSecureWrite();
5656 InitReg(MISCREG_TLBI_RVAE1)
5657 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5658 .writes(1).exceptUserMode();
5659 InitReg(MISCREG_TLBI_RVAAE1)
5660 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5661 .writes(1).exceptUserMode();
5662 InitReg(MISCREG_TLBI_RVALE1)
5663 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5664 .writes(1).exceptUserMode();
5665 InitReg(MISCREG_TLBI_RVAALE1)
5666 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5667 .writes(1).exceptUserMode();
5668 InitReg(MISCREG_TLBI_RIPAS2E1)
5669 .hypWrite().monWrite();
5670 InitReg(MISCREG_TLBI_RIPAS2LE1)
5671 .hypWrite().monWrite();
5672 InitReg(MISCREG_TLBI_RVAE2)
5673 .hypWrite().monWrite();
5674 InitReg(MISCREG_TLBI_RVALE2)
5675 .hypWrite().monWrite();
5676 InitReg(MISCREG_TLBI_RVAE3)
5678 InitReg(MISCREG_TLBI_RVALE3)
5680 InitReg(MISCREG_TLBI_RVAE1IS)
5681 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvae1is>)
5682 .writes(1).exceptUserMode();
5683 InitReg(MISCREG_TLBI_RVAAE1IS)
5684 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaae1is>)
5685 .writes(1).exceptUserMode();
5686 InitReg(MISCREG_TLBI_RVALE1IS)
5687 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvale1is>)
5688 .writes(1).exceptUserMode();
5689 InitReg(MISCREG_TLBI_RVAALE1IS)
5690 .faultWrite(
EL1, faultTlbiIsEL1<&HFGITR::tlbirvaale1is>)
5691 .writes(1).exceptUserMode();
5692 InitReg(MISCREG_TLBI_RIPAS2E1IS)
5693 .hypWrite().monWrite();
5694 InitReg(MISCREG_TLBI_RIPAS2LE1IS)
5695 .hypWrite().monWrite();
5696 InitReg(MISCREG_TLBI_RVAE2IS)
5697 .hypWrite().monWrite();
5698 InitReg(MISCREG_TLBI_RVALE2IS)
5699 .hypWrite().monWrite();
5700 InitReg(MISCREG_TLBI_RVAE3IS)
5702 InitReg(MISCREG_TLBI_RVALE3IS)
5704 InitReg(MISCREG_TLBI_RVAE1OS)
5705 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvae1os>)
5706 .writes(1).exceptUserMode();
5707 InitReg(MISCREG_TLBI_RVAAE1OS)
5708 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaae1os>)
5709 .writes(1).exceptUserMode();
5710 InitReg(MISCREG_TLBI_RVALE1OS)
5711 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvale1os>)
5712 .writes(1).exceptUserMode();
5713 InitReg(MISCREG_TLBI_RVAALE1OS)
5714 .faultWrite(
EL1, faultTlbiOsEL1<&HFGITR::tlbirvaale1os>)
5715 .writes(1).exceptUserMode();
5716 InitReg(MISCREG_TLBI_RIPAS2E1OS)
5717 .hypWrite().monWrite();
5718 InitReg(MISCREG_TLBI_RIPAS2LE1OS)
5719 .hypWrite().monWrite();
5720 InitReg(MISCREG_TLBI_RVAE2OS)
5721 .hypWrite().monWrite();
5722 InitReg(MISCREG_TLBI_RVALE2OS)
5723 .hypWrite().monWrite();
5724 InitReg(MISCREG_TLBI_RVAE3OS)
5726 InitReg(MISCREG_TLBI_RVALE3OS)
5728 InitReg(MISCREG_TLBI_VMALLE1OSNXS)
5729 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivmalle1os>)
5730 .writes(1).exceptUserMode();
5731 InitReg(MISCREG_TLBI_VAE1OSNXS)
5732 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivae1os>)
5733 .writes(1).exceptUserMode();
5734 InitReg(MISCREG_TLBI_ASIDE1OSNXS)
5735 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbiaside1os>)
5736 .writes(1).exceptUserMode();
5737 InitReg(MISCREG_TLBI_VAAE1OSNXS)
5738 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaae1os>)
5739 .writes(1).exceptUserMode();
5740 InitReg(MISCREG_TLBI_VALE1OSNXS)
5741 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivale1os>)
5742 .writes(1).exceptUserMode();
5743 InitReg(MISCREG_TLBI_VAALE1OSNXS)
5744 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbivaale1os>)
5745 .writes(1).exceptUserMode();
5746 InitReg(MISCREG_TLBI_VMALLE1ISNXS)
5747 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivmalle1is>)
5748 .writes(1).exceptUserMode();
5749 InitReg(MISCREG_TLBI_VAE1ISNXS)
5750 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivae1is>)
5751 .writes(1).exceptUserMode();
5752 InitReg(MISCREG_TLBI_ASIDE1ISNXS)
5753 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbiaside1is>)
5754 .writes(1).exceptUserMode();
5755 InitReg(MISCREG_TLBI_VAAE1ISNXS)
5756 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaae1is>)
5757 .writes(1).exceptUserMode();
5758 InitReg(MISCREG_TLBI_VALE1ISNXS)
5759 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivale1is>)
5760 .writes(1).exceptUserMode();
5761 InitReg(MISCREG_TLBI_VAALE1ISNXS)
5762 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbivaale1is>)
5763 .writes(1).exceptUserMode();
5764 InitReg(MISCREG_TLBI_VMALLE1NXS)
5765 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivmalle1>)
5766 .writes(1).exceptUserMode();
5767 InitReg(MISCREG_TLBI_VAE1NXS)
5768 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivae1>)
5769 .writes(1).exceptUserMode();
5770 InitReg(MISCREG_TLBI_ASIDE1NXS)
5771 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbiaside1>)
5772 .writes(1).exceptUserMode();
5773 InitReg(MISCREG_TLBI_VAAE1NXS)
5774 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaae1>)
5775 .writes(1).exceptUserMode();
5776 InitReg(MISCREG_TLBI_VALE1NXS)
5777 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivale1>)
5778 .writes(1).exceptUserMode();
5779 InitReg(MISCREG_TLBI_VAALE1NXS)
5780 .faultWrite(
EL1, faultTlbiNxsEL1<&HCR::ttlb, &HFGITR::tlbivaale1>)
5781 .writes(1).exceptUserMode();
5782 InitReg(MISCREG_TLBI_IPAS2E1OSNXS)
5783 .hypWrite().monWrite();
5784 InitReg(MISCREG_TLBI_IPAS2LE1OSNXS)
5785 .hypWrite().monWrite();
5786 InitReg(MISCREG_TLBI_ALLE2OSNXS)
5787 .hypWrite().monWrite();
5788 InitReg(MISCREG_TLBI_VAE2OSNXS)
5789 .hypWrite().monWrite();
5790 InitReg(MISCREG_TLBI_ALLE1OSNXS)
5791 .hypWrite().monWrite();
5792 InitReg(MISCREG_TLBI_VALE2OSNXS)
5793 .hypWrite().monWrite();
5794 InitReg(MISCREG_TLBI_VMALLS12E1OSNXS)
5795 .hypWrite().monWrite();
5796 InitReg(MISCREG_TLBI_IPAS2E1ISNXS)
5797 .hypWrite().monWrite();
5798 InitReg(MISCREG_TLBI_IPAS2LE1ISNXS)
5799 .hypWrite().monWrite();
5800 InitReg(MISCREG_TLBI_ALLE2ISNXS)
5801 .hypWrite().monWrite();
5802 InitReg(MISCREG_TLBI_VAE2ISNXS)
5803 .hypWrite().monWrite();
5804 InitReg(MISCREG_TLBI_ALLE1ISNXS)
5805 .hypWrite().monWrite();
5806 InitReg(MISCREG_TLBI_VALE2ISNXS)
5807 .hypWrite().monWrite();
5808 InitReg(MISCREG_TLBI_VMALLS12E1ISNXS)
5809 .hypWrite().monWrite();
5810 InitReg(MISCREG_TLBI_IPAS2E1NXS)
5811 .hypWrite().monWrite();
5812 InitReg(MISCREG_TLBI_IPAS2LE1NXS)
5813 .hypWrite().monWrite();
5814 InitReg(MISCREG_TLBI_ALLE2NXS)
5815 .hypWrite().monWrite();
5816 InitReg(MISCREG_TLBI_VAE2NXS)
5817 .hypWrite().monWrite();
5818 InitReg(MISCREG_TLBI_ALLE1NXS)
5819 .hypWrite().monWrite();
5820 InitReg(MISCREG_TLBI_VALE2NXS)
5821 .hypWrite().monWrite();
5822 InitReg(MISCREG_TLBI_VMALLS12E1NXS)
5823 .hypWrite().monWrite();
5824 InitReg(MISCREG_TLBI_ALLE3OSNXS)
5826 InitReg(MISCREG_TLBI_VAE3OSNXS)
5828 InitReg(MISCREG_TLBI_VALE3OSNXS)
5830 InitReg(MISCREG_TLBI_ALLE3ISNXS)
5832 InitReg(MISCREG_TLBI_VAE3ISNXS)
5834 InitReg(MISCREG_TLBI_VALE3ISNXS)
5836 InitReg(MISCREG_TLBI_ALLE3NXS)
5838 InitReg(MISCREG_TLBI_VAE3NXS)
5840 InitReg(MISCREG_TLBI_VALE3NXS)
5843 InitReg(MISCREG_TLBI_RVAE1NXS)
5844 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvae1>)
5845 .writes(1).exceptUserMode();
5846 InitReg(MISCREG_TLBI_RVAAE1NXS)
5847 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaae1>)
5848 .writes(1).exceptUserMode();
5849 InitReg(MISCREG_TLBI_RVALE1NXS)
5850 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvale1>)
5851 .writes(1).exceptUserMode();
5852 InitReg(MISCREG_TLBI_RVAALE1NXS)
5853 .faultWrite(
EL1, faultHcrFgtInstEL1<&HCR::ttlb, &HFGITR::tlbirvaale1>)
5854 .writes(1).exceptUserMode();
5855 InitReg(MISCREG_TLBI_RIPAS2E1NXS)
5856 .hypWrite().monWrite();
5857 InitReg(MISCREG_TLBI_RIPAS2LE1NXS)
5858 .hypWrite().monWrite();
5859 InitReg(MISCREG_TLBI_RVAE2NXS)
5860 .hypWrite().monWrite();
5861 InitReg(MISCREG_TLBI_RVALE2NXS)
5862 .hypWrite().monWrite();
5863 InitReg(MISCREG_TLBI_RVAE3NXS)
5865 InitReg(MISCREG_TLBI_RVALE3NXS)
5867 InitReg(MISCREG_TLBI_RVAE1ISNXS)
5868 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvae1is>)
5869 .writes(1).exceptUserMode();
5870 InitReg(MISCREG_TLBI_RVAAE1ISNXS)
5871 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaae1is>)
5872 .writes(1).exceptUserMode();
5873 InitReg(MISCREG_TLBI_RVALE1ISNXS)
5874 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvale1is>)
5875 .writes(1).exceptUserMode();
5876 InitReg(MISCREG_TLBI_RVAALE1ISNXS)
5877 .faultWrite(
EL1, faultTlbiIsNxsEL1<&HFGITR::tlbirvaale1is>)
5878 .writes(1).exceptUserMode();
5879 InitReg(MISCREG_TLBI_RIPAS2E1ISNXS)
5880 .hypWrite().monWrite();
5881 InitReg(MISCREG_TLBI_RIPAS2LE1ISNXS)
5882 .hypWrite().monWrite();
5883 InitReg(MISCREG_TLBI_RVAE2ISNXS)
5884 .hypWrite().monWrite();
5885 InitReg(MISCREG_TLBI_RVALE2ISNXS)
5886 .hypWrite().monWrite();
5887 InitReg(MISCREG_TLBI_RVAE3ISNXS)
5889 InitReg(MISCREG_TLBI_RVALE3ISNXS)
5891 InitReg(MISCREG_TLBI_RVAE1OSNXS)
5892 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvae1os>)
5893 .writes(1).exceptUserMode();
5894 InitReg(MISCREG_TLBI_RVAAE1OSNXS)
5895 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaae1os>)
5896 .writes(1).exceptUserMode();
5897 InitReg(MISCREG_TLBI_RVALE1OSNXS)
5898 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvale1os>)
5899 .writes(1).exceptUserMode();
5900 InitReg(MISCREG_TLBI_RVAALE1OSNXS)
5901 .faultWrite(
EL1, faultTlbiOsNxsEL1<&HFGITR::tlbirvaale1os>)
5902 .writes(1).exceptUserMode();
5903 InitReg(MISCREG_TLBI_RIPAS2E1OSNXS)
5904 .hypWrite().monWrite();
5905 InitReg(MISCREG_TLBI_RIPAS2LE1OSNXS)
5906 .hypWrite().monWrite();
5907 InitReg(MISCREG_TLBI_RVAE2OSNXS)
5908 .hypWrite().monWrite();
5909 InitReg(MISCREG_TLBI_RVALE2OSNXS)
5910 .hypWrite().monWrite();
5911 InitReg(MISCREG_TLBI_RVAE3OSNXS)
5913 InitReg(MISCREG_TLBI_RVALE3OSNXS)
5916 .allPrivileges().exceptUserMode()
5919 .allPrivileges().exceptUserMode()
5957 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
5963 .allPrivileges().exceptUserMode()
5964 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::mairEL1>)
5965 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::mairEL1>)
5972 .allPrivileges().exceptUserMode()
5973 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::amairEL1>)
5974 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::amairEL1>)
5991 .allPrivileges().exceptUserMode();
5993 .allPrivileges().exceptUserMode();
5995 .allPrivileges().exceptUserMode()
5996 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::vbarEL1>)
5997 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::vbarEL1>)
6008 .allPrivileges().exceptUserMode().writes(0);
6026 .allPrivileges().exceptUserMode()
6027 .faultRead(
EL1, faultHcrFgtEL1<true, &HCR::trvm, &HFGTR::contextidrEL1>)
6028 .faultWrite(
EL1, faultHcrFgtEL1<false, &HCR::tvm, &HFGTR::contextidrEL1>)
6035 .allPrivileges().exceptUserMode()
6036 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL1>)
6037 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL1>)
6041 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrEL0>)
6042 .faultWrite(
EL0, faultFgtEL0<false, &HFGTR::tpidrEL0>)
6043 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrEL0>)
6044 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrEL0>)
6047 .allPrivileges().userNonSecureWrite(0).userSecureWrite(0)
6048 .faultRead(
EL0, faultFgtEL0<true, &HFGTR::tpidrroEL0>)
6049 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::tpidrroEL0>)
6050 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::tpidrroEL0>)
6060 .faultRead(
EL0, faultGenericTimerEL0)
6062 .privSecureWrite(aarch32EL3)
6066 .faultRead(
EL0, faultCntpctEL0)
6067 .faultRead(
EL1, faultCntpctEL1)
6072 .faultRead(
EL0, faultCntvctEL0)
6073 .faultRead(
EL1, faultCntvctEL1)
6078 .fault(
EL0, faultCntpCtlEL0)
6079 .fault(
EL1, faultCntpCtlEL1)
6080 .res0(0xfffffffffffffff8)
6084 .fault(
EL0, faultCntpCtlEL0)
6085 .fault(
EL1, faultCntpCtlEL1)
6089 .fault(
EL0, faultCntpCtlEL0)
6090 .fault(
EL1, faultCntpCtlEL1)
6091 .res0(0xffffffff00000000)
6095 .fault(
EL0, faultCntvCtlEL0)
6096 .fault(
EL1, faultCntvCtlEL1)
6097 .res0(0xfffffffffffffff8)
6101 .fault(
EL0, faultCntvCtlEL0)
6102 .fault(
EL1, faultCntvCtlEL1)
6106 .fault(
EL0, faultCntvCtlEL0)
6107 .fault(
EL1, faultCntvCtlEL1)
6108 .res0(0xffffffff00000000)
6113 .res0(0xfffffffffffffff8)
6122 .res0(0xffffffff00000000)
6127 .res0(0xfffffffffffffff8)
6136 .res0(0xffffffff00000000)
6141 .res0(0xfffffffffffdfc00)
6146 .res0(0xfffffffffffdfc00)
6151 .fault(
EL1, faultCntpsCtlEL1)
6152 .res0(0xfffffffffffffff8);
6156 .fault(
EL1, faultCntpsCtlEL1);
6160 .fault(
EL1, faultCntpsCtlEL1)
6161 .res0(0xffffffff00000000);
6165 .res0(0xfffffffffffc0000)
6170 .res0(0xfffffffffffffff8)
6179 .res0(0xffffffff00000000)
6182 .mon(sel2_implemented)
6183 .hypSecure(sel2_implemented)
6184 .res0(0xfffffffffffffff8);
6186 .mon(sel2_implemented)
6187 .hypSecure(sel2_implemented);
6189 .mon(sel2_implemented)
6190 .hypSecure(sel2_implemented)
6191 .res0(0xffffffff00000000);
6193 .mon(vhe_implemented)
6195 .res0(0xfffffffffffffff8);
6197 .mon(vhe_implemented)
6198 .hyp(vhe_implemented);
6200 .mon(vhe_implemented)
6201 .hyp(vhe_implemented)
6202 .res0(0xffffffff00000000);
6204 .mon(vhe_implemented && sel2_implemented)
6205 .hypSecure(vhe_implemented && sel2_implemented)
6206 .res0(0xfffffffffffffff8);
6208 .mon(vhe_implemented && sel2_implemented)
6209 .hypSecure(vhe_implemented && sel2_implemented);
6211 .mon(vhe_implemented && sel2_implemented)
6212 .hypSecure(vhe_implemented && sel2_implemented)
6213 .res0(0xffffffff00000000);
6257 .allPrivileges().exceptUserMode();
6259 .allPrivileges().exceptUserMode();
6261 .allPrivileges().exceptUserMode();
6263 .allPrivileges().exceptUserMode();
6265 .allPrivileges().exceptUserMode();
6267 .allPrivileges().exceptUserMode();
6269 .allPrivileges().exceptUserMode();
6271 .allPrivileges().exceptUserMode();
6273 .allPrivileges().exceptUserMode();
6275 .allPrivileges().exceptUserMode();
6277 .allPrivileges().exceptUserMode();
6279 .allPrivileges().exceptUserMode();
6281 .allPrivileges().exceptUserMode();
6284 .fault(faultUnimplemented);
6286 .allPrivileges().exceptUserMode().writes(0);
6293 .allPrivileges().exceptUserMode()
6296 .allPrivileges().exceptUserMode().writes(0)
6299 .allPrivileges().exceptUserMode().reads(0)
6302 .allPrivileges().exceptUserMode().writes(0)
6306 .allPrivileges().exceptUserMode()
6309 .allPrivileges().exceptUserMode()
6312 .allPrivileges().exceptUserMode()
6315 .allPrivileges().exceptUserMode()
6318 .allPrivileges().exceptUserMode()
6325 .allPrivileges().exceptUserMode()
6329 .allPrivileges().exceptUserMode()
6336 .allPrivileges().exceptUserMode()
6340 .allPrivileges().exceptUserMode()
6347 .allPrivileges().exceptUserMode()
6351 .allPrivileges().exceptUserMode()
6358 .allPrivileges().exceptUserMode()
6362 .allPrivileges().exceptUserMode()
6366 .allPrivileges().exceptUserMode().reads(0)
6369 .allPrivileges().exceptUserMode().writes(0)
6372 .allPrivileges().exceptUserMode().reads(0)
6373 .faultWrite(
EL1, faultIccSgiEL1)
6374 .faultWrite(
EL2, faultIccSgiEL2)
6377 .allPrivileges().exceptUserMode().reads(0)
6378 .faultWrite(
EL1, faultIccSgiEL1)
6379 .faultWrite(
EL2, faultIccSgiEL2)
6382 .allPrivileges().exceptUserMode().reads(0)
6383 .faultWrite(
EL1, faultIccSgiEL1)
6384 .faultWrite(
EL2, faultIccSgiEL2)
6387 .allPrivileges().exceptUserMode().writes(0)
6391 .allPrivileges().exceptUserMode().reads(0)
6394 .allPrivileges().exceptUserMode().writes(0)
6402 .allPrivileges().exceptUserMode()
6407 .secure().exceptUserMode()
6415 .allPrivileges().exceptUserMode()
6420 .secure().exceptUserMode()
6428 .allPrivileges().exceptUserMode()
6433 .secure().exceptUserMode()
6437 .allPrivileges().exceptUserMode()
6438 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6439 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6443 .faultRead(
EL1, faultFgtEL1<true, &HFGTR::iccIgrpEnEL1>)
6444 .faultWrite(
EL1, faultFgtEL1<false, &HFGTR::iccIgrpEnEL1>)
6449 .allPrivileges().exceptUserMode()
6454 .secure().exceptUserMode()
6497 .hyp().mon().writes(0)
6500 .hyp().mon().writes(0)
6503 .hyp().mon().writes(0)
6506 .hyp().mon().writes(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();
6578 .allPrivileges().exceptUserMode();
6580 .allPrivileges().exceptUserMode();
6582 .allPrivileges().exceptUserMode();
6584 .allPrivileges().exceptUserMode();
6586 .allPrivileges().exceptUserMode();
6588 .allPrivileges().exceptUserMode();
6590 .allPrivileges().exceptUserMode();
6592 .allPrivileges().exceptUserMode();
6594 .allPrivileges().exceptUserMode().reads(0);
6596 .allPrivileges().exceptUserMode();
6598 .allPrivileges().exceptUserMode();
6600 .allPrivileges().exceptUserMode();
6602 .allPrivileges().exceptUserMode();
6604 .allPrivileges().exceptUserMode();
6606 .allPrivileges().exceptUserMode();
6608 .allPrivileges().exceptUserMode();
6610 .allPrivileges().exceptUserMode().reads(0);
6612 .allPrivileges().exceptUserMode().reads(0);
6614 .allPrivileges().exceptUserMode().reads(0);
6616 .allPrivileges().exceptUserMode().writes(0);
6618 .allPrivileges().exceptUserMode().writes(0);
6622 .allPrivileges().exceptUserMode().writes(0);
6624 .allPrivileges().exceptUserMode().writes(0);
6626 .allPrivileges().exceptUserMode();
6628 .allPrivileges().exceptUserMode();
6630 .allPrivileges().exceptUserMode();
6632 .allPrivileges().exceptUserMode();
6640 .allPrivileges().exceptUserMode();
6642 .allPrivileges().exceptUserMode().writes(0);
6644 .allPrivileges().exceptUserMode().reads(0);
6646 .allPrivileges().exceptUserMode().reads(0);
6648 .allPrivileges().exceptUserMode();
6650 .allPrivileges().exceptUserMode();
6652 .allPrivileges().exceptUserMode();
6673 .hyp().mon().writes(0);
6675 .hyp().mon().writes(0);
6677 .hyp().mon().writes(0);
6679 .hyp().mon().writes(0);
6750 AA64ZFR0 zfr0_el1 = 0;
6751 zfr0_el1.f32mm = release->has(ArmExtension::FEAT_F32MM) ? 1 : 0;
6752 zfr0_el1.f64mm = release->has(ArmExtension::FEAT_F64MM) ? 1 : 0;
6753 zfr0_el1.i8mm = release->has(ArmExtension::FEAT_I8MM) ? 1 : 0;
6755 release->has(ArmExtension::FEAT_SVE_B16B16) ? 0x1 : 0x0;
6756 zfr0_el1.bf16 = release->has(ArmExtension::FEAT_EBF16) ? 0x2 :
6757 (release->has(ArmExtension::FEAT_BF16) ? 0x1 : 0x0);
6759 release->has(ArmExtension::FEAT_SVE2p1)
6761 : (release->has(ArmExtension::FEAT_SVE2) ? 0x1 : 0x0);
6763 release->has(ArmExtension::FEAT_SVE_BitPerm) ? 0x1 : 0x0;
6766 .faultRead(
EL0, faultIdst)
6767 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6768 .allPrivileges().exceptUserMode().writes(0);
6771 .fault(
EL3, faultZcrEL3)
6775 .fault(
EL2, faultZcrEL2)
6776 .fault(
EL3, faultZcrEL3)
6779 .fault(
EL2, faultVheEL2<faultZcrEL2>)
6784 .fault(
EL1, faultZcrEL1)
6785 .fault(
EL2, faultZcrEL2)
6786 .fault(
EL3, faultZcrEL3)
6787 .allPrivileges().exceptUserMode();
6792 AA64SMFR0 smfr0_el1 = 0;
6793 smfr0_el1.f32f32 = 0x1;
6797 smfr0_el1.b16f32 = 0x1;
6798 smfr0_el1.f16f32 = 0x1;
6799 smfr0_el1.i8i32 = 0xF;
6800 smfr0_el1.f64f64 = 0x1;
6801 smfr0_el1.i16i64 = 0xF;
6802 smfr0_el1.smEver = 0;
6803 smfr0_el1.fa64 = 0x1;
6806 .faultRead(
EL0, faultIdst)
6807 .faultRead(
EL1, faultHcrEL1<&HCR::tid3>)
6808 .allPrivileges().writes(0);
6816 .fault(
EL0, faultSmenEL0)
6817 .fault(
EL1, faultSmenEL1)
6818 .fault(
EL2, faultTsmSmen)
6819 .fault(
EL3, faultEsm)
6823 SMIDR smidr_el1 = 0;
6824 smidr_el1.affinity = 0;
6826 smidr_el1.implementer = 0x41;
6829 .faultRead(
EL0, faultIdst)
6830 .faultRead(
EL1, faultHcrEL1<&HCR::tid1>)
6831 .allPrivileges().writes(0);
6834 .fault(
EL1, faultEsm)
6835 .fault(
EL2, faultEsm)
6836 .fault(
EL3, faultEsm)
6837 .allPrivileges().exceptUserMode();
6839 .fault(
EL2, faultEsm)
6840 .fault(
EL3, faultEsm)
6851 smcr_el3.len = smeVL - 1;
6854 .fault(
EL3, faultEsm)
6865 smcr_el2.len = smeVL - 1;
6868 .fault(
EL2, faultTsmSmen)
6869 .fault(
EL3, faultEsm)
6872 .allPrivileges().exceptUserMode();
6882 smcr_el1.len = smeVL - 1;
6885 .fault(
EL1, faultSmenEL1)
6886 .fault(
EL2, faultTsmSmen)
6887 .fault(
EL3, faultEsm)
6888 .allPrivileges().exceptUserMode();
6893 .faultRead(
EL0, faultRng)
6894 .faultRead(
EL1, faultRng)
6895 .faultRead(
EL2, faultRng)
6896 .faultRead(
EL3, faultRng)
6898 .allPrivileges().writes(0);
6900 .faultRead(
EL0, faultRng)
6901 .faultRead(
EL1, faultRng)
6902 .faultRead(
EL2, faultRng)
6903 .faultRead(
EL3, faultRng)
6905 .allPrivileges().writes(0);
6909 .fault(
EL2, faultFgtCtrlRegs)
6910 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6912 .fault(
EL2, faultFgtCtrlRegs)
6913 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6915 .fault(
EL2, faultFgtCtrlRegs)
6916 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6918 .fault(
EL2, faultFgtCtrlRegs)
6919 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6921 .fault(
EL2, faultFgtCtrlRegs)
6922 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6924 .fault(
EL2, faultFgtCtrlRegs)
6925 .hyp().mon(release->has(ArmExtension::FEAT_FGT));
6931 .allPrivileges().exceptUserMode().writes(0);
6934 .fault(
EL1, faultImpdefUnimplEL1)
6935 .fault(
EL2, faultUnimplemented)
6936 .fault(
EL3, faultUnimplemented)
6937 .warnNotFail(impdefAsNop);
6942 .fault(faultUnimplemented);
6945 .fault(faultUnimplemented);
6948 .fault(faultUnimplemented);
6951 .fault(faultUnimplemented);
6954 .fault(faultUnimplemented);
6957 .fault(faultUnimplemented);
6960 .fault(faultUnimplemented);
6963 .fault(faultUnimplemented);
6966 .fault(faultUnimplemented);
6969 .fault(faultUnimplemented);
6972 .fault(faultUnimplemented);
6976 .reset(
p.mpamidr_el1)
6978 .faultRead(
EL1, faultMpamIdrEL1)
6979 .faultRead(
EL2, faultMpamEL2)
6980 .allPrivileges().exceptUserMode().writes(0);
6983 .fault(
EL1, faultMpam0EL1)
6984 .fault(
EL2, faultMpamEL2)
6985 .priv().hyp().mon();
6988 .fault(
EL1, faultMpam1EL1)
6989 .fault(
EL2, faultMpamEL2)
6990 .priv().hyp().mon();
6993 .fault(
EL2, faultMpam12EL2)
6998 .fault(
EL2, faultMpamEL2)
7002 .fault(
EL2, faultMpamEL2)
7005 .fault(
EL2, faultMpamEL2)
7008 .fault(
EL2, faultMpamEL2)
7011 .fault(
EL2, faultMpamEL2)
7014 .fault(
EL2, faultMpamEL2)
7017 .fault(
EL2, faultMpamEL2)
7020 .fault(
EL2, faultMpamEL2)
7023 .fault(
EL2, faultMpamEL2)
7026 .fault(
EL2, faultMpamEL2)
7030 .fault(
EL2, faultMpamEL2)
7037 .fault(
EL1, faultMpamsmEL1)
7038 .fault(
EL2, faultMpamEL2)
7039 .allPrivileges().exceptUserMode();
7043 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPire0EL1>)
7044 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPire0EL1>)
7045 .fault(
EL2, faultPieEL2)
7048 .fault(
EL2, faultPieEL2)
7051 .faultRead(
EL1, faultPieEL1<true, &HCR::trvm, &HFGTR::nPirEL1>)
7052 .faultWrite(
EL1, faultPieEL1<false, &HCR::tvm, &HFGTR::nPirEL1>)
7053 .fault(
EL2, faultPieEL2)
7056 .fault(
EL2, faultVheEL2<faultPieEL2>)
7060 .fault(
EL2, faultVheEL2<faultPieEL2>)
7064 .fault(
EL2, faultPieEL2)
7080 assert(idxToMiscRegNum.empty());
7081 for (
const auto& [key,
val] : miscRegNumToIdx) {
7082 idxToMiscRegNum.insert({
val, key});