formatting

This commit is contained in:
Liam Kerr 2026-02-09 18:55:51 +00:00
parent 821716adcc
commit 9e91024f35
9 changed files with 295 additions and 199 deletions

View file

@ -4,14 +4,16 @@
#include <syscon/syscon.h>
#include "memory.h"
void kpanic(const char *reason){
void kpanic(const char *reason)
{
kputs("\n!!! PANIC !!!\n");
kputs(reason);
kputs(reason);
kputs("\n!!! PANIC !!!\n");
poweroff();
poweroff();
}
void kpanic_force() {
void kpanic_force()
{
kprint("\n!!! FORCE PANIC !!!\n");
// 'ebreak' is the standard RISC-V way to trigger a debug trap.
@ -21,14 +23,16 @@ void kpanic_force() {
poweroff();
kprint("Force panic falled. Power off failed. sleep until interupt. \n");
while(1) {
while (1)
{
__asm__ volatile("wfi");
}
}
void handle_trap() {
void handle_trap()
{
kprint("\n!!! HARDWARE EXCEPTION DETECTED !!!\n");
// Read the 'mcause' register to see WHY we trapped
unsigned long cause;
__asm__ volatile("csrr %0, mcause" : "=r"(cause));
@ -37,17 +41,34 @@ void handle_trap() {
uintptr_t mtval;
asm volatile("csrr %0, mtval" : "=r"(mtval));
switch(cause) {
case 0: kprint("Reason: Instruction Address Misaligned\n"); break;
case 1: kprint("Reason: Instruction Access Fault\n"); break;
case 2: kprint("Reason: Illegal Instruction\n"); break;
case 3: kprint("Reason: Breakpoint (ebreak)\n"); break;
case 4: kprint("Reason: Load Address Misaligned\n"); break;
case 5: kprint("Reason: Load Access Fault\n"); break;
case 6: kprint("Reason: Store/AMO Address Misaligned\n"); break;
case 7: kprint("Reason: Store/AMO Access Fault\n"); break;
default:
kprintf("Reason: Unknown Exception Code %d\n", cause);
switch (cause)
{
case 0:
kprint("Reason: Instruction Address Misaligned\n");
break;
case 1:
kprint("Reason: Instruction Access Fault\n");
break;
case 2:
kprint("Reason: Illegal Instruction\n");
break;
case 3:
kprint("Reason: Breakpoint (ebreak)\n");
break;
case 4:
kprint("Reason: Load Address Misaligned\n");
break;
case 5:
kprint("Reason: Load Access Fault\n");
break;
case 6:
kprint("Reason: Store/AMO Address Misaligned\n");
break;
case 7:
kprint("Reason: Store/AMO Access Fault\n");
break;
default:
kprintf("Reason: Unknown Exception Code %d\n", cause);
}
kprintf("Faulting Address (if applicable): %x\n", mtval);