From: dp-arm Date: Tue, 11 Apr 2017 10:48:49 +0000 (+0100) Subject: css: Ensure PSCI system off/reset is not interrupted X-Git-Tag: baikal/aarch64/sdk5.9~2981^2~3 X-Git-Url: https://git.baikalelectronics.ru/?a=commitdiff_plain;h=0498343ac0d0b03c0389ce358bcb2f17096949dd;p=arm-tf.git css: Ensure PSCI system off/reset is not interrupted If there is a pending interrupt, it is possible for the AP to come out of the final WFI before SCP has a chance to act on it. Prevent this by disabling the GIC CPU interface before issuing a WFI. Previously, SCP would not wait on WFI before taking an action but would shut down the core or system regardless. Change-Id: Ib0bcf69a515d540ed4f73c11e40ec7c863e39c92 Signed-off-by: dp-arm --- diff --git a/plat/arm/css/drivers/scp/css_pm_scpi.c b/plat/arm/css/drivers/scp/css_pm_scpi.c index e22504d1d..3b643e669 100644 --- a/plat/arm/css/drivers/scp/css_pm_scpi.c +++ b/plat/arm/css/drivers/scp/css_pm_scpi.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "../scpi/css_scpi.h" #include "css_scp.h" @@ -134,6 +135,12 @@ void __dead2 css_scp_sys_shutdown(void) { uint32_t response; + /* + * Disable GIC CPU interface to prevent pending interrupt + * from waking up the AP from WFI. + */ + plat_arm_gic_cpuif_disable(); + /* Send the power down request to the SCP */ response = scpi_sys_power_state(scpi_system_shutdown); @@ -153,6 +160,12 @@ void __dead2 css_scp_sys_reboot(void) { uint32_t response; + /* + * Disable GIC CPU interface to prevent pending interrupt + * from waking up the AP from WFI. + */ + plat_arm_gic_cpuif_disable(); + /* Send the system reset request to the SCP */ response = scpi_sys_power_state(scpi_system_reboot);