summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/bus.cc22
-rw-r--r--src/mem/bus.hh5
2 files changed, 17 insertions, 10 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc
index e1f10860d..e37449b6e 100644
--- a/src/mem/bus.cc
+++ b/src/mem/bus.cc
@@ -56,8 +56,9 @@
Bus::Bus(const BusParams *p)
: MemObject(p), busId(p->bus_id), clock(p->clock),
headerCycles(p->header_cycles), width(p->width), tickNextIdle(0),
- drainEvent(NULL), busIdle(this), inRetry(false), defaultPortId(-1),
- useDefaultRange(p->use_default_range), defaultBlockSize(p->block_size),
+ drainEvent(NULL), busIdle(this), inRetry(false),
+ defaultPortId(INVALID_PORT_ID), useDefaultRange(p->use_default_range),
+ defaultBlockSize(p->block_size),
cachedBlockSize(0), cachedBlockSizeValid(false)
{
//width, clock period, and header cycles must be positive
@@ -76,7 +77,7 @@ Bus::getPort(const std::string &if_name, int idx)
std::string portName;
int id = interfaces.size();
if (if_name == "default") {
- if (defaultPortId == -1) {
+ if (defaultPortId == INVALID_PORT_ID) {
defaultPortId = id;
portName = csprintf("%s-default", name());
} else
@@ -301,7 +302,7 @@ Bus::findPort(Addr addr)
int dest_id;
dest_id = checkPortCache(addr);
- if (dest_id != -1)
+ if (dest_id != INVALID_PORT_ID)
return dest_id;
// Check normal port ranges
@@ -321,13 +322,16 @@ Bus::findPort(Addr addr)
return defaultPortId;
}
}
-
- panic("Unable to find destination for addr %#llx\n", addr);
+ } else if (defaultPortId != INVALID_PORT_ID) {
+ DPRINTF(Bus, "Unable to find destination for addr %#llx, "
+ "will use default port\n", addr);
+ return defaultPortId;
}
- DPRINTF(Bus, "Unable to find destination for addr %#llx, "
- "will use default port\n", addr);
- return defaultPortId;
+ // we should use the range for the default port and it did not
+ // match, or the default port is not set
+ fatal("Unable to find destination for addr %#llx on bus %s\n", addr,
+ name());
}
diff --git a/src/mem/bus.hh b/src/mem/bus.hh
index 3117bf4e1..f7f69e08e 100644
--- a/src/mem/bus.hh
+++ b/src/mem/bus.hh
@@ -220,7 +220,7 @@ class Bus : public MemObject
return portCache[2].id;
}
- return -1;
+ return INVALID_PORT_ID;
}
// Clears the earliest entry of the cache and inserts a new port entry
@@ -317,6 +317,9 @@ class Bus : public MemObject
/** Port that handles requests that don't match any of the interfaces.*/
short defaultPortId;
+ /** A symbolic name for a port id that denotes no port. */
+ static const short INVALID_PORT_ID = -1;
+
/** If true, use address range provided by default device. Any
address not handled by another port and not in default device's
range will cause a fatal error. If false, just send all