diff options
author | Anup Patel <anup.patel@wdc.com> | 2020-04-24 09:56:22 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2020-04-27 12:05:29 +0300 |
commit | a9eac67ad019200e9a281a6fc10e394353a026f2 (patch) | |
tree | bb99209d3573cfc5a6e0a2617163a160e5e452a7 /lib/sbi/sbi_system.c | |
parent | 1bb00ab3aeabde78579774eef8eadc7b7e765924 (diff) | |
download | opensbi-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.c | 34 |
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); } |