diff options
-rw-r--r-- | lib/sbi/sbi_init.c | 90 |
1 files changed, 69 insertions, 21 deletions
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index 15ae9da..0e82458 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -35,12 +35,10 @@ " | |\n" \ " |_|\n\n" -static void sbi_boot_prints(struct sbi_scratch *scratch, u32 hartid) +static void sbi_boot_print_banner(struct sbi_scratch *scratch) { - int xlen; - char str[128]; - const struct sbi_domain *dom = sbi_domain_thishart_ptr(); - const struct sbi_platform *plat = sbi_platform_ptr(scratch); + if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) + return; #ifdef OPENSBI_VERSION_GIT sbi_printf("\nOpenSBI %s\n", OPENSBI_VERSION_GIT); @@ -50,13 +48,15 @@ static void sbi_boot_prints(struct sbi_scratch *scratch, u32 hartid) #endif sbi_printf(BANNER); +} - /* Determine MISA XLEN and MISA string */ - xlen = misa_xlen(); - if (xlen < 1) { - sbi_printf("Error %d getting MISA XLEN\n", xlen); - sbi_hart_hang(); - } +static void sbi_boot_print_general(struct sbi_scratch *scratch) +{ + char str[128]; + const struct sbi_platform *plat = sbi_platform_ptr(scratch); + + if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) + return; /* Platform details */ sbi_printf("Platform Name : %s\n", @@ -75,9 +75,32 @@ static void sbi_boot_prints(struct sbi_scratch *scratch, u32 hartid) sbi_printf("Runtime SBI Version : %d.%d\n", sbi_ecall_version_major(), sbi_ecall_version_minor()); sbi_printf("\n"); +} + +static void sbi_boot_print_domains(struct sbi_scratch *scratch) +{ + if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) + return; /* Domain details */ sbi_domain_dump_all(" "); +} + +static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid) +{ + int xlen; + char str[128]; + const struct sbi_domain *dom = sbi_domain_thishart_ptr(); + + if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) + return; + + /* Determine MISA XLEN and MISA string */ + xlen = misa_xlen(); + if (xlen < 1) { + sbi_printf("Error %d getting MISA XLEN\n", xlen); + sbi_hart_hang(); + } /* Boot HART details */ sbi_printf("Boot HART ID : %u\n", hartid); @@ -208,25 +231,40 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) if (rc) sbi_hart_hang(); + sbi_boot_print_banner(scratch); + rc = sbi_platform_irqchip_init(plat, TRUE); - if (rc) + if (rc) { + sbi_printf("%s: platform irqchip init failed (error %d)\n", + __func__, rc); sbi_hart_hang(); + } rc = sbi_ipi_init(scratch, TRUE); - if (rc) + if (rc) { + sbi_printf("%s: ipi init failed (error %d)\n", __func__, rc); sbi_hart_hang(); + } rc = sbi_tlb_init(scratch, TRUE); - if (rc) + if (rc) { + sbi_printf("%s: tlb init failed (error %d)\n", __func__, rc); sbi_hart_hang(); + } rc = sbi_timer_init(scratch, TRUE); - if (rc) + if (rc) { + sbi_printf("%s: timer init failed (error %d)\n", __func__, rc); sbi_hart_hang(); + } rc = sbi_ecall_init(); - if (rc) + if (rc) { + sbi_printf("%s: ecall init failed (error %d)\n", __func__, rc); sbi_hart_hang(); + } + + sbi_boot_print_general(scratch); /* * Note: Finalize domains after HSM initialization so that we @@ -235,23 +273,33 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) * that we use correct domain for configuring PMP. */ rc = sbi_domain_finalize(scratch, hartid); - if (rc) + if (rc) { + sbi_printf("%s: domain finalize failed (error %d)\n", + __func__, rc); sbi_hart_hang(); + } + + sbi_boot_print_domains(scratch); rc = sbi_hart_pmp_configure(scratch); - if (rc) + if (rc) { + sbi_printf("%s: PMP configure failed (error %d)\n", + __func__, rc); sbi_hart_hang(); + } /* * Note: Platform final initialization should be last so that * it sees correct domain assignment and PMP configuration. */ rc = sbi_platform_final_init(plat, TRUE); - if (rc) + if (rc) { + sbi_printf("%s: platform final init failed (error %d)\n", + __func__, rc); sbi_hart_hang(); + } - if (!(scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS)) - sbi_boot_prints(scratch, hartid); + sbi_boot_print_hart(scratch, hartid); wake_coldboot_harts(scratch, hartid); |