[PATCH v2 8/9] lib: sbi: display World ID configuration at boot
Yu-Chien Peter Lin <[email protected]>
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <[email protected]> |
Display domain-specific World ID (Wid/Widdeleg) and M-mode World ID source (from mwid/pmwid) during initialization for RISC-V Worlds debugging and verification. Signed-off-by: Yu-Chien Peter Lin <[email protected]> --- lib/sbi/sbi_domain.c | 31 +++++++++++++++++++++++++++++++ lib/sbi/sbi_init.c | 13 +++++++++++++ 2 files changed, 44 insertions(+) diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c index fa69170b..d1f7bb0c 100644 --- a/lib/sbi/sbi_domain.c +++ b/lib/sbi/sbi_domain.c @@ -10,6 +10,7 @@ #include <sbi/riscv_asm.h> #include <sbi/sbi_console.h> #include <sbi/sbi_domain.h> +#include <sbi/sbi_hart.h> #include <sbi/sbi_hartmask.h> #include <sbi/sbi_heap.h> #include <sbi/sbi_hsm.h> @@ -533,6 +534,8 @@ void sbi_domain_dump(const struct sbi_domain *dom, const char *suffix) u32 i, j, k; unsigned long rstart, rend; struct sbi_domain_memregion *reg; + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); + const struct sbi_hart_features *hf = sbi_hart_features_ptr(scratch); sbi_printf("Domain%d Name %s: %s\n", dom->index, suffix, dom->name); @@ -608,6 +611,34 @@ void sbi_domain_dump(const struct sbi_domain *dom, const char *suffix) break; } + if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMLWID)) { + if (dom->has_wid) { + sbi_printf("Domain%d Wid %s: %u\n", + dom->index, suffix, dom->wid); + } else if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWID)) { + sbi_printf("Domain%d Wid %s: %lu (mwid)\n", + dom->index, suffix, + csr_read(CSR_MWID) & ~MWID_LOCK); + } else if (hf->has_pmwid) { + sbi_printf("Domain%d Wid %s: %u (pmwid)\n", + dom->index, suffix, hf->pmwid); + } else { + sbi_printf("Domain%d Wid %s: unknown\n", + dom->index, suffix); + } + } else { + sbi_printf("Domain%d Wid %s: unsupported\n", + dom->index, suffix); + } + + if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWIDDELEG)) { + sbi_printf("Domain%d Widdeleg %s: 0x%" PRIx64 "\n", + dom->index, suffix, dom->widdeleg); + } else { + sbi_printf("Domain%d Widdeleg %s: unsupported\n", + dom->index, suffix); + } + sbi_printf("Domain%d SysReset %s: %s\n", dom->index, suffix, (dom->system_reset_allowed) ? "yes" : "no"); diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index acd2f8b6..f771f548 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -167,6 +167,7 @@ static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid) int xlen; char str[256]; const struct sbi_domain *dom = sbi_domain_thishart_ptr(); + struct sbi_hart_features *hf = sbi_hart_features_ptr(scratch); if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) return; @@ -199,6 +200,18 @@ static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid) sbi_printf("Boot HART Debug Triggers : %d triggers\n", sbi_dbtr_get_total_triggers()); sbi_hart_delegation_dump(scratch, "Boot HART ", " "); + if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWID)) { + ulong mwid = csr_read(CSR_MWID); + + sbi_printf("Boot HART M-mode World ID : %lu (%s)\n", + mwid & ~MWID_LOCK, + (mwid & MWID_LOCK) ? "locked" : "unlocked"); + } else if (hf->has_pmwid) { + sbi_printf("Boot HART M-mode World ID : %u (pmwid)\n", + hf->pmwid); + } else { + sbi_printf("Boot HART M-mode World ID : unsupported\n"); + } } static unsigned long coldboot_done; -- 2.43.7 -- opensbi mailing list [email protected] http://lists.infradead.org/mailman/listinfo/opensbi