aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.cc
diff options
context:
space:
mode:
authorScott Johnson <scott.johnson@arilinc.com>2021-02-23 17:30:18 -0800
committerAndrew Waterman <aswaterman@gmail.com>2021-09-08 07:59:02 -0700
commit95824344eb56097e9bb45cab9d22ab370908c2ff (patch)
tree50e8ed824cf85963603d0a8868c48643f1ea425e /riscv/mmu.cc
parent82aa7891e24de9c25a949f948ef6f47a732d7fdb (diff)
downloadspike-95824344eb56097e9bb45cab9d22ab370908c2ff.zip
spike-95824344eb56097e9bb45cab9d22ab370908c2ff.tar.gz
spike-95824344eb56097e9bb45cab9d22ab370908c2ff.tar.bz2
Add tor_base_paddr() method to pmpaddr
This will enable further restructuring of these loops in mmu.cc in the next commits.
Diffstat (limited to 'riscv/mmu.cc')
-rw-r--r--riscv/mmu.cc8
1 files changed, 2 insertions, 6 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc
index 841fa7e..be3d3e0 100644
--- a/riscv/mmu.cc
+++ b/riscv/mmu.cc
@@ -220,8 +220,8 @@ reg_t mmu_t::pmp_ok(reg_t addr, reg_t len, access_type type, reg_t mode)
if (!proc || proc->n_pmp == 0)
return true;
- reg_t base = 0;
for (size_t i = 0; i < proc->n_pmp; i++) {
+ reg_t base = proc->state.pmpaddr[i]->tor_base_paddr();
reg_t tor = proc->state.pmpaddr[i]->tor_paddr();
uint8_t cfg = proc->state.pmpcfg[i];
@@ -252,8 +252,6 @@ reg_t mmu_t::pmp_ok(reg_t addr, reg_t len, access_type type, reg_t mode)
(type == FETCH && (cfg & PMP_X));
}
}
-
- base = tor;
}
return mode == PRV_M;
@@ -267,8 +265,8 @@ reg_t mmu_t::pmp_homogeneous(reg_t addr, reg_t len)
if (!proc)
return true;
- reg_t base = 0;
for (size_t i = 0; i < proc->n_pmp; i++) {
+ reg_t base = proc->state.pmpaddr[i]->tor_base_paddr();
reg_t tor = proc->state.pmpaddr[i]->tor_paddr();
uint8_t cfg = proc->state.pmpcfg[i];
@@ -288,8 +286,6 @@ reg_t mmu_t::pmp_homogeneous(reg_t addr, reg_t len)
if (!(is_tor ? tor_homogeneous : napot_homogeneous))
return false;
}
-
- base = tor;
}
return true;