summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Nikoleris <nikos.nikoleris@arm.com>2016-05-31 13:43:50 +0100
committerNikos Nikoleris <nikos.nikoleris@arm.com>2017-12-05 11:47:01 +0000
commit2f468fc03696a865ee2e80f01340c58b77e854f4 (patch)
tree0d9bac84dbfebfff5aa8cb9783799c5e2ab8dce3
parent66909dd5a2cf4cec0732eeeb389e3ff739fe58ed (diff)
downloadgem5-2f468fc03696a865ee2e80f01340c58b77e854f4.tar.xz
mem: Add the notion of point of unification in the coherent xbar
The point of unification is the first crossbar at which the instruction cache, the data cache and the translation table walks of the core are guaranteed to see the same copy of a memory location. Change-Id: Ica79b34c8ed4f1a8f2379748e8520a8f8afffa90 Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-by: Anouk Van Laer <anouk.vanlaer@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5040 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
-rw-r--r--src/mem/XBar.py18
-rw-r--r--src/mem/coherent_xbar.cc3
-rw-r--r--src/mem/coherent_xbar.hh5
3 files changed, 23 insertions, 3 deletions
diff --git a/src/mem/XBar.py b/src/mem/XBar.py
index 59f0d8d8d..655d9808a 100644
--- a/src/mem/XBar.py
+++ b/src/mem/XBar.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012, 2015 ARM Limited
+# Copyright (c) 2012, 2015, 2017 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
@@ -106,6 +106,10 @@ class CoherentXBar(BaseXBar):
point_of_coherency = Param.Bool(False, "Consider this crossbar the " \
"point of coherency")
+ # Specify whether this crossbar is the point of unification.
+ point_of_unification = Param.Bool(False, "Consider this crossbar the " \
+ "point of unification")
+
system = Param.System(Parent.any, "System that the crossbar belongs to.")
class SnoopFilter(SimObject):
@@ -139,6 +143,11 @@ class L2XBar(CoherentXBar):
# the crossbar
snoop_filter = SnoopFilter(lookup_latency = 0)
+ # This specialisation of the coherent crossbar is to be considered
+ # the point of unification, it connects the dcache and the icache
+ # to the first level of unified cache.
+ point_of_unification = True
+
# One of the key coherent crossbar instances is the system
# interconnect, tying together the CPU clusters, GPUs, and any I/O
# coherent masters, and DRAM controllers.
@@ -161,6 +170,13 @@ class SystemXBar(CoherentXBar):
# caches.
point_of_coherency = True
+ # This specialisation of the coherent crossbar is to be considered
+ # the point of unification, it connects the dcache and the icache
+ # to the first level of unified cache. This is needed for systems
+ # without caches where the SystemXBar is also the point of
+ # unification.
+ point_of_unification = True
+
# In addition to the system interconnect, we typically also have one
# or more on-chip I/O crossbars. Note that at some point we might want
# to also define an off-chip I/O crossbar such as PCIe.
diff --git a/src/mem/coherent_xbar.cc b/src/mem/coherent_xbar.cc
index ede409503..e90f9c1c8 100644
--- a/src/mem/coherent_xbar.cc
+++ b/src/mem/coherent_xbar.cc
@@ -58,7 +58,8 @@
CoherentXBar::CoherentXBar(const CoherentXBarParams *p)
: BaseXBar(p), system(p->system), snoopFilter(p->snoop_filter),
snoopResponseLatency(p->snoop_response_latency),
- pointOfCoherency(p->point_of_coherency)
+ pointOfCoherency(p->point_of_coherency),
+ pointOfUnification(p->point_of_unification)
{
// create the ports based on the size of the master and slave
// vector ports, and the presence of the default port, the ports
diff --git a/src/mem/coherent_xbar.hh b/src/mem/coherent_xbar.hh
index edfc47d4b..214a29071 100644
--- a/src/mem/coherent_xbar.hh
+++ b/src/mem/coherent_xbar.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2015 ARM Limited
+ * Copyright (c) 2011-2015, 2017 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -278,6 +278,9 @@ class CoherentXBar : public BaseXBar
/** Is this crossbar the point of coherency? **/
const bool pointOfCoherency;
+ /** Is this crossbar the point of unification? **/
+ const bool pointOfUnification;
+
/**
* Upstream caches need this packet until true is returned, so
* hold it for deletion until a subsequent call