From 43c6225da3b4c1baa6fce6eab0751dec4f3dc5e9 Mon Sep 17 00:00:00 2001 From: Yu-hsin Wang Date: Thu, 29 Jul 2021 16:06:52 +0800 Subject: [PATCH] fastmodel: correct memory access space id Change-Id: Ie513c44c362baddc0690cd97a2657f9ccdd06e96 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48823 Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- src/arch/arm/fastmodel/iris/thread_context.cc | 18 ++++++++++++------ src/arch/arm/fastmodel/iris/thread_context.hh | 6 ++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc b/src/arch/arm/fastmodel/iris/thread_context.cc index 0d2f0b3dbb..11e4f17cca 100644 --- a/src/arch/arm/fastmodel/iris/thread_context.cc +++ b/src/arch/arm/fastmodel/iris/thread_context.cc @@ -437,21 +437,23 @@ ThreadContext::remove(PCEvent *e) } void -ThreadContext::readMem(Addr addr, void *p, size_t size) +ThreadContext::readMem( + iris::MemorySpaceId space, Addr addr, void *p, size_t size) { iris::r0master::MemoryReadResult r; - auto err = call().memory_read(_instId, r, 0, addr, 1, size); + auto err = call().memory_read(_instId, r, space, addr, 1, size); panic_if(err != iris::r0master::E_ok, "readMem failed."); std::memcpy(p, r.data.data(), size); } void -ThreadContext::writeMem(Addr addr, const void *p, size_t size) +ThreadContext::writeMem( + iris::MemorySpaceId space, Addr addr, const void *p, size_t size) { std::vector data((size + 7) / 8); std::memcpy(data.data(), p, size); iris::MemoryWriteResult r; - auto err = call().memory_write(_instId, r, 0, addr, 1, size, data); + auto err = call().memory_write(_instId, r, space, addr, 1, size, data); panic_if(err != iris::r0master::E_ok, "writeMem failed."); } @@ -515,15 +517,19 @@ ThreadContext::getCurrentInstCount() void ThreadContext::sendFunctional(PacketPtr pkt) { + auto msn = ArmISA::isSecure(this) ? + Iris::PhysicalMemorySecureMsn : Iris::PhysicalMemoryNonSecureMsn; + auto id = getMemorySpaceId(msn); + auto addr = pkt->getAddr(); auto size = pkt->getSize(); auto data = pkt->getPtr(); pkt->makeResponse(); if (pkt->isRead()) - readMem(addr, data, size); + readMem(id, addr, data, size); else - writeMem(addr, data, size); + writeMem(id, addr, data, size); } ThreadContext::Status diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh b/src/arch/arm/fastmodel/iris/thread_context.hh index ddc08eb169..49f2caeb6a 100644 --- a/src/arch/arm/fastmodel/iris/thread_context.hh +++ b/src/arch/arm/fastmodel/iris/thread_context.hh @@ -169,8 +169,10 @@ class ThreadContext : public gem5::ThreadContext iris::IrisCppAdapter &call() const { return client.irisCall(); } iris::IrisCppAdapter &noThrow() const { return client.irisCallNoThrow(); } - void readMem(Addr addr, void *p, size_t size); - void writeMem(Addr addr, const void *p, size_t size); + void readMem(iris::MemorySpaceId space, + Addr addr, void *p, size_t size); + void writeMem(iris::MemorySpaceId space, + Addr addr, const void *p, size_t size); bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space, Addr vaddr, iris::MemorySpaceId v_space);