mem: Implement and use the recvMemBackdoorReq func.
In the previous change, we miss some model supporting atomic backdoor. We should also implement the recvMemBackdoorReq to them. Change-Id: I4706d215aa4a5d18fe4306b2387f9c8750cb4b4a Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/66551 Reviewed-by: Gabe Black <gabe.black@gmail.com> Maintainer: Gabe Black <gabe.black@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Bobby Bruce
parent
91f8f2b276
commit
ce03482a39
@@ -150,6 +150,21 @@ HBMCtrl::recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor)
|
||||
return latency;
|
||||
}
|
||||
|
||||
void
|
||||
HBMCtrl::recvMemBackdoorReq(const MemBackdoorReq &req,
|
||||
MemBackdoorPtr &backdoor)
|
||||
{
|
||||
auto &range = req.range();
|
||||
if (pc0Int && pc0Int->getAddrRange().isSubset(range)) {
|
||||
pc0Int->getBackdoor(backdoor);
|
||||
} else if (pc1Int && pc1Int->getAddrRange().isSubset(range)) {
|
||||
pc1Int->getBackdoor(backdoor);
|
||||
}
|
||||
else {
|
||||
panic("Can't handle address range for range %s\n", range.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
HBMCtrl::writeQueueFullPC0(unsigned int neededEntries) const
|
||||
{
|
||||
|
||||
@@ -259,6 +259,8 @@ class HBMCtrl : public MemCtrl
|
||||
Tick recvAtomic(PacketPtr pkt) override;
|
||||
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) override;
|
||||
void recvFunctional(PacketPtr pkt) override;
|
||||
void recvMemBackdoorReq(const MemBackdoorReq &req,
|
||||
MemBackdoorPtr &_backdoor) override;
|
||||
bool recvTimingReq(PacketPtr pkt) override;
|
||||
|
||||
};
|
||||
|
||||
@@ -84,6 +84,14 @@ ThreadBridge::IncomingPort::recvFunctional(PacketPtr pkt)
|
||||
device_.out_port_.sendFunctional(pkt);
|
||||
}
|
||||
|
||||
void
|
||||
ThreadBridge::IncomingPort::recvMemBackdoorReq(const MemBackdoorReq &req,
|
||||
MemBackdoorPtr &backdoor)
|
||||
{
|
||||
EventQueue::ScopedMigration migrate(device_.eventQueue());
|
||||
device_.out_port_.sendMemBackdoorReq(req, backdoor);
|
||||
}
|
||||
|
||||
ThreadBridge::OutgoingPort::OutgoingPort(const std::string &name,
|
||||
ThreadBridge &device)
|
||||
: RequestPort(name, &device), device_(device)
|
||||
|
||||
@@ -61,6 +61,8 @@ class ThreadBridge : public SimObject
|
||||
|
||||
// FunctionalResponseProtocol
|
||||
void recvFunctional(PacketPtr pkt) override;
|
||||
void recvMemBackdoorReq(const MemBackdoorReq &req,
|
||||
MemBackdoorPtr &backdoor) override;
|
||||
|
||||
private:
|
||||
ThreadBridge &device_;
|
||||
|
||||
Reference in New Issue
Block a user