aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-03-21 16:56:52 -0700
committerAndrew Waterman <andrew@sifive.com>2017-03-21 16:56:52 -0700
commit7d60c5904f45d979643c1b9f6cdde42f62ef3c32 (patch)
tree63577f9eb00e0f9686ab9ec661cc622104771e37
parentcfc4554bc641214261089e03edc2450e9af027ac (diff)
downloadriscv-pk-7d60c5904f45d979643c1b9f6cdde42f62ef3c32.zip
riscv-pk-7d60c5904f45d979643c1b9f6cdde42f62ef3c32.tar.gz
riscv-pk-7d60c5904f45d979643c1b9f6cdde42f62ef3c32.tar.bz2
Allow PK access to user memory
-rw-r--r--machine/encoding.h15
-rw-r--r--pk/pk.c1
2 files changed, 14 insertions, 2 deletions
diff --git a/machine/encoding.h b/machine/encoding.h
index 1b9883e..4f0d0a4 100644
--- a/machine/encoding.h
+++ b/machine/encoding.h
@@ -17,7 +17,7 @@
#define MSTATUS_FS 0x00006000
#define MSTATUS_XS 0x00018000
#define MSTATUS_MPRV 0x00020000
-#define MSTATUS_PUM 0x00040000
+#define MSTATUS_SUM 0x00040000
#define MSTATUS_MXR 0x00080000
#define MSTATUS_TVM 0x00100000
#define MSTATUS_TW 0x00200000
@@ -32,7 +32,8 @@
#define SSTATUS_SPP 0x00000100
#define SSTATUS_FS 0x00006000
#define SSTATUS_XS 0x00018000
-#define SSTATUS_PUM 0x00040000
+#define SSTATUS_SUM 0x00040000
+#define SSTATUS_MXR 0x00080000
#define SSTATUS32_SD 0x80000000
#define SSTATUS64_SD 0x8000000000000000
@@ -123,6 +124,16 @@
#define SPTBR_MODE_SV57 10
#define SPTBR_MODE_SV64 11
+#define PMP_R 0x01
+#define PMP_W 0x02
+#define PMP_X 0x04
+#define PMP_M 0x08
+#define PMP_NAPOT 0x10
+#define PMP_TOR 0x20
+#define PMP_EN 0x40
+#define PMP_LOCK 0x80
+#define PMP_SHIFT 2
+
#define IRQ_S_SOFT 1
#define IRQ_H_SOFT 2
#define IRQ_M_SOFT 3
diff --git a/pk/pk.c b/pk/pk.c
index 8132f8d..c0b6407 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -160,6 +160,7 @@ void boot_loader()
write_csr(stvec, &trap_entry);
write_csr(sscratch, 0);
write_csr(sie, 0);
+ set_csr(sstatus, SSTATUS_SUM);
file_init();
enter_supervisor_mode(rest_of_boot_loader, pk_vm_init(), 0);