mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-05-23 14:21:32 +01:00
lib: fdt_domain: Default boot-hart to coldboot HART for multi-domain boot
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@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20260327054936.3462935-1-peter.lin@sifive.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
committed by
Anup Patel
parent
ae8f28a868
commit
8cd279e321
@@ -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
|
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.
|
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
|
* **boot-hart** (Optional) - The DT node phandle of the HART booting the
|
||||||
domain instance. If coldboot HART is assigned to the domain instance then
|
domain instance. If not specified, defaults to the coldboot HART. Note that
|
||||||
this DT property is ignored and the coldboot HART is assumed to be the
|
if the coldboot HART is assigned to this domain, it will be forced as
|
||||||
boot HART of the domain instance.
|
the boot HART regardless of this property.
|
||||||
* **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the
|
* **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the
|
||||||
domain instance. If this DT property is not available and coldboot HART
|
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**
|
is not assigned to the domain instance then **next booting stage arg1 of coldboot HART**
|
||||||
|
|||||||
@@ -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;
|
dom->fw_region_inited = root.fw_region_inited;
|
||||||
|
|
||||||
/* Read "boot-hart" DT property */
|
/* Read "boot-hart" DT property */
|
||||||
val32 = -1U;
|
val32 = current_hartid();
|
||||||
val = fdt_getprop(fdt, domain_offset, "boot-hart", &len);
|
val = fdt_getprop(fdt, domain_offset, "boot-hart", &len);
|
||||||
if (val && len >= 4) {
|
if (val && len >= 4) {
|
||||||
cpu_offset = fdt_node_offset_by_phandle(fdt,
|
cpu_offset = fdt_node_offset_by_phandle(fdt,
|
||||||
fdt32_to_cpu(*val));
|
fdt32_to_cpu(*val));
|
||||||
if (cpu_offset >= 0 && fdt_node_is_enabled(fdt, cpu_offset))
|
if (cpu_offset >= 0 && fdt_node_is_enabled(fdt, cpu_offset))
|
||||||
fdt_parse_hart_id(fdt, cpu_offset, &val32);
|
fdt_parse_hart_id(fdt, cpu_offset, &val32);
|
||||||
} else {
|
|
||||||
if (domain_offset == *cold_domain_offset)
|
|
||||||
val32 = current_hartid();
|
|
||||||
}
|
}
|
||||||
dom->boot_hartid = val32;
|
dom->boot_hartid = val32;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user