aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.h
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-03-24 15:29:43 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-03-26 19:26:18 -0700
commit41fa048e935d6e95d50dcb8bb463658b7a4d718e (patch)
tree09c5db73942f3a8d741791f700534c514b572248 /riscv/mmu.h
parente5675bfcb3a8a798628317d6dccfbc9bd1ea3ebf (diff)
downloadriscv-isa-sim-41fa048e935d6e95d50dcb8bb463658b7a4d718e.zip
riscv-isa-sim-41fa048e935d6e95d50dcb8bb463658b7a4d718e.tar.gz
riscv-isa-sim-41fa048e935d6e95d50dcb8bb463658b7a4d718e.tar.bz2
New virtual memory implementation (Sv39)
Diffstat (limited to 'riscv/mmu.h')
-rw-r--r--riscv/mmu.h7
1 files changed, 3 insertions, 4 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h
index 8f1635d..e310146 100644
--- a/riscv/mmu.h
+++ b/riscv/mmu.h
@@ -14,11 +14,10 @@
// virtual memory configuration
typedef reg_t pte_t;
const reg_t LEVELS = sizeof(pte_t) == 8 ? 3 : 2;
-const reg_t PTIDXBITS = 10;
-const reg_t PGSHIFT = PTIDXBITS + (sizeof(pte_t) == 8 ? 3 : 2);
+const reg_t PGSHIFT = 12;
+const reg_t PTIDXBITS = PGSHIFT - (sizeof(pte_t) == 8 ? 3 : 2);
const reg_t PGSIZE = 1 << PGSHIFT;
const reg_t VPN_BITS = PTIDXBITS * LEVELS;
-const reg_t PPN_BITS = 8*sizeof(reg_t) - PGSHIFT;
const reg_t VA_BITS = VPN_BITS + PGSHIFT;
struct insn_fetch_t
@@ -155,7 +154,7 @@ private:
void* refill_tlb(reg_t addr, reg_t bytes, bool store, bool fetch);
// perform a page table walk for a given VA; set referenced/dirty bits
- pte_t walk(reg_t addr, reg_t perm);
+ pte_t walk(reg_t addr, bool supervisor, bool store, bool fetch);
// translate a virtual address to a physical address
void* translate(reg_t addr, reg_t bytes, bool store, bool fetch)