diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/XBar.py | 8 | ||||
-rw-r--r-- | src/mem/coherent_xbar.cc | 19 | ||||
-rw-r--r-- | src/mem/coherent_xbar.hh | 13 |
3 files changed, 31 insertions, 9 deletions
diff --git a/src/mem/XBar.py b/src/mem/XBar.py index 976a290eb..dab961fed 100644 --- a/src/mem/XBar.py +++ b/src/mem/XBar.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2015, 2017 ARM Limited +# Copyright (c) 2012, 2015, 2017, 2019 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -101,6 +101,12 @@ class CoherentXBar(BaseXBar): # An optional snoop filter snoop_filter = Param.SnoopFilter(NULL, "Selected snoop filter") + # Maximum number of outstanding snoop requests for sanity checks + max_outstanding_snoops = Param.Int(512, "Max. outstanding snoops allowed") + + # Maximum routing table size for sanity checks + max_routing_table_size = Param.Int(512, "Max. routing table size") + # Determine how this crossbar handles packets where caches have # already committed to responding, by establishing if the crossbar # is the point of coherency or not. diff --git a/src/mem/coherent_xbar.cc b/src/mem/coherent_xbar.cc index 839d95b9d..74c93be0f 100644 --- a/src/mem/coherent_xbar.cc +++ b/src/mem/coherent_xbar.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2018 ARM Limited + * Copyright (c) 2011-2019 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -59,6 +59,8 @@ CoherentXBar::CoherentXBar(const CoherentXBarParams *p) : BaseXBar(p), system(p->system), snoopFilter(p->snoop_filter), snoopResponseLatency(p->snoop_response_latency), + maxOutstandingSnoopCheck(p->max_outstanding_snoops), + maxRoutingTableSizeCheck(p->max_routing_table_size), pointOfCoherency(p->point_of_coherency), pointOfUnification(p->point_of_unification) { @@ -325,8 +327,9 @@ CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id) outstandingSnoop.insert(pkt->req); // basic sanity check on the outstanding snoops - panic_if(outstandingSnoop.size() > 512, - "Outstanding snoop requests exceeded 512\n"); + panic_if(outstandingSnoop.size() > maxOutstandingSnoopCheck, + "%s: Outstanding snoop requests exceeded %d\n", + name(), maxOutstandingSnoopCheck); } // remember where to route the normal response to @@ -334,8 +337,9 @@ CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id) assert(routeTo.find(pkt->req) == routeTo.end()); routeTo[pkt->req] = slave_port_id; - panic_if(routeTo.size() > 512, - "Routing table exceeds 512 packets\n"); + panic_if(routeTo.size() > maxRoutingTableSizeCheck, + "%s: Routing table exceeds %d packets\n", + name(), maxRoutingTableSizeCheck); } // update the layer state and schedule an idle event @@ -401,8 +405,9 @@ CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id) assert(routeTo.find(pkt->req) == routeTo.end()); routeTo[pkt->req] = slave_port_id; - panic_if(routeTo.size() > 512, - "Routing table exceeds 512 packets\n"); + panic_if(routeTo.size() > maxRoutingTableSizeCheck, + "%s: Routing table exceeds %d packets\n", + name(), maxRoutingTableSizeCheck); } } } diff --git a/src/mem/coherent_xbar.hh b/src/mem/coherent_xbar.hh index ff28cb743..386b479f7 100644 --- a/src/mem/coherent_xbar.hh +++ b/src/mem/coherent_xbar.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015, 2017 ARM Limited + * Copyright (c) 2011-2015, 2017, 2019 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -278,8 +278,19 @@ class CoherentXBar : public BaseXBar * broadcast needed for probes. NULL denotes an absent filter. */ SnoopFilter *snoopFilter; + /** Cycles of snoop response latency.*/ const Cycles snoopResponseLatency; + + /** Maximum number of outstading snoops sanity check*/ + const unsigned int maxOutstandingSnoopCheck; + + /** Maximum routing table size sanity check*/ + const unsigned int maxRoutingTableSizeCheck; + + /** Is this crossbar the point of coherency? **/ const bool pointOfCoherency; + + /** Is this crossbar the point of unification? **/ const bool pointOfUnification; /** |