arm: Don't truncate 16-bit ASIDs to 8 bits
The ISA code sometimes stores 16-bit ASIDs as 8-bit unsigned integers and has a couple of inverted checks that mask out the high 8 bits of an ASID if 16-bit ASIDs have been /enabled/. This changeset fixes both of those issues.
This commit is contained in:
parent
804b11a3ed
commit
3b4ae7debb
2 changed files with 5 additions and 5 deletions
|
@ -1386,7 +1386,7 @@ ISA::setMiscReg(int misc_reg, const MiscReg &val, ThreadContext *tc)
|
||||||
oc = sys->getThreadContext(x);
|
oc = sys->getThreadContext(x);
|
||||||
assert(oc->getITBPtr() && oc->getDTBPtr());
|
assert(oc->getITBPtr() && oc->getDTBPtr());
|
||||||
asid = bits(newVal, 63, 48);
|
asid = bits(newVal, 63, 48);
|
||||||
if (haveLargeAsid64)
|
if (!haveLargeAsid64)
|
||||||
asid &= mask(8);
|
asid &= mask(8);
|
||||||
oc->getITBPtr()->flushAsid(asid, secure_lookup, target_el);
|
oc->getITBPtr()->flushAsid(asid, secure_lookup, target_el);
|
||||||
oc->getDTBPtr()->flushAsid(asid, secure_lookup, target_el);
|
oc->getDTBPtr()->flushAsid(asid, secure_lookup, target_el);
|
||||||
|
@ -1941,10 +1941,10 @@ ISA::updateBootUncacheable(int sctlr_idx, ThreadContext *tc)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ISA::tlbiVA(ThreadContext *tc, MiscReg newVal, uint8_t asid, bool secure_lookup,
|
ISA::tlbiVA(ThreadContext *tc, MiscReg newVal, uint16_t asid,
|
||||||
uint8_t target_el)
|
bool secure_lookup, uint8_t target_el)
|
||||||
{
|
{
|
||||||
if (haveLargeAsid64)
|
if (!haveLargeAsid64)
|
||||||
asid &= mask(8);
|
asid &= mask(8);
|
||||||
Addr va = ((Addr) bits(newVal, 43, 0)) << 12;
|
Addr va = ((Addr) bits(newVal, 43, 0)) << 12;
|
||||||
System *sys = tc->getSystemPtr();
|
System *sys = tc->getSystemPtr();
|
||||||
|
|
|
@ -221,7 +221,7 @@ namespace ArmISA
|
||||||
assert(!cpsr.width);
|
assert(!cpsr.width);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlbiVA(ThreadContext *tc, MiscReg newVal, uint8_t asid,
|
void tlbiVA(ThreadContext *tc, MiscReg newVal, uint16_t asid,
|
||||||
bool secure_lookup, uint8_t target_el);
|
bool secure_lookup, uint8_t target_el);
|
||||||
|
|
||||||
void tlbiALL(ThreadContext *tc, bool secure_lookup, uint8_t target_el);
|
void tlbiALL(ThreadContext *tc, bool secure_lookup, uint8_t target_el);
|
||||||
|
|
Loading…
Reference in a new issue