From 043d088e3964ec64b091f739e2282f53f7d264fb Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Thu, 22 Apr 2021 11:53:32 +0530 Subject: lib: sbi: Simplify system reset platform operations Instead of having system_reset_check() and system_reset() callbacks in platform operations, it will be much simpler for reset driver to directly register these operations as a device to the sbi_system implementation. Signed-off-by: Anup Patel Reviewed-by: Alistair Francis --- lib/sbi/sbi_system.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'lib/sbi/sbi_system.c') diff --git a/lib/sbi/sbi_system.c b/lib/sbi/sbi_system.c index 10915b4..479060b 100644 --- a/lib/sbi/sbi_system.c +++ b/lib/sbi/sbi_system.c @@ -18,10 +18,25 @@ #include #include +static const struct sbi_system_reset_device *reset_dev = NULL; + +const struct sbi_system_reset_device *sbi_system_reset_get_device(void) +{ + return reset_dev; +} + +void sbi_system_reset_set_device(const struct sbi_system_reset_device *dev) +{ + if (!dev || reset_dev) + return; + + reset_dev = dev; +} + bool sbi_system_reset_supported(u32 reset_type, u32 reset_reason) { - if (sbi_platform_system_reset_check(sbi_platform_thishart_ptr(), - reset_type, reset_reason)) + if (reset_dev && reset_dev->system_reset_check && + reset_dev->system_reset_check(reset_type, reset_reason)) return TRUE; return FALSE; @@ -47,9 +62,9 @@ void __noreturn sbi_system_reset(u32 reset_type, u32 reset_reason) sbi_hsm_hart_stop(scratch, FALSE); /* Platform specific reset if domain allowed system reset */ - if (dom->system_reset_allowed) - sbi_platform_system_reset(sbi_platform_ptr(scratch), - reset_type, reset_reason); + if (dom->system_reset_allowed && + reset_dev && reset_dev->system_reset) + reset_dev->system_reset(reset_type, reset_reason); /* If platform specific reset did not work then do sbi_exit() */ sbi_exit(scratch); -- cgit v1.2.3