summaryrefslogtreecommitdiff
path: root/lib/utils/fdt
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2020-09-07 16:46:27 +0300
committerAnup Patel <anup@brainfault.org>2020-09-16 06:35:27 +0300
commit9f935a4a4372657e43b25fe2f4022fdeb3ca2387 (patch)
tree7e1144b347937e6377ff8753d25c305e4e0e3b57 /lib/utils/fdt
parent7ccf6bf54c2d7db6331f3fa319ef4e7019108c28 (diff)
downloadopensbi-9f935a4a4372657e43b25fe2f4022fdeb3ca2387.tar.xz
lib: utils: Improve fdt_cpu_fixup() implementation
The fdt_cpu_fixup() should work fine even if HARTs without MMU are not marked invalid by platform support code. In future, we plan to treat HARTs without MMU as valid in the generic platform support so that we can hold these HARTs in HSM STOPPED state. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'lib/utils/fdt')
-rw-r--r--lib/utils/fdt/fdt_fixup.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c
index 4da7397..8f554e1 100644
--- a/lib/utils/fdt/fdt_fixup.c
+++ b/lib/utils/fdt/fdt_fixup.c
@@ -21,7 +21,8 @@ void fdt_cpu_fixup(void *fdt)
{
struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
const struct sbi_platform *plat = sbi_platform_ptr(scratch);
- int err, cpu_offset, cpus_offset;
+ int err, cpu_offset, cpus_offset, len;
+ const char *mmu_type;
u32 hartid;
err = fdt_open_into(fdt, fdt, fdt_totalsize(fdt) + 32);
@@ -37,7 +38,15 @@ void fdt_cpu_fixup(void *fdt)
if (err)
continue;
- if (sbi_platform_hart_invalid(plat, hartid))
+ /*
+ * Disable a HART DT node if one of the following is true:
+ * 1. The HART is marked invalid by platform support
+ * 2. MMU is not available for the HART
+ */
+
+ mmu_type = fdt_getprop(fdt, cpu_offset, "mmu-type", &len);
+ if (sbi_platform_hart_invalid(plat, hartid) ||
+ !mmu_type || !len)
fdt_setprop_string(fdt, cpu_offset, "status",
"disabled");
}