gem5-dev@gem5.org

The gem5 Developer List

View all threads

[M] Change in gem5/gem5[develop]: fastmodel: correct the control signal in the direction from gem5 to amba

YW
Yu-hsin Wang (Gerrit)
Thu, Sep 22, 2022 5:56 AM

Yu-hsin Wang has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/63773?usp=email )

Change subject: fastmodel: correct the control signal in the direction from
gem5 to amba
......................................................................

fastmodel: correct the control signal in the direction from gem5 to amba

Change-Id: I600be7ba21368f00c05426ac1db3c28efd6ca2ea

M src/arch/arm/fastmodel/amba_from_tlm_bridge.cc
M src/arch/arm/fastmodel/amba_from_tlm_bridge.hh
2 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc
b/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc
index 4005355..65d0ee5 100644
--- a/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc
+++ b/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc
@@ -28,6 +28,8 @@
#include "arch/arm/fastmodel/amba_from_tlm_bridge.hh"

#include "params/AmbaFromTlmBridge64.hh"
+#include "pv_userpayload_extension.h"
+#include "systemc/tlm_bridge/sc_ext.hh"

namespace gem5
{
@@ -36,11 +38,21 @@
namespace fastmodel
{

-AmbaFromTlmBridge64::AmbaFromTlmBridge64(const char *name) :
+AmbaFromTlmBridge64::AmbaFromTlmBridge64(const sc_core::sc_module_name&
name) :
amba_pv::amba_pv_from_tlm_bridge<64>(name),

  • ambaWrapper(amba_pv_m, std::string(name) + ".amba", -1),
  • tlmWrapper(tlm_s, std::string(name) + ".tlm", -1)
    -{}
  • targetProxy("target_proxy"),
  • initiatorProxy("initiator_proxy"),
  • tlmWrapper(targetProxy, std::string(name) + ".tlm", -1),
  • ambaWrapper(amba_pv_m, std::string(name) + ".amba", -1)
    +{
  • targetProxy.register_b_transport(this,
    &AmbaFromTlmBridge64::bTransport);
  • targetProxy.register_get_direct_mem_ptr(
  •    this, &AmbaFromTlmBridge64::getDirectMemPtr);
    
  • targetProxy.register_transport_dbg(this,
    &AmbaFromTlmBridge64::transportDbg);
  • initiatorProxy.register_invalidate_direct_mem_ptr(
  •    this, &AmbaFromTlmBridge64::invalidateDirectMemPtr);
    
  • initiatorProxy(tlm_s);
    +}

Port &
AmbaFromTlmBridge64::gem5_getPort(const std::string &if_name, int idx)
@@ -55,6 +67,54 @@
}
}

+void
+AmbaFromTlmBridge64::bTransport(amba_pv::amba_pv_transaction &trans,

  •                            sc_core::sc_time &t)
    

+{

  • syncControlExtension(trans);
  • return initiatorProxy->b_transport(trans, t);
    +}

+bool
+AmbaFromTlmBridge64::getDirectMemPtr(amba_pv::amba_pv_transaction &trans,

  •                               tlm::tlm_dmi &dmi_data)
    

+{

  • return initiatorProxy->get_direct_mem_ptr(trans, dmi_data);
    +}

+unsigned int
+AmbaFromTlmBridge64::transportDbg(amba_pv::amba_pv_transaction &trans)
+{

  • return initiatorProxy->transport_dbg(trans);
    +}

+void
+AmbaFromTlmBridge64::invalidateDirectMemPtr(sc_dt::uint64 start_range,

  •                                      sc_dt::uint64 end_range)
    

+{

  • targetProxy->invalidate_direct_mem_ptr(start_range, end_range);
    +}

