summaryrefslogtreecommitdiff
path: root/src/mem/request.hh
diff options
context:
space:
mode:
authorNikos Nikoleris <nikos.nikoleris@arm.com>2016-09-22 10:18:24 +0100
committerNikos Nikoleris <nikos.nikoleris@arm.com>2017-12-05 11:47:01 +0000
commite67c97ee4cd61dda4378f27e0baa329b020a2fee (patch)
tree66f6f944084fa06a5b780ae2e07a3b2ffd77d225 /src/mem/request.hh
parent992fa9958da913aa1a40c78dd566d6498ee7d610 (diff)
downloadgem5-e67c97ee4cd61dda4378f27e0baa329b020a2fee.tar.xz
mem: Add support for cache maintenance operation requests
This change adds new packet cmds and request flags for cache maintenance operations. 1) A cache clean operation writes dirty data in the first memory below the specified xbar and updates any old copies in the memories above it. 2) A cache invalidate operation invalidates all copies of the specified block in the memories above the specified xbar 3) A clean and invalidate operation is a combination of the two operations above Change-Id: If45702848bdd568de532cd57cba58499e5e4354c Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-by: Anouk Van Laer <anouk.vanlaer@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5047 Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/mem/request.hh')
-rw-r--r--src/mem/request.hh22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mem/request.hh b/src/mem/request.hh
index 6fc98506c..258693547 100644
--- a/src/mem/request.hh
+++ b/src/mem/request.hh
@@ -182,6 +182,11 @@ class Request
/** The request is a page table walk */
PT_WALK = 0x20000000,
+ /** The request invalidates a memory location */
+ INVALIDATE = 0x0000000100000000,
+ /** The request cleans a memory location */
+ CLEAN = 0x0000000200000000,
+
/** The request targets the point of unification */
DST_POU = 0x0000001000000000,
@@ -889,6 +894,23 @@ class Request
{
return _memSpaceConfigFlags.isSet(ARG_SEGMENT);
}
+
+ /**
+ * Accessor functions to determine whether this request is part of
+ * a cache maintenance operation. At the moment three operations
+ * are supported:
+
+ * 1) A cache clean operation updates all copies of a memory
+ * location to the point of reference,
+ * 2) A cache invalidate operation invalidates all copies of the
+ * specified block in the memory above the point of reference,
+ * 3) A clean and invalidate operation is a combination of the two
+ * operations.
+ * @{ */
+ bool isCacheClean() const { return _flags.isSet(CLEAN); }
+ bool isCacheInvalidate() const { return _flags.isSet(INVALIDATE); }
+ bool isCacheMaintenance() const { return _flags.isSet(CLEAN|INVALIDATE); }
+ /** @} */
};
#endif // __MEM_REQUEST_HH__