aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv')
-rwxr-xr-xarch/riscv/conf/initbin1040 -> 968 bytes
-rw-r--r--arch/riscv/conf/initrdbin1536 -> 1536 bytes
-rw-r--r--arch/riscv/conf/s.S5
-rw-r--r--arch/riscv/kernel/irq.c10
-rw-r--r--arch/riscv/kernel/vmem.c2
5 files changed, 11 insertions, 6 deletions
diff --git a/arch/riscv/conf/init b/arch/riscv/conf/init
index 43a179c..f05254f 100755
--- a/arch/riscv/conf/init
+++ b/arch/riscv/conf/init
Binary files differ
diff --git a/arch/riscv/conf/initrd b/arch/riscv/conf/initrd
index e3704f2..90344c1 100644
--- a/arch/riscv/conf/initrd
+++ b/arch/riscv/conf/initrd
Binary files differ
diff --git a/arch/riscv/conf/s.S b/arch/riscv/conf/s.S
index e6997ac..80a3a11 100644
--- a/arch/riscv/conf/s.S
+++ b/arch/riscv/conf/s.S
@@ -1,7 +1,4 @@
.text
.global _start
_start:
-li a1, 1
-loop:
-add a0, a0, a1
-jal loop
+ecall
diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c
index ed97c00..f844dd1 100644
--- a/arch/riscv/kernel/irq.c
+++ b/arch/riscv/kernel/irq.c
@@ -1,13 +1,21 @@
#include <apos/irq.h>
+#include <apos/attrs.h>
+#include <apos/debug.h>
#include <csr.h>
void init_irq(void *fdt)
{
UNUSED(fdt);
+ csr_write(CSR_STVEC, &handle_irq);
+
+ long s = 0;
+ csr_read(CSR_SIE, s);
+ info("CSR_SIE: %lx\n", s);
}
-void handle_irq()
+__aligned(4) void handle_irq()
{
+ while(1);
}
/* very simple for now */
diff --git a/arch/riscv/kernel/vmem.c b/arch/riscv/kernel/vmem.c
index c862cea..1f1f44a 100644
--- a/arch/riscv/kernel/vmem.c
+++ b/arch/riscv/kernel/vmem.c
@@ -177,6 +177,6 @@ int setup_kernel_io(struct vm_branch *b, vm_t paddr)
/* assume Sv39 for now */
pm_t gigapage = paddr / MM_GPAGE_SIZE;
b->leaf[IO_PAGE] = (struct vm_branch *)to_pte(gigapage, VM_V | VM_R | VM_W);
- return 0;
+ return -SZ_1G + paddr - (gigapage * MM_GPAGE_SIZE);
}
#endif