aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.cc
diff options
context:
space:
mode:
authorrbuchner <ryan.buchner@arilinc.com>2023-04-18 14:06:12 -0700
committerrbuchner <ryan.buchner@arilinc.com>2023-05-11 23:00:59 -0700
commit4b9996bad9a3327b13056f21b7b2e03fdc41f65a (patch)
tree7e6273451e63ee9401a16c2573cce71479ea1092 /riscv/mmu.cc
parentf7900e4730e1c13fa42789bc01d8f0366756130e (diff)
downloadriscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.zip
riscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.tar.gz
riscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.tar.bz2
Pass mem_access_info_t into walk()
Diffstat (limited to 'riscv/mmu.cc')
-rw-r--r--riscv/mmu.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc
index 7264ea8..f40ce30 100644
--- a/riscv/mmu.cc
+++ b/riscv/mmu.cc
@@ -60,10 +60,9 @@ reg_t mmu_t::translate(mem_access_info_t access_info, reg_t len)
return addr;
bool virt = access_info.effective_virt;
- bool hlvx = access_info.flags.hlvx;
reg_t mode = (reg_t) access_info.effective_priv;
- reg_t paddr = walk(addr, type, mode, virt, hlvx) | (addr & (PGSIZE-1));
+ reg_t paddr = walk(access_info) | (addr & (PGSIZE-1));
if (!pmp_ok(paddr, len, type, mode))
throw_access_exception(virt, addr, type);
return paddr;
@@ -461,8 +460,13 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty
}
}
-reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool hlvx)
+reg_t mmu_t::walk(mem_access_info_t access_info)
{
+ access_type type = access_info.type;
+ reg_t addr = access_info.vaddr;
+ bool virt = access_info.effective_virt;
+ bool hlvx = access_info.flags.hlvx;
+ reg_t mode = access_info.effective_priv;
reg_t page_mask = (reg_t(1) << PGSHIFT) - 1;
reg_t satp = proc->get_state()->satp->readvirt(virt);
vm_info vm = decode_vm_info(proc->get_const_xlen(), false, mode, satp);