aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/include/csr.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv/include/csr.h')
-rw-r--r--arch/riscv/include/csr.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/riscv/include/csr.h b/arch/riscv/include/csr.h
index 694000b..5da0882 100644
--- a/arch/riscv/include/csr.h
+++ b/arch/riscv/include/csr.h
@@ -1,8 +1,22 @@
#ifndef APOS_CSR_H
#define APOS_CSR_H
-#define csr_write(csr, val)
-
#define SATP_MODE_39 0x8000000000000000
+#define SATP_MODE_48 0x9000000000000000
+
+#define CSR_SATP 0x180
+
+/* directly lifted from Linux:/arch/riscv/include/asm/asm.h:9-13 */
+#ifdef __ASSEMBLY__
+#define __ASM_STR(x) x
+#else
+#define __ASM_STR(x) #x
+#endif
+
+#define csr_read(csr, res)\
+ __asm__ ("csrr %0, " __ASM_STR(csr) : "=r" (res) : : "memory")
+
+#define csr_write(csr, val)\
+ __asm__ ("csrw " __ASM_STR(csr) ", %0" : : "rK" (val) : "memory")
#endif /* APOS_CSR_H */