aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2024-09-26 15:43:17 -0700
committerAndrew Waterman <andrew@sifive.com>2024-09-26 15:44:19 -0700
commit7f3bef01193137e3227fcf88bece86f5234b9bc5 (patch)
tree7f9aa70b4cd2661e6b12a91285f0d5c48f07ea0a
parent47a2e87ccd4e95f80f0754c6f3312ccb3b90d916 (diff)
downloadriscv-pk-master.zip
riscv-pk-master.tar.gz
riscv-pk-master.tar.bz2
Enable CBOs (but upgrade inval to flush for safety)HEADmaster
-rw-r--r--machine/minit.c2
-rw-r--r--pk/pk.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/machine/minit.c b/machine/minit.c
index ceae9f0..3174409 100644
--- a/machine/minit.c
+++ b/machine/minit.c
@@ -246,7 +246,7 @@ void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1
mstatus = INSERT_FIELD(mstatus, MSTATUS_MPIE, 0);
write_csr(mstatus, mstatus);
write_csr(mscratch, MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE);
- write_csr(menvcfg, MENVCFG_SSE);
+ write_csr(menvcfg, MENVCFG_SSE | MENVCFG_CBCFE | INSERT_FIELD(0, MENVCFG_CBIE, 1));
#ifndef __riscv_flen
uintptr_t *p_fcsr = (uintptr_t*)(MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE); // the x0's save slot
*p_fcsr = 0;
diff --git a/pk/pk.c b/pk/pk.c
index 64d8d57..bc41308 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -122,6 +122,8 @@ static void run_loaded_program(size_t argc, char** argv, uintptr_t kstack_top)
write_csr(ssp, shadow_stack_top);
}
+ set_csr(senvcfg, SENVCFG_CBCFE | INSERT_FIELD(0, SENVCFG_CBIE, 1));
+
// copy phdrs to user stack
size_t stack_top = current.stack_top - current.phdr_size;
memcpy_to_user((void*)stack_top, (void*)current.phdr, current.phdr_size);