diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-03-24 15:29:43 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-03-26 19:26:18 -0700 |
commit | 41fa048e935d6e95d50dcb8bb463658b7a4d718e (patch) | |
tree | 09c5db73942f3a8d741791f700534c514b572248 /riscv/mmu.h | |
parent | e5675bfcb3a8a798628317d6dccfbc9bd1ea3ebf (diff) | |
download | riscv-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.h | 7 |
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) |