From ca163a80e27e66027a1e28b7b28ff76b8bd14b01 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Fri, 25 Sep 2015 07:26:57 -0400 Subject: mem: Only track snooping ports in the snoop filter This patch changes the tracking of ports in the snoop filter to use local dense port IDs so that we can have 64 snooping ports (rather than crossbar slave ports). This is achieved by adding a simple remapping vector that translates the actal port IDs into the local slave IDs used in the SnoopMask. Ultimately this patch allows us to scale to much larger systems without introducing a hierarchy of crossbars. --- src/mem/coherent_xbar.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/mem/coherent_xbar.cc') diff --git a/src/mem/coherent_xbar.cc b/src/mem/coherent_xbar.cc index 206f94406..cf438bc95 100644 --- a/src/mem/coherent_xbar.cc +++ b/src/mem/coherent_xbar.cc @@ -96,9 +96,6 @@ CoherentXBar::CoherentXBar(const CoherentXBarParams *p) snoopRespPorts.push_back(new SnoopRespPort(*bp, *this)); } - if (snoopFilter) - snoopFilter->setSlavePorts(slavePorts); - clearPortCache(); } @@ -133,6 +130,11 @@ CoherentXBar::init() if (snoopPorts.empty()) warn("CoherentXBar %s has no snooping ports attached!\n", name()); + + // inform the snoop filter about the slave ports so it can create + // its own internal representation + if (snoopFilter) + snoopFilter->setSlavePorts(slavePorts); } bool -- cgit v1.2.3