{
Addr ttbr = 0;
+ // For short descriptors, translation configs are held in
+ // TTBR1.
+ RegVal ttbr1 = currState->tc->readMiscReg(snsBankedIndex(
+ MISCREG_TTBR1, currState->tc, !currState->isSecure));
+
+ const auto irgn0_mask = 0x1;
+ const auto irgn1_mask = 0x40;
+ currState->isUncacheable = (ttbr1 & (irgn0_mask | irgn1_mask)) == 0;
+
// If translation isn't enabled, we shouldn't be here
assert(currState->sctlr.m || isStage2);
const bool is_atomic = currState->req->isAtomic();
ArmFault::TranslationLL + L1, isStage2,
ArmFault::VmsaTran);
}
- ttbr = currState->tc->readMiscReg(snsBankedIndex(
- MISCREG_TTBR1, currState->tc, !currState->isSecure));
+ ttbr = ttbr1;
currState->ttbcr.n = 0;
}
}
Request::Flags flag = Request::PT_WALK;
- if (currState->sctlr.c == 0) {
+ if (currState->sctlr.c == 0 || currState->isUncacheable) {
flag.set(Request::UNCACHEABLE);
}
}
Request::Flags flag = Request::PT_WALK;
+
+ if (currState->sctlr.c == 0 || currState->isUncacheable) {
+ flag.set(Request::UNCACHEABLE);
+ }
+
if (currState->isSecure)
flag.set(Request::SECURE);