From f6eff201069564ea01100d556b079f99e076dd09 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 6 Jul 2016 03:23:58 -0700 Subject: Udpate to new PTE format --- machine/encoding.h | 8 +------- machine/unprivileged_memory.h | 4 ++-- machine/vm.h | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) (limited to 'machine') diff --git a/machine/encoding.h b/machine/encoding.h index 2f52bdb..641954a 100644 --- a/machine/encoding.h +++ b/machine/encoding.h @@ -18,6 +18,7 @@ #define MSTATUS_XS 0x00018000 #define MSTATUS_MPRV 0x00020000 #define MSTATUS_PUM 0x00040000 +#define MSTATUS_MXR 0x00080000 #define MSTATUS_VM 0x1F000000 #define MSTATUS32_SD 0x80000000 #define MSTATUS64_SD 0x8000000000000000 @@ -128,13 +129,6 @@ #define PTE_D 0x080 // Dirty #define PTE_SOFT 0x300 // Reserved for Software -#define PTE_TYPE_TABLE 0x00 -#define PTE_TYPE_R 0x02 -#define PTE_TYPE_RW 0x06 -#define PTE_TYPE_X 0x08 -#define PTE_TYPE_RX 0x0A -#define PTE_TYPE_RWX 0x0E - #define PTE_PPN_SHIFT 10 #define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) diff --git a/machine/unprivileged_memory.h b/machine/unprivileged_memory.h index d03cc5e..7ed9e7c 100644 --- a/machine/unprivileged_memory.h +++ b/machine/unprivileged_memory.h @@ -57,7 +57,7 @@ static uint32_t __attribute__((always_inline)) get_insn(uintptr_t mepc, uintptr_ "lw %[insn], (%[addr])\n" "csrw mstatus, %[mstatus]" : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val) - : [mprv] "r" (MSTATUS_MPRV), [addr] "r" (__mepc)); + : [mprv] "r" (MSTATUS_MPRV | MSTATUS_MXR), [addr] "r" (__mepc)); #else uintptr_t rvc_mask = 3, tmp; asm ("csrrs %[mstatus], mstatus, %[mprv]\n" @@ -69,7 +69,7 @@ static uint32_t __attribute__((always_inline)) get_insn(uintptr_t mepc, uintptr_ "add %[insn], %[insn], %[tmp]\n" "1: csrw mstatus, %[mstatus]" : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val), [tmp] "=&r" (tmp) - : [mprv] "r" (MSTATUS_MPRV), [addr] "r" (__mepc), + : [mprv] "r" (MSTATUS_MPRV | MSTATUS_MXR), [addr] "r" (__mepc), [rvc_mask] "r" (rvc_mask)); #endif *mstatus = __mstatus; diff --git a/machine/vm.h b/machine/vm.h index f51c639..dd9bf59 100644 --- a/machine/vm.h +++ b/machine/vm.h @@ -29,7 +29,7 @@ static inline pte_t pte_create(uintptr_t ppn, int type) static inline pte_t ptd_create(uintptr_t ppn) { - return pte_create(ppn, PTE_TYPE_TABLE); + return pte_create(ppn, PTE_V); } #endif -- cgit v1.1