arm: Relax ordering for some uncacheable accesses
authorAndreas Sandberg <Andreas.Sandberg@ARM.com>
Tue, 5 May 2015 07:22:34 +0000 (03:22 -0400)
committerAndreas Sandberg <Andreas.Sandberg@ARM.com>
Tue, 5 May 2015 07:22:34 +0000 (03:22 -0400)
We currently assume that all uncacheable memory accesses are strictly
ordered. Instead of always enforcing strict ordering, we now only
enforce it if the required memory type is device memory or strongly
ordered memory.

src/arch/arm/tlb.cc

index 8c3bb047dc4e1e0caccfc6e19d9babf0b8d11462..61c2eb9d60af34651df0c12645b27b094b21393f 100644 (file)
@@ -1076,7 +1076,13 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
         setAttr(te->attributes);
 
         if (te->nonCacheable)
-            req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER);
+            req->setFlags(Request::UNCACHEABLE);
+
+        // Require requests to be ordered if the request goes to
+        // strongly ordered or device memory (i.e., anything other
+        // than normal memory requires strict order).
+        if (te->mtype != TlbEntry::MemoryType::Normal)
+            req->setFlags(Request::STRICT_ORDER);
 
         Addr pa = te->pAddr(vaddr);
         req->setPaddr(pa);