[RFC PATCH 2/3] lib: sbi_init: Call hart init before platform early init

Anup Patel anup at brainfault.org
Sat Mar 21 22:58:04 PDT 2026


On Tue, Feb 24, 2026 at 8:47 AM Yu-Chien Peter Lin <peter.lin at sifive.com> wrote:
>
> To allow the platform early_init hook to use the
> sbi_hart_has_extension() helper, reorder the
> initialization sequence to call sbi_hart_init()
> prior to sbi_platform_early_init() during both
> cold and warm boot paths.
>
> Reviewed-by: Greentime Hu <greentime.hu at sifive.com>
> Reviewed-by: Zong Li <zong.li at sifive.com>
> Signed-off-by: Yu-Chien Peter Lin <peter.lin at sifive.com>

Not just sbi_hart_has_extension(), the platform early
drivers may use sbi_timer_mdelay/udelay() functions
as well. For e.g. the RPMI shmem driver uses delay
functions and it also probed as early driver.

I have updated this patch re-order both sbi_hart_init()
and sbi_timer_init() before sbi_platform_early_init().

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  lib/sbi/sbi_init.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
> index 5259064b1..aed2b96f8 100644
> --- a/lib/sbi/sbi_init.c
> +++ b/lib/sbi/sbi_init.c
> @@ -265,11 +265,11 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid)
>          */
>         wake_coldboot_harts(scratch);
>
> -       rc = sbi_platform_early_init(plat, true);
> +       rc = sbi_hart_init(scratch, true);
>         if (rc)
>                 sbi_hart_hang();
>
> -       rc = sbi_hart_init(scratch, true);
> +       rc = sbi_platform_early_init(plat, true);
>         if (rc)
>                 sbi_hart_hang();
>
> @@ -424,11 +424,11 @@ static void __noreturn init_warm_startup(struct sbi_scratch *scratch,
>         if (rc)
>                 sbi_hart_hang();
>
> -       rc = sbi_platform_early_init(plat, false);
> +       rc = sbi_hart_init(scratch, false);
>         if (rc)
>                 sbi_hart_hang();
>
> -       rc = sbi_hart_init(scratch, false);
> +       rc = sbi_platform_early_init(plat, false);
>         if (rc)
>                 sbi_hart_hang();
>
> --
> 2.43.7
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list