diff --git a/src/systemc/tlm_bridge/tlm_to_gem5.cc b/src/systemc/tlm_bridge/tlm_to_gem5.cc index 468ea83f37..47a2fba08e 100644 --- a/src/systemc/tlm_bridge/tlm_to_gem5.cc +++ b/src/systemc/tlm_bridge/tlm_to_gem5.cc @@ -207,14 +207,6 @@ void TlmToGem5Bridge::sendBeginResp(tlm::tlm_generic_payload &trans, sc_core::sc_time &delay) { - Gem5SystemC::Gem5Extension *extension = nullptr; - trans.get_extension(extension); - panic_if(extension == nullptr, - "Missing gem5 extension when sending BEGIN_RESP"); - auto pkt = extension->getPacket(); - - setPayloadResponse(trans, pkt); - tlm::tlm_phase phase = tlm::BEGIN_RESP; auto status = socket->nb_transport_bw(trans, phase, delay); @@ -252,6 +244,7 @@ TlmToGem5Bridge::handleBeginReq(tlm::tlm_generic_payload &trans) sendEndReq(trans); if (!needsResponse) { auto delay = sc_core::SC_ZERO_TIME; + setPayloadResponse(trans, pkt); sendBeginResp(trans, delay); } trans.release(); @@ -481,6 +474,8 @@ TlmToGem5Bridge::recvTimingResp(PacketPtr pkt) sc_assert(tlmSenderState != nullptr); auto &trans = tlmSenderState->trans; + setPayloadResponse(trans, pkt); + sendBeginResp(trans, delay); Gem5SystemC::Gem5Extension *extension = nullptr; trans.get_extension(extension); @@ -493,7 +488,6 @@ TlmToGem5Bridge::recvTimingResp(PacketPtr pkt) if (extension == nullptr) destroyPacket(pkt); - sendBeginResp(trans, delay); trans.release(); return true; @@ -512,12 +506,12 @@ TlmToGem5Bridge::recvReqRetry() bool needsResponse = pendingPacket->needsResponse(); if (bmp.sendTimingReq(pendingPacket)) { waitForRetry = false; - pendingPacket = nullptr; auto &trans = *pendingRequest; sendEndReq(trans); if (!needsResponse) { auto delay = sc_core::SC_ZERO_TIME; + setPayloadResponse(trans, pendingPacket); sendBeginResp(trans, delay); } trans.release();