From f840d13c78d2346cef3240da9d9530e29bd025f8 Mon Sep 17 00:00:00 2001 From: Yu-hsin Wang Date: Wed, 27 Jan 2021 11:15:43 +0800 Subject: [PATCH] systemc: set Gem5ToTlmBridge blockingRrequest with TLM_UPDATE returning In Gem5ToTlmBridge::pec, the function expects blockingRequest should be set no matter the tlm peer returns TLM_UPDATE or TLM_ACCEPTED. However, current implementation only sets blockingRequest when the tlm peer returns TLM_ACCEPTED. We should also set blockingRequest when the tlm peer returns TLM_UPDATE. Change-Id: I87bba3201cd68d52ded93c9c200f4fa4a40bdf5b Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39815 Reviewed-by: Earl Ou Maintainer: Gabe Black Tested-by: kokoro --- src/systemc/tlm_bridge/gem5_to_tlm.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/systemc/tlm_bridge/gem5_to_tlm.cc b/src/systemc/tlm_bridge/gem5_to_tlm.cc index 9d108761b..b80a083ac 100644 --- a/src/systemc/tlm_bridge/gem5_to_tlm.cc +++ b/src/systemc/tlm_bridge/gem5_to_tlm.cc @@ -364,6 +364,8 @@ Gem5ToTlmBridge::recvTimingReq(PacketPtr packet) } else if (status == tlm::TLM_UPDATED) { // The Timing annotation must be honored: sc_assert(phase == tlm::END_REQ || phase == tlm::BEGIN_RESP); + // Accepted but is now blocking until END_REQ (exclusion rule). + blockingRequest = trans; auto cb = [this, trans, phase]() { pec(*trans, phase); }; system->schedule(new EventFunctionWrapper(cb, "pec", true), curTick() + delay.value()); -- 2.30.2