mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 02:24:18 +00:00
Hikey960: fix PSCI suspend stuck issue
Clear the cpuidle flag when resuming from idle. This flag is set when entering idle, and if it remains set when resuming, it can prevent the cluster from powering off during the next system suspend operation. During system suspend, all CPUs are plugged out except the last CPU, which is suspended. If any of the cpuidle flags are set at this point, the last CPU will be stuck in a WFI loop and will not be powered off. This problem only occurs during system suspend. Signed-off-by: Tao Wang <kevin.wangtao@linaro.org>
This commit is contained in:
parent
ca9915c2bb
commit
4af7fcb8d4
1 changed files with 5 additions and 0 deletions
|
@ -250,6 +250,7 @@ static void
|
|||
hikey960_pwr_domain_suspend_finish(const psci_power_state_t *target_state)
|
||||
{
|
||||
unsigned long mpidr = read_mpidr_el1();
|
||||
unsigned int core = mpidr & MPIDR_CPU_MASK;
|
||||
unsigned int cluster =
|
||||
(mpidr & MPIDR_CLUSTER_MASK) >> MPIDR_AFFINITY_BITS;
|
||||
|
||||
|
@ -257,6 +258,10 @@ hikey960_pwr_domain_suspend_finish(const psci_power_state_t *target_state)
|
|||
if (CORE_PWR_STATE(target_state) != PLAT_MAX_OFF_STATE)
|
||||
return;
|
||||
|
||||
hisi_cpuidle_lock(cluster, core);
|
||||
hisi_clear_cpuidle_flag(cluster, core);
|
||||
hisi_cpuidle_unlock(cluster, core);
|
||||
|
||||
if (hisi_test_ap_suspend_flag(cluster)) {
|
||||
hikey960_sr_dma_reinit();
|
||||
gicv2_cpuif_enable();
|
||||
|
|
Loading…
Add table
Reference in a new issue