From f95c522b0ae30dd3c4d9c4449de98d3b5c6e9a65 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Tue, 4 Jun 2024 18:56:27 +0200 Subject: Enable and configure APLIC & IMSIC --- kernel/start.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'kernel/start.c') diff --git a/kernel/start.c b/kernel/start.c index b7170ae..859ae5d 100644 --- a/kernel/start.c +++ b/kernel/start.c @@ -3,6 +3,7 @@ #include "kernel/kalloc.h" #include "kernel/vm.h" #include "kernel/cpu.h" +#include "kernel/aplic.h" Cpu cpus[MAX_CPU]; @@ -12,13 +13,51 @@ extern uint32_t _ram_end; void kstrap() { - panic("kstrap"); + uint32_t scause; + __asm__ volatile("csrr %0, scause" : "=r"(scause)); + switch (scause) + { + case 0: panic("kstrap: Instruction address misaligned"); + case 1: panic("kstrap: Instruction access fault"); + case 2: panic("kstrap: Illegal instruction"); + case 3: panic("kstrap: Breakpoint"); + case 4: panic("kstrap: Load address misaligned"); + case 5: panic("kstrap: Load access fault"); + case 6: panic("kstrap: Store/AMO address misaligned"); + case 7: panic("kstrap: Store/AMO access fault"); + case 8: panic("kstrap: Environment call from U-mode"); + case 9: panic("kstrap: Environment call from S-mode"); + case 12: panic("kstrap: Instruction page fault"); + case 13: panic("kstrap: Load page fault"); + case 14: panic("kstrap: Reserved"); + case 15: panic("kstrap: Store/AMO page fault"); + case 18: panic("kstrap: Software check"); + case 19: panic("kstrap: Hardware error"); + default: panic("kstrap: Unknown"); + } +} + +void uart_init() +{ + volatile char* UART_BASE = (volatile char*)0x1000'0000; + + // Set LCR[1:0] to 0b11 for 8-bit words + *(UART_BASE + 3) = 0b0000'0011; + + // Set FCR[0] to 1 to enable FIFO + *(UART_BASE + 2) = 0b0000'0001; + + // Set IER[0] to 1 to enable interrupts on receive + *(UART_BASE + 1) = 0b0000'0001; } void kstart() { + uart_init(); + kalloc_init(); kvm_init(); + aplic_init(); panic("kstart: end"); } -- cgit