mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-09-08 18:21:29 +01:00
lib: utils/suspend: wait for the secondary Andes harts to sleep
A secondary hart may not have reached the target sleep state by the time the primary checks, so the one-shot check could fail spuriously. Poll each PCS status instead and give up after HART_SLEEP_TIMEOUT_MS. Rework atcsmu_pcs_is_sleep() into the atcsmu_hart_is_sleep() predicate so sbi_timer_waitms_until() can drive it. Signed-off-by: Ben Zong-You Xie <ben717@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20260728081041.2724668-7-ben717@andestech.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
committed by
Anup Patel
parent
e01bd7926b
commit
0fb4799307
@@ -9,6 +9,11 @@
|
||||
|
||||
#include <sbi/sbi_types.h>
|
||||
|
||||
struct atcsmu_sleep_arg {
|
||||
u32 hartid;
|
||||
bool deep_sleep;
|
||||
};
|
||||
|
||||
/* clang-format off */
|
||||
|
||||
#define SCRATCH_PAD_OFFSET 0x40
|
||||
@@ -61,6 +66,6 @@ int atcsmu_set_reset_vector(u64 wakeup_addr, u32 hartid);
|
||||
u32 atcsmu_get_sleep_type(u32 hartid);
|
||||
void atcsmu_write_scratch(u32 value);
|
||||
u32 atcsmu_read_scratch(void);
|
||||
bool atcsmu_pcs_is_sleep(u32 hartid, bool deep_sleep);
|
||||
bool atcsmu_hart_is_sleep(void *opaque);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user