From: Heiko Stuebner Date: Fri, 1 Apr 2022 03:08:38 +0200 Subject: [PATCH 1/2] platform: add a vendor_ext_provider override Message-ID: <20220401010839.1343551-1-heiko@sntech.de> List-Id: To: opensbi@lists.infradead.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit The vendor_ext_provider is already meant to allow vendor extensions to ecalls, so allow fdt-matched platforms to define their own override. Signed-off-by: Heiko Stuebner --- platform/generic/include/platform_override.h | 5 +++++ platform/generic/platform.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/platform/generic/include/platform_override.h b/platform/generic/include/platform_override.h index 4af8754..3d41a19 100644 --- a/platform/generic/include/platform_override.h +++ b/platform/generic/include/platform_override.h @@ -10,6 +10,7 @@ #ifndef __PLATFORM_OVERRIDE_H__ #define __PLATFORM_OVERRIDE_H__ +#include #include struct platform_override { @@ -21,6 +22,10 @@ struct platform_override { void (*early_exit)(const struct fdt_match *match); void (*final_exit)(const struct fdt_match *match); int (*fdt_fixup)(void *fdt, const struct fdt_match *match); + int (*vendor_ext_provider)(long extid, long funcid, + const struct sbi_trap_regs *regs, + unsigned long *out_value, + struct sbi_trap_info *out_trap); }; #endif diff --git a/platform/generic/platform.c b/platform/generic/platform.c index bc6e761..f05da8e 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -209,6 +209,18 @@ static uint64_t generic_pmu_xlate_to_mhpmevent(uint32_t event_idx, return evt_val; } +static int generic_vendor_ext_provider(long extid, long funcid, + const struct sbi_trap_regs *regs, + unsigned long *out_value, + struct sbi_trap_info *out_trap) +{ + if (generic_plat && generic_plat->vendor_ext_provider) + return generic_plat->vendor_ext_provider(extid, funcid, regs, + out_value, out_trap); + + return SBI_ENOTSUPP; +} + const struct sbi_platform_operations platform_ops = { .nascent_init = generic_nascent_init, .early_init = generic_early_init, @@ -225,6 +237,7 @@ const struct sbi_platform_operations platform_ops = { .get_tlbr_flush_limit = generic_tlbr_flush_limit, .timer_init = fdt_timer_init, .timer_exit = fdt_timer_exit, + .vendor_ext_provider = generic_vendor_ext_provider, }; struct sbi_platform platform = { -- 2.35.1