diff --git a/src/isa/riscv64/mmu.c b/src/isa/riscv64/mmu.c index f5468e6b47f8f1a147d6d29f41e9cb23944da1dc..ff958036442c8c6d6b26b16239e3729881b3cef4 100644 --- a/src/isa/riscv64/mmu.c +++ b/src/isa/riscv64/mmu.c @@ -88,13 +88,23 @@ static inline paddr_t page_translate(vaddr_t addr, bool is_write) { } word_t isa_vaddr_read(vaddr_t addr, int len) { - assert(satp->mode == 0 || satp->mode == 8); - paddr_t paddr = (satp->mode == 8 ? page_translate(addr, false) : addr); + paddr_t paddr = addr; + if (cpu.mode < MODE_M) { + assert(satp->mode == 0 || satp->mode == 8); + if (satp->mode == 8) { + paddr = page_translate(addr, false); + } + } return paddr_read(paddr, len); } void isa_vaddr_write(vaddr_t addr, word_t data, int len) { - assert(satp->mode == 0 || satp->mode == 8); - paddr_t paddr = (satp->mode == 8 ? page_translate(addr, true) : addr); + paddr_t paddr = addr; + if (cpu.mode < MODE_M) { + assert(satp->mode == 0 || satp->mode == 8); + if (satp->mode == 8) { + paddr = page_translate(addr, true); + } + } paddr_write(paddr, data, len); }