* [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time
@ 2024-12-22 6:03 Anup Patel
2024-12-22 6:03 ` [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints Anup Patel
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Anup Patel @ 2024-12-22 6:03 UTC (permalink / raw)
To: opensbi
Add boot-time prints for list of available standard and experimental
SBI extensions.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
include/sbi/sbi_ecall.h | 6 ++++++
lib/sbi/sbi_ecall.c | 24 ++++++++++++++++++++++++
lib/sbi/sbi_ecall_base.c | 1 +
lib/sbi/sbi_ecall_cppc.c | 1 +
lib/sbi/sbi_ecall_dbcn.c | 1 +
lib/sbi/sbi_ecall_dbtr.c | 10 ++++++----
lib/sbi/sbi_ecall_fwft.c | 10 ++++++----
lib/sbi/sbi_ecall_hsm.c | 1 +
lib/sbi/sbi_ecall_ipi.c | 1 +
lib/sbi/sbi_ecall_legacy.c | 1 +
lib/sbi/sbi_ecall_mpxy.c | 2 ++
lib/sbi/sbi_ecall_pmu.c | 1 +
lib/sbi/sbi_ecall_rfence.c | 1 +
lib/sbi/sbi_ecall_srst.c | 1 +
lib/sbi/sbi_ecall_sse.c | 2 ++
lib/sbi/sbi_ecall_susp.c | 1 +
lib/sbi/sbi_ecall_time.c | 1 +
lib/sbi/sbi_ecall_vendor.c | 1 +
lib/sbi/sbi_init.c | 6 +++++-
19 files changed, 63 insertions(+), 9 deletions(-)
diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h
index 0b35eff7..88a69bb3 100644
--- a/include/sbi/sbi_ecall.h
+++ b/include/sbi/sbi_ecall.h
@@ -30,6 +30,8 @@ struct sbi_ecall_return {
struct sbi_ecall_extension {
/* head is used by the extension list */
struct sbi_dlist head;
+ /* short name of the extension */
+ char name[8];
/*
* extid_start and extid_end specify the range for this extension. As
* the initial range may be wider than the valid runtime range, the
@@ -38,6 +40,8 @@ struct sbi_ecall_extension {
*/
unsigned long extid_start;
unsigned long extid_end;
+ /* flag showing whether given extension is experimental or not */
+ bool experimental;
/*
* register_extensions
*
@@ -83,6 +87,8 @@ void sbi_ecall_set_impid(unsigned long impid);
struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid);
+void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental);
+
int sbi_ecall_register_extension(struct sbi_ecall_extension *ext);
void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext);
diff --git a/lib/sbi/sbi_ecall.c b/lib/sbi/sbi_ecall.c
index be0b67e1..3fa3a9e8 100644
--- a/lib/sbi/sbi_ecall.c
+++ b/lib/sbi/sbi_ecall.c
@@ -11,6 +11,7 @@
#include <sbi/sbi_ecall.h>
#include <sbi/sbi_ecall_interface.h>
#include <sbi/sbi_error.h>
+#include <sbi/sbi_string.h>
#include <sbi/sbi_trap.h>
extern struct sbi_ecall_extension *const sbi_ecall_exts[];
@@ -53,6 +54,29 @@ struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid)
return ret;
}
+void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental)
+{
+ struct sbi_ecall_extension *t;
+ int offset = 0;
+
+ if (!exts_str || exts_str_size <= 0)
+ return;
+ sbi_memset(exts_str, 0, exts_str_size);
+
+ sbi_list_for_each_entry(t, &ecall_exts_list, head) {
+ if (experimental != t->experimental)
+ continue;
+ sbi_snprintf(exts_str + offset, exts_str_size - offset,
+ "%s,", t->name);
+ offset = offset + sbi_strlen(t->name) + 1;
+ }
+
+ if (offset)
+ exts_str[offset - 1] = '\0';
+ else
+ sbi_strncpy(exts_str, "none", exts_str_size);
+}
+
int sbi_ecall_register_extension(struct sbi_ecall_extension *ext)
{
struct sbi_ecall_extension *t;
diff --git a/lib/sbi/sbi_ecall_base.c b/lib/sbi/sbi_ecall_base.c
index b7178ea8..d125cedc 100644
--- a/lib/sbi/sbi_ecall_base.c
+++ b/lib/sbi/sbi_ecall_base.c
@@ -79,6 +79,7 @@ static int sbi_ecall_base_register_extensions(void)
}
struct sbi_ecall_extension ecall_base = {
+ .name = "base",
.extid_start = SBI_EXT_BASE,
.extid_end = SBI_EXT_BASE,
.register_extensions = sbi_ecall_base_register_extensions,
diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c
index dab78299..4840c908 100644
--- a/lib/sbi/sbi_ecall_cppc.c
+++ b/lib/sbi/sbi_ecall_cppc.c
@@ -65,6 +65,7 @@ static int sbi_ecall_cppc_register_extensions(void)
}
struct sbi_ecall_extension ecall_cppc = {
+ .name = "cppc",
.extid_start = SBI_EXT_CPPC,
.extid_end = SBI_EXT_CPPC,
.register_extensions = sbi_ecall_cppc_register_extensions,
diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
index 49a7713f..1b0aebdc 100644
--- a/lib/sbi/sbi_ecall_dbcn.c
+++ b/lib/sbi/sbi_ecall_dbcn.c
@@ -74,6 +74,7 @@ static int sbi_ecall_dbcn_register_extensions(void)
}
struct sbi_ecall_extension ecall_dbcn = {
+ .name = "dbcn",
.extid_start = SBI_EXT_DBCN,
.extid_end = SBI_EXT_DBCN,
.register_extensions = sbi_ecall_dbcn_register_extensions,
diff --git a/lib/sbi/sbi_ecall_dbtr.c b/lib/sbi/sbi_ecall_dbtr.c
index 6a7dfe67..d28fd396 100644
--- a/lib/sbi/sbi_ecall_dbtr.c
+++ b/lib/sbi/sbi_ecall_dbtr.c
@@ -66,8 +66,10 @@ static int sbi_ecall_dbtr_register_extensions(void)
}
struct sbi_ecall_extension ecall_dbtr = {
- .extid_start = SBI_EXT_DBTR,
- .extid_end = SBI_EXT_DBTR,
- .handle = sbi_ecall_dbtr_handler,
- .register_extensions = sbi_ecall_dbtr_register_extensions,
+ .name = "dbtr",
+ .extid_start = SBI_EXT_DBTR,
+ .extid_end = SBI_EXT_DBTR,
+ .experimental = true,
+ .handle = sbi_ecall_dbtr_handler,
+ .register_extensions = sbi_ecall_dbtr_register_extensions,
};
diff --git a/lib/sbi/sbi_ecall_fwft.c b/lib/sbi/sbi_ecall_fwft.c
index 267cbab2..3519285e 100644
--- a/lib/sbi/sbi_ecall_fwft.c
+++ b/lib/sbi/sbi_ecall_fwft.c
@@ -42,8 +42,10 @@ static int sbi_ecall_fwft_register_extensions(void)
}
struct sbi_ecall_extension ecall_fwft = {
- .extid_start = SBI_EXT_FWFT,
- .extid_end = SBI_EXT_FWFT,
- .register_extensions = sbi_ecall_fwft_register_extensions,
- .handle = sbi_ecall_fwft_handler,
+ .name = "fwft",
+ .extid_start = SBI_EXT_FWFT,
+ .extid_end = SBI_EXT_FWFT,
+ .experimental = true,
+ .register_extensions = sbi_ecall_fwft_register_extensions,
+ .handle = sbi_ecall_fwft_handler,
};
diff --git a/lib/sbi/sbi_ecall_hsm.c b/lib/sbi/sbi_ecall_hsm.c
index 93170b09..a6e83b05 100644
--- a/lib/sbi/sbi_ecall_hsm.c
+++ b/lib/sbi/sbi_ecall_hsm.c
@@ -61,6 +61,7 @@ static int sbi_ecall_hsm_register_extensions(void)
}
struct sbi_ecall_extension ecall_hsm = {
+ .name = "hsm",
.extid_start = SBI_EXT_HSM,
.extid_end = SBI_EXT_HSM,
.register_extensions = sbi_ecall_hsm_register_extensions,
diff --git a/lib/sbi/sbi_ecall_ipi.c b/lib/sbi/sbi_ecall_ipi.c
index 50ef41dc..ec579ce0 100644
--- a/lib/sbi/sbi_ecall_ipi.c
+++ b/lib/sbi/sbi_ecall_ipi.c
@@ -36,6 +36,7 @@ static int sbi_ecall_ipi_register_extensions(void)
}
struct sbi_ecall_extension ecall_ipi = {
+ .name = "ipi",
.extid_start = SBI_EXT_IPI,
.extid_end = SBI_EXT_IPI,
.register_extensions = sbi_ecall_ipi_register_extensions,
diff --git a/lib/sbi/sbi_ecall_legacy.c b/lib/sbi/sbi_ecall_legacy.c
index 25e9a1e8..50a7660d 100644
--- a/lib/sbi/sbi_ecall_legacy.c
+++ b/lib/sbi/sbi_ecall_legacy.c
@@ -131,6 +131,7 @@ static int sbi_ecall_legacy_register_extensions(void)
}
struct sbi_ecall_extension ecall_legacy = {
+ .name = "legacy",
.extid_start = SBI_EXT_0_1_SET_TIMER,
.extid_end = SBI_EXT_0_1_SHUTDOWN,
.register_extensions = sbi_ecall_legacy_register_extensions,
diff --git a/lib/sbi/sbi_ecall_mpxy.c b/lib/sbi/sbi_ecall_mpxy.c
index 5f717b76..09705cce 100644
--- a/lib/sbi/sbi_ecall_mpxy.c
+++ b/lib/sbi/sbi_ecall_mpxy.c
@@ -61,8 +61,10 @@ static int sbi_ecall_mpxy_register_extensions(void)
}
struct sbi_ecall_extension ecall_mpxy = {
+ .name = "mpxy",
.extid_start = SBI_EXT_MPXY,
.extid_end = SBI_EXT_MPXY,
+ .experimental = true,
.register_extensions = sbi_ecall_mpxy_register_extensions,
.handle = sbi_ecall_mpxy_handler,
};
diff --git a/lib/sbi/sbi_ecall_pmu.c b/lib/sbi/sbi_ecall_pmu.c
index ae7aeca9..868e8665 100644
--- a/lib/sbi/sbi_ecall_pmu.c
+++ b/lib/sbi/sbi_ecall_pmu.c
@@ -93,6 +93,7 @@ static int sbi_ecall_pmu_register_extensions(void)
}
struct sbi_ecall_extension ecall_pmu = {
+ .name = "pmu",
.extid_start = SBI_EXT_PMU,
.extid_end = SBI_EXT_PMU,
.register_extensions = sbi_ecall_pmu_register_extensions,
diff --git a/lib/sbi/sbi_ecall_rfence.c b/lib/sbi/sbi_ecall_rfence.c
index ded16c26..903adfbf 100644
--- a/lib/sbi/sbi_ecall_rfence.c
+++ b/lib/sbi/sbi_ecall_rfence.c
@@ -84,6 +84,7 @@ static int sbi_ecall_rfence_register_extensions(void)
}
struct sbi_ecall_extension ecall_rfence = {
+ .name = "rfnc",
.extid_start = SBI_EXT_RFENCE,
.extid_end = SBI_EXT_RFENCE,
.register_extensions = sbi_ecall_rfence_register_extensions,
diff --git a/lib/sbi/sbi_ecall_srst.c b/lib/sbi/sbi_ecall_srst.c
index 46cfaca4..721d7216 100644
--- a/lib/sbi/sbi_ecall_srst.c
+++ b/lib/sbi/sbi_ecall_srst.c
@@ -75,6 +75,7 @@ static int sbi_ecall_srst_register_extensions(void)
}
struct sbi_ecall_extension ecall_srst = {
+ .name = "srst",
.extid_start = SBI_EXT_SRST,
.extid_end = SBI_EXT_SRST,
.register_extensions = sbi_ecall_srst_register_extensions,
diff --git a/lib/sbi/sbi_ecall_sse.c b/lib/sbi/sbi_ecall_sse.c
index beddc2cd..303c0f2d 100644
--- a/lib/sbi/sbi_ecall_sse.c
+++ b/lib/sbi/sbi_ecall_sse.c
@@ -56,8 +56,10 @@ static int sbi_ecall_sse_register_extensions(void)
}
struct sbi_ecall_extension ecall_sse = {
+ .name = "sse",
.extid_start = SBI_EXT_SSE,
.extid_end = SBI_EXT_SSE,
+ .experimental = true,
.register_extensions = sbi_ecall_sse_register_extensions,
.handle = sbi_ecall_sse_handler,
};
diff --git a/lib/sbi/sbi_ecall_susp.c b/lib/sbi/sbi_ecall_susp.c
index 7b66bfcd..5afbf3fa 100644
--- a/lib/sbi/sbi_ecall_susp.c
+++ b/lib/sbi/sbi_ecall_susp.c
@@ -49,6 +49,7 @@ static int sbi_ecall_susp_register_extensions(void)
}
struct sbi_ecall_extension ecall_susp = {
+ .name = "susp",
.extid_start = SBI_EXT_SUSP,
.extid_end = SBI_EXT_SUSP,
.register_extensions = sbi_ecall_susp_register_extensions,
diff --git a/lib/sbi/sbi_ecall_time.c b/lib/sbi/sbi_ecall_time.c
index 5a2316eb..6ea6f054 100644
--- a/lib/sbi/sbi_ecall_time.c
+++ b/lib/sbi/sbi_ecall_time.c
@@ -40,6 +40,7 @@ static int sbi_ecall_time_register_extensions(void)
}
struct sbi_ecall_extension ecall_time = {
+ .name = "time",
.extid_start = SBI_EXT_TIME,
.extid_end = SBI_EXT_TIME,
.register_extensions = sbi_ecall_time_register_extensions,
diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
index ebebc586..5fdfb314 100644
--- a/lib/sbi/sbi_ecall_vendor.c
+++ b/lib/sbi/sbi_ecall_vendor.c
@@ -46,6 +46,7 @@ static int sbi_ecall_vendor_register_extensions(void)
}
struct sbi_ecall_extension ecall_vendor = {
+ .name = "vendor",
.extid_start = SBI_EXT_VENDOR_START,
.extid_end = SBI_EXT_VENDOR_END,
.register_extensions = sbi_ecall_vendor_register_extensions,
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
index 0736345d..cef658a2 100644
--- a/lib/sbi/sbi_init.c
+++ b/lib/sbi/sbi_init.c
@@ -139,8 +139,12 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
(u32)(SBI_SCRATCH_SIZE - sbi_scratch_used_space()));
/* SBI details */
- sbi_printf("Runtime SBI Version : %d.%d\n",
+ sbi_printf("Runtime SBI Version : %d.%d\n",
sbi_ecall_version_major(), sbi_ecall_version_minor());
+ sbi_ecall_get_extensions_str(str, sizeof(str), false);
+ sbi_printf("Standard SBI Extensions : %s\n", str);
+ sbi_ecall_get_extensions_str(str, sizeof(str), true);
+ sbi_printf("Experimental SBI Extensions : %s\n", str);
sbi_printf("\n");
}
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints
2024-12-22 6:03 [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
@ 2024-12-22 6:03 ` Anup Patel
2024-12-24 6:30 ` Anup Patel
2024-12-22 8:26 ` [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
2024-12-24 6:30 ` Anup Patel
2 siblings, 1 reply; 6+ messages in thread
From: Anup Patel @ 2024-12-22 6:03 UTC (permalink / raw)
To: opensbi
Addtion of "Experimental SBI Extensions" to the boot-time prints
disturbs the alignment of other prints so adjust all boot-time
prints accordingly.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
lib/sbi/sbi_init.c | 62 +++++++++++++++++++++++-----------------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
index cef658a2..58030cf2 100644
--- a/lib/sbi/sbi_init.c
+++ b/lib/sbi/sbi_init.c
@@ -83,56 +83,56 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
return;
/* Platform details */
- sbi_printf("Platform Name : %s\n",
+ sbi_printf("Platform Name : %s\n",
sbi_platform_name(plat));
sbi_platform_get_features_str(plat, str, sizeof(str));
- sbi_printf("Platform Features : %s\n", str);
- sbi_printf("Platform HART Count : %u\n",
+ sbi_printf("Platform Features : %s\n", str);
+ sbi_printf("Platform HART Count : %u\n",
sbi_platform_hart_count(plat));
idev = sbi_ipi_get_device();
- sbi_printf("Platform IPI Device : %s\n",
+ sbi_printf("Platform IPI Device : %s\n",
(idev) ? idev->name : "---");
tdev = sbi_timer_get_device();
- sbi_printf("Platform Timer Device : %s @ %luHz\n",
+ sbi_printf("Platform Timer Device : %s @ %luHz\n",
(tdev) ? tdev->name : "---",
(tdev) ? tdev->timer_freq : 0);
cdev = sbi_console_get_device();
- sbi_printf("Platform Console Device : %s\n",
+ sbi_printf("Platform Console Device : %s\n",
(cdev) ? cdev->name : "---");
hdev = sbi_hsm_get_device();
- sbi_printf("Platform HSM Device : %s\n",
+ sbi_printf("Platform HSM Device : %s\n",
(hdev) ? hdev->name : "---");
pdev = sbi_pmu_get_device();
- sbi_printf("Platform PMU Device : %s\n",
+ sbi_printf("Platform PMU Device : %s\n",
(pdev) ? pdev->name : "---");
srdev = sbi_system_reset_get_device(SBI_SRST_RESET_TYPE_COLD_REBOOT, 0);
- sbi_printf("Platform Reboot Device : %s\n",
+ sbi_printf("Platform Reboot Device : %s\n",
(srdev) ? srdev->name : "---");
srdev = sbi_system_reset_get_device(SBI_SRST_RESET_TYPE_SHUTDOWN, 0);
- sbi_printf("Platform Shutdown Device : %s\n",
+ sbi_printf("Platform Shutdown Device : %s\n",
(srdev) ? srdev->name : "---");
susp_dev = sbi_system_suspend_get_device();
- sbi_printf("Platform Suspend Device : %s\n",
+ sbi_printf("Platform Suspend Device : %s\n",
(susp_dev) ? susp_dev->name : "---");
cppc_dev = sbi_cppc_get_device();
- sbi_printf("Platform CPPC Device : %s\n",
+ sbi_printf("Platform CPPC Device : %s\n",
(cppc_dev) ? cppc_dev->name : "---");
/* Firmware details */
- sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start);
- sbi_printf("Firmware Size : %d KB\n",
+ sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start);
+ sbi_printf("Firmware Size : %d KB\n",
(u32)(scratch->fw_size / 1024));
- sbi_printf("Firmware RW Offset : 0x%lx\n", scratch->fw_rw_offset);
- sbi_printf("Firmware RW Size : %d KB\n",
+ sbi_printf("Firmware RW Offset : 0x%lx\n", scratch->fw_rw_offset);
+ sbi_printf("Firmware RW Size : %d KB\n",
(u32)((scratch->fw_size - scratch->fw_rw_offset) / 1024));
- sbi_printf("Firmware Heap Offset : 0x%lx\n", scratch->fw_heap_offset);
- sbi_printf("Firmware Heap Size : "
+ sbi_printf("Firmware Heap Offset : 0x%lx\n", scratch->fw_heap_offset);
+ sbi_printf("Firmware Heap Size : "
"%d KB (total), %d KB (reserved), %d KB (used), %d KB (free)\n",
(u32)(scratch->fw_heap_size / 1024),
(u32)(sbi_heap_reserved_space() / 1024),
(u32)(sbi_heap_used_space() / 1024),
(u32)(sbi_heap_free_space() / 1024));
- sbi_printf("Firmware Scratch Size : "
+ sbi_printf("Firmware Scratch Size : "
"%d B (total), %d B (used), %d B (free)\n",
SBI_SCRATCH_SIZE,
(u32)sbi_scratch_used_space(),
@@ -154,7 +154,7 @@ static void sbi_boot_print_domains(struct sbi_scratch *scratch)
return;
/* Domain details */
- sbi_domain_dump_all(" ");
+ sbi_domain_dump_all(" ");
}
static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid)
@@ -174,26 +174,26 @@ static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid)
}
/* Boot HART details */
- sbi_printf("Boot HART ID : %u\n", hartid);
- sbi_printf("Boot HART Domain : %s\n", dom->name);
+ sbi_printf("Boot HART ID : %u\n", hartid);
+ sbi_printf("Boot HART Domain : %s\n", dom->name);
sbi_hart_get_priv_version_str(scratch, str, sizeof(str));
- sbi_printf("Boot HART Priv Version : %s\n", str);
+ sbi_printf("Boot HART Priv Version : %s\n", str);
misa_string(xlen, str, sizeof(str));
- sbi_printf("Boot HART Base ISA : %s\n", str);
+ sbi_printf("Boot HART Base ISA : %s\n", str);
sbi_hart_get_extensions_str(scratch, str, sizeof(str));
- sbi_printf("Boot HART ISA Extensions : %s\n", str);
- sbi_printf("Boot HART PMP Count : %d\n",
+ sbi_printf("Boot HART ISA Extensions : %s\n", str);
+ sbi_printf("Boot HART PMP Count : %d\n",
sbi_hart_pmp_count(scratch));
- sbi_printf("Boot HART PMP Granularity : %u bits\n",
+ sbi_printf("Boot HART PMP Granularity : %u bits\n",
sbi_hart_pmp_log2gran(scratch));
- sbi_printf("Boot HART PMP Address Bits: %d\n",
+ sbi_printf("Boot HART PMP Address Bits : %d\n",
sbi_hart_pmp_addrbits(scratch));
- sbi_printf("Boot HART MHPM Info : %lu (0x%08x)\n",
+ sbi_printf("Boot HART MHPM Info : %lu (0x%08x)\n",
sbi_popcount(sbi_hart_mhpm_mask(scratch)),
sbi_hart_mhpm_mask(scratch));
- sbi_printf("Boot HART Debug Triggers : %d triggers\n",
+ sbi_printf("Boot HART Debug Triggers : %d triggers\n",
sbi_dbtr_get_total_triggers());
- sbi_hart_delegation_dump(scratch, "Boot HART ", " ");
+ sbi_hart_delegation_dump(scratch, "Boot HART ", " ");
}
static unsigned long coldboot_done;
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time
2024-12-22 6:03 [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
2024-12-22 6:03 ` [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints Anup Patel
@ 2024-12-22 8:26 ` Anup Patel
2024-12-22 9:02 ` Anup Patel
2024-12-24 6:30 ` Anup Patel
2 siblings, 1 reply; 6+ messages in thread
From: Anup Patel @ 2024-12-22 8:26 UTC (permalink / raw)
To: opensbi
On Sun, Dec 22, 2024 at 11:33?AM Anup Patel <apatel@ventanamicro.com> wrote:
>
> Add boot-time prints for list of available standard and experimental
> SBI extensions.
>
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
I would like to take this patch for the OpenSBI v1.6 release happening
next week since we have experimental SBI extensions in this release.
Please let me know if there are objections at the earliest.
Regards,
Anup
> ---
> include/sbi/sbi_ecall.h | 6 ++++++
> lib/sbi/sbi_ecall.c | 24 ++++++++++++++++++++++++
> lib/sbi/sbi_ecall_base.c | 1 +
> lib/sbi/sbi_ecall_cppc.c | 1 +
> lib/sbi/sbi_ecall_dbcn.c | 1 +
> lib/sbi/sbi_ecall_dbtr.c | 10 ++++++----
> lib/sbi/sbi_ecall_fwft.c | 10 ++++++----
> lib/sbi/sbi_ecall_hsm.c | 1 +
> lib/sbi/sbi_ecall_ipi.c | 1 +
> lib/sbi/sbi_ecall_legacy.c | 1 +
> lib/sbi/sbi_ecall_mpxy.c | 2 ++
> lib/sbi/sbi_ecall_pmu.c | 1 +
> lib/sbi/sbi_ecall_rfence.c | 1 +
> lib/sbi/sbi_ecall_srst.c | 1 +
> lib/sbi/sbi_ecall_sse.c | 2 ++
> lib/sbi/sbi_ecall_susp.c | 1 +
> lib/sbi/sbi_ecall_time.c | 1 +
> lib/sbi/sbi_ecall_vendor.c | 1 +
> lib/sbi/sbi_init.c | 6 +++++-
> 19 files changed, 63 insertions(+), 9 deletions(-)
>
> diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h
> index 0b35eff7..88a69bb3 100644
> --- a/include/sbi/sbi_ecall.h
> +++ b/include/sbi/sbi_ecall.h
> @@ -30,6 +30,8 @@ struct sbi_ecall_return {
> struct sbi_ecall_extension {
> /* head is used by the extension list */
> struct sbi_dlist head;
> + /* short name of the extension */
> + char name[8];
> /*
> * extid_start and extid_end specify the range for this extension. As
> * the initial range may be wider than the valid runtime range, the
> @@ -38,6 +40,8 @@ struct sbi_ecall_extension {
> */
> unsigned long extid_start;
> unsigned long extid_end;
> + /* flag showing whether given extension is experimental or not */
> + bool experimental;
> /*
> * register_extensions
> *
> @@ -83,6 +87,8 @@ void sbi_ecall_set_impid(unsigned long impid);
>
> struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid);
>
> +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental);
> +
> int sbi_ecall_register_extension(struct sbi_ecall_extension *ext);
>
> void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext);
> diff --git a/lib/sbi/sbi_ecall.c b/lib/sbi/sbi_ecall.c
> index be0b67e1..3fa3a9e8 100644
> --- a/lib/sbi/sbi_ecall.c
> +++ b/lib/sbi/sbi_ecall.c
> @@ -11,6 +11,7 @@
> #include <sbi/sbi_ecall.h>
> #include <sbi/sbi_ecall_interface.h>
> #include <sbi/sbi_error.h>
> +#include <sbi/sbi_string.h>
> #include <sbi/sbi_trap.h>
>
> extern struct sbi_ecall_extension *const sbi_ecall_exts[];
> @@ -53,6 +54,29 @@ struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid)
> return ret;
> }
>
> +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental)
> +{
> + struct sbi_ecall_extension *t;
> + int offset = 0;
> +
> + if (!exts_str || exts_str_size <= 0)
> + return;
> + sbi_memset(exts_str, 0, exts_str_size);
> +
> + sbi_list_for_each_entry(t, &ecall_exts_list, head) {
> + if (experimental != t->experimental)
> + continue;
> + sbi_snprintf(exts_str + offset, exts_str_size - offset,
> + "%s,", t->name);
> + offset = offset + sbi_strlen(t->name) + 1;
> + }
> +
> + if (offset)
> + exts_str[offset - 1] = '\0';
> + else
> + sbi_strncpy(exts_str, "none", exts_str_size);
> +}
> +
> int sbi_ecall_register_extension(struct sbi_ecall_extension *ext)
> {
> struct sbi_ecall_extension *t;
> diff --git a/lib/sbi/sbi_ecall_base.c b/lib/sbi/sbi_ecall_base.c
> index b7178ea8..d125cedc 100644
> --- a/lib/sbi/sbi_ecall_base.c
> +++ b/lib/sbi/sbi_ecall_base.c
> @@ -79,6 +79,7 @@ static int sbi_ecall_base_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_base = {
> + .name = "base",
> .extid_start = SBI_EXT_BASE,
> .extid_end = SBI_EXT_BASE,
> .register_extensions = sbi_ecall_base_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c
> index dab78299..4840c908 100644
> --- a/lib/sbi/sbi_ecall_cppc.c
> +++ b/lib/sbi/sbi_ecall_cppc.c
> @@ -65,6 +65,7 @@ static int sbi_ecall_cppc_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_cppc = {
> + .name = "cppc",
> .extid_start = SBI_EXT_CPPC,
> .extid_end = SBI_EXT_CPPC,
> .register_extensions = sbi_ecall_cppc_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
> index 49a7713f..1b0aebdc 100644
> --- a/lib/sbi/sbi_ecall_dbcn.c
> +++ b/lib/sbi/sbi_ecall_dbcn.c
> @@ -74,6 +74,7 @@ static int sbi_ecall_dbcn_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_dbcn = {
> + .name = "dbcn",
> .extid_start = SBI_EXT_DBCN,
> .extid_end = SBI_EXT_DBCN,
> .register_extensions = sbi_ecall_dbcn_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_dbtr.c b/lib/sbi/sbi_ecall_dbtr.c
> index 6a7dfe67..d28fd396 100644
> --- a/lib/sbi/sbi_ecall_dbtr.c
> +++ b/lib/sbi/sbi_ecall_dbtr.c
> @@ -66,8 +66,10 @@ static int sbi_ecall_dbtr_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_dbtr = {
> - .extid_start = SBI_EXT_DBTR,
> - .extid_end = SBI_EXT_DBTR,
> - .handle = sbi_ecall_dbtr_handler,
> - .register_extensions = sbi_ecall_dbtr_register_extensions,
> + .name = "dbtr",
> + .extid_start = SBI_EXT_DBTR,
> + .extid_end = SBI_EXT_DBTR,
> + .experimental = true,
> + .handle = sbi_ecall_dbtr_handler,
> + .register_extensions = sbi_ecall_dbtr_register_extensions,
> };
> diff --git a/lib/sbi/sbi_ecall_fwft.c b/lib/sbi/sbi_ecall_fwft.c
> index 267cbab2..3519285e 100644
> --- a/lib/sbi/sbi_ecall_fwft.c
> +++ b/lib/sbi/sbi_ecall_fwft.c
> @@ -42,8 +42,10 @@ static int sbi_ecall_fwft_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_fwft = {
> - .extid_start = SBI_EXT_FWFT,
> - .extid_end = SBI_EXT_FWFT,
> - .register_extensions = sbi_ecall_fwft_register_extensions,
> - .handle = sbi_ecall_fwft_handler,
> + .name = "fwft",
> + .extid_start = SBI_EXT_FWFT,
> + .extid_end = SBI_EXT_FWFT,
> + .experimental = true,
> + .register_extensions = sbi_ecall_fwft_register_extensions,
> + .handle = sbi_ecall_fwft_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_hsm.c b/lib/sbi/sbi_ecall_hsm.c
> index 93170b09..a6e83b05 100644
> --- a/lib/sbi/sbi_ecall_hsm.c
> +++ b/lib/sbi/sbi_ecall_hsm.c
> @@ -61,6 +61,7 @@ static int sbi_ecall_hsm_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_hsm = {
> + .name = "hsm",
> .extid_start = SBI_EXT_HSM,
> .extid_end = SBI_EXT_HSM,
> .register_extensions = sbi_ecall_hsm_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_ipi.c b/lib/sbi/sbi_ecall_ipi.c
> index 50ef41dc..ec579ce0 100644
> --- a/lib/sbi/sbi_ecall_ipi.c
> +++ b/lib/sbi/sbi_ecall_ipi.c
> @@ -36,6 +36,7 @@ static int sbi_ecall_ipi_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_ipi = {
> + .name = "ipi",
> .extid_start = SBI_EXT_IPI,
> .extid_end = SBI_EXT_IPI,
> .register_extensions = sbi_ecall_ipi_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_legacy.c b/lib/sbi/sbi_ecall_legacy.c
> index 25e9a1e8..50a7660d 100644
> --- a/lib/sbi/sbi_ecall_legacy.c
> +++ b/lib/sbi/sbi_ecall_legacy.c
> @@ -131,6 +131,7 @@ static int sbi_ecall_legacy_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_legacy = {
> + .name = "legacy",
> .extid_start = SBI_EXT_0_1_SET_TIMER,
> .extid_end = SBI_EXT_0_1_SHUTDOWN,
> .register_extensions = sbi_ecall_legacy_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_mpxy.c b/lib/sbi/sbi_ecall_mpxy.c
> index 5f717b76..09705cce 100644
> --- a/lib/sbi/sbi_ecall_mpxy.c
> +++ b/lib/sbi/sbi_ecall_mpxy.c
> @@ -61,8 +61,10 @@ static int sbi_ecall_mpxy_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_mpxy = {
> + .name = "mpxy",
> .extid_start = SBI_EXT_MPXY,
> .extid_end = SBI_EXT_MPXY,
> + .experimental = true,
> .register_extensions = sbi_ecall_mpxy_register_extensions,
> .handle = sbi_ecall_mpxy_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_pmu.c b/lib/sbi/sbi_ecall_pmu.c
> index ae7aeca9..868e8665 100644
> --- a/lib/sbi/sbi_ecall_pmu.c
> +++ b/lib/sbi/sbi_ecall_pmu.c
> @@ -93,6 +93,7 @@ static int sbi_ecall_pmu_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_pmu = {
> + .name = "pmu",
> .extid_start = SBI_EXT_PMU,
> .extid_end = SBI_EXT_PMU,
> .register_extensions = sbi_ecall_pmu_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_rfence.c b/lib/sbi/sbi_ecall_rfence.c
> index ded16c26..903adfbf 100644
> --- a/lib/sbi/sbi_ecall_rfence.c
> +++ b/lib/sbi/sbi_ecall_rfence.c
> @@ -84,6 +84,7 @@ static int sbi_ecall_rfence_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_rfence = {
> + .name = "rfnc",
> .extid_start = SBI_EXT_RFENCE,
> .extid_end = SBI_EXT_RFENCE,
> .register_extensions = sbi_ecall_rfence_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_srst.c b/lib/sbi/sbi_ecall_srst.c
> index 46cfaca4..721d7216 100644
> --- a/lib/sbi/sbi_ecall_srst.c
> +++ b/lib/sbi/sbi_ecall_srst.c
> @@ -75,6 +75,7 @@ static int sbi_ecall_srst_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_srst = {
> + .name = "srst",
> .extid_start = SBI_EXT_SRST,
> .extid_end = SBI_EXT_SRST,
> .register_extensions = sbi_ecall_srst_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_sse.c b/lib/sbi/sbi_ecall_sse.c
> index beddc2cd..303c0f2d 100644
> --- a/lib/sbi/sbi_ecall_sse.c
> +++ b/lib/sbi/sbi_ecall_sse.c
> @@ -56,8 +56,10 @@ static int sbi_ecall_sse_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_sse = {
> + .name = "sse",
> .extid_start = SBI_EXT_SSE,
> .extid_end = SBI_EXT_SSE,
> + .experimental = true,
> .register_extensions = sbi_ecall_sse_register_extensions,
> .handle = sbi_ecall_sse_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_susp.c b/lib/sbi/sbi_ecall_susp.c
> index 7b66bfcd..5afbf3fa 100644
> --- a/lib/sbi/sbi_ecall_susp.c
> +++ b/lib/sbi/sbi_ecall_susp.c
> @@ -49,6 +49,7 @@ static int sbi_ecall_susp_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_susp = {
> + .name = "susp",
> .extid_start = SBI_EXT_SUSP,
> .extid_end = SBI_EXT_SUSP,
> .register_extensions = sbi_ecall_susp_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_time.c b/lib/sbi/sbi_ecall_time.c
> index 5a2316eb..6ea6f054 100644
> --- a/lib/sbi/sbi_ecall_time.c
> +++ b/lib/sbi/sbi_ecall_time.c
> @@ -40,6 +40,7 @@ static int sbi_ecall_time_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_time = {
> + .name = "time",
> .extid_start = SBI_EXT_TIME,
> .extid_end = SBI_EXT_TIME,
> .register_extensions = sbi_ecall_time_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
> index ebebc586..5fdfb314 100644
> --- a/lib/sbi/sbi_ecall_vendor.c
> +++ b/lib/sbi/sbi_ecall_vendor.c
> @@ -46,6 +46,7 @@ static int sbi_ecall_vendor_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_vendor = {
> + .name = "vendor",
> .extid_start = SBI_EXT_VENDOR_START,
> .extid_end = SBI_EXT_VENDOR_END,
> .register_extensions = sbi_ecall_vendor_register_extensions,
> diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
> index 0736345d..cef658a2 100644
> --- a/lib/sbi/sbi_init.c
> +++ b/lib/sbi/sbi_init.c
> @@ -139,8 +139,12 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
> (u32)(SBI_SCRATCH_SIZE - sbi_scratch_used_space()));
>
> /* SBI details */
> - sbi_printf("Runtime SBI Version : %d.%d\n",
> + sbi_printf("Runtime SBI Version : %d.%d\n",
> sbi_ecall_version_major(), sbi_ecall_version_minor());
> + sbi_ecall_get_extensions_str(str, sizeof(str), false);
> + sbi_printf("Standard SBI Extensions : %s\n", str);
> + sbi_ecall_get_extensions_str(str, sizeof(str), true);
> + sbi_printf("Experimental SBI Extensions : %s\n", str);
> sbi_printf("\n");
> }
>
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time
2024-12-22 8:26 ` [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
@ 2024-12-22 9:02 ` Anup Patel
0 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2024-12-22 9:02 UTC (permalink / raw)
To: opensbi
On Sun, Dec 22, 2024 at 1:57?PM Anup Patel <anup@brainfault.org> wrote:
>
> On Sun, Dec 22, 2024 at 11:33?AM Anup Patel <apatel@ventanamicro.com> wrote:
> >
> > Add boot-time prints for list of available standard and experimental
> > SBI extensions.
> >
> > Signed-off-by: Anup Patel <apatel@ventanamicro.com>
>
> I would like to take this patch for the OpenSBI v1.6 release happening
> next week since we have experimental SBI extensions in this release.
Typo correction "... happening this week since ..."
Regards,
Anup
>
> Please let me know if there are objections at the earliest.
>
> Regards,
> Anup
>
> > ---
> > include/sbi/sbi_ecall.h | 6 ++++++
> > lib/sbi/sbi_ecall.c | 24 ++++++++++++++++++++++++
> > lib/sbi/sbi_ecall_base.c | 1 +
> > lib/sbi/sbi_ecall_cppc.c | 1 +
> > lib/sbi/sbi_ecall_dbcn.c | 1 +
> > lib/sbi/sbi_ecall_dbtr.c | 10 ++++++----
> > lib/sbi/sbi_ecall_fwft.c | 10 ++++++----
> > lib/sbi/sbi_ecall_hsm.c | 1 +
> > lib/sbi/sbi_ecall_ipi.c | 1 +
> > lib/sbi/sbi_ecall_legacy.c | 1 +
> > lib/sbi/sbi_ecall_mpxy.c | 2 ++
> > lib/sbi/sbi_ecall_pmu.c | 1 +
> > lib/sbi/sbi_ecall_rfence.c | 1 +
> > lib/sbi/sbi_ecall_srst.c | 1 +
> > lib/sbi/sbi_ecall_sse.c | 2 ++
> > lib/sbi/sbi_ecall_susp.c | 1 +
> > lib/sbi/sbi_ecall_time.c | 1 +
> > lib/sbi/sbi_ecall_vendor.c | 1 +
> > lib/sbi/sbi_init.c | 6 +++++-
> > 19 files changed, 63 insertions(+), 9 deletions(-)
> >
> > diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h
> > index 0b35eff7..88a69bb3 100644
> > --- a/include/sbi/sbi_ecall.h
> > +++ b/include/sbi/sbi_ecall.h
> > @@ -30,6 +30,8 @@ struct sbi_ecall_return {
> > struct sbi_ecall_extension {
> > /* head is used by the extension list */
> > struct sbi_dlist head;
> > + /* short name of the extension */
> > + char name[8];
> > /*
> > * extid_start and extid_end specify the range for this extension. As
> > * the initial range may be wider than the valid runtime range, the
> > @@ -38,6 +40,8 @@ struct sbi_ecall_extension {
> > */
> > unsigned long extid_start;
> > unsigned long extid_end;
> > + /* flag showing whether given extension is experimental or not */
> > + bool experimental;
> > /*
> > * register_extensions
> > *
> > @@ -83,6 +87,8 @@ void sbi_ecall_set_impid(unsigned long impid);
> >
> > struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid);
> >
> > +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental);
> > +
> > int sbi_ecall_register_extension(struct sbi_ecall_extension *ext);
> >
> > void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext);
> > diff --git a/lib/sbi/sbi_ecall.c b/lib/sbi/sbi_ecall.c
> > index be0b67e1..3fa3a9e8 100644
> > --- a/lib/sbi/sbi_ecall.c
> > +++ b/lib/sbi/sbi_ecall.c
> > @@ -11,6 +11,7 @@
> > #include <sbi/sbi_ecall.h>
> > #include <sbi/sbi_ecall_interface.h>
> > #include <sbi/sbi_error.h>
> > +#include <sbi/sbi_string.h>
> > #include <sbi/sbi_trap.h>
> >
> > extern struct sbi_ecall_extension *const sbi_ecall_exts[];
> > @@ -53,6 +54,29 @@ struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid)
> > return ret;
> > }
> >
> > +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental)
> > +{
> > + struct sbi_ecall_extension *t;
> > + int offset = 0;
> > +
> > + if (!exts_str || exts_str_size <= 0)
> > + return;
> > + sbi_memset(exts_str, 0, exts_str_size);
> > +
> > + sbi_list_for_each_entry(t, &ecall_exts_list, head) {
> > + if (experimental != t->experimental)
> > + continue;
> > + sbi_snprintf(exts_str + offset, exts_str_size - offset,
> > + "%s,", t->name);
> > + offset = offset + sbi_strlen(t->name) + 1;
> > + }
> > +
> > + if (offset)
> > + exts_str[offset - 1] = '\0';
> > + else
> > + sbi_strncpy(exts_str, "none", exts_str_size);
> > +}
> > +
> > int sbi_ecall_register_extension(struct sbi_ecall_extension *ext)
> > {
> > struct sbi_ecall_extension *t;
> > diff --git a/lib/sbi/sbi_ecall_base.c b/lib/sbi/sbi_ecall_base.c
> > index b7178ea8..d125cedc 100644
> > --- a/lib/sbi/sbi_ecall_base.c
> > +++ b/lib/sbi/sbi_ecall_base.c
> > @@ -79,6 +79,7 @@ static int sbi_ecall_base_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_base = {
> > + .name = "base",
> > .extid_start = SBI_EXT_BASE,
> > .extid_end = SBI_EXT_BASE,
> > .register_extensions = sbi_ecall_base_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c
> > index dab78299..4840c908 100644
> > --- a/lib/sbi/sbi_ecall_cppc.c
> > +++ b/lib/sbi/sbi_ecall_cppc.c
> > @@ -65,6 +65,7 @@ static int sbi_ecall_cppc_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_cppc = {
> > + .name = "cppc",
> > .extid_start = SBI_EXT_CPPC,
> > .extid_end = SBI_EXT_CPPC,
> > .register_extensions = sbi_ecall_cppc_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
> > index 49a7713f..1b0aebdc 100644
> > --- a/lib/sbi/sbi_ecall_dbcn.c
> > +++ b/lib/sbi/sbi_ecall_dbcn.c
> > @@ -74,6 +74,7 @@ static int sbi_ecall_dbcn_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_dbcn = {
> > + .name = "dbcn",
> > .extid_start = SBI_EXT_DBCN,
> > .extid_end = SBI_EXT_DBCN,
> > .register_extensions = sbi_ecall_dbcn_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_dbtr.c b/lib/sbi/sbi_ecall_dbtr.c
> > index 6a7dfe67..d28fd396 100644
> > --- a/lib/sbi/sbi_ecall_dbtr.c
> > +++ b/lib/sbi/sbi_ecall_dbtr.c
> > @@ -66,8 +66,10 @@ static int sbi_ecall_dbtr_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_dbtr = {
> > - .extid_start = SBI_EXT_DBTR,
> > - .extid_end = SBI_EXT_DBTR,
> > - .handle = sbi_ecall_dbtr_handler,
> > - .register_extensions = sbi_ecall_dbtr_register_extensions,
> > + .name = "dbtr",
> > + .extid_start = SBI_EXT_DBTR,
> > + .extid_end = SBI_EXT_DBTR,
> > + .experimental = true,
> > + .handle = sbi_ecall_dbtr_handler,
> > + .register_extensions = sbi_ecall_dbtr_register_extensions,
> > };
> > diff --git a/lib/sbi/sbi_ecall_fwft.c b/lib/sbi/sbi_ecall_fwft.c
> > index 267cbab2..3519285e 100644
> > --- a/lib/sbi/sbi_ecall_fwft.c
> > +++ b/lib/sbi/sbi_ecall_fwft.c
> > @@ -42,8 +42,10 @@ static int sbi_ecall_fwft_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_fwft = {
> > - .extid_start = SBI_EXT_FWFT,
> > - .extid_end = SBI_EXT_FWFT,
> > - .register_extensions = sbi_ecall_fwft_register_extensions,
> > - .handle = sbi_ecall_fwft_handler,
> > + .name = "fwft",
> > + .extid_start = SBI_EXT_FWFT,
> > + .extid_end = SBI_EXT_FWFT,
> > + .experimental = true,
> > + .register_extensions = sbi_ecall_fwft_register_extensions,
> > + .handle = sbi_ecall_fwft_handler,
> > };
> > diff --git a/lib/sbi/sbi_ecall_hsm.c b/lib/sbi/sbi_ecall_hsm.c
> > index 93170b09..a6e83b05 100644
> > --- a/lib/sbi/sbi_ecall_hsm.c
> > +++ b/lib/sbi/sbi_ecall_hsm.c
> > @@ -61,6 +61,7 @@ static int sbi_ecall_hsm_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_hsm = {
> > + .name = "hsm",
> > .extid_start = SBI_EXT_HSM,
> > .extid_end = SBI_EXT_HSM,
> > .register_extensions = sbi_ecall_hsm_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_ipi.c b/lib/sbi/sbi_ecall_ipi.c
> > index 50ef41dc..ec579ce0 100644
> > --- a/lib/sbi/sbi_ecall_ipi.c
> > +++ b/lib/sbi/sbi_ecall_ipi.c
> > @@ -36,6 +36,7 @@ static int sbi_ecall_ipi_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_ipi = {
> > + .name = "ipi",
> > .extid_start = SBI_EXT_IPI,
> > .extid_end = SBI_EXT_IPI,
> > .register_extensions = sbi_ecall_ipi_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_legacy.c b/lib/sbi/sbi_ecall_legacy.c
> > index 25e9a1e8..50a7660d 100644
> > --- a/lib/sbi/sbi_ecall_legacy.c
> > +++ b/lib/sbi/sbi_ecall_legacy.c
> > @@ -131,6 +131,7 @@ static int sbi_ecall_legacy_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_legacy = {
> > + .name = "legacy",
> > .extid_start = SBI_EXT_0_1_SET_TIMER,
> > .extid_end = SBI_EXT_0_1_SHUTDOWN,
> > .register_extensions = sbi_ecall_legacy_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_mpxy.c b/lib/sbi/sbi_ecall_mpxy.c
> > index 5f717b76..09705cce 100644
> > --- a/lib/sbi/sbi_ecall_mpxy.c
> > +++ b/lib/sbi/sbi_ecall_mpxy.c
> > @@ -61,8 +61,10 @@ static int sbi_ecall_mpxy_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_mpxy = {
> > + .name = "mpxy",
> > .extid_start = SBI_EXT_MPXY,
> > .extid_end = SBI_EXT_MPXY,
> > + .experimental = true,
> > .register_extensions = sbi_ecall_mpxy_register_extensions,
> > .handle = sbi_ecall_mpxy_handler,
> > };
> > diff --git a/lib/sbi/sbi_ecall_pmu.c b/lib/sbi/sbi_ecall_pmu.c
> > index ae7aeca9..868e8665 100644
> > --- a/lib/sbi/sbi_ecall_pmu.c
> > +++ b/lib/sbi/sbi_ecall_pmu.c
> > @@ -93,6 +93,7 @@ static int sbi_ecall_pmu_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_pmu = {
> > + .name = "pmu",
> > .extid_start = SBI_EXT_PMU,
> > .extid_end = SBI_EXT_PMU,
> > .register_extensions = sbi_ecall_pmu_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_rfence.c b/lib/sbi/sbi_ecall_rfence.c
> > index ded16c26..903adfbf 100644
> > --- a/lib/sbi/sbi_ecall_rfence.c
> > +++ b/lib/sbi/sbi_ecall_rfence.c
> > @@ -84,6 +84,7 @@ static int sbi_ecall_rfence_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_rfence = {
> > + .name = "rfnc",
> > .extid_start = SBI_EXT_RFENCE,
> > .extid_end = SBI_EXT_RFENCE,
> > .register_extensions = sbi_ecall_rfence_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_srst.c b/lib/sbi/sbi_ecall_srst.c
> > index 46cfaca4..721d7216 100644
> > --- a/lib/sbi/sbi_ecall_srst.c
> > +++ b/lib/sbi/sbi_ecall_srst.c
> > @@ -75,6 +75,7 @@ static int sbi_ecall_srst_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_srst = {
> > + .name = "srst",
> > .extid_start = SBI_EXT_SRST,
> > .extid_end = SBI_EXT_SRST,
> > .register_extensions = sbi_ecall_srst_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_sse.c b/lib/sbi/sbi_ecall_sse.c
> > index beddc2cd..303c0f2d 100644
> > --- a/lib/sbi/sbi_ecall_sse.c
> > +++ b/lib/sbi/sbi_ecall_sse.c
> > @@ -56,8 +56,10 @@ static int sbi_ecall_sse_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_sse = {
> > + .name = "sse",
> > .extid_start = SBI_EXT_SSE,
> > .extid_end = SBI_EXT_SSE,
> > + .experimental = true,
> > .register_extensions = sbi_ecall_sse_register_extensions,
> > .handle = sbi_ecall_sse_handler,
> > };
> > diff --git a/lib/sbi/sbi_ecall_susp.c b/lib/sbi/sbi_ecall_susp.c
> > index 7b66bfcd..5afbf3fa 100644
> > --- a/lib/sbi/sbi_ecall_susp.c
> > +++ b/lib/sbi/sbi_ecall_susp.c
> > @@ -49,6 +49,7 @@ static int sbi_ecall_susp_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_susp = {
> > + .name = "susp",
> > .extid_start = SBI_EXT_SUSP,
> > .extid_end = SBI_EXT_SUSP,
> > .register_extensions = sbi_ecall_susp_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_time.c b/lib/sbi/sbi_ecall_time.c
> > index 5a2316eb..6ea6f054 100644
> > --- a/lib/sbi/sbi_ecall_time.c
> > +++ b/lib/sbi/sbi_ecall_time.c
> > @@ -40,6 +40,7 @@ static int sbi_ecall_time_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_time = {
> > + .name = "time",
> > .extid_start = SBI_EXT_TIME,
> > .extid_end = SBI_EXT_TIME,
> > .register_extensions = sbi_ecall_time_register_extensions,
> > diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
> > index ebebc586..5fdfb314 100644
> > --- a/lib/sbi/sbi_ecall_vendor.c
> > +++ b/lib/sbi/sbi_ecall_vendor.c
> > @@ -46,6 +46,7 @@ static int sbi_ecall_vendor_register_extensions(void)
> > }
> >
> > struct sbi_ecall_extension ecall_vendor = {
> > + .name = "vendor",
> > .extid_start = SBI_EXT_VENDOR_START,
> > .extid_end = SBI_EXT_VENDOR_END,
> > .register_extensions = sbi_ecall_vendor_register_extensions,
> > diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
> > index 0736345d..cef658a2 100644
> > --- a/lib/sbi/sbi_init.c
> > +++ b/lib/sbi/sbi_init.c
> > @@ -139,8 +139,12 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
> > (u32)(SBI_SCRATCH_SIZE - sbi_scratch_used_space()));
> >
> > /* SBI details */
> > - sbi_printf("Runtime SBI Version : %d.%d\n",
> > + sbi_printf("Runtime SBI Version : %d.%d\n",
> > sbi_ecall_version_major(), sbi_ecall_version_minor());
> > + sbi_ecall_get_extensions_str(str, sizeof(str), false);
> > + sbi_printf("Standard SBI Extensions : %s\n", str);
> > + sbi_ecall_get_extensions_str(str, sizeof(str), true);
> > + sbi_printf("Experimental SBI Extensions : %s\n", str);
> > sbi_printf("\n");
> > }
> >
> > --
> > 2.43.0
> >
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time
2024-12-22 6:03 [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
2024-12-22 6:03 ` [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints Anup Patel
2024-12-22 8:26 ` [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
@ 2024-12-24 6:30 ` Anup Patel
2 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2024-12-24 6:30 UTC (permalink / raw)
To: opensbi
On Sun, Dec 22, 2024 at 11:33?AM Anup Patel <apatel@ventanamicro.com> wrote:
>
> Add boot-time prints for list of available standard and experimental
> SBI extensions.
>
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Applied this patch to the riscv/opensbi repo.
Regards,
Anup
> ---
> include/sbi/sbi_ecall.h | 6 ++++++
> lib/sbi/sbi_ecall.c | 24 ++++++++++++++++++++++++
> lib/sbi/sbi_ecall_base.c | 1 +
> lib/sbi/sbi_ecall_cppc.c | 1 +
> lib/sbi/sbi_ecall_dbcn.c | 1 +
> lib/sbi/sbi_ecall_dbtr.c | 10 ++++++----
> lib/sbi/sbi_ecall_fwft.c | 10 ++++++----
> lib/sbi/sbi_ecall_hsm.c | 1 +
> lib/sbi/sbi_ecall_ipi.c | 1 +
> lib/sbi/sbi_ecall_legacy.c | 1 +
> lib/sbi/sbi_ecall_mpxy.c | 2 ++
> lib/sbi/sbi_ecall_pmu.c | 1 +
> lib/sbi/sbi_ecall_rfence.c | 1 +
> lib/sbi/sbi_ecall_srst.c | 1 +
> lib/sbi/sbi_ecall_sse.c | 2 ++
> lib/sbi/sbi_ecall_susp.c | 1 +
> lib/sbi/sbi_ecall_time.c | 1 +
> lib/sbi/sbi_ecall_vendor.c | 1 +
> lib/sbi/sbi_init.c | 6 +++++-
> 19 files changed, 63 insertions(+), 9 deletions(-)
>
> diff --git a/include/sbi/sbi_ecall.h b/include/sbi/sbi_ecall.h
> index 0b35eff7..88a69bb3 100644
> --- a/include/sbi/sbi_ecall.h
> +++ b/include/sbi/sbi_ecall.h
> @@ -30,6 +30,8 @@ struct sbi_ecall_return {
> struct sbi_ecall_extension {
> /* head is used by the extension list */
> struct sbi_dlist head;
> + /* short name of the extension */
> + char name[8];
> /*
> * extid_start and extid_end specify the range for this extension. As
> * the initial range may be wider than the valid runtime range, the
> @@ -38,6 +40,8 @@ struct sbi_ecall_extension {
> */
> unsigned long extid_start;
> unsigned long extid_end;
> + /* flag showing whether given extension is experimental or not */
> + bool experimental;
> /*
> * register_extensions
> *
> @@ -83,6 +87,8 @@ void sbi_ecall_set_impid(unsigned long impid);
>
> struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid);
>
> +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental);
> +
> int sbi_ecall_register_extension(struct sbi_ecall_extension *ext);
>
> void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext);
> diff --git a/lib/sbi/sbi_ecall.c b/lib/sbi/sbi_ecall.c
> index be0b67e1..3fa3a9e8 100644
> --- a/lib/sbi/sbi_ecall.c
> +++ b/lib/sbi/sbi_ecall.c
> @@ -11,6 +11,7 @@
> #include <sbi/sbi_ecall.h>
> #include <sbi/sbi_ecall_interface.h>
> #include <sbi/sbi_error.h>
> +#include <sbi/sbi_string.h>
> #include <sbi/sbi_trap.h>
>
> extern struct sbi_ecall_extension *const sbi_ecall_exts[];
> @@ -53,6 +54,29 @@ struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid)
> return ret;
> }
>
> +void sbi_ecall_get_extensions_str(char *exts_str, int exts_str_size, bool experimental)
> +{
> + struct sbi_ecall_extension *t;
> + int offset = 0;
> +
> + if (!exts_str || exts_str_size <= 0)
> + return;
> + sbi_memset(exts_str, 0, exts_str_size);
> +
> + sbi_list_for_each_entry(t, &ecall_exts_list, head) {
> + if (experimental != t->experimental)
> + continue;
> + sbi_snprintf(exts_str + offset, exts_str_size - offset,
> + "%s,", t->name);
> + offset = offset + sbi_strlen(t->name) + 1;
> + }
> +
> + if (offset)
> + exts_str[offset - 1] = '\0';
> + else
> + sbi_strncpy(exts_str, "none", exts_str_size);
> +}
> +
> int sbi_ecall_register_extension(struct sbi_ecall_extension *ext)
> {
> struct sbi_ecall_extension *t;
> diff --git a/lib/sbi/sbi_ecall_base.c b/lib/sbi/sbi_ecall_base.c
> index b7178ea8..d125cedc 100644
> --- a/lib/sbi/sbi_ecall_base.c
> +++ b/lib/sbi/sbi_ecall_base.c
> @@ -79,6 +79,7 @@ static int sbi_ecall_base_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_base = {
> + .name = "base",
> .extid_start = SBI_EXT_BASE,
> .extid_end = SBI_EXT_BASE,
> .register_extensions = sbi_ecall_base_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c
> index dab78299..4840c908 100644
> --- a/lib/sbi/sbi_ecall_cppc.c
> +++ b/lib/sbi/sbi_ecall_cppc.c
> @@ -65,6 +65,7 @@ static int sbi_ecall_cppc_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_cppc = {
> + .name = "cppc",
> .extid_start = SBI_EXT_CPPC,
> .extid_end = SBI_EXT_CPPC,
> .register_extensions = sbi_ecall_cppc_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
> index 49a7713f..1b0aebdc 100644
> --- a/lib/sbi/sbi_ecall_dbcn.c
> +++ b/lib/sbi/sbi_ecall_dbcn.c
> @@ -74,6 +74,7 @@ static int sbi_ecall_dbcn_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_dbcn = {
> + .name = "dbcn",
> .extid_start = SBI_EXT_DBCN,
> .extid_end = SBI_EXT_DBCN,
> .register_extensions = sbi_ecall_dbcn_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_dbtr.c b/lib/sbi/sbi_ecall_dbtr.c
> index 6a7dfe67..d28fd396 100644
> --- a/lib/sbi/sbi_ecall_dbtr.c
> +++ b/lib/sbi/sbi_ecall_dbtr.c
> @@ -66,8 +66,10 @@ static int sbi_ecall_dbtr_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_dbtr = {
> - .extid_start = SBI_EXT_DBTR,
> - .extid_end = SBI_EXT_DBTR,
> - .handle = sbi_ecall_dbtr_handler,
> - .register_extensions = sbi_ecall_dbtr_register_extensions,
> + .name = "dbtr",
> + .extid_start = SBI_EXT_DBTR,
> + .extid_end = SBI_EXT_DBTR,
> + .experimental = true,
> + .handle = sbi_ecall_dbtr_handler,
> + .register_extensions = sbi_ecall_dbtr_register_extensions,
> };
> diff --git a/lib/sbi/sbi_ecall_fwft.c b/lib/sbi/sbi_ecall_fwft.c
> index 267cbab2..3519285e 100644
> --- a/lib/sbi/sbi_ecall_fwft.c
> +++ b/lib/sbi/sbi_ecall_fwft.c
> @@ -42,8 +42,10 @@ static int sbi_ecall_fwft_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_fwft = {
> - .extid_start = SBI_EXT_FWFT,
> - .extid_end = SBI_EXT_FWFT,
> - .register_extensions = sbi_ecall_fwft_register_extensions,
> - .handle = sbi_ecall_fwft_handler,
> + .name = "fwft",
> + .extid_start = SBI_EXT_FWFT,
> + .extid_end = SBI_EXT_FWFT,
> + .experimental = true,
> + .register_extensions = sbi_ecall_fwft_register_extensions,
> + .handle = sbi_ecall_fwft_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_hsm.c b/lib/sbi/sbi_ecall_hsm.c
> index 93170b09..a6e83b05 100644
> --- a/lib/sbi/sbi_ecall_hsm.c
> +++ b/lib/sbi/sbi_ecall_hsm.c
> @@ -61,6 +61,7 @@ static int sbi_ecall_hsm_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_hsm = {
> + .name = "hsm",
> .extid_start = SBI_EXT_HSM,
> .extid_end = SBI_EXT_HSM,
> .register_extensions = sbi_ecall_hsm_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_ipi.c b/lib/sbi/sbi_ecall_ipi.c
> index 50ef41dc..ec579ce0 100644
> --- a/lib/sbi/sbi_ecall_ipi.c
> +++ b/lib/sbi/sbi_ecall_ipi.c
> @@ -36,6 +36,7 @@ static int sbi_ecall_ipi_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_ipi = {
> + .name = "ipi",
> .extid_start = SBI_EXT_IPI,
> .extid_end = SBI_EXT_IPI,
> .register_extensions = sbi_ecall_ipi_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_legacy.c b/lib/sbi/sbi_ecall_legacy.c
> index 25e9a1e8..50a7660d 100644
> --- a/lib/sbi/sbi_ecall_legacy.c
> +++ b/lib/sbi/sbi_ecall_legacy.c
> @@ -131,6 +131,7 @@ static int sbi_ecall_legacy_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_legacy = {
> + .name = "legacy",
> .extid_start = SBI_EXT_0_1_SET_TIMER,
> .extid_end = SBI_EXT_0_1_SHUTDOWN,
> .register_extensions = sbi_ecall_legacy_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_mpxy.c b/lib/sbi/sbi_ecall_mpxy.c
> index 5f717b76..09705cce 100644
> --- a/lib/sbi/sbi_ecall_mpxy.c
> +++ b/lib/sbi/sbi_ecall_mpxy.c
> @@ -61,8 +61,10 @@ static int sbi_ecall_mpxy_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_mpxy = {
> + .name = "mpxy",
> .extid_start = SBI_EXT_MPXY,
> .extid_end = SBI_EXT_MPXY,
> + .experimental = true,
> .register_extensions = sbi_ecall_mpxy_register_extensions,
> .handle = sbi_ecall_mpxy_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_pmu.c b/lib/sbi/sbi_ecall_pmu.c
> index ae7aeca9..868e8665 100644
> --- a/lib/sbi/sbi_ecall_pmu.c
> +++ b/lib/sbi/sbi_ecall_pmu.c
> @@ -93,6 +93,7 @@ static int sbi_ecall_pmu_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_pmu = {
> + .name = "pmu",
> .extid_start = SBI_EXT_PMU,
> .extid_end = SBI_EXT_PMU,
> .register_extensions = sbi_ecall_pmu_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_rfence.c b/lib/sbi/sbi_ecall_rfence.c
> index ded16c26..903adfbf 100644
> --- a/lib/sbi/sbi_ecall_rfence.c
> +++ b/lib/sbi/sbi_ecall_rfence.c
> @@ -84,6 +84,7 @@ static int sbi_ecall_rfence_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_rfence = {
> + .name = "rfnc",
> .extid_start = SBI_EXT_RFENCE,
> .extid_end = SBI_EXT_RFENCE,
> .register_extensions = sbi_ecall_rfence_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_srst.c b/lib/sbi/sbi_ecall_srst.c
> index 46cfaca4..721d7216 100644
> --- a/lib/sbi/sbi_ecall_srst.c
> +++ b/lib/sbi/sbi_ecall_srst.c
> @@ -75,6 +75,7 @@ static int sbi_ecall_srst_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_srst = {
> + .name = "srst",
> .extid_start = SBI_EXT_SRST,
> .extid_end = SBI_EXT_SRST,
> .register_extensions = sbi_ecall_srst_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_sse.c b/lib/sbi/sbi_ecall_sse.c
> index beddc2cd..303c0f2d 100644
> --- a/lib/sbi/sbi_ecall_sse.c
> +++ b/lib/sbi/sbi_ecall_sse.c
> @@ -56,8 +56,10 @@ static int sbi_ecall_sse_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_sse = {
> + .name = "sse",
> .extid_start = SBI_EXT_SSE,
> .extid_end = SBI_EXT_SSE,
> + .experimental = true,
> .register_extensions = sbi_ecall_sse_register_extensions,
> .handle = sbi_ecall_sse_handler,
> };
> diff --git a/lib/sbi/sbi_ecall_susp.c b/lib/sbi/sbi_ecall_susp.c
> index 7b66bfcd..5afbf3fa 100644
> --- a/lib/sbi/sbi_ecall_susp.c
> +++ b/lib/sbi/sbi_ecall_susp.c
> @@ -49,6 +49,7 @@ static int sbi_ecall_susp_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_susp = {
> + .name = "susp",
> .extid_start = SBI_EXT_SUSP,
> .extid_end = SBI_EXT_SUSP,
> .register_extensions = sbi_ecall_susp_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_time.c b/lib/sbi/sbi_ecall_time.c
> index 5a2316eb..6ea6f054 100644
> --- a/lib/sbi/sbi_ecall_time.c
> +++ b/lib/sbi/sbi_ecall_time.c
> @@ -40,6 +40,7 @@ static int sbi_ecall_time_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_time = {
> + .name = "time",
> .extid_start = SBI_EXT_TIME,
> .extid_end = SBI_EXT_TIME,
> .register_extensions = sbi_ecall_time_register_extensions,
> diff --git a/lib/sbi/sbi_ecall_vendor.c b/lib/sbi/sbi_ecall_vendor.c
> index ebebc586..5fdfb314 100644
> --- a/lib/sbi/sbi_ecall_vendor.c
> +++ b/lib/sbi/sbi_ecall_vendor.c
> @@ -46,6 +46,7 @@ static int sbi_ecall_vendor_register_extensions(void)
> }
>
> struct sbi_ecall_extension ecall_vendor = {
> + .name = "vendor",
> .extid_start = SBI_EXT_VENDOR_START,
> .extid_end = SBI_EXT_VENDOR_END,
> .register_extensions = sbi_ecall_vendor_register_extensions,
> diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
> index 0736345d..cef658a2 100644
> --- a/lib/sbi/sbi_init.c
> +++ b/lib/sbi/sbi_init.c
> @@ -139,8 +139,12 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
> (u32)(SBI_SCRATCH_SIZE - sbi_scratch_used_space()));
>
> /* SBI details */
> - sbi_printf("Runtime SBI Version : %d.%d\n",
> + sbi_printf("Runtime SBI Version : %d.%d\n",
> sbi_ecall_version_major(), sbi_ecall_version_minor());
> + sbi_ecall_get_extensions_str(str, sizeof(str), false);
> + sbi_printf("Standard SBI Extensions : %s\n", str);
> + sbi_ecall_get_extensions_str(str, sizeof(str), true);
> + sbi_printf("Experimental SBI Extensions : %s\n", str);
> sbi_printf("\n");
> }
>
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints
2024-12-22 6:03 ` [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints Anup Patel
@ 2024-12-24 6:30 ` Anup Patel
0 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2024-12-24 6:30 UTC (permalink / raw)
To: opensbi
On Sun, Dec 22, 2024 at 11:33?AM Anup Patel <apatel@ventanamicro.com> wrote:
>
> Addtion of "Experimental SBI Extensions" to the boot-time prints
> disturbs the alignment of other prints so adjust all boot-time
> prints accordingly.
>
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Applied this patch to the riscv/opensbi repo.
Regards,
Anup
> ---
> lib/sbi/sbi_init.c | 62 +++++++++++++++++++++++-----------------------
> 1 file changed, 31 insertions(+), 31 deletions(-)
>
> diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
> index cef658a2..58030cf2 100644
> --- a/lib/sbi/sbi_init.c
> +++ b/lib/sbi/sbi_init.c
> @@ -83,56 +83,56 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch)
> return;
>
> /* Platform details */
> - sbi_printf("Platform Name : %s\n",
> + sbi_printf("Platform Name : %s\n",
> sbi_platform_name(plat));
> sbi_platform_get_features_str(plat, str, sizeof(str));
> - sbi_printf("Platform Features : %s\n", str);
> - sbi_printf("Platform HART Count : %u\n",
> + sbi_printf("Platform Features : %s\n", str);
> + sbi_printf("Platform HART Count : %u\n",
> sbi_platform_hart_count(plat));
> idev = sbi_ipi_get_device();
> - sbi_printf("Platform IPI Device : %s\n",
> + sbi_printf("Platform IPI Device : %s\n",
> (idev) ? idev->name : "---");
> tdev = sbi_timer_get_device();
> - sbi_printf("Platform Timer Device : %s @ %luHz\n",
> + sbi_printf("Platform Timer Device : %s @ %luHz\n",
> (tdev) ? tdev->name : "---",
> (tdev) ? tdev->timer_freq : 0);
> cdev = sbi_console_get_device();
> - sbi_printf("Platform Console Device : %s\n",
> + sbi_printf("Platform Console Device : %s\n",
> (cdev) ? cdev->name : "---");
> hdev = sbi_hsm_get_device();
> - sbi_printf("Platform HSM Device : %s\n",
> + sbi_printf("Platform HSM Device : %s\n",
> (hdev) ? hdev->name : "---");
> pdev = sbi_pmu_get_device();
> - sbi_printf("Platform PMU Device : %s\n",
> + sbi_printf("Platform PMU Device : %s\n",
> (pdev) ? pdev->name : "---");
> srdev = sbi_system_reset_get_device(SBI_SRST_RESET_TYPE_COLD_REBOOT, 0);
> - sbi_printf("Platform Reboot Device : %s\n",
> + sbi_printf("Platform Reboot Device : %s\n",
> (srdev) ? srdev->name : "---");
> srdev = sbi_system_reset_get_device(SBI_SRST_RESET_TYPE_SHUTDOWN, 0);
> - sbi_printf("Platform Shutdown Device : %s\n",
> + sbi_printf("Platform Shutdown Device : %s\n",
> (srdev) ? srdev->name : "---");
> susp_dev = sbi_system_suspend_get_device();
> - sbi_printf("Platform Suspend Device : %s\n",
> + sbi_printf("Platform Suspend Device : %s\n",
> (susp_dev) ? susp_dev->name : "---");
> cppc_dev = sbi_cppc_get_device();
> - sbi_printf("Platform CPPC Device : %s\n",
> + sbi_printf("Platform CPPC Device : %s\n",
> (cppc_dev) ? cppc_dev->name : "---");
>
> /* Firmware details */
> - sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start);
> - sbi_printf("Firmware Size : %d KB\n",
> + sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start);
> + sbi_printf("Firmware Size : %d KB\n",
> (u32)(scratch->fw_size / 1024));
> - sbi_printf("Firmware RW Offset : 0x%lx\n", scratch->fw_rw_offset);
> - sbi_printf("Firmware RW Size : %d KB\n",
> + sbi_printf("Firmware RW Offset : 0x%lx\n", scratch->fw_rw_offset);
> + sbi_printf("Firmware RW Size : %d KB\n",
> (u32)((scratch->fw_size - scratch->fw_rw_offset) / 1024));
> - sbi_printf("Firmware Heap Offset : 0x%lx\n", scratch->fw_heap_offset);
> - sbi_printf("Firmware Heap Size : "
> + sbi_printf("Firmware Heap Offset : 0x%lx\n", scratch->fw_heap_offset);
> + sbi_printf("Firmware Heap Size : "
> "%d KB (total), %d KB (reserved), %d KB (used), %d KB (free)\n",
> (u32)(scratch->fw_heap_size / 1024),
> (u32)(sbi_heap_reserved_space() / 1024),
> (u32)(sbi_heap_used_space() / 1024),
> (u32)(sbi_heap_free_space() / 1024));
> - sbi_printf("Firmware Scratch Size : "
> + sbi_printf("Firmware Scratch Size : "
> "%d B (total), %d B (used), %d B (free)\n",
> SBI_SCRATCH_SIZE,
> (u32)sbi_scratch_used_space(),
> @@ -154,7 +154,7 @@ static void sbi_boot_print_domains(struct sbi_scratch *scratch)
> return;
>
> /* Domain details */
> - sbi_domain_dump_all(" ");
> + sbi_domain_dump_all(" ");
> }
>
> static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid)
> @@ -174,26 +174,26 @@ static void sbi_boot_print_hart(struct sbi_scratch *scratch, u32 hartid)
> }
>
> /* Boot HART details */
> - sbi_printf("Boot HART ID : %u\n", hartid);
> - sbi_printf("Boot HART Domain : %s\n", dom->name);
> + sbi_printf("Boot HART ID : %u\n", hartid);
> + sbi_printf("Boot HART Domain : %s\n", dom->name);
> sbi_hart_get_priv_version_str(scratch, str, sizeof(str));
> - sbi_printf("Boot HART Priv Version : %s\n", str);
> + sbi_printf("Boot HART Priv Version : %s\n", str);
> misa_string(xlen, str, sizeof(str));
> - sbi_printf("Boot HART Base ISA : %s\n", str);
> + sbi_printf("Boot HART Base ISA : %s\n", str);
> sbi_hart_get_extensions_str(scratch, str, sizeof(str));
> - sbi_printf("Boot HART ISA Extensions : %s\n", str);
> - sbi_printf("Boot HART PMP Count : %d\n",
> + sbi_printf("Boot HART ISA Extensions : %s\n", str);
> + sbi_printf("Boot HART PMP Count : %d\n",
> sbi_hart_pmp_count(scratch));
> - sbi_printf("Boot HART PMP Granularity : %u bits\n",
> + sbi_printf("Boot HART PMP Granularity : %u bits\n",
> sbi_hart_pmp_log2gran(scratch));
> - sbi_printf("Boot HART PMP Address Bits: %d\n",
> + sbi_printf("Boot HART PMP Address Bits : %d\n",
> sbi_hart_pmp_addrbits(scratch));
> - sbi_printf("Boot HART MHPM Info : %lu (0x%08x)\n",
> + sbi_printf("Boot HART MHPM Info : %lu (0x%08x)\n",
> sbi_popcount(sbi_hart_mhpm_mask(scratch)),
> sbi_hart_mhpm_mask(scratch));
> - sbi_printf("Boot HART Debug Triggers : %d triggers\n",
> + sbi_printf("Boot HART Debug Triggers : %d triggers\n",
> sbi_dbtr_get_total_triggers());
> - sbi_hart_delegation_dump(scratch, "Boot HART ", " ");
> + sbi_hart_delegation_dump(scratch, "Boot HART ", " ");
> }
>
> static unsigned long coldboot_done;
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-12-24 6:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-22 6:03 [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
2024-12-22 6:03 ` [PATCH 2/2] lib: sbi: Improve the alignment of boot-time prints Anup Patel
2024-12-24 6:30 ` Anup Patel
2024-12-22 8:26 ` [PATCH 1/2] lib: sbi: Print list of available SBI extensions at boot-time Anup Patel
2024-12-22 9:02 ` Anup Patel
2024-12-24 6:30 ` Anup Patel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.