summaryrefslogtreecommitdiff
path: root/lib/sbi/sbi_system.c
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2020-04-24 09:56:22 +0300
committerAnup Patel <anup@brainfault.org>2020-04-27 12:05:29 +0300
commita9eac67ad019200e9a281a6fc10e394353a026f2 (patch)
treebb99209d3573cfc5a6e0a2617163a160e5e452a7 /lib/sbi/sbi_system.c
parent1bb00ab3aeabde78579774eef8eadc7b7e765924 (diff)
downloadopensbi-a9eac67ad019200e9a281a6fc10e394353a026f2.tar.xz
include: sbi_platform: Combine reboot and shutdown into one callback
We can achieve shutdown, cold reboot, and warm reboot using just one sbi_platform callback so we combine system_reboot() and system_shutdown() callbacks into one system_reset() callback. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'lib/sbi/sbi_system.c')
-rw-r--r--lib/sbi/sbi_system.c34
1 files changed, 5 insertions, 29 deletions
diff --git a/lib/sbi/sbi_system.c b/lib/sbi/sbi_system.c
index 5d4c7de..6f7be14 100644
--- a/lib/sbi/sbi_system.c
+++ b/lib/sbi/sbi_system.c
@@ -17,7 +17,7 @@
#include <sbi/sbi_ipi.h>
#include <sbi/sbi_init.h>
-void __noreturn sbi_system_reboot(u32 type)
+void __noreturn sbi_system_reset(u32 platform_reset_type)
{
ulong hbase = 0, hmask;
u32 cur_hartid = current_hartid();
@@ -35,34 +35,10 @@ void __noreturn sbi_system_reboot(u32 type)
/* Stop current HART */
sbi_hsm_hart_stop(scratch, FALSE);
- /* Platform specific reooot */
- sbi_platform_system_reboot(sbi_platform_ptr(scratch), type);
+ /* Platform specific reset */
+ sbi_platform_system_reset(sbi_platform_ptr(scratch),
+ platform_reset_type);
- /* If platform specific reboot did not work then do sbi_exit() */
- sbi_exit(scratch);
-}
-
-void __noreturn sbi_system_shutdown(u32 type)
-{
- ulong hbase = 0, hmask;
- u32 cur_hartid = current_hartid();
- struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
-
- /* Send HALT IPI to every hart other than the current hart */
- while (!sbi_hsm_hart_started_mask(hbase, &hmask)) {
- if (hbase <= cur_hartid)
- hmask &= ~(1UL << (cur_hartid - hbase));
- if (hmask)
- sbi_ipi_send_halt(hmask, hbase);
- hbase += BITS_PER_LONG;
- }
-
- /* Stop current HART */
- sbi_hsm_hart_stop(scratch, FALSE);
-
- /* Platform specific shutdown */
- sbi_platform_system_shutdown(sbi_platform_ptr(scratch), type);
-
- /* If platform specific shutdown did not work then do sbi_exit() */
+ /* If platform specific reset did not work then do sbi_exit() */
sbi_exit(scratch);
}