From 2f468fc03696a865ee2e80f01340c58b77e854f4 Mon Sep 17 00:00:00 2001 From: Nikos Nikoleris Date: Tue, 31 May 2016 13:43:50 +0100 Subject: [PATCH] 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 Reviewed-by: Anouk Van Laer Reviewed-on: https://gem5-review.googlesource.com/5040 Reviewed-by: Andreas Sandberg Maintainer: Nikos Nikoleris --- src/mem/XBar.py | 18 +++++++++++++++++- src/mem/coherent_xbar.cc | 3 ++- src/mem/coherent_xbar.hh | 5 ++++- 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 -- 2.30.2