diff options
author | Yu Chien Peter Lin <peterlin@andestech.com> | 2023-01-20 06:05:08 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2023-01-22 15:02:09 +0300 |
commit | 8ecbe6d3fba6a655b5b5d8e39381187826ac750f (patch) | |
tree | 87ca9efbec3276ee7ea1fe930e4e5b8445d5f72e /lib/sbi | |
parent | ce2a834c989043895d339df4d61221eca2b428e9 (diff) | |
download | opensbi-8ecbe6d3fba6a655b5b5d8e39381187826ac750f.tar.xz |
lib: sbi_hsm: handle failure when hart_stop returns SBI_ENOTSUPP
Make use of generic warm-boot path when platform hart_stop callback
returns SBI_ENOTSUPP, in case certain hart can not turn off its
power domain, or it detects some error occured in power management
unit, it can fall through warm-boot flow and wait for interrupt in
sbi_hsm_hart_wait().
Also improves comment in sbi_hsm_hart_wait().
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'lib/sbi')
-rw-r--r-- | lib/sbi/sbi_hsm.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c index c0a5505..d4cce4a 100644 --- a/lib/sbi/sbi_hsm.c +++ b/lib/sbi/sbi_hsm.c @@ -116,7 +116,7 @@ static void sbi_hsm_hart_wait(struct sbi_scratch *scratch, u32 hartid) /* Set MSIE and MEIE bits to receive IPI */ csr_set(CSR_MIE, MIP_MSIP | MIP_MEIP); - /* Wait for hart_add call*/ + /* Wait for state transition requested by sbi_hsm_hart_start() */ while (atomic_read(&hdata->state) != SBI_HSM_STATE_START_PENDING) { wfi(); }; @@ -228,9 +228,8 @@ void __noreturn sbi_hsm_exit(struct sbi_scratch *scratch) goto fail_exit; if (hsm_device_has_hart_hotplug()) { - hsm_device_hart_stop(); - /* It should never reach here */ - goto fail_exit; + if (hsm_device_hart_stop() != SBI_ENOTSUPP) + goto fail_exit; } /** |