platform: generic: Allow platform_override to select cold boot HART
authorAnup Patel <apatel@ventanamicro.com>
Thu, 29 Dec 2022 02:56:16 +0000 (10:56 +0800)
committerAnup Patel <anup@brainfault.org>
Sat, 7 Jan 2023 10:28:52 +0000 (15:58 +0530)
We add a generic platform override callback to allow platform specific
selection of cold boot HART.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
platform/generic/include/platform_override.h
platform/generic/platform.c

index 7f1558dde1aed80cdb3efa7b490b0b3b3d82ed4e..21354e96bf62d2a5c1c3ccd06e81f80d6d7c1040 100644 (file)
@@ -18,6 +18,7 @@ struct platform_override {
        const struct fdt_match *match_table;
        u64 (*features)(const struct fdt_match *match);
        u64 (*tlbr_flush_limit)(const struct fdt_match *match);
+       bool (*cold_boot_allowed)(u32 hartid, const struct fdt_match *match);
        int (*early_init)(bool cold_boot, const struct fdt_match *match);
        int (*final_init)(bool cold_boot, const struct fdt_match *match);
        void (*early_exit)(const struct fdt_match *match);
index bfe15f0d6b87014e95dfb08f17e716a896c906e9..5fb0dc6565b9f966a699c97463856102711e1dfc 100644 (file)
@@ -122,6 +122,14 @@ fail:
                wfi();
 }
 
+static bool generic_cold_boot_allowed(u32 hartid)
+{
+       if (generic_plat && generic_plat->cold_boot_allowed)
+               return generic_plat->cold_boot_allowed(
+                                               hartid, generic_plat_match);
+       return true;
+}
+
 static int generic_nascent_init(void)
 {
        if (platform_has_mlevel_imsic)
@@ -261,6 +269,7 @@ static int generic_console_init(void)
 }
 
 const struct sbi_platform_operations platform_ops = {
+       .cold_boot_allowed      = generic_cold_boot_allowed,
        .nascent_init           = generic_nascent_init,
        .early_init             = generic_early_init,
        .final_init             = generic_final_init,