Skip to contentSkip to conversation

platform: generic: add overrides for vendor extensions

PATCH New Mayuresh Chitale 2 participants 3 messages Jun 10, 2022 – Jun 13, 2022

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 platform: generic: add overrides for vendor extensions

Allow the vendor_ext_check and vendor_ext_provider APIs of the generic platform to be overridden by other platforms

---
 platform/generic/include/platform_override.h |  7 ++++++
 platform/generic/platform.c                  | 25 ++++++++++++++++++++
 2 files changed, 32 insertions(+)
platform/generic/include/platform_override.h +7 -0
index 4af8754..e55da25 100644
@@ -11,6 +11,7 @@
 #define __PLATFORM_OVERRIDE_H__
 
 #include <sbi/sbi_types.h>
+#include <sbi/sbi_trap.h>
 
 struct platform_override {
 	const struct fdt_match *match_table;
@@ -21,6 +22,12 @@ 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_check)(long extid, 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,
+				   const struct fdt_match *match);
 };
 
 #endif
platform/generic/platform.c +25 -0
index 7651273..bf93af6 100644
@@ -168,6 +168,29 @@ static int generic_final_init(bool cold_boot)
 	return 0;
 }
 
+static int generic_vendor_ext_check(long extid)
+{
+	if (generic_plat && generic_plat->vendor_ext_check)
+		return generic_plat->vendor_ext_check(extid,
+						      generic_plat_match);
+
+	return 0;
+}
+
+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,
+							 generic_plat_match);
+	}
+
+	return SBI_ENOTSUPP;
+}
+
 static void generic_early_exit(void)
 {
 	if (generic_plat && generic_plat->early_exit)
@@ -236,6 +259,8 @@ 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_check	= generic_vendor_ext_check,
+	.vendor_ext_provider	= generic_vendor_ext_provider,
 };
 
 struct sbi_platform platform = {
Signature · 1 line
2.25.1
#1 lore raw

PATCH 1/1 platform: generic: add overrides for vendor extensions

Quoted 5 lines · Mayuresh Chitale

Allow the vendor_ext_check and vendor_ext_provider APIs of the generic platform to be overridden by other platforms

Looks good to me.

Regards,
Anup

Quoted 81 lines
---
 platform/generic/include/platform_override.h |  7 ++++++
 platform/generic/platform.c                  | 25 ++++++++++++++++++++
 2 files changed, 32 insertions(+)
platform/generic/include/platform_override.h +7 -0
index 4af8754..e55da25 100644
@@ -11,6 +11,7 @@
 #define __PLATFORM_OVERRIDE_H__
 
 #include <sbi/sbi_types.h>
+#include <sbi/sbi_trap.h>
 
 struct platform_override {
        const struct fdt_match *match_table;
@@ -21,6 +22,12 @@ 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_check)(long extid, 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,
+                                  const struct fdt_match *match);
 };
 
 #endif
platform/generic/platform.c +25 -1
index 7651273..bf93af6 100644
@@ -168,6 +168,29 @@ static int generic_final_init(bool cold_boot)
        return 0;
 }
 
+static int generic_vendor_ext_check(long extid)
+{
+       if (generic_plat && generic_plat->vendor_ext_check)
+               return generic_plat->vendor_ext_check(extid,
+                                                     generic_plat_match);
+
+       return 0;
+}
+
+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,
+                                                        generic_plat_match);
+       }
+
+       return SBI_ENOTSUPP;
+}
+
 static void generic_early_exit(void)
 {
        if (generic_plat && generic_plat->early_exit)
@@ -236,6 +259,8 @@ 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_check       = generic_vendor_ext_check,
+       .vendor_ext_provider    = generic_vendor_ext_provider,
 };
 
 struct sbi_platform platform = {
--

2.25.1

--
opensbi mailing list
opensbi at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

Applied
#2 lore raw

PATCH 1/1 platform: generic: add overrides for vendor extensions

Quoted 4 lines · Anup Patel
Quoted 1 line · Mayuresh Chitale
Quoted 8 lines
Quoted 4 lines

Allow the vendor_ext_check and vendor_ext_provider APIs of the generic platform to be overridden by other platforms

Looks good to me.

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

Quoted 85 lines

Regards,
Anup

Quoted 81 lines
---
 platform/generic/include/platform_override.h |  7 ++++++
 platform/generic/platform.c                  | 25 ++++++++++++++++++++
 2 files changed, 32 insertions(+)
platform/generic/include/platform_override.h +7 -0
index 4af8754..e55da25 100644
@@ -11,6 +11,7 @@
 #define __PLATFORM_OVERRIDE_H__
 
 #include <sbi/sbi_types.h>
+#include <sbi/sbi_trap.h>
 
 struct platform_override {
        const struct fdt_match *match_table;
@@ -21,6 +22,12 @@ 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_check)(long extid, 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,
+                                  const struct fdt_match *match);
 };
 
 #endif
platform/generic/platform.c +25 -1
index 7651273..bf93af6 100644
@@ -168,6 +168,29 @@ static int generic_final_init(bool cold_boot)
        return 0;
 }
 
+static int generic_vendor_ext_check(long extid)
+{
+       if (generic_plat && generic_plat->vendor_ext_check)
+               return generic_plat->vendor_ext_check(extid,
+                                                     generic_plat_match);
+
+       return 0;
+}
+
+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,
+                                                        generic_plat_match);
+       }
+
+       return SBI_ENOTSUPP;
+}
+
 static void generic_early_exit(void)
 {
        if (generic_plat && generic_plat->early_exit)
@@ -236,6 +259,8 @@ 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_check       = generic_vendor_ext_check,
+       .vendor_ext_provider    = generic_vendor_ext_provider,
 };
 
 struct sbi_platform platform = {
--

2.25.1

--
opensbi mailing list
opensbi at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi