[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