diff options
Diffstat (limited to 'lib/sbi')
-rw-r--r-- | lib/sbi/sbi_init.c | 6 | ||||
-rw-r--r-- | lib/sbi/sbi_ipi.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index dcca2c8..ffa214c 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -442,10 +442,12 @@ static void __noreturn init_warmboot(struct sbi_scratch *scratch, u32 hartid) if (hstate < 0) sbi_hart_hang(); - if (hstate == SBI_HSM_STATE_SUSPENDED) + if (hstate == SBI_HSM_STATE_SUSPENDED) { init_warm_resume(scratch, hartid); - else + } else { + sbi_ipi_raw_clear(hartid); init_warm_startup(scratch, hartid); + } } static atomic_t coldboot_lottery = ATOMIC_INITIALIZER(0); diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c index 1bcc2e4..b9f6205 100644 --- a/lib/sbi/sbi_ipi.c +++ b/lib/sbi/sbi_ipi.c @@ -217,6 +217,12 @@ int sbi_ipi_raw_send(u32 target_hart) return 0; } +void sbi_ipi_raw_clear(u32 target_hart) +{ + if (ipi_dev && ipi_dev->ipi_clear) + ipi_dev->ipi_clear(target_hart); +} + const struct sbi_ipi_device *sbi_ipi_get_device(void) { return ipi_dev; |