[PATCH 01/12] lib: sbi: Add coldboot parameters to some initialization functions
Xiang W
wxjstz at 126.com
Wed Jun 11 05:12:18 PDT 2025
To reduce the difference between init_coldboot/init_warm_startup,
add cold_boot parameters to some initialization functions.
Signed-off-by: Xiang W <wxjstz at 126.com>
---
include/sbi/sbi_domain.h | 2 +-
include/sbi/sbi_double_trap.h | 2 +-
include/sbi/sbi_mpxy.h | 2 +-
lib/sbi/sbi_domain.c | 9 +++++++--
lib/sbi/sbi_double_trap.c | 6 ++++--
lib/sbi/sbi_init.c | 6 +++---
lib/sbi/sbi_mpxy.c | 4 +++-
7 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/include/sbi/sbi_domain.h b/include/sbi/sbi_domain.h
index e9cff0b1..af25196b 100644
--- a/include/sbi/sbi_domain.h
+++ b/include/sbi/sbi_domain.h
@@ -311,7 +311,7 @@ int sbi_domain_root_add_memrange(unsigned long addr, unsigned long size,
int sbi_domain_startup(struct sbi_scratch *scratch, u32 cold_hartid);
/** Finalize domain tables */
-int sbi_domain_finalize(struct sbi_scratch *scratch);
+int sbi_domain_finalize(struct sbi_scratch *scratch, bool cold_boot);
/** Initialize domains */
int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid);
diff --git a/include/sbi/sbi_double_trap.h b/include/sbi/sbi_double_trap.h
index c3d64dfd..1c9f6472 100644
--- a/include/sbi/sbi_double_trap.h
+++ b/include/sbi/sbi_double_trap.h
@@ -15,6 +15,6 @@
int sbi_double_trap_handler(struct sbi_trap_context *tcntx);
-void sbi_double_trap_init(struct sbi_scratch *scratch);
+void sbi_double_trap_init(struct sbi_scratch *scratch, bool cold_boot);
#endif
diff --git a/include/sbi/sbi_mpxy.h b/include/sbi/sbi_mpxy.h
index 9da2791e..9145816c 100644
--- a/include/sbi/sbi_mpxy.h
+++ b/include/sbi/sbi_mpxy.h
@@ -148,7 +148,7 @@ struct sbi_mpxy_channel {
int sbi_mpxy_register_channel(struct sbi_mpxy_channel *channel);
/** Initialize Message proxy subsystem */
-int sbi_mpxy_init(struct sbi_scratch *scratch);
+int sbi_mpxy_init(struct sbi_scratch *scratch, bool cold_boot);
/** Check if some Message proxy channel is available */
bool sbi_mpxy_channel_available(void);
diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
index 461c7e53..c4d16f1b 100644
--- a/lib/sbi/sbi_domain.c
+++ b/lib/sbi/sbi_domain.c
@@ -742,15 +742,20 @@ int sbi_domain_startup(struct sbi_scratch *scratch, u32 cold_hartid)
return 0;
}
-int sbi_domain_finalize(struct sbi_scratch *scratch)
+int sbi_domain_finalize(struct sbi_scratch *scratch, bool cold_boot)
{
int rc;
- const struct sbi_platform *plat = sbi_platform_ptr(scratch);
+ const struct sbi_platform *plat;
+
+ if (!cold_boot)
+ return 0;
/* Sanity checks */
if (domain_finalized)
return SBI_EINVAL;
+ plat = sbi_platform_ptr(scratch);
+
/* Initialize and populate domains for the platform */
rc = sbi_platform_domains_init(plat);
if (rc) {
diff --git a/lib/sbi/sbi_double_trap.c b/lib/sbi/sbi_double_trap.c
index d0ddb493..0e3951b8 100644
--- a/lib/sbi/sbi_double_trap.c
+++ b/lib/sbi/sbi_double_trap.c
@@ -30,8 +30,10 @@ int sbi_double_trap_handler(struct sbi_trap_context *tcntx)
return sbi_sse_inject_event(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP);
}
-void sbi_double_trap_init(struct sbi_scratch *scratch)
+void sbi_double_trap_init(struct sbi_scratch *scratch, bool cold_boot)
{
+ if (!cold_boot)
+ return;
if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SSDBLTRP))
sbi_sse_add_event(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, NULL);
-}
\ No newline at end of file
+}
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c
index 62c32682..a227cb53 100644
--- a/lib/sbi/sbi_init.c
+++ b/lib/sbi/sbi_init.c
@@ -280,7 +280,7 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid)
sbi_boot_print_banner(scratch);
- sbi_double_trap_init(scratch);
+ sbi_double_trap_init(scratch, true);
rc = sbi_irqchip_init(scratch, true);
if (rc) {
@@ -313,7 +313,7 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid)
sbi_hart_hang();
}
- rc = sbi_mpxy_init(scratch);
+ rc = sbi_mpxy_init(scratch, true);
if (rc) {
sbi_printf("%s: mpxy init failed (error %d)\n", __func__, rc);
sbi_hart_hang();
@@ -324,7 +324,7 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid)
* Note: Finalize domains before HART PMP configuration so
* that we use correct domain for configuring PMP.
*/
- rc = sbi_domain_finalize(scratch);
+ rc = sbi_domain_finalize(scratch, true);
if (rc) {
sbi_printf("%s: domain finalize failed (error %d)\n",
__func__, rc);
diff --git a/lib/sbi/sbi_mpxy.c b/lib/sbi/sbi_mpxy.c
index 681cfbe9..761d81e0 100644
--- a/lib/sbi/sbi_mpxy.c
+++ b/lib/sbi/sbi_mpxy.c
@@ -306,9 +306,11 @@ static struct mpxy_state *sbi_domain_get_mpxy_state(struct sbi_domain *dom,
return dom_hartindex_to_mpxy_state_table[hartindex];
}
-int sbi_mpxy_init(struct sbi_scratch *scratch)
+int sbi_mpxy_init(struct sbi_scratch *scratch, bool cold_boot)
{
int ret;
+ if (!cold_boot)
+ return 0;
/**
* Allocate per-domain and per-hart MPXY state data.
--
2.47.2
More information about the opensbi
mailing list