summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnup Patel <apatel@ventanamicro.com>2024-08-25 06:50:15 +0300
committerAnup Patel <anup@brainfault.org>2024-08-27 08:22:03 +0300
commitc4940a9517486413cd676fc8032bb55f9d4e2778 (patch)
tree1dd20ce624e6f22a37067a7e412d84a3dcac4297
parentef4520b1c63fc2770b10d952a800f9734f861b0a (diff)
downloadopensbi-c4940a9517486413cd676fc8032bb55f9d4e2778.tar.xz
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 <apatel@ventanamicro.com>
-rw-r--r--platform/generic/platform.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/platform/generic/platform.c b/platform/generic/platform.c
index 52dd6e6..49d877d 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);
}
}