mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-26 16:31:30 +01:00
platform: generic: Allow replacing platform operations
Currently the generic platform follows the middleware pattern: it implements the sbi_platform hooks, while providing its own set of hooks for further customization. This has a few disadvantages: each location where customization is needed requires a separate platform_override hook, including places where the generic function does nothing except forward to a platform_override hook, and the extra layer of function pointers adds runtime overhead. Let's restructure the generic platform to follow the helper pattern. Allow platform overrides to treat the generic platform as a template, adding or replacing the sbi_platform_operations as needed. Export the generic implementations, so they can be called as helpers from inside the override functions. With this pattern, the platform_override function pointers are replaced by direct calls, and the forwarding functions can be removed. The forwarding functions are not exported, since there is no reason for an override to call them. generic_vendor_ext_check() must be rewritten, since now there is a new way to override vendor_ext_provider. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20250325234342.711447-6-samuel.holland@sifive.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:

committed by
Anup Patel

parent
e78a0ebdc4
commit
2489e1421d
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <sbi/sbi_ecall.h>
|
||||
#include <sbi/sbi_hart.h>
|
||||
#include <sbi/sbi_platform.h>
|
||||
#include <sbi/sbi_types.h>
|
||||
#include <sbi/sbi_trap.h>
|
||||
|
||||
@@ -37,4 +38,18 @@ struct platform_override {
|
||||
const struct fdt_match *match);
|
||||
};
|
||||
|
||||
bool generic_cold_boot_allowed(u32 hartid);
|
||||
int generic_nascent_init(void);
|
||||
int generic_early_init(bool cold_boot);
|
||||
int generic_final_init(bool cold_boot);
|
||||
int generic_extensions_init(struct sbi_hart_features *hfeatures);
|
||||
int generic_domains_init(void);
|
||||
int generic_pmu_init(void);
|
||||
uint64_t generic_pmu_xlate_to_mhpmevent(uint32_t event_idx, uint64_t data);
|
||||
u64 generic_tlbr_flush_limit(void);
|
||||
u32 generic_tlb_num_entries(void);
|
||||
int generic_mpxy_init(void);
|
||||
|
||||
extern struct sbi_platform_operations generic_platform_ops;
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user