diff options
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); } |