mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-08-17 17:12:21 +01:00
lib: sbi: Print list of all hart protection mechanisms at boot time
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 <anup.patel@oss.qualcomm.com> Reviewed-by: Rahul Pathak <rahul.pathak@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260727042504.1743250-6-anup.patel@oss.qualcomm.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
-4
@@ -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 : "---");
|
||||
|
||||
Reference in New Issue
Block a user