diff --git a/JOURNAL.md b/JOURNAL.md index 377cd98..560d526 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -2204,3 +2204,19 @@ And with the OpenSBI regions (in reverse order): Domain0 Region02 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: () Let's add some instrumentation in the code that handles the traps in OpenSBI. + +Memory regions: + + 0x8000_0000 to 0x8003_ffff : OpenSBI code + 0x8004_0000 to 0x8005_ffff : OpenSBI data + 0x8010_0000 to 0x801._.... : FDT + 0x8020_0000 to 0x8020_.... : U-Boot (later kernel) + + 0x8020_1000 to 0x81fa_0b87 : Kernel image + 80201000-80cb177f : Kernel code + 81400000-819fffff : Kernel rodata + 81c00000-81f18747 : Kernel data + 81f19000-81fa0b87 : Kernel bss + + 0x8400_0000 to 0x84.._.... M: (R,W) S/U: () Linux kernel + diff --git a/opensbi-timer-debug.patch b/opensbi-timer-debug.patch index 8e3fc97..735f55e 100644 --- a/opensbi-timer-debug.patch +++ b/opensbi-timer-debug.patch @@ -34,34 +34,50 @@ index 7b618de..65e42b0 100644 void sbi_timer_exit(struct sbi_scratch *scratch) diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c -index b4f3a17..3c05a5b 100644 +index b4f3a17..b60315f 100644 --- a/lib/sbi/sbi_trap.c +++ b/lib/sbi/sbi_trap.c -@@ -306,15 +306,18 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) +@@ -283,6 +283,7 @@ static int sbi_trap_aia_irq(void) + */ + struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) + { ++ sbi_printf("!"); + int rc = SBI_ENOTSUPP; + const char *msg = "trap handler failed"; + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); +@@ -295,6 +296,7 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) + sbi_trap_set_context(scratch, tcntx); + + if (mcause & MCAUSE_IRQ_MASK) { ++ sbi_printf("OpenSBI: local interrupt"); + if (sbi_hart_has_extension(sbi_scratch_thishart_ptr(), + SBI_HART_EXT_SMAIA)) + rc = sbi_trap_aia_irq(); +@@ -306,15 +308,18 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) switch (mcause) { case CAUSE_ILLEGAL_INSTRUCTION: -+ sbi_printf("OpenSBI: illegall instruction\n"); ++ sbi_printf("OpenSBI: illegal instruction"); rc = sbi_illegal_insn_handler(tcntx); msg = "illegal instruction handler failed"; break; case CAUSE_MISALIGNED_LOAD: -+ sbi_printf("OpenSBI: misaligned load\n"); ++ sbi_printf("OpenSBI: misaligned load"); sbi_pmu_ctr_incr_fw(SBI_PMU_FW_MISALIGNED_LOAD); rc = sbi_misaligned_load_handler(tcntx); msg = "misaligned load handler failed"; break; case CAUSE_MISALIGNED_STORE: -+ sbi_printf("OpenSBI: misaligned store\n"); ++ sbi_printf("OpenSBI: misaligned store"); sbi_pmu_ctr_incr_fw(SBI_PMU_FW_MISALIGNED_STORE); rc = sbi_misaligned_store_handler(tcntx); msg = "misaligned store handler failed"; -@@ -344,6 +347,8 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) +@@ -344,6 +349,8 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) trap_done: if (rc) sbi_trap_error(msg, rc, tcntx); + else -+ sbi_printf("OpenSBI: good trap\n"); ++ sbi_printf("$\n"); if (((regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT) != PRV_M) sbi_sse_process_pending_events(regs);