mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 23:41:23 +01:00
platform: generic: Fix fw_platform_coldboot_harts_init() function
It is possible that the OpenSBI config DT node is present but
the "cold-boot-harts" DT property is not present. In this case,
the fw_platform_coldboot_harts_init() will do nothing which
in-turn causes OpenSBI firmware hang at boot time.
To address the above issue, fallback to the default approach
when the "cold-boot-harts" DT property is not present.
Fixes: 67ce5a763c
("platform: generic: Add support for specify coldboot harts in DT")
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
This commit is contained in:
@@ -98,26 +98,26 @@ static void fw_platform_coldboot_harts_init(const void *fdt)
|
|||||||
goto default_config;
|
goto default_config;
|
||||||
|
|
||||||
val = fdt_getprop(fdt, config_offset, "cold-boot-harts", &len);
|
val = fdt_getprop(fdt, config_offset, "cold-boot-harts", &len);
|
||||||
|
if (!val || !len)
|
||||||
|
goto default_config;
|
||||||
|
|
||||||
len = len / sizeof(u32);
|
len = len / sizeof(u32);
|
||||||
if (val && len) {
|
for (int i = 0; i < len; i++) {
|
||||||
for (int i = 0; i < len; i++) {
|
cpu_offset = fdt_node_offset_by_phandle(fdt,
|
||||||
cpu_offset = fdt_node_offset_by_phandle(fdt,
|
fdt32_to_cpu(val[i]));
|
||||||
fdt32_to_cpu(val[i]));
|
if (cpu_offset < 0)
|
||||||
if (cpu_offset < 0)
|
goto default_config;
|
||||||
goto default_config;
|
|
||||||
|
|
||||||
err = fdt_parse_hart_id(fdt, cpu_offset, &val32);
|
err = fdt_parse_hart_id(fdt, cpu_offset, &val32);
|
||||||
if (err)
|
if (err)
|
||||||
goto default_config;
|
goto default_config;
|
||||||
|
|
||||||
if (!fdt_node_is_enabled(fdt, cpu_offset))
|
if (!fdt_node_is_enabled(fdt, cpu_offset))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (int i = 0; i < platform.hart_count; i++) {
|
|
||||||
if (val32 == generic_hart_index2id[i])
|
|
||||||
bitmap_set(generic_coldboot_harts, i, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
for (int i = 0; i < platform.hart_count; i++) {
|
||||||
|
if (val32 == generic_hart_index2id[i])
|
||||||
|
bitmap_set(generic_coldboot_harts, i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user