[PATCH] lib: fdt_domain: Default boot-hart to coldboot HART for multi-domain boot

Anup Patel anup at brainfault.org
Sat May 9 23:10:16 PDT 2026


On Fri, Mar 27, 2026 at 11:19 AM Yu-Chien Peter Lin
<peter.lin at sifive.com> wrote:
>
> When "boot-hart" is not specified, dom->boot_hartid was left as -1U,
> causing domain context switching to fail. Default it to the coldboot
> HART to enable SMP boot in multi-domain setups, consistent with how
> next-arg1 is handled.
>
> Also update its description in domain_support.md.
>
> Signed-off-by: Yu-Chien Peter Lin <peter.lin at sifive.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Regards,
Anup

> ---
>  docs/domain_support.md     | 6 +++---
>  lib/utils/fdt/fdt_domain.c | 5 +----
>  2 files changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/docs/domain_support.md b/docs/domain_support.md
> index 93186c4a..c01e445f 100644
> --- a/docs/domain_support.md
> +++ b/docs/domain_support.md
> @@ -173,9 +173,9 @@ The DT properties of a domain instance DT node are as follows:
>    Any region of a domain defined in DT node cannot have only M-bits set
>    in access permissions i.e. it cannot be an m-mode only accessible region.
>  * **boot-hart** (Optional) - The DT node phandle of the HART booting the
> -  domain instance. If coldboot HART is assigned to the domain instance then
> -  this DT property is ignored and the coldboot HART is assumed to be the
> -  boot HART of the domain instance.
> +  domain instance. If not specified, defaults to the coldboot HART. Note that
> +  if the coldboot HART is assigned to this domain, it will be forced as
> +  the boot HART regardless of this property.
>  * **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the
>    domain instance. If this DT property is not available and coldboot HART
>    is not assigned to the domain instance then **next booting stage arg1 of coldboot HART**
> diff --git a/lib/utils/fdt/fdt_domain.c b/lib/utils/fdt/fdt_domain.c
> index b2fa8633..1b039533 100644
> --- a/lib/utils/fdt/fdt_domain.c
> +++ b/lib/utils/fdt/fdt_domain.c
> @@ -396,16 +396,13 @@ static int __fdt_parse_domain(const void *fdt, int domain_offset, void *opaque)
>         dom->fw_region_inited = root.fw_region_inited;
>
>         /* Read "boot-hart" DT property */
> -       val32 = -1U;
> +       val32 = current_hartid();
>         val = fdt_getprop(fdt, domain_offset, "boot-hart", &len);
>         if (val && len >= 4) {
>                 cpu_offset = fdt_node_offset_by_phandle(fdt,
>                                                          fdt32_to_cpu(*val));
>                 if (cpu_offset >= 0 && fdt_node_is_enabled(fdt, cpu_offset))
>                         fdt_parse_hart_id(fdt, cpu_offset, &val32);
> -       } else {
> -               if (domain_offset == *cold_domain_offset)
> -                       val32 = current_hartid();
>         }
>         dom->boot_hartid = val32;
>
> --
> 2.48.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list