From a7ef5b77d6b8399437865261f862c286f83b0a85 Mon Sep 17 00:00:00 2001 From: Yu-hsin Wang Date: Wed, 11 Jan 2023 13:19:10 +0800 Subject: [PATCH] mem: Implemement backdoor interface for Bridge Change-Id: I5ff62b03c34e41395a957a0799925ddd9c275458 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67291 Reviewed-by: Nicolas Boichat Tested-by: kokoro Maintainer: Gabe Black Reviewed-by: Gabe Black --- src/mem/bridge.cc | 15 +++++++++++++++ src/mem/bridge.hh | 28 ++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/mem/bridge.cc b/src/mem/bridge.cc index 0f744f7336..36832ebfc4 100644 --- a/src/mem/bridge.cc +++ b/src/mem/bridge.cc @@ -347,6 +347,14 @@ Bridge::BridgeResponsePort::recvAtomic(PacketPtr pkt) return delay * bridge.clockPeriod() + memSidePort.sendAtomic(pkt); } +Tick +Bridge::BridgeResponsePort::recvAtomicBackdoor( + PacketPtr pkt, MemBackdoorPtr &backdoor) +{ + return delay * bridge.clockPeriod() + memSidePort.sendAtomicBackdoor( + pkt, backdoor); +} + void Bridge::BridgeResponsePort::recvFunctional(PacketPtr pkt) { @@ -371,6 +379,13 @@ Bridge::BridgeResponsePort::recvFunctional(PacketPtr pkt) memSidePort.sendFunctional(pkt); } +void +Bridge::BridgeResponsePort::recvMemBackdoorReq( + const MemBackdoorReq &req, MemBackdoorPtr &backdoor) +{ + memSidePort.sendMemBackdoorReq(req, backdoor); +} + bool Bridge::BridgeRequestPort::trySatisfyFunctional(PacketPtr pkt) { diff --git a/src/mem/bridge.hh b/src/mem/bridge.hh index f56cef115f..e4a6837861 100644 --- a/src/mem/bridge.hh +++ b/src/mem/bridge.hh @@ -195,23 +195,35 @@ class Bridge : public ClockedObject /** When receiving a timing request from the peer port, pass it to the bridge. */ - bool recvTimingReq(PacketPtr pkt); + bool recvTimingReq(PacketPtr pkt) override; /** When receiving a retry request from the peer port, pass it to the bridge. */ - void recvRespRetry(); + void recvRespRetry() override; - /** When receiving a Atomic requestfrom the peer port, + /** When receiving an Atomic request from the peer port, pass it to the bridge. */ - Tick recvAtomic(PacketPtr pkt); + Tick recvAtomic(PacketPtr pkt) override; + + /** When receiving an Atomic backdoor request from the peer port, + pass it to the bridge. */ + Tick recvAtomicBackdoor( + PacketPtr pkt, MemBackdoorPtr &backdoor) override; + /** When receiving a Functional request from the peer port, pass it to the bridge. */ - void recvFunctional(PacketPtr pkt); + void recvFunctional(PacketPtr pkt) override; + + /** When receiving a Functional backdoor request from the peer port, + pass it to the bridge. */ + void recvMemBackdoorReq( + const MemBackdoorReq &req, MemBackdoorPtr &backdoor) override; + /** When receiving a address range request the peer port, pass it to the bridge. */ - AddrRangeList getAddrRanges() const; + AddrRangeList getAddrRanges() const override; }; @@ -303,11 +315,11 @@ class Bridge : public ClockedObject /** When receiving a timing request from the peer port, pass it to the bridge. */ - bool recvTimingResp(PacketPtr pkt); + bool recvTimingResp(PacketPtr pkt) override; /** When receiving a retry request from the peer port, pass it to the bridge. */ - void recvReqRetry(); + void recvReqRetry() override; }; /** Response port of the bridge. */