diff options
author | Heiko Stuebner <heiko@sntech.de> | 2022-10-04 19:42:25 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2022-10-13 07:22:05 +0300 |
commit | 4f2acb53e21af805e499f7f594a931af9b0623fd (patch) | |
tree | 6baf642377f1e1c81b9687e79852c6d982d664f3 /include | |
parent | c316fa38c264a1c01f178621e79a8c451f5f5a46 (diff) | |
download | opensbi-4f2acb53e21af805e499f7f594a931af9b0623fd.tar.xz |
lib: sbi_platform: expose hart_features to extension_init callback
The platform-specific extension_init callback is supposed to
set specific things for the platform opensbi is running on.
So it's also the right place to override specific hart_features
if needed - when it's know that autodetection has provided
wrong results for example.
Suggested-by: Atish Patra <atishp@atishpatra.org>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Guo Ren <guoren@kernel.org>
Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/sbi/sbi_platform.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index 87024db..722f27a 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -48,6 +48,7 @@ struct sbi_domain_memregion; struct sbi_trap_info; struct sbi_trap_regs; +struct sbi_hart_features; /** Possible feature flags of a platform */ enum sbi_platform_features { @@ -90,7 +91,7 @@ struct sbi_platform_operations { int (*misa_get_xlen)(void); /** Initialize (or populate) HART extensions for the platform */ - int (*extensions_init)(void); + int (*extensions_init)(struct sbi_hart_features *hfeatures); /** Initialize (or populate) domains for the platform */ int (*domains_init)(void); @@ -464,10 +465,11 @@ static inline int sbi_platform_misa_xlen(const struct sbi_platform *plat) * @return 0 on success and negative error code on failure */ static inline int sbi_platform_extensions_init( - const struct sbi_platform *plat) + const struct sbi_platform *plat, + struct sbi_hart_features *hfeatures) { if (plat && sbi_platform_ops(plat)->extensions_init) - return sbi_platform_ops(plat)->extensions_init(); + return sbi_platform_ops(plat)->extensions_init(hfeatures); return 0; } |