|
|
@ -1,5 +1,5 @@ |
|
|
|
/*
|
|
|
|
* Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved. |
|
|
|
* Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved. |
|
|
|
* |
|
|
|
* SPDX-License-Identifier: BSD-3-Clause |
|
|
|
*/ |
|
|
@ -138,21 +138,37 @@ static void fvp_power_domain_on_finish_common(const psci_power_state_t *target_s |
|
|
|
fvp_pwrc_clr_wen(mpidr); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
* FVP handler called when a CPU is about to enter standby. |
|
|
|
******************************************************************************/ |
|
|
|
static void fvp_cpu_standby(plat_local_state_t cpu_state) |
|
|
|
{ |
|
|
|
u_register_t scr = read_scr_el3(); |
|
|
|
|
|
|
|
assert(cpu_state == ARM_LOCAL_STATE_RET); |
|
|
|
|
|
|
|
/*
|
|
|
|
* Enter standby state |
|
|
|
* dsb is good practice before using wfi to enter low power states |
|
|
|
* Enable the Non-secure interrupt to wake the CPU. |
|
|
|
* In GICv3 affinity routing mode, the Non-secure Group 1 interrupts |
|
|
|
* use Physical FIQ at EL3 whereas in GICv2, Physical IRQ is used. |
|
|
|
* Enabling both the bits works for both GICv2 mode and GICv3 affinity |
|
|
|
* routing mode. |
|
|
|
*/ |
|
|
|
write_scr_el3(scr | SCR_IRQ_BIT | SCR_FIQ_BIT); |
|
|
|
isb(); |
|
|
|
|
|
|
|
/*
|
|
|
|
* Enter standby state. |
|
|
|
* dsb is good practice before using wfi to enter low power states. |
|
|
|
*/ |
|
|
|
dsb(); |
|
|
|
wfi(); |
|
|
|
|
|
|
|
/*
|
|
|
|
* Restore SCR_EL3 to the original value, synchronisation of SCR_EL3 |
|
|
|
* is done by eret in el3_exit() to save some execution cycles. |
|
|
|
*/ |
|
|
|
write_scr_el3(scr); |
|
|
|
} |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|