aboutsummaryrefslogtreecommitdiff
path: root/pk/riscv-pk.S
diff options
context:
space:
mode:
Diffstat (limited to 'pk/riscv-pk.S')
-rw-r--r--pk/riscv-pk.S37
1 files changed, 37 insertions, 0 deletions
diff --git a/pk/riscv-pk.S b/pk/riscv-pk.S
new file mode 100644
index 0000000..0696a2d
--- /dev/null
+++ b/pk/riscv-pk.S
@@ -0,0 +1,37 @@
+#include "pcr.h"
+#include "pk.h"
+
+.section .text,"ax",@progbits
+.globl __start
+.ent __start
+__start:
+
+ lui $sp, %hi(stack_top)
+ add $sp, $sp, %lo(stack_top)
+
+ lui $t0, %hi(trap_entry)
+ add $t0, $t0, %lo(trap_entry)
+ mtpcr $t0, ASM_CR(PCR_EVEC)
+
+ mtpcr $x0, ASM_CR(PCR_COUNT)
+ mtpcr $x0, ASM_CR(PCR_COMPARE)
+
+ li $t0, SR_S | SR_PS | SR_ET | SR_IM | SR_EC | SR_SX
+ or $t1, $t0, SR_EF | SR_EV
+ mtpcr $t1, ASM_CR(PCR_SR)
+ mfpcr $t1, ASM_CR(PCR_SR)
+ mtpcr $t0, ASM_CR(PCR_SR)
+
+ and $t2, $t1, SR_EF
+ lui $t0, %hi(have_fp)
+ sw $t2, %lo(have_fp)($t0)
+
+ and $t2, $t1, SR_EV
+ lui $t0, %hi(have_vector)
+ sw $t2, %lo(have_vector)($t0)
+
+ lui $t0, %hi(boot)
+ jalr.j $t0, %lo(boot)
+ #j boot
+
+.end __start