diff options
-rw-r--r-- | src/arch/arm/fastmodel/iris/cpu.cc | 8 | ||||
-rw-r--r-- | src/arch/arm/fastmodel/iris/cpu.hh | 2 | ||||
-rw-r--r-- | src/arch/arm/fastmodel/iris/thread_context.cc | 18 | ||||
-rw-r--r-- | src/arch/arm/fastmodel/iris/thread_context.hh | 25 |
4 files changed, 38 insertions, 15 deletions
diff --git a/src/arch/arm/fastmodel/iris/cpu.cc b/src/arch/arm/fastmodel/iris/cpu.cc index 8284d1717..d66cf1dbc 100644 --- a/src/arch/arm/fastmodel/iris/cpu.cc +++ b/src/arch/arm/fastmodel/iris/cpu.cc @@ -78,4 +78,12 @@ BaseCPU::totalInsts() const return count; } +void +BaseCPU::init() +{ + ::BaseCPU::init(); + for (auto *tc: threadContexts) + tc->initMemProxies(tc); +} + } // namespace Iris diff --git a/src/arch/arm/fastmodel/iris/cpu.hh b/src/arch/arm/fastmodel/iris/cpu.hh index ef839784c..0d15fc82a 100644 --- a/src/arch/arm/fastmodel/iris/cpu.hh +++ b/src/arch/arm/fastmodel/iris/cpu.hh @@ -116,6 +116,8 @@ class BaseCPU : public ::BaseCPU periodAttribute->value = clockPeriod(); clockEvent->notify(); } + + void init() override; }; // This class specializes the one above and sets up ThreadContexts based on diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc b/src/arch/arm/fastmodel/iris/thread_context.cc index 89748957c..00c41ba9c 100644 --- a/src/arch/arm/fastmodel/iris/thread_context.cc +++ b/src/arch/arm/fastmodel/iris/thread_context.cc @@ -31,6 +31,8 @@ #include "iris/detail/IrisCppAdapter.h" #include "iris/detail/IrisObjects.h" +#include "mem/fs_translating_port_proxy.hh" +#include "mem/se_translating_port_proxy.hh" namespace Iris { @@ -291,6 +293,22 @@ ThreadContext::getCurrentInstCount() return count; } +void +ThreadContext::initMemProxies(::ThreadContext *tc) +{ + if (FullSystem) { + assert(!physProxy && !virtProxy); + physProxy.reset(new PortProxy(_cpu->getSendFunctional(), + _cpu->cacheLineSize())); + virtProxy.reset(new FSTranslatingPortProxy(tc)); + } else { + assert(!virtProxy); + virtProxy.reset(new SETranslatingPortProxy( + _cpu->getSendFunctional(), getProcessPtr(), + SETranslatingPortProxy::NextPage)); + } +} + ThreadContext::Status ThreadContext::status() const { diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh b/src/arch/arm/fastmodel/iris/thread_context.hh index 49b3325e7..8d2070a02 100644 --- a/src/arch/arm/fastmodel/iris/thread_context.hh +++ b/src/arch/arm/fastmodel/iris/thread_context.hh @@ -30,6 +30,8 @@ #ifndef __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__ #define __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__ +#include <memory> + #include "cpu/base.hh" #include "cpu/thread_context.hh" #include "iris/IrisInstance.h" @@ -77,6 +79,9 @@ class ThreadContext : public ::ThreadContext std::vector<iris::MemorySpaceInfo> memorySpaces; std::vector<iris::MemorySupportedAddressTranslationResult> translations; + std::unique_ptr<PortProxy> virtProxy = nullptr; + std::unique_ptr<PortProxy> physProxy = nullptr; + // A queue to keep track of instruction count based events. EventQueue comInstEventQueue; @@ -161,21 +166,11 @@ class ThreadContext : public ::ThreadContext { panic("%s not implemented.", __FUNCTION__); } - PortProxy & - getPhysProxy() override - { - panic("%s not implemented.", __FUNCTION__); - } - PortProxy & - getVirtProxy() override - { - panic("%s not implemented.", __FUNCTION__); - } - void - initMemProxies(::ThreadContext *tc) override - { - panic("%s not implemented.", __FUNCTION__); - } + + PortProxy &getPhysProxy() override { return *physProxy; } + PortProxy &getVirtProxy() override { return *virtProxy; } + void initMemProxies(::ThreadContext *tc) override; + Process * getProcessPtr() override { |