diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/alpha/tlb.cc | 2 | ||||
-rw-r--r-- | src/arch/arm/tlb.cc | 14 | ||||
-rw-r--r-- | src/arch/mips/tlb.cc | 2 | ||||
-rw-r--r-- | src/arch/power/tlb.cc | 2 | ||||
-rw-r--r-- | src/arch/sparc/tlb.cc | 14 | ||||
-rw-r--r-- | src/arch/x86/tlb.cc | 8 |
6 files changed, 23 insertions, 19 deletions
diff --git a/src/arch/alpha/tlb.cc b/src/arch/alpha/tlb.cc index bcf61f3bf..a740da388 100644 --- a/src/arch/alpha/tlb.cc +++ b/src/arch/alpha/tlb.cc @@ -225,7 +225,7 @@ TLB::checkCacheability(RequestPtr &req, bool itb) "IPR memory space not implemented!"); } else { // mark request as uncacheable - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); // Clear bits 42:35 of the physical address (10-2 in // Tsunami manual) diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index 4674e5889..8c3bb047d 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -985,13 +985,13 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode, if (flags & Request::CLEAR_LL){ // @todo: check implications of security extensions req->setPaddr(0); - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); req->setFlags(Request::CLEAR_LL); return NoFault; } if ((req->isInstFetch() && (!sctlr.i)) || ((!req->isInstFetch()) && (!sctlr.c))){ - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } if (!is_fetch) { assert(flags & MustBeOne); @@ -1018,10 +1018,10 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode, // @todo: double check this (ARM ARM issue C B3.2.1) if (long_desc_format || sctlr.tre == 0) { - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } else { if (nmrr.ir0 == 0 || nmrr.or0 == 0 || prrr.tr0 != 0x2) - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } // Set memory attributes @@ -1074,9 +1074,9 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode, te->shareable, te->innerAttrs, te->outerAttrs, static_cast<uint8_t>(te->mtype), isStage2); setAttr(te->attributes); - if (te->nonCacheable) { - req->setFlags(Request::UNCACHEABLE); - } + + if (te->nonCacheable) + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); Addr pa = te->pAddr(vaddr); req->setPaddr(pa); diff --git a/src/arch/mips/tlb.cc b/src/arch/mips/tlb.cc index b43797541..6c46cacc6 100644 --- a/src/arch/mips/tlb.cc +++ b/src/arch/mips/tlb.cc @@ -148,7 +148,7 @@ TLB::checkCacheability(RequestPtr &req) // address or by the TLB entry if ((req->getVaddr() & VAddrUncacheable) == VAddrUncacheable) { // mark request as uncacheable - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } return NoFault; } diff --git a/src/arch/power/tlb.cc b/src/arch/power/tlb.cc index 950483893..458ed29bf 100644 --- a/src/arch/power/tlb.cc +++ b/src/arch/power/tlb.cc @@ -150,7 +150,7 @@ TLB::checkCacheability(RequestPtr &req) if ((req->getVaddr() & VAddrUncacheable) == VAddrUncacheable) { // mark request as uncacheable - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } return NoFault; } diff --git a/src/arch/sparc/tlb.cc b/src/arch/sparc/tlb.cc index c4994657d..84d748dd3 100644 --- a/src/arch/sparc/tlb.cc +++ b/src/arch/sparc/tlb.cc @@ -571,8 +571,10 @@ TLB::translateData(RequestPtr req, ThreadContext *tc, bool write) ce_va < vaddr + size && ce_va + ce->range.size > vaddr && (!write || ce->pte.writable())) { req->setPaddr(ce->pte.translate(vaddr)); - if (ce->pte.sideffect() || (ce->pte.paddr() >> 39) & 1) - req->setFlags(Request::UNCACHEABLE); + if (ce->pte.sideffect() || (ce->pte.paddr() >> 39) & 1) { + req->setFlags( + Request::UNCACHEABLE | Request::STRICT_ORDER); + } DPRINTF(TLB, "TLB: %#X -> %#X\n", vaddr, req->getPaddr()); return NoFault; } // if matched @@ -584,8 +586,10 @@ TLB::translateData(RequestPtr req, ThreadContext *tc, bool write) ce_va < vaddr + size && ce_va + ce->range.size > vaddr && (!write || ce->pte.writable())) { req->setPaddr(ce->pte.translate(vaddr)); - if (ce->pte.sideffect() || (ce->pte.paddr() >> 39) & 1) - req->setFlags(Request::UNCACHEABLE); + if (ce->pte.sideffect() || (ce->pte.paddr() >> 39) & 1) { + req->setFlags( + Request::UNCACHEABLE | Request::STRICT_ORDER); + } DPRINTF(TLB, "TLB: %#X -> %#X\n", vaddr, req->getPaddr()); return NoFault; } // if matched @@ -748,7 +752,7 @@ TLB::translateData(RequestPtr req, ThreadContext *tc, bool write) } if (e->pte.sideffect() || (e->pte.paddr() >> 39) & 1) - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); // cache translation date for next translation cacheState = tlbdata; diff --git a/src/arch/x86/tlb.cc b/src/arch/x86/tlb.cc index dd0aed770..86e051deb 100644 --- a/src/arch/x86/tlb.cc +++ b/src/arch/x86/tlb.cc @@ -206,7 +206,7 @@ TLB::translateInt(RequestPtr req, ThreadContext *tc) req->setFlags(Request::MMAPPED_IPR); req->setPaddr(MISCREG_PCI_CONFIG_ADDRESS * sizeof(MiscReg)); } else if ((IOPort & ~mask(2)) == 0xCFC) { - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); Addr configAddress = tc->readMiscRegNoEffect(MISCREG_PCI_CONFIG_ADDRESS); if (bits(configAddress, 31, 31)) { @@ -217,7 +217,7 @@ TLB::translateInt(RequestPtr req, ThreadContext *tc) req->setPaddr(PhysAddrPrefixIO | IOPort); } } else { - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); req->setPaddr(PhysAddrPrefixIO | IOPort); } return NoFault; @@ -261,7 +261,7 @@ TLB::finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const return new GeneralProtection(0); */ // Force the access to be uncacheable. - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); req->setPaddr(x86LocalAPICAddress(tc->contextId(), paddr - apicRange.start())); } @@ -401,7 +401,7 @@ TLB::translate(RequestPtr req, ThreadContext *tc, Translation *translation, DPRINTF(TLB, "Translated %#x -> %#x.\n", vaddr, paddr); req->setPaddr(paddr); if (entry->uncacheable) - req->setFlags(Request::UNCACHEABLE); + req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER); } else { //Use the address which already has segmentation applied. DPRINTF(TLB, "Paging disabled.\n"); |