diff options
Diffstat (limited to 'src/arch/arm/tlb.cc')
-rw-r--r-- | src/arch/arm/tlb.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index f142e03f8..e5f5b36f6 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -556,9 +556,15 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode, outerAttrs: %d\n", te->shareable, te->innerAttrs, te->outerAttrs); setAttr(te->attributes); - if (te->nonCacheable) + if (te->nonCacheable) { req->setFlags(Request::UNCACHEABLE); + // Prevent prefetching from I/O devices. + if (req->isPrefetch()) { + return new PrefetchAbort(vaddr, ArmFault::PrefetchUncacheable); + } + } + switch ( (dacr >> (te->domain * 2)) & 0x3) { case 0: domainFaults++; |