fastmodel: Implement a custom sendFunctional for CortexA76x1.
authorGabe Black <gabeblack@google.com>
Wed, 28 Aug 2019 23:55:33 +0000 (16:55 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 2 Oct 2019 04:28:06 +0000 (04:28 +0000)
Change-Id: I28094620106a8edd90e1144b4fb87ae5729ebf32
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21047
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>

src/arch/arm/fastmodel/CortexA76x1/cortex_a76x1.cc
src/arch/arm/fastmodel/CortexA76x1/cortex_a76x1.hh

index b680ce417a1b6cacd30ce5f0779eaf80640a9a9a..1ac0acb318dc8e5677a27a691aa8847aa55080d2 100644 (file)
@@ -33,6 +33,7 @@
 #include "base/logging.hh"
 #include "params/FastModelCortexA76x1.hh"
 #include "sim/core.hh"
+#include "systemc/tlm_bridge/gem5_to_tlm.hh"
 
 namespace FastModel
 {
@@ -60,7 +61,8 @@ CortexA76x1::CortexA76x1(const sc_core::sc_module_name &mod_name,
       cntpnsirqWrapper(cntpnsirq, params.name + ".cntpnsirq", -1),
       clockChanged(Iris::ClockEventName.c_str()),
       clockPeriod(Iris::PeriodAttributeName.c_str()),
-      gem5Cpu(Iris::Gem5CpuAttributeName.c_str())
+      gem5Cpu(Iris::Gem5CpuAttributeName.c_str()),
+      sendFunctional(Iris::SendFunctionalAttributeName.c_str())
 {
     clockRateControl.bind(clock_rate_s);
 
@@ -201,6 +203,18 @@ CortexA76x1::CortexA76x1(const sc_core::sc_module_name &mod_name,
     SC_METHOD(clockChangeHandler);
     dont_initialize();
     sensitive << clockChanged;
+
+    sendFunctional.value = [this](PacketPtr pkt) { sendFunc(pkt); };
+    add_attribute(sendFunctional);
+}
+
+void
+CortexA76x1::sendFunc(PacketPtr pkt)
+{
+    auto *trans = sc_gem5::packet2payload(pkt);
+    panic_if(scx_evs_CortexA76x1::amba->transport_dbg(*trans) !=
+            trans->get_data_length(), "Didn't send entire functional packet!");
+    trans->release();
 }
 
 Port &
index 00f843bba7ef8d4f2a63ce51e49068e6124363d5..0d204798e5fe3b2662025621e0e7c48b268d9ae6 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "arch/arm/fastmodel/amba_ports.hh"
 #include "arch/arm/fastmodel/protocol/exported_clock_rate_control.hh"
+#include "mem/port_proxy.hh"
 #include "params/FastModelCortexA76x1.hh"
 #include "scx_evs_CortexA76x1.h"
 #include "systemc/ext/core/sc_event.hh"
@@ -79,6 +80,9 @@ class CortexA76x1 : public scx_evs_CortexA76x1
     sc_core::sc_event clockChanged;
     sc_core::sc_attribute<Tick> clockPeriod;
     sc_core::sc_attribute<::BaseCPU *> gem5Cpu;
+    sc_core::sc_attribute<PortProxy::SendFunctionalFunc> sendFunctional;
+
+    void sendFunc(PacketPtr pkt);
 
     void clockChangeHandler();