+void
+AmbaFromTlmBridge64::syncControlExtension(amba_pv::amba_pv_transaction
&trans)
+{

  • Gem5SystemC::ControlExtension *control_ex = nullptr;

  • trans.get_extension(control_ex);

  • if (!control_ex) {

  •    return;
    
  • }

  • amba_pv::amba_pv_extension *amba_ex = nullptr;

  • trans.get_extension(amba_ex);

  • if (!amba_ex) {

  •    return;
    
  • }

  • amba_ex->set_privileged(control_ex->isPrivileged());

  • amba_ex->set_non_secure(!control_ex->isSecure());

  • amba_ex->set_instruction(control_ex->isInstruction());
    +}

  • } // namespace fastmodel

    fastmodel::AmbaFromTlmBridge64 *
    diff --git a/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh
    b/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh
    index a54617d..4484ea9 100644
    --- a/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh
    +++ b/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh
    @@ -47,13 +47,25 @@
    class AmbaFromTlmBridge64 : public amba_pv::amba_pv_from_tlm_bridge<64>
    {
    public:

  • AmbaFromTlmBridge64(const char *name);
  • AmbaFromTlmBridge64(const sc_core::sc_module_name &name);

    gem5::Port &gem5_getPort(const std::string &if_name, int idx=-1)
    override;

private:
  • AmbaInitiator ambaWrapper;
  • void bTransport(amba_pv::amba_pv_transaction &trans, sc_core::sc_time
    &t);
  • bool getDirectMemPtr(amba_pv::amba_pv_transaction &trans,
  •                     tlm::tlm_dmi &dmi_data);
    
  • unsigned int transportDbg(amba_pv::amba_pv_transaction &trans);
  • void invalidateDirectMemPtr(sc_dt::uint64 start_range,
  •                            sc_dt::uint64 end_range);
    
  • void syncControlExtension(amba_pv::amba_pv_transaction &trans);
  • tlm_utils::simple_target_socket<
  •    AmbaFromTlmBridge64, 64, tlm::tlm_base_protocol_types> targetProxy;
    
  • tlm_utils::simple_initiator_socket<
  •    AmbaFromTlmBridge64, 64, tlm::tlm_base_protocol_types>  
    

initiatorProxy;
sc_gem5::TlmTargetWrapper<64> tlmWrapper;

  • AmbaInitiator ambaWrapper;
    };

} // namespace fastmodel

--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/63773?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I600be7ba21368f00c05426ac1db3c28efd6ca2ea
Gerrit-Change-Number: 63773
Gerrit-PatchSet: 1
Gerrit-Owner: Yu-hsin Wang yuhsingw@google.com
Gerrit-MessageType: newchange

