[PATCH v2 5/5] lib: sbi: Print list of all hart protection mechanisms at boot time
Anup Patel <[email protected]> Mon, 27 Jul 2026 09:55:04 +0530
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <[email protected]> |
Instead of printing only the best hart memory protection name at boot time let's print a list of all hart projection mechanisms. Signed-off-by: Anup Patel <[email protected]> --- include/sbi/sbi_hart_protection.h | 7 +++++-- lib/sbi/sbi_hart_protection.c | 34 ++++++++++++++++++++++++++++--- lib/sbi/sbi_init.c | 6 ++---- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/include/sbi/sbi_hart_protection.h b/include/sbi/sbi_hart_protection.h index de5f2f89..cafe6ee7 100644 --- a/include/sbi/sbi_hart_protection.h +++ b/include/sbi/sbi_hart_protection.h @@ -50,11 +50,14 @@ struct sbi_hart_protection { }; /** - * Get the best hart memory protection mechanism + * Get a string containing names of protection mechanisms + * + * @param out_str pointer to output string + * @param out_str_size maximum size of output string * * @return pointer to best hart memory protection mechanism */ -struct sbi_hart_protection *sbi_hart_memory_protection_best(void); +void sbi_hart_protection_get_str(char *out_str, int out_str_size); /** * Register a hart protection mechanism diff --git a/lib/sbi/sbi_hart_protection.c b/lib/sbi/sbi_hart_protection.c index d607ed74..c4c149c8 100644 --- a/lib/sbi/sbi_hart_protection.c +++ b/lib/sbi/sbi_hart_protection.c @@ -4,13 +4,15 @@ * Copyright (c) 2025 Ventana Micro Systems Inc. */ +#include <sbi/sbi_console.h> #include <sbi/sbi_error.h> #include <sbi/sbi_hart_protection.h> #include <sbi/sbi_scratch.h> +#include <sbi/sbi_string.h> static SBI_LIST_HEAD(hart_protection_list); -struct sbi_hart_protection *sbi_hart_memory_protection_best(void) +static struct sbi_hart_protection *__hart_memory_protection_best(void) { struct sbi_hart_protection *pos; @@ -22,6 +24,32 @@ struct sbi_hart_protection *sbi_hart_memory_protection_best(void) return NULL; } +void sbi_hart_protection_get_str(char *out_str, int out_str_size) +{ + bool memory_protect_done = false; + struct sbi_hart_protection *pos; + int offset = 0; + + if (!out_str || out_str_size <= 0) + return; + sbi_memset(out_str, 0, out_str_size); + + sbi_list_for_each_entry(pos, &hart_protection_list, head) { + if (pos->type == SBI_HART_PROTECTION_TYPE_MEMORY) { + if (memory_protect_done) + continue; + memory_protect_done = true; + } + sbi_snprintf(out_str + offset, out_str_size - offset, "%s,", pos->name); + offset = offset + sbi_strlen(pos->name) + 1; + } + + if (offset) + out_str[offset - 1] = '\0'; + else + sbi_strncpy(out_str, "none", out_str_size); +} + int sbi_hart_protection_register(struct sbi_hart_protection *hprot) { struct sbi_hart_protection *pos = NULL; @@ -170,7 +198,7 @@ int sbi_hart_protection_reconfigure(struct sbi_scratch *scratch, int sbi_hart_protection_map_range(unsigned long base, unsigned long size) { - struct sbi_hart_protection *hprot = sbi_hart_memory_protection_best(); + struct sbi_hart_protection *hprot = __hart_memory_protection_best(); if (!hprot || !hprot->map_range) return 0; @@ -180,7 +208,7 @@ int sbi_hart_protection_map_range(unsigned long base, unsigned long size) int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size) { - struct sbi_hart_protection *hprot = sbi_hart_memory_protection_best(); + struct sbi_hart_protection *hprot = __hart_memory_protection_best(); if (!hprot || !hprot->unmap_range) return 0; diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index 388f3ecb..acd2f8b6 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -76,7 +76,6 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch) const struct sbi_hsm_device *hdev; const struct sbi_ipi_device *idev; const struct sbi_timer_device *tdev; - const struct sbi_hart_protection *hprot; const struct sbi_console_device *cdev; const struct sbi_system_reset_device *srdev; const struct sbi_system_suspend_device *susp_dev; @@ -93,9 +92,8 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch) sbi_printf("Platform Features : %s\n", str); sbi_printf("Platform HART Count : %u\n", sbi_platform_hart_count(plat)); - hprot = sbi_hart_memory_protection_best(); - sbi_printf("Platform HART Protection : %s\n", - (hprot) ? hprot->name : "---"); + sbi_hart_protection_get_str(str, sizeof(str)); + sbi_printf("Platform HART Protection : %s\n", str); idev = sbi_ipi_get_device(); sbi_printf("Platform IPI Device : %s\n", (idev) ? idev->name : "---"); -- 2.43.0 -- opensbi mailing list [email protected] http://lists.infradead.org/mailman/listinfo/opensbi