713d712
< int x;
716,717d714
< System *sys;
< ThreadContext *oc;
1032,1046c1029
< sys = tc->getSystemPtr();
< for (x = 0; x < sys->numContexts(); x++) {
< oc = sys->getThreadContext(x);
< getITBPtr(oc)->flushAllSecurity(secure_lookup, target_el);
< getDTBPtr(oc)->flushAllSecurity(secure_lookup, target_el);
<
< // If CheckerCPU is connected, need to notify it of a flush
< CheckerCPU *checker = oc->getCheckerCpuPtr();
< if (checker) {
< getITBPtr(checker)->flushAllSecurity(secure_lookup,
< target_el);
< getDTBPtr(checker)->flushAllSecurity(secure_lookup,
< target_el);
< }
< }
---
> tlbiALL(tc, secure_lookup, target_el);
1076,1093c1059,1060
< sys = tc->getSystemPtr();
< for (x = 0; x < sys->numContexts(); x++) {
< oc = sys->getThreadContext(x);
< getITBPtr(oc)->flushMvaAsid(mbits(newVal, 31, 12),
< bits(newVal, 7,0),
< secure_lookup, target_el);
< getDTBPtr(oc)->flushMvaAsid(mbits(newVal, 31, 12),
< bits(newVal, 7,0),
< secure_lookup, target_el);
<
< CheckerCPU *checker = oc->getCheckerCpuPtr();
< if (checker) {
< getITBPtr(checker)->flushMvaAsid(mbits(newVal, 31, 12),
< bits(newVal, 7,0), secure_lookup, target_el);
< getDTBPtr(checker)->flushMvaAsid(mbits(newVal, 31, 12),
< bits(newVal, 7,0), secure_lookup, target_el);
< }
< }
---
> tlbiVA(tc, mbits(newVal, 31, 12), bits(newVal, 7,0),
> secure_lookup, target_el);
1102,1116c1069,1070
< sys = tc->getSystemPtr();
< for (x = 0; x < sys->numContexts(); x++) {
< oc = sys->getThreadContext(x);
< getITBPtr(oc)->flushAsid(bits(newVal, 7,0),
< secure_lookup, target_el);
< getDTBPtr(oc)->flushAsid(bits(newVal, 7,0),
< secure_lookup, target_el);
< CheckerCPU *checker = oc->getCheckerCpuPtr();
< if (checker) {
< getITBPtr(checker)->flushAsid(bits(newVal, 7,0),
< secure_lookup, target_el);
< getDTBPtr(checker)->flushAsid(bits(newVal, 7,0),
< secure_lookup, target_el);
< }
< }
---
> asid = bits(newVal, 7,0);
> tlbiASID(tc, asid, secure_lookup, target_el);
1131c1085
< tlbiMVA(tc, newVal, secure_lookup, hyp, target_el);
---
> tlbiMVA(tc, mbits(newVal, 31,12), secure_lookup, hyp, target_el);
1146c1100
< tlbiMVA(tc, newVal, secure_lookup, hyp, target_el);
---
> tlbiMVA(tc, mbits(newVal, 31,12), secure_lookup, hyp, target_el);
1254c1208,1209
< tlbiVA(tc, newVal, asid, secure_lookup, target_el);
---
> tlbiVA(tc, ((Addr) bits(newVal, 43, 0)) << 12,
> asid, secure_lookup, target_el);
1267c1222,1223
< tlbiVA(tc, newVal, asid, secure_lookup, target_el);
---
> tlbiVA(tc, ((Addr) bits(newVal, 43, 0)) << 12,
> asid, secure_lookup, target_el);
1279c1235,1236
< tlbiVA(tc, newVal, asid, secure_lookup, target_el);
---
> tlbiVA(tc, ((Addr) bits(newVal, 43, 0)) << 12,
> asid, secure_lookup, target_el);
1289,1304c1246,1247
< sys = tc->getSystemPtr();
< for (x = 0; x < sys->numContexts(); x++) {
< oc = sys->getThreadContext(x);
< asid = bits(newVal, 63, 48);
< if (!haveLargeAsid64)
< asid &= mask(8);
< getITBPtr(oc)->flushAsid(asid, secure_lookup, target_el);
< getDTBPtr(oc)->flushAsid(asid, secure_lookup, target_el);
< CheckerCPU *checker = oc->getCheckerCpuPtr();
< if (checker) {
< getITBPtr(checker)->flushAsid(asid,
< secure_lookup, target_el);
< getDTBPtr(checker)->flushAsid(asid,
< secure_lookup, target_el);
< }
< }
---
> asid = bits(newVal, 63, 48);
> tlbiASID(tc, asid, secure_lookup, target_el);
1318,1323c1261,1262
< sys = tc->getSystemPtr();
< for (x = 0; x < sys->numContexts(); x++) {
< // @todo: extra controls on TLBI broadcast?
< oc = sys->getThreadContext(x);
< Addr va = ((Addr) bits(newVal, 43, 0)) << 12;
< getITBPtr(oc)->flushMva(va,
---
> tlbiMVA(tc,
> ((Addr)bits(newVal, 43, 0)) << 12,
1325,1335d1263
< getDTBPtr(oc)->flushMva(va,
< secure_lookup, false, target_el);
<
< CheckerCPU *checker = oc->getCheckerCpuPtr();
< if (checker) {
< getITBPtr(checker)->flushMva(va,
< secure_lookup, false, target_el);
< getDTBPtr(checker)->flushMva(va,
< secure_lookup, false, target_el);
< }
< }
1794c1722
< ISA::tlbiVA(ThreadContext *tc, MiscReg newVal, uint16_t asid,
---
> ISA::tlbiVA(ThreadContext *tc, Addr va, uint16_t asid,
1799d1726
< Addr va = ((Addr) bits(newVal, 43, 0)) << 12;
1856c1783
< ISA::tlbiMVA(ThreadContext *tc, MiscReg newVal, bool secure_lookup, bool hyp,
---
> ISA::tlbiMVA(ThreadContext *tc, Addr va, bool secure_lookup, bool hyp,
1862,1865c1789,1790
< getITBPtr(oc)->flushMva(mbits(newVal, 31,12),
< secure_lookup, hyp, target_el);
< getDTBPtr(oc)->flushMva(mbits(newVal, 31,12),
< secure_lookup, hyp, target_el);
---
> getITBPtr(oc)->flushMva(va, secure_lookup, hyp, target_el);
> getDTBPtr(oc)->flushMva(va, secure_lookup, hyp, target_el);
1869,1872c1794,1795
< getITBPtr(checker)->flushMva(mbits(newVal, 31,12),
< secure_lookup, hyp, target_el);
< getDTBPtr(checker)->flushMva(mbits(newVal, 31,12),
< secure_lookup, hyp, target_el);
---
> getITBPtr(checker)->flushMva(va, secure_lookup, hyp, target_el);
> getDTBPtr(checker)->flushMva(va, secure_lookup, hyp, target_el);
1899a1823,1842
> void
> ISA::tlbiASID(ThreadContext *tc, uint16_t asid, bool secure_lookup,
> uint8_t target_el)
> {
> if (!haveLargeAsid64)
> asid &= mask(8);
>
> System *sys = tc->getSystemPtr();
> for (auto x = 0; x < sys->numContexts(); x++) {
> tc = sys->getThreadContext(x);
> getITBPtr(tc)->flushAsid(asid, secure_lookup, target_el);
> getDTBPtr(tc)->flushAsid(asid, secure_lookup, target_el);
> CheckerCPU *checker = tc->getCheckerCpuPtr();
> if (checker) {
> getITBPtr(checker)->flushAsid(asid, secure_lookup, target_el);
> getDTBPtr(checker)->flushAsid(asid, secure_lookup, target_el);
> }
> }
> }
>