platform: generic: add overrides for vendor extensions
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
@@ -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
@@ -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
PATCH 1/1 platform: generic: add overrides for vendor extensions
Quoted 5 lines · Mayuresh Chitale
Allow the
vendor_ext_checkandvendor_ext_providerAPIs of the generic platform to be overridden by other platformsSigned-off-by Mayuresh Chitale <[email protected]>
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@@ -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@@ -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
Anup Patel
AppliedPATCH 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_checkandvendor_ext_providerAPIs of the generic platform to be overridden by other platformsSigned-off-by Mayuresh Chitale <[email protected]>Looks good to me.
Reviewed-by Anup Patel <[email protected]>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
Quoted 85 lines
Regards,
AnupQuoted 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@@ -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@@ -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