Yu-hsin Wang has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/63773?usp=email ) Change subject: fastmodel: correct the control signal in the direction from gem5 to amba ...................................................................... fastmodel: correct the control signal in the direction from gem5 to amba Change-Id: I600be7ba21368f00c05426ac1db3c28efd6ca2ea --- M src/arch/arm/fastmodel/amba_from_tlm_bridge.cc M src/arch/arm/fastmodel/amba_from_tlm_bridge.hh 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc b/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc index 4005355..65d0ee5 100644 --- a/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc +++ b/src/arch/arm/fastmodel/amba_from_tlm_bridge.cc @@ -28,6 +28,8 @@ #include "arch/arm/fastmodel/amba_from_tlm_bridge.hh" #include "params/AmbaFromTlmBridge64.hh" +#include "pv_userpayload_extension.h" +#include "systemc/tlm_bridge/sc_ext.hh" namespace gem5 { @@ -36,11 +38,21 @@ namespace fastmodel { -AmbaFromTlmBridge64::AmbaFromTlmBridge64(const char *name) : +AmbaFromTlmBridge64::AmbaFromTlmBridge64(const sc_core::sc_module_name& name) : amba_pv::amba_pv_from_tlm_bridge<64>(name), - ambaWrapper(amba_pv_m, std::string(name) + ".amba", -1), - tlmWrapper(tlm_s, std::string(name) + ".tlm", -1) -{} + targetProxy("target_proxy"), + initiatorProxy("initiator_proxy"), + tlmWrapper(targetProxy, std::string(name) + ".tlm", -1), + ambaWrapper(amba_pv_m, std::string(name) + ".amba", -1) +{ + targetProxy.register_b_transport(this, &AmbaFromTlmBridge64::bTransport); + targetProxy.register_get_direct_mem_ptr( + this, &AmbaFromTlmBridge64::getDirectMemPtr); + targetProxy.register_transport_dbg(this, &AmbaFromTlmBridge64::transportDbg); + initiatorProxy.register_invalidate_direct_mem_ptr( + this, &AmbaFromTlmBridge64::invalidateDirectMemPtr); + initiatorProxy(tlm_s); +} Port & AmbaFromTlmBridge64::gem5_getPort(const std::string &if_name, int idx) @@ -55,6 +67,54 @@ } } +void +AmbaFromTlmBridge64::bTransport(amba_pv::amba_pv_transaction &trans, + sc_core::sc_time &t) +{ + syncControlExtension(trans); + return initiatorProxy->b_transport(trans, t); +} + +bool +AmbaFromTlmBridge64::getDirectMemPtr(amba_pv::amba_pv_transaction &trans, + tlm::tlm_dmi &dmi_data) +{ + return initiatorProxy->get_direct_mem_ptr(trans, dmi_data); +} + +unsigned int +AmbaFromTlmBridge64::transportDbg(amba_pv::amba_pv_transaction &trans) +{ + return initiatorProxy->transport_dbg(trans); +} + +void +AmbaFromTlmBridge64::invalidateDirectMemPtr(sc_dt::uint64 start_range, + sc_dt::uint64 end_range) +{ + targetProxy->invalidate_direct_mem_ptr(start_range, end_range); +} + +void +AmbaFromTlmBridge64::syncControlExtension(amba_pv::amba_pv_transaction &trans) +{ + Gem5SystemC::ControlExtension *control_ex = nullptr; + trans.get_extension(control_ex); + if (!control_ex) { + return; + } + + amba_pv::amba_pv_extension *amba_ex = nullptr; + trans.get_extension(amba_ex); + if (!amba_ex) { + return; + } + + amba_ex->set_privileged(control_ex->isPrivileged()); + amba_ex->set_non_secure(!control_ex->isSecure()); + amba_ex->set_instruction(control_ex->isInstruction()); +} + } // namespace fastmodel fastmodel::AmbaFromTlmBridge64 * diff --git a/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh b/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh index a54617d..4484ea9 100644 --- a/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh +++ b/src/arch/arm/fastmodel/amba_from_tlm_bridge.hh @@ -47,13 +47,25 @@ class AmbaFromTlmBridge64 : public amba_pv::amba_pv_from_tlm_bridge<64> { public: - AmbaFromTlmBridge64(const char *name); + AmbaFromTlmBridge64(const sc_core::sc_module_name &name); gem5::Port &gem5_getPort(const std::string &if_name, int idx=-1) override; private: - AmbaInitiator ambaWrapper; + void bTransport(amba_pv::amba_pv_transaction &trans, sc_core::sc_time &t); + bool getDirectMemPtr(amba_pv::amba_pv_transaction &trans, + tlm::tlm_dmi &dmi_data); + unsigned int transportDbg(amba_pv::amba_pv_transaction &trans); + void invalidateDirectMemPtr(sc_dt::uint64 start_range, + sc_dt::uint64 end_range); + void syncControlExtension(amba_pv::amba_pv_transaction &trans); + + tlm_utils::simple_target_socket< + AmbaFromTlmBridge64, 64, tlm::tlm_base_protocol_types> targetProxy; + tlm_utils::simple_initiator_socket< + AmbaFromTlmBridge64, 64, tlm::tlm_base_protocol_types> initiatorProxy; sc_gem5::TlmTargetWrapper<64> tlmWrapper; + AmbaInitiator ambaWrapper; }; } // namespace fastmodel -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/63773?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: I600be7ba21368f00c05426ac1db3c28efd6ca2ea Gerrit-Change-Number: 63773 Gerrit-PatchSet: 1 Gerrit-Owner: Yu-hsin Wang <yuhsingw@google.com> Gerrit-MessageType: newchange