fix(system): fixed cpu_stall function stuck issue on H4

cpu_utility_ll_stall_cpu() used to busy-wait check stalled status
after stalling the core. On H4 it turns out that this status will
not be set if the core happens to be in WFI state when stalled.

If this happened the stall function would just wait forever for
the status.
This commit is contained in:
Marius Vikhammer
2025-07-08 10:56:55 +08:00
parent adbec6eda2
commit a68022f5be

View File

@@ -32,11 +32,12 @@ FORCE_INLINE_ATTR void cpu_utility_ll_stall_cpu(uint32_t cpu_no)
{ {
if (cpu_no == 0) { if (cpu_no == 0) {
HAL_FORCE_MODIFY_U32_REG_FIELD(LP_AON.cpucore_cfg, aon_cpu_core0_sw_stall, 0x86); HAL_FORCE_MODIFY_U32_REG_FIELD(LP_AON.cpucore_cfg, aon_cpu_core0_sw_stall, 0x86);
while(!REG_GET_BIT(HP_SYSTEM_CORE_DEBUG_RUNSTALL_CONF_REG, HP_SYSTEM_CORE0_RUNSTALLED));
} else { } else {
HAL_FORCE_MODIFY_U32_REG_FIELD(LP_AON.cpucore_cfg, aon_cpu_core1_sw_stall, 0x86); HAL_FORCE_MODIFY_U32_REG_FIELD(LP_AON.cpucore_cfg, aon_cpu_core1_sw_stall, 0x86);
while(!REG_GET_BIT(HP_SYSTEM_CORE_DEBUG_RUNSTALL_CONF_REG, HP_SYSTEM_CORE1_RUNSTALLED));
} }
// We do not check stalled status in HP_SYSTEM_CORE_DEBUG_RUNSTALL_CONF_REG here because
// it will not be set if the stalled core was in WFI when the stall happens, thus any check
// is unreliable
} }
FORCE_INLINE_ATTR void cpu_utility_ll_unstall_cpu(uint32_t cpu_no) FORCE_INLINE_ATTR void cpu_utility_ll_unstall_cpu(uint32_t cpu_no)