aboutsummaryrefslogtreecommitdiff
path: root/include/sbi
diff options
context:
space:
mode:
Diffstat (limited to 'include/sbi')
-rw-r--r--include/sbi/sbi_platform.h35
-rw-r--r--include/sbi/sbi_system.h4
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