diff options
Diffstat (limited to 'include/sbi')
-rw-r--r-- | include/sbi/sbi_platform.h | 35 | ||||
-rw-r--r-- | include/sbi/sbi_system.h | 4 |
2 files changed, 31 insertions, 8 deletions
diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index b06aaa6..ee72323 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -137,8 +137,10 @@ struct sbi_platform_operations { */ int (*hart_stop)(void); + /* Check whether reset type and reason supported by the platform */ + int (*system_reset_check)(u32 reset_type, u32 reset_reason); /** Reset the platform */ - int (*system_reset)(u32 reset_type); + void (*system_reset)(u32 reset_type, u32 reset_reason); /** platform specific SBI extension implementation probe function */ int (*vendor_ext_check)(long extid); @@ -653,22 +655,41 @@ static inline void sbi_platform_timer_exit(const struct sbi_platform *plat) } /** - * Reset the platform + * Check whether reset type and reason supported by the platform * * @param plat pointer to struct sbi_platform * @param reset_type type of reset + * @param reset_reason reason for reset * - * @return 0 on success and negative error code on failure + * @return 0 if reset type and reason not supported and 1 if supported */ -static inline int sbi_platform_system_reset(const struct sbi_platform *plat, - u32 reset_type) +static inline int sbi_platform_system_reset_check( + const struct sbi_platform *plat, + u32 reset_type, u32 reset_reason) { - if (plat && sbi_platform_ops(plat)->system_reset) - return sbi_platform_ops(plat)->system_reset(reset_type); + if (plat && sbi_platform_ops(plat)->system_reset_check) + return sbi_platform_ops(plat)->system_reset_check(reset_type, + reset_reason); return 0; } /** + * Reset the platform + * + * This function will not return for supported reset type and reset reason + * + * @param plat pointer to struct sbi_platform + * @param reset_type type of reset + * @param reset_reason reason for reset + */ +static inline void sbi_platform_system_reset(const struct sbi_platform *plat, + u32 reset_type, u32 reset_reason) +{ + if (plat && sbi_platform_ops(plat)->system_reset) + sbi_platform_ops(plat)->system_reset(reset_type, reset_reason); +} + +/** * Check if a vendor extension is implemented or not. * * @param plat pointer to struct sbi_platform diff --git a/include/sbi/sbi_system.h b/include/sbi/sbi_system.h index 309e263..34ba766 100644 --- a/include/sbi/sbi_system.h +++ b/include/sbi/sbi_system.h @@ -12,6 +12,8 @@ #include <sbi/sbi_types.h> -void __noreturn sbi_system_reset(u32 reset_type); +bool sbi_system_reset_supported(u32 reset_type, u32 reset_reason); + +void __noreturn sbi_system_reset(u32 reset_type, u32 reset_reason); #endif |