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 <dimitris.papastamos@arm.com>
This commit is contained in:
parent
3d21c9452d
commit
0498343ac0
|
@ -32,6 +32,7 @@
|
|||
#include <assert.h>
|
||||
#include <css_pm.h>
|
||||
#include <debug.h>
|
||||
#include <plat_arm.h>
|
||||
#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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue