[PATCH 4/5] platform: generic: Enable feature-configuration support

Leo Yu-Chi Liang leo.liang at sifive.com
Tue Sep 29 22:42:09 PDT 2026


Add generic_feature_config_init(), wired as the generic platform's
feature_config_init operation, which calls feature_config_probe() to
match the current hart against a registered vendor driver.

An unrecognised vendor or core leaves the subsystem inactive and boots
normally.

Enable the SiFive driver in the default configuration.

This completes the feature-configuration framework: the generic
platform can now apply vendor CSR values to supported cores without
platform-specific code, and a platform needing different values can
override them from its own feature_config_init operation after
delegating to generic_feature_config_init() for the defaults.

Signed-off-by: Leo Yu-Chi Liang <leo.liang at sifive.com>
Assisted-by: LLM
---
 platform/generic/configs/defconfig           | 2 ++
 platform/generic/include/platform_override.h | 1 +
 platform/generic/platform.c                  | 7 +++++++
 3 files changed, 10 insertions(+)

diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index 98829884..252fd8fa 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -86,3 +86,5 @@ CONFIG_FDT_MPXY_RPMI_PERFORMANCE=y
 CONFIG_FDT_MPXY_RPMI_SYSMSI=y
 CONFIG_FDT_MPXY_RPMI_MM=y
 CONFIG_FDT_MPXY_RPMI_LOGGING=y
+CONFIG_FEATURE_CONFIG=y
+CONFIG_FEATURE_CONFIG_SIFIVE=y
diff --git a/platform/generic/include/platform_override.h b/platform/generic/include/platform_override.h
index 1b8127cb..8e7657a4 100644
--- a/platform/generic/include/platform_override.h
+++ b/platform/generic/include/platform_override.h
@@ -17,6 +17,7 @@
 bool generic_cold_boot_allowed(u32 hartid);
 int generic_nascent_init(void);
 int generic_early_init(bool cold_boot);
+int generic_feature_config_init(bool cold_boot);
 int generic_final_init(bool cold_boot);
 int generic_extensions_init(bool cold_boot);
 int generic_domains_init(void);
diff --git a/platform/generic/platform.c b/platform/generic/platform.c
index 1df0280d..0ea5dfb7 100644
--- a/platform/generic/platform.c
+++ b/platform/generic/platform.c
@@ -23,6 +23,7 @@
 #include <sbi_utils/fdt/fdt_fixup.h>
 #include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/fdt/fdt_pmu.h>
+#include <sbi_utils/feature/feature_config.h>
 #include <sbi_utils/irqchip/fdt_irqchip.h>
 #include <sbi_utils/irqchip/imsic.h>
 #include <sbi_utils/mpxy/fdt_mpxy.h>
@@ -234,6 +235,11 @@ int generic_early_init(bool cold_boot)
 	return fdt_cmo_init(cold_boot);
 }
 
+int generic_feature_config_init(bool cold_boot)
+{
+	return feature_config_probe();
+}
+
 int generic_final_init(bool cold_boot)
 {
 	void *fdt = fdt_get_address_rw();
@@ -338,6 +344,7 @@ struct sbi_platform_operations generic_platform_ops = {
 	.cold_boot_allowed	= generic_cold_boot_allowed,
 	.nascent_init		= generic_nascent_init,
 	.early_init		= generic_early_init,
+	.feature_config_init	= generic_feature_config_init,
 	.final_init		= generic_final_init,
 	.extensions_init	= generic_extensions_init,
 	.domains_init		= generic_domains_init,
-- 
2.43.7




More information about the opensbi mailing list