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>
This commit is contained in:
Anup Patel
2020-04-24 12:26:22 +05:30
committed by Anup Patel
parent 1bb00ab3ae
commit a9eac67ad0
15 changed files with 46 additions and 138 deletions

View File

@@ -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);
}