FVP: Avail GIC Redistributor power management
Earlier patches introduced GIC Redistributor power management for ARM platforms. This patch modifies FVP power management to power down Redistributor during CPU power on/off. Change-Id: I2adb9c50a7dd750019fe3b4e576b5d5fc364bffb Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
This commit is contained in:
parent
d17b953ab3
commit
74a9578c20
|
@ -64,19 +64,6 @@ const unsigned int arm_pm_idle_states[] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Function which implements the common FVP specific operations to power down a
|
||||
* cpu in response to a CPU_OFF or CPU_SUSPEND request.
|
||||
******************************************************************************/
|
||||
static void fvp_cpu_pwrdwn_common(void)
|
||||
{
|
||||
/* Prevent interrupts from spuriously waking up this cpu */
|
||||
plat_arm_gic_cpuif_disable();
|
||||
|
||||
/* Program the power controller to power off this cpu. */
|
||||
fvp_pwrc_write_ppoffr(read_mpidr_el1());
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function which implements the common FVP specific operations to power down a
|
||||
* cluster in response to a CPU_OFF or CPU_SUSPEND request.
|
||||
|
@ -180,7 +167,15 @@ void fvp_pwr_domain_off(const psci_power_state_t *target_state)
|
|||
* suspended. Perform at least the cpu specific actions followed
|
||||
* by the cluster specific operations if applicable.
|
||||
*/
|
||||
fvp_cpu_pwrdwn_common();
|
||||
|
||||
/* Prevent interrupts from spuriously waking up this cpu */
|
||||
plat_arm_gic_cpuif_disable();
|
||||
|
||||
/* Turn redistributor off */
|
||||
plat_arm_gic_redistif_off();
|
||||
|
||||
/* Program the power controller to power off this cpu. */
|
||||
fvp_pwrc_write_ppoffr(read_mpidr_el1());
|
||||
|
||||
if (target_state->pwr_domain_state[ARM_PWR_LVL1] ==
|
||||
ARM_LOCAL_STATE_OFF)
|
||||
|
@ -213,8 +208,17 @@ void fvp_pwr_domain_suspend(const psci_power_state_t *target_state)
|
|||
/* Program the power controller to enable wakeup interrupts. */
|
||||
fvp_pwrc_set_wen(mpidr);
|
||||
|
||||
/* Perform the common cpu specific operations */
|
||||
fvp_cpu_pwrdwn_common();
|
||||
/* Prevent interrupts from spuriously waking up this cpu */
|
||||
plat_arm_gic_cpuif_disable();
|
||||
|
||||
/*
|
||||
* The Redistributor is not powered off as it can potentially prevent
|
||||
* wake up events reaching the CPUIF and/or might lead to losing
|
||||
* register context.
|
||||
*/
|
||||
|
||||
/* Program the power controller to power off this cpu. */
|
||||
fvp_pwrc_write_ppoffr(read_mpidr_el1());
|
||||
|
||||
/* Perform the common cluster specific operations */
|
||||
if (target_state->pwr_domain_state[ARM_PWR_LVL1] ==
|
||||
|
|
Loading…
Reference in New Issue