summaryrefslogtreecommitdiff
path: root/src/dev/arm/amba_device.cc
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@arm.com>2010-08-23 11:18:40 -0500
committerAli Saidi <Ali.Saidi@arm.com>2010-08-23 11:18:40 -0500
commitc0ca01ec368cc02bbc9e2d14e93183fe263ee09b (patch)
treefba0726eb20ac03f40e090e1f8f25f3845ac053f /src/dev/arm/amba_device.cc
parent330fada1aa8fa3134c97ef44aba5a84d8620b8ae (diff)
downloadgem5-c0ca01ec368cc02bbc9e2d14e93183fe263ee09b.tar.xz
ARM: Change how the AMBA device ID checking is done to make it more generic
Diffstat (limited to 'src/dev/arm/amba_device.cc')
-rw-r--r--src/dev/arm/amba_device.cc21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/dev/arm/amba_device.cc b/src/dev/arm/amba_device.cc
index 81c740aec..0acd7208a 100644
--- a/src/dev/arm/amba_device.cc
+++ b/src/dev/arm/amba_device.cc
@@ -50,22 +50,29 @@ AmbaDevice::AmbaDevice(const Params *p)
{
}
+AmbaDmaDevice::AmbaDmaDevice(const Params *p)
+ : DmaDevice(p), ambaId(ULL(0xb105f00d00000000) | p->amba_id)
+{
+}
+
+
+namespace AmbaDev {
bool
-AmbaDevice::readId(PacketPtr pkt)
+readId(PacketPtr pkt, uint64_t amba_id, Addr pio_addr)
{
- Addr daddr = pkt->getAddr() - pioAddr;
+ Addr daddr = pkt->getAddr() - pio_addr;
if (daddr < AMBA_PER_ID0 || daddr > AMBA_CEL_ID3)
return false;
pkt->allocate();
- daddr -= AMBA_PER_ID0;
- daddr <<= 1;
+ int byte = (daddr - AMBA_PER_ID0) << 1;
// Too noisy right now
- //DPRINTF(AMBA, "Returning %#x for offset %#x(%d)\n", (ambaId >> daddr) & 0xFF,
- // pkt->getAddr() - pioAddr, daddr);
+ DPRINTF(AMBA, "Returning %#x for offset %#x(%d)\n", (amba_id >> byte) & 0xFF,
+ pkt->getAddr() - pio_addr, byte);
assert(pkt->getSize() == 4);
- pkt->set<uint32_t>((ambaId >> daddr) & 0xFF);
+ pkt->set<uint32_t>((amba_id >> byte) & 0xFF);
return true;
}
+} // namespace AmbaDev