summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Reinhardt <Steve.Reinhardt@amd.com>2008-09-29 23:30:14 -0700
committerSteve Reinhardt <Steve.Reinhardt@amd.com>2008-09-29 23:30:14 -0700
commit7bf6a219db91406df91d4e9323b47e6d70ed73fb (patch)
tree41c9cc9fc047aed0affaf6acb9d38d01c99c874c
parent45cba35fc11bbe4e57d9615cfbb79580904ef820 (diff)
downloadgem5-7bf6a219db91406df91d4e9323b47e6d70ed73fb.tar.xz
Make overriding port assignments in Python work,
and print better error messages when it doesn't.
-rw-r--r--src/dev/io_device.hh9
-rw-r--r--src/python/m5/params.py3
2 files changed, 9 insertions, 3 deletions
diff --git a/src/dev/io_device.hh b/src/dev/io_device.hh
index 1e2e623f1..e18489378 100644
--- a/src/dev/io_device.hh
+++ b/src/dev/io_device.hh
@@ -212,7 +212,8 @@ class PioDevice : public MemObject
{
if (if_name == "pio") {
if (pioPort != NULL)
- panic("pio port already connected to.");
+ fatal("%s: pio port already connected to %s",
+ name(), pioPort->getPeer()->name());
pioPort = new PioPort(this, sys);
return pioPort;
} else
@@ -289,12 +290,14 @@ class DmaDevice : public PioDevice
{
if (if_name == "pio") {
if (pioPort != NULL)
- panic("pio port already connected to.");
+ fatal("%s: pio port already connected to %s",
+ name(), pioPort->getPeer()->name());
pioPort = new PioPort(this, sys);
return pioPort;
} else if (if_name == "dma") {
if (dmaPort != NULL)
- panic("dma port already connected to.");
+ fatal("%s: dma port already connected to %s",
+ name(), pioPort->getPeer()->name());
dmaPort = new DmaPort(this, sys);
return dmaPort;
} else
diff --git a/src/python/m5/params.py b/src/python/m5/params.py
index 9394b11e2..081bd342e 100644
--- a/src/python/m5/params.py
+++ b/src/python/m5/params.py
@@ -1004,6 +1004,7 @@ class PortRef(object):
if self.peer and not proxy.isproxy(self.peer):
print "warning: overwriting port", self, \
"value", self.peer, "with", other
+ self.peer.peer = None
self.peer = other
if proxy.isproxy(other):
other.set_param_desc(PortParamDesc())
@@ -1046,6 +1047,8 @@ class PortRef(object):
if self.ccConnected: # already done this
return
peer = self.peer
+ if not self.peer: # nothing to connect to
+ return
connectPorts(self.simobj.getCCObject(), self.name, self.index,
peer.simobj.getCCObject(), peer.name, peer.index)
self.ccConnected = True