arm: Add CMO support for Non-Cacheable memory
Cache Maintainance operations to the point of coherence are treated as normal cahceable requests and clean and/or invalidate the caches of all PEs. Change-Id: Ia4a749c2318fe29c8601848b034b8315c4186c8a Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5056 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
@@ -1007,7 +1007,10 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
|
||||
|
||||
if ((req->isInstFetch() && (!sctlr.i)) ||
|
||||
((!req->isInstFetch()) && (!sctlr.c))){
|
||||
req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER);
|
||||
if (!req->isCacheMaintenance()) {
|
||||
req->setFlags(Request::UNCACHEABLE);
|
||||
}
|
||||
req->setFlags(Request::STRICT_ORDER);
|
||||
}
|
||||
if (!is_fetch) {
|
||||
assert(flags & MustBeOne);
|
||||
@@ -1033,11 +1036,12 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
|
||||
req->setFlags(Request::SECURE);
|
||||
|
||||
// @todo: double check this (ARM ARM issue C B3.2.1)
|
||||
if (long_desc_format || sctlr.tre == 0) {
|
||||
req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER);
|
||||
} else {
|
||||
if (nmrr.ir0 == 0 || nmrr.or0 == 0 || prrr.tr0 != 0x2)
|
||||
req->setFlags(Request::UNCACHEABLE | Request::STRICT_ORDER);
|
||||
if (long_desc_format || sctlr.tre == 0 || nmrr.ir0 == 0 ||
|
||||
nmrr.or0 == 0 || prrr.tr0 != 0x2) {
|
||||
if (!req->isCacheMaintenance()) {
|
||||
req->setFlags(Request::UNCACHEABLE);
|
||||
}
|
||||
req->setFlags(Request::STRICT_ORDER);
|
||||
}
|
||||
|
||||
// Set memory attributes
|
||||
@@ -1091,7 +1095,7 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
|
||||
static_cast<uint8_t>(te->mtype), isStage2);
|
||||
setAttr(te->attributes);
|
||||
|
||||
if (te->nonCacheable)
|
||||
if (te->nonCacheable && !req->isCacheMaintenance())
|
||||
req->setFlags(Request::UNCACHEABLE);
|
||||
|
||||
// Require requests to be ordered if the request goes to
|
||||
|
||||
Reference in New Issue
Block a user