aboutsummaryrefslogtreecommitdiff
path: root/machine/minit.c
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-02-15 15:20:06 -0800
committerAndrew Waterman <andrew@sifive.com>2017-02-15 15:26:04 -0800
commit4678e84c040531a48eff2108fd9212660bf527ae (patch)
tree293343a64c9017bf71add2dfe657a49c18c9cfd7 /machine/minit.c
parent6667bc4c42fd9968527644e32841757234285efd (diff)
downloadpk-4678e84c040531a48eff2108fd9212660bf527ae.zip
pk-4678e84c040531a48eff2108fd9212660bf527ae.tar.gz
pk-4678e84c040531a48eff2108fd9212660bf527ae.tar.bz2
Incorporate sptbr/sfence.vma changes
Diffstat (limited to 'machine/minit.c')
-rw-r--r--machine/minit.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/machine/minit.c b/machine/minit.c
index b3f2c86..06e8d25 100644
--- a/machine/minit.c
+++ b/machine/minit.c
@@ -15,15 +15,8 @@ size_t plic_ndevs;
static void mstatus_init()
{
- // Enable FPU and set VM mode
- uintptr_t ms = 0;
- ms = INSERT_FIELD(ms, MSTATUS_VM, VM_CHOICE);
- ms = INSERT_FIELD(ms, MSTATUS_FS, 1);
- write_csr(mstatus, ms);
-
- // Make sure the hart actually supports the VM mode we want
- ms = read_csr(mstatus);
- assert(EXTRACT_FIELD(ms, MSTATUS_VM) == VM_CHOICE);
+ // Enable FPU
+ write_csr(mstatus, MSTATUS_FS);
// Enable user/supervisor use of perf counters
write_csr(mucounteren, -1);
@@ -156,7 +149,7 @@ void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t stack)
write_csr(mstatus, mstatus);
write_csr(mscratch, MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE);
write_csr(mepc, fn);
- write_csr(sptbr, (uintptr_t)root_page_table >> RISCV_PGSHIFT);
+ write_csr(sptbr, ((uintptr_t)root_page_table >> RISCV_PGSHIFT) | SPTBR_MODE);
asm volatile ("mv a0, %0; mv sp, %0; mret" : : "r" (stack));
__builtin_unreachable();
}