fastmodel: add iris readMem and writeMem function
Iris memory API allows us to access the memory inside the core, for example the tightly coupled memory (TCM). If we access a memory address which is not in the CPU, it also fire a request to memory system. Change-Id: I5925214534a10e3a55b780c3d4ed06e7559aafe0 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/45268 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -39,11 +39,15 @@
|
||||
|
||||
#include "arch/arm/fastmodel/iris/thread_context.hh"
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "arch/arm/fastmodel/iris/cpu.hh"
|
||||
#include "arch/arm/system.hh"
|
||||
#include "arch/arm/utility.hh"
|
||||
#include "base/logging.hh"
|
||||
#include "iris/detail/IrisCppAdapter.h"
|
||||
#include "iris/detail/IrisObjects.h"
|
||||
#include "mem/se_translating_port_proxy.hh"
|
||||
@@ -420,6 +424,25 @@ ThreadContext::remove(PCEvent *e)
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
ThreadContext::readMem(Addr addr, void *p, size_t size)
|
||||
{
|
||||
iris::r0master::MemoryReadResult r;
|
||||
auto err = call().memory_read(_instId, r, 0, 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)
|
||||
{
|
||||
std::vector<uint64_t> 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);
|
||||
panic_if(err != iris::r0master::E_ok, "writeMem failed.");
|
||||
}
|
||||
|
||||
bool
|
||||
ThreadContext::translateAddress(Addr &paddr, iris::MemorySpaceId p_space,
|
||||
Addr vaddr, iris::MemorySpaceId v_space)
|
||||
|
||||
@@ -162,6 +162,8 @@ 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);
|
||||
bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space,
|
||||
Addr vaddr, iris::MemorySpaceId v_space);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user