mem: Teach SimpleMem to return a MemBackdoor when appropriate.

If the back door SimpleMem inherits from AbstractMem has a pointer and
is hence valid, SimpleMem will return that pointer when asked.

Change-Id: I734daba48e4ae5b4ad8ac9a108e7b12b5e82803f
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17669
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Gabe Black
2019-03-25 18:08:27 -07:00
parent 73e14fb367
commit f9e833b1ab
2 changed files with 24 additions and 18 deletions

View File

@@ -80,6 +80,16 @@ SimpleMemory::recvAtomic(PacketPtr pkt)
return getLatency();
}
Tick
SimpleMemory::recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &_backdoor)
{
Tick latency = recvAtomic(pkt);
if (backdoor.ptr())
_backdoor = &backdoor;
return latency;
}
void
SimpleMemory::recvFunctional(PacketPtr pkt)
{
@@ -271,6 +281,13 @@ SimpleMemory::MemoryPort::recvAtomic(PacketPtr pkt)
return memory.recvAtomic(pkt);
}
Tick
SimpleMemory::MemoryPort::recvAtomicBackdoor(
PacketPtr pkt, MemBackdoorPtr &_backdoor)
{
return memory.recvAtomicBackdoor(pkt, _backdoor);
}
void
SimpleMemory::MemoryPort::recvFunctional(PacketPtr pkt)
{

View File

@@ -84,27 +84,20 @@ class SimpleMemory : public AbstractMemory
class MemoryPort : public SlavePort
{
private:
SimpleMemory& memory;
public:
MemoryPort(const std::string& _name, SimpleMemory& _memory);
protected:
Tick recvAtomic(PacketPtr pkt);
void recvFunctional(PacketPtr pkt);
bool recvTimingReq(PacketPtr pkt);
void recvRespRetry();
Tick recvAtomic(PacketPtr pkt) override;
Tick recvAtomicBackdoor(
PacketPtr pkt, MemBackdoorPtr &_backdoor) override;
void recvFunctional(PacketPtr pkt) override;
bool recvTimingReq(PacketPtr pkt) override;
void recvRespRetry() override;
AddrRangeList getAddrRanges() const;
};
MemoryPort port;
@@ -192,15 +185,11 @@ class SimpleMemory : public AbstractMemory
void init() override;
protected:
Tick recvAtomic(PacketPtr pkt);
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &_backdoor);
void recvFunctional(PacketPtr pkt);
bool recvTimingReq(PacketPtr pkt);
void recvRespRetry();
};
#endif //__MEM_SIMPLE_MEMORY_HH__