diff options
| author | Anup Patel <[email protected]> | 2024-08-25 09:20:15 +0530 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2024-08-27 10:52:03 +0530 |
| commit | c4940a9517486413cd676fc8032bb55f9d4e2778 (patch) | |
| tree | 1dd20ce624e6f22a37067a7e412d84a3dcac4297 | |
| parent | ef4520b1c63fc2770b10d952a800f9734f861b0a (diff) | |
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: 67ce5a763cfb ("platform: generic: Add support for specify coldboot harts in DT")
Signed-off-by: Anup Patel <[email protected]>
| -rw-r--r-- | platform/generic/platform.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/platform/generic/platform.c b/platform/generic/platform.c index 52dd6e62..49d877d0 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -98,26 +98,26 @@ static void fw_platform_coldboot_harts_init(const void *fdt) goto default_config; val = fdt_getprop(fdt, config_offset, "cold-boot-harts", &len); - len = len / sizeof(u32); - if (val && len) { - for (int i = 0; i < len; i++) { - cpu_offset = fdt_node_offset_by_phandle(fdt, - fdt32_to_cpu(val[i])); - if (cpu_offset < 0) - goto default_config; + if (!val || !len) + goto default_config; - err = fdt_parse_hart_id(fdt, cpu_offset, &val32); - if (err) - goto default_config; + len = len / sizeof(u32); + for (int i = 0; i < len; i++) { + cpu_offset = fdt_node_offset_by_phandle(fdt, + fdt32_to_cpu(val[i])); + if (cpu_offset < 0) + goto default_config; - if (!fdt_node_is_enabled(fdt, cpu_offset)) - continue; + err = fdt_parse_hart_id(fdt, cpu_offset, &val32); + if (err) + goto default_config; - for (int i = 0; i < platform.hart_count; i++) { - if (val32 == generic_hart_index2id[i]) - bitmap_set(generic_coldboot_harts, i, 1); - } + if (!fdt_node_is_enabled(fdt, cpu_offset)) + continue; + for (int i = 0; i < platform.hart_count; i++) { + if (val32 == generic_hart_index2id[i]) + bitmap_set(generic_coldboot_harts, i, 1); } } |
