platform: add a vendor_ext_provider override

A patch from »platform: add a vendor_ext_provider override« in state Accepted for opensbi

From: Heiko Stuebner <heiko@...> Date: Thu, 17 Mar 2022 23:00:50 +0100

Commit-Message

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 <heiko@...>

Patch-Comment

platform/generic/include/platform_override.h | 5 +++++ platform/generic/platform.c | 13 +++++++++++++ 2 files changed, 18 insertions(+)

Statistics

  • 18 lines added
  • 0 lines removed

Changes

----------------- platform/generic/include/platform_override.h -----------------
index 4af8754..3d41a19 100644
@@ -10,6 +10,7 @@
#ifndef __PLATFORM_OVERRIDE_H__
#define __PLATFORM_OVERRIDE_H__
+#include <sbi/sbi_trap.h>
#include <sbi/sbi_types.h>
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
------------------------- platform/generic/platform.c --------------------------
index bc6e761..f05da8e 100644
@@ -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 = {
 
 

Recent Patches

About Us

Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer.

Read